This is an Open Hardware peripheral for the OLPC XO-1/1.5/1.75/4.
The files are created using Eagle 6.2.0 on Linux and the SparkFun footprint libraries.
Strong inspiration drawn from the following Open Hardware designs (thanks for sharing!):
- The Arduino Leonardo (arduino-compatible ATmega32U4 design)
- SparkFun's ATmega32U4 breakout http://www.sparkfun.com/products/11117 for figuring out which parts of the Leonardo design are actually mandatory
- SparkFun's Scratch Sensor Board-compatible PicoBoard http://www.sparkfun.com/products/10311
This board integrates Arduino, Scratch Sensor Board, and turtle robot functionality. There are many optional parts: if you want to build just the Arduino, you may; if you want to populate the robot functionality but not the sensor board, that's fine, too. If you populate the peripherals but not the ATmega32u4 processor, this makes a splendid "shield" for the XO Stick -- one way to amortize the cost of the robot functionality is to have just one XOrduino-bot shield per classroom, while still giving the kids their own XO Stick "brains" which they can mount on top of it.
The "bot" features of the board include a current-limited motor driver, two bump switches at the front of the board, and two optical sensors for measuring motor rotation, allowing the user to write code like "rotate left 90 degrees" instead of "rotate left 2 seconds", which experimentally kids find much harder to understand. The XOrduino board mounts on a Tamiya Twin Motor Gearbox (part #70097), and there's a mounting hole for a ~25mm long standoff to serve as a front skid.
The motors are set up to draw 1A max, which matches the power source ability of the XO's USB ports. The USB standard only allows 500mA draw, which would require adjusting F1 and RN7.
Many of the Leonardo design's components are optional in a lowest-possible-cost design, for a number of different reasons: a) USB port protection which is already included on the XO motherboard, b) ESD and protection diodes (helpful but not required), c) bypass caps and ferrites for less noise on analog signals (helpful but not required). Wherever possible I've included the pads anyway, so that less budget-conscious users can populate these components. At times this has required jumper traces which you need to cut if you decide to populate the optional components.
I eliminated the multi-way 3.3V/5V internal/external power supply functionality of the Arduino to save cost. The XOrduino is 5V only, powered by the USB port. The Arduino "3.3V" pin on the shield connector is left disconnected. I've replaced this with a lower cost step-up regulator, allowing "bot" users to power the XOrduino with a 3-cell (4.5v) battery pack. Again, all these components are optional: the XOrduino will run fine powered by its USB tether.
The first version of this board used a large number of through-hole parts. This revision is less afraid of surface mount parts (since the ATmega32U4 is only available in an SMT package anyway), which save board space and lower BOM cost. I'm attempting to make the XOrduino local-assembly-friendly, so I surface mount footprints are as large as possible: all discrete components are 0805 or larger. Like the XO Stick, this has been routed as a two layer board to lower reproduction costs, although if you fabricate with a 4-layer board you will get more robust power and ground planes.
One possibly-controversial change in this version is to use surface mount resistor arrays to reduce part count and BOM cost; they may turn out to be too small to hand assemble. We'll see.
I made this Scratch Sensor Board compatible. Even though many of the scratch sensors are redudant on the XO (it has a microphone already, and the XO-1.75 includes an ambient light sensor), they gain new relevance in the "turtle bot" mode -- they make it easy to build a standalone robot which is "afraid of light", "stops when you clap", etc. The scratch community has a large number of interesting examples based around the Scratch Sensor Board/Picoboard, many of which can use the 4 additional channels provided by the XOrduino ("color etch-a-sketch", for example, with knobs for X, Y, color, and line width). I used 3.5mm jacks instead of the Picoboard-standard 2.5mm jacks in order to be compatible with probes built for the XO; I hope that was a good choice.
See https://github.com/osbock/ScratchSensors for an arduino sketch to support the Scratch Sensor board functionality; it might be nicer to integrate this into the bootloader so that it's "always there".
There's a USB plug integrated with the PCB with break-off tabs to increase the thickness to the USB standard 1.6mm. There are pads for a through-hole USB mini-B connector and a more-standard surface mount USB micro-B connector, but they are rather expensive (~$1).
When the discrete connector is populated, it leaves the USB signals and power/gnd exposed on big metal tabs, which could be non-ideal. Certainly you shouldn't plug in to more than one jack at a time.
-- C. Scott Ananian, 2012-06-09, revised 2012-07-30, 2012-08-08.