This is my first 'ible. It's an Arduino-controlled Lego RC car using XBee units for the "RC" part. The idea was shamelessly stolen from sath02's excellent 'ible, attributed above. We began and finished the project over winter break 2012, and I've been sitting on these pictures for about a year, and have finally found some time to get them posted.
I won't be providing a step-by-step instructional, but I will be highlighting what were some of our key challenges, and what our solutions were for them.
Here are the parts we used, in no particular order:
- LEGO Technic Dune Duster #8207
- LEGO Technic Power Pack #8720
- Arduino UNO R3
- Sparkfun Ardumoto Motor Driver Shield
- Sub-micro Servo ROB-09065 (Sparkfun)
- 2x XBee 1mW Trace Antenna - Series 1 (802.15.4)
- XBee Shield
- XBee Explorer USB
- Various terminals and cabling
- Miscellaneous LEGO bits (90% of the parts came from the kits, we just needed 2 or 3 pieces to fill in)
- 2x RadioShack 3 AAA battery holders
Most of the code was written by myself, and while I tried to pique my son's interest in it, a lot of it was over his head, though I think he got the basics. He's already been through the SparkFun Inventor's Kit with me, so he knew the basics of circuits and motors and the like, the code work was just too tedious for him.
The one thing I took away from this, besides spending some quality time with my son and building something really cool, was not to underestimate what children can grasp at any age. Don't let the "recommended age" guidelines put you off of introducing your kids to a learning experience like this. You're planting seeds for a lifetime of discovery and innovation.
And with that, on to the good stuff.
Step 1: Powering the drive wheels
Step 2: Turning left and right
Step 3: Making sufficient autonomous power
To make the battery pack, we bonded two RadioShack 3 AAA battery holders together using Gorilla Glue and wired them in series to get the needed 9 volts. The pack provides 30 minutes to an hour of run time, by which time it has smacked into the cabinets, or has run afoul of the cat, and is in need of R&R anyway.
Step 4: Final assembly and tweaks
Step 5: Cracking the code
I browsed many sample programs (including Sath02's) but when I set out to write my control code, I decided to start from scratch, since I wanted to access the controller directly over serial using the XBee to be able to adjust some of the parameters like the limits on the servo, speed of the drive motor, etc. My eventual goal is to write a more complete UI for it, but for now, it is controlled via a terminal directly accessing the XBee serial network. I use X-CTU (available from Digi's website) to send commands to the XBee on the car, which accepts four commands: forward (w), reverse (s), left (a) and right (d). X-CTU allows either direct input, or you can create a packetized sequence of commands and send in batch. In batch mode, you can insert a comma or commas to create a small delay.
I've included my code below, feel free to modify it for your use, with proper attributions of course, but if you are interested in really learning to code, you'll learn a lot more starting from scratch.
Step 6: Summary
I think our next project will be something robotic, and I'll be putting it up as soon as we finish. Until then, Happy Making!