Wednesday, February 24, 2010

Lego RC with Xbee

I've had a conundrum for a while. How to control my RC projects with a ready-made, swappable controller and power board. Many of my recent projects are Lego based, but some are not. My objectives were:

Dual Analog
Extra outputs to allow expansion (serial to LCD screen)
9V Powered

More outputs than other motor shields
Use XBee devices.
No tunneling
Hot swappable without reconfiguration
Make as an Arduino shield (to avoid reprogramming)
Servo Outputs
PWM (analog motor) outputs
Digital Outputs
Outputs should be amplified
Integrated trimpots and switches for easy configuration
Technics (Lego) hole compatibility

I set off designing the controller board first. I ordered some components from Sparkfun and got the rest from my local electronics store (Elliot Electronics for those of you in Tucson). Some of the components are from DigiKey as well

I based this design on the atmega 328 surface mount board. I built it from the ground up as a non-shield design, but it's basically an arduino without the USB interface.

Normally I use BatchPCB available through to make my PCBs, but this time I tried PCB-Pool. That's why the board looks different.

The output from this board (over XBee) will always be the same. Short packets sent out in API mode to whatever remote device is attached to the other Xbee unit. For convenience sake, I used the Xbee API mode library located here :
Thanks Andrew!!!!

After I got the code working all Peachy-like. I started on the other end of the project. The motor shield

I figured by using some clever programming, i could leverage the existing servo and PWM outputs into a ton more. Using a shift register and some switch logic, I expanded the outputs enough to get:
4 PWM Motor Ports
4 Digital Output Ports
4 Servo Ports
TX and RX unaffected on pins 0 and 1
an enable port (pin 13) to avoid startup jittering

So far I haven't had a chance to mount it into an actual project, but I've got a couple projects at the house waiting to be powered up. As you can see in the video, though. The outputs work great, and using the Power Functions Kit and some Servo brackets ( I can get more devices attached than by using NXT!