Introduction: UDuino: Very Low Cost Arduino Compatible Development Board

Arduino boards are great for prototyping. However they get rather expensive when you have multiple concurrent projects or need lots of controller boards for a larger project. There are some great, cheaper alternatives (Boarduino, Freeduino) but the costs still add up when you need many of them.

This is a way, after about $25-$30 initial investment, to build sub-$10 Arduino-compatible boards with very little extra time investment on each.

Note that the basic idea here (Arduino on a breadboard) has been done for quite some time (e.g ITP Arduino Breadboard instructions); however the cable adapter build & usage instructions here help absolutely minimize the parts count for each core.

This project requires knowledge of soldering and basic electronics, and you should have at least some experience already with Arduino development. I don't suggest this as a first electronics project.

note: I pronounce uDuino "moo DWEE noh"

Added 02-05-08: (for pretty advanced folks) One of the tools I built with this is a logic capture tool -- kind of a basic logic analyzer. I developed this to troubleshoot communications links. Needs a gui interface, but doubt I'll get around to it any time soon. Still dang useful in the right hands.

Added 06-23-09: I'd like to point out the RBBB's from Modern Device for anyone who wants something with solder, but also super inexpensive -- especially if you get the bare boards and buy parts in bulk. Also their USB-BUB is a cheaper alternative to the FT232 cable.

Step 1: Collect Parts for the Cable Adapter

I suggest getting parts from a mixture of Mouser, Radio Shack and Ada Fruit Industries; see the last step for parts sources. Feel free though to substitute parts from your junk box, and with the resistor/capacitors you can deviate a ways from the values and still have things work well (resistor I'd suggest between about 3.3k and 20k; capacitors I'd generally not go for smaller values but larger up to about .47uF should be fine).

For the cable adapter you will need:

- small bit of PC board (8 holes by 2 holes)
- a .1uf capacitor
- a 1x8 .1" spacing header, straight
- a 1x8 .1" spacing header, right angle
- some connecting wire

Step 2: Make the Programming Cable Adapter

Mostly the programming cable adapter only needs to route signals from the FTDI USB cable to the right pins on the ATmega168 chips; however the capacitor is added on one set of pins to allow the Arduino software to reset the chips (the capacitor allows a short pulse to pass over to the chip's reset when the Arduino software flips the RTS pin).

To start, cut a piece of PC board with 9 holes by 2 holes. Then break off a set of 8 pins from the straight pin header strip, and a set of 8 pins from the right angle header strip (assuming you purchased the longer strips). See the parts picture to see what these should end up looking like.

Through the following steps please see both the attached photographs and diagrams for connecting up pins. The diagrams show much better where the connections need to go, but the photographs help to clarify board orientation, etc. If you have questions please mail me and I'll try to clarify anything that doesn't make sense.

Flip the PC board upside down so you can see the copper around the holes, with one of the long sides towards you. If, like I did here, you used a piece of PC board from the edge of the original, I suggest placing the side with the extra board material towards you.

Poke the bottom (short side) of the straight header through the holes farthest from you, leaving one hole empty on your left and solder the pins in place (see picture). Then poke the bottom (side with the bend) of the right-angle header through the holes closest to you, again leaving the hole on the left empty, and solder the pins in place.

Poke the .1uf capacitor's leads through the empty holes on the left and solder the capacitor in place. Trim the leads. Then solder each of the 2 leads to the header pin closest to it; one will connect to the leftmost pin of the straight header, the other to the leftmost pin of the right angle header. The easiest is probably to just create a solder bridge (melt enough solder to flow between the capacitor pin and the pin next to it, like in the picture). If you need to you can use a short length of wire and solder it to each of the contacts.

Create another solder bridge or connection between the 6th and 7th pins closest to you (third and fourth from the right). This is to connect the "CTS" pin of the cable to ground.

And create another solder bridge/connection between the two headers at the second pin to the right (connect the pin closest to you to the one farther away, just one pin over from the right). This connects what will be the VCC USB power jumper to the chip's VCC pin. This power connection will only be active when a jumper is installed.

Use a short length of wire to connect the rightmost closest-to-you pin to the fifth closest-to-you pin (it's fifth whether counting from the right or the left). This will connect +5 volts from the USB cable to the other pin of the jumper connector.

Now connect another short length of wire between the rightmost pin in the row farthest from you to the 3rd from the right pin in the row closest to you. This connects the cable's ground to the chip's ground.

Two more short wires to add: one from the second-from-the-left pin on the right angle header to the third-from-the-left pin on the straight header (note: since the leftmost holes have the capacitor installed in them, it will be the third-from-the-left hole closest to you to the fourth-from-the-left hole in the row farthest from you).

Second short wire will cross right over the first: from the third-from-the-left pin on the right angle header to the second-from-the-left pin on the straight header (fourth-from-the-left hole to third-from-the-left hole).

These wires connect the TX and RX pins of the cable to those of the chip. Unfortunately the ordering is opposite on the cable from the chip, which is why we need to have the crossed over wires.

Now you just need to plug the FTDI FT232RL cable in, with the green wire connected to the pin to the farthest left (the black wire will connect to the third pin from the right). The remaining two pins on the right are for a jumper; if the jumper is installed, the board will be powered from the USB cable, eliminating the need for batteries or a power supply. This jumper MUST NOT be connected when other power is connected to the board or damage to something (board, cable, computer) is possible.

That's it! You're ready to make some uDuino cores to program with the cable. (When using the programming adapter, the pin next to the capacitor connects to pin 1 of the chip)

Step 3: Decide Whether to Make Absolutely Minimal Boards, or External-oscillator Based Boards

The decision of whether to build an oscillator based board is based around a few things. One, do you have access to an AVR programmer and the time to program a special bootloader onto your ATmega168 chips? two, can you do without accurate serial communication with the chip? three, is your application low enough impact that the board can run half as fast and everything will still work fine?

ATmega168 chips have an internal oscillator which can be enabled; it runs at about 8mHz, which is half the speed of most Arduino boards (with the exception of Lilypads). The internal oscillator is guaranteed to be calibrated to within 10% (which is not tight enough tolerance for guaranteed good serial communications). In my experience, the factory calibration at 5v has always been fine for uploading programs, but YMMV. I wouldn't use the internal oscillator for Important Things Which Need To Speak Serial, however. For blinkylights it should be just fine though.

Arduino chips with the bootloader pre-loaded that I've found always run at 16mHz, and these will require an external oscillator. If you don't have access to an AVR programmer, you will probably want to buy a pre-loaded Arduino chip. I highly suggest Ada Fruit Industries as a source.

Note that the oscillators really aren't all that expensive (generally $.50-$.75 at Mouser); they're just another part which is often not necessary, and the pin layout sucks for really clean breadboarded Arduino layouts.

Step 4: External Oscillator-based Board Build

Collect the parts you'll need:

- Breadboard (you can of course build this straight on a predrilled PC board as well)
- ATmega168 chip with bootloader pre-loaded
- .1uf capacitor (ceramic, polyester, etc. doesn't matter so much; value .047uf-.47uf should be fine)
- 10K resistor (values ~3.3k-20k should work fine)
- 16mHz 3-pin ceramic oscillator (preferably with longish, e.g. 1/2 inch, leads)
- Short lengths of wire

Put the ATmega168 in the breadboard, straddling the center.

For each of the following connections, use the hole at each ATmega168 pin that is the closest to the chip that is open; this will leave the last hole in each of the rows 1-8 open for the programming cable to plug into.

Connect pin 7 and 20 with a length of wire (VCC to AVCC)
Connect pin 8 and 22 with a length of wire (GND to AGND)
Connect the 10K resistor from pin 1 to pin 7 (RES to VCC)
Connect the .1uf capacitor from pin 7 to pin 8

Connect the outer pins of the oscillator to pins 9 (XTAL1) and 10 (XTAL2) of the ATmega168. It doesn't matter which of the pins connects to which ATmega pin.
Connect the center pin of the oscillator to pin 8 (GND)

If you have power bus lines on your breadboard, I suggest connecting the + rail (red) to pin 20 and the - rail (blue) to pin 22. This is somewhat bad form (connecting to the analog side for power connections for other stuff), but if your breadboard is the same size as mine you've already filled all of the holes available for pin 7.


If you're planning to use USB power, you can now just plug in the programming cable and upload sketches to the board (make sure to connect the power selection pins on the cable adapter with a jumper to power the chip from USB).

Otherwise you'll need to use a battery/voltage regulator/etc. to supply power.

Step 5: OR Internal-oscillator Board Build

Collect the parts you'll need:

- Breadboard
- ATmega168 chip
- .1uf capacitor (ceramic, polyester, etc. doesn't matter so much; value .047uf-.47uf should be fine)
- 10K resistor (values ~3.3k-20k should work fine)
- Short lengths of wire

Program the Bootloader with your AVR programmer:

You will want to use the lilypad bootloader (included in with release Arduino-0010, in the hardware/bootloaders/lilypad). Using your AVR programmer, flash the bootloader. For example, on my OSX system:

cd /Applications/Arduino-0010/hardware/bootloaders/lilypad
PATH=${PATH}:/Applications/Arduino-0010/hardware/tools/avr/bin
avrdude -C /Applications/Arduino-0010/hardware/tools/avr/etc/avrdude.conf -cusbtiny -pm168 -Pusb -e -u -Ulock:w:0x3f:m
avrdude -C /Applications/Arduino-0010/hardware/tools/avr/etc/avrdude.conf -c usbtiny -pm168 -Pusb -Uflash:w:LilyPadBOOT_168.hex -Ulock:w:0x0f:m
avrdude -C /Applications/Arduino-0010/hardware/tools/avr/etc/avrdude.conf -cusbtiny -pm168 -Pusb -e -u -Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xf2:m

Set up the breadboard:

Put the ATmega168 in the breadboard, straddling the center.

For each of the following connections, use the hole at each ATmega168 pin that is the closest to the chip that is open; this will leave the last hole in each of the rows 1-8 open for the programming cable to plug into.

Connect pin 7 and 20 with a length of wire (VCC to AVCC)
Connect pin 8 and 22 with a length of wire (GND to AGND)
Connect the 10K resistor from pin 1 to pin 7 (RES to VCC) *
Connect the .1uf capacitor from pin 7 to pin 8

If you have power bus lines on your breadboard, I suggest connecting the + rail (red) to pin 20 and the - rail (blue) to pin 22. This is somewhat bad form (connecting to the analog side for power connections for other stuff), but if your breadboard is the same size as mine you've already filled all of the holes available for pin 7.

If you're planning to use USB power, you can now just plug in the programming cable and upload sketches to the board (make sure to connect the power selection pins on the cable adapter with a jumper to power the chip from USB).

Otherwise you'll need to use a battery/voltage regulator/etc. to supply power. Note that you will want to always use 5v for programming via Arduino software; other voltages will cause the clock speed to vary significantly and will likely cause communication (and thus programming) to fail.

When you go to upload sketches to this style of board that uses the internal oscillator, select "Lilypad Arduino" from the Tools/Board menu.

  • 2008 10-02 FIXED -- was incorrectly put as pin 1 to pin 10 in original

Step 6: Connections for Arduino Development

Note that the pins on an ATmega168 don't map obviously to the Arduino names.

atmega168 Arduino
2 Digital 0
3 Digital 1
4 Digital 2
5 Digital 3
6 Digital 4
11 Digital 5
12 Digital 6
13 Digital 7
14 Digital 8
15 Digital 9
16 Digital 10
17 Digital 11
18 Digital 12
19 Digital 13

23 Analog 0
24 Analog 1
25 Analog 2
26 Analog 3
27 Analog 4
28 Analog 5

Step 7: Some Part Sources

Note that I didn't use the specific capacitors & headers listed below in this instructable, so their appearance may vary slightly from the directions here. If you have any problems, please let me know.

- FT232RL USB cable
- Mouser: .1" spacing headers, 36 pin, straight -- break off 8 pins for cable adapter & use rest for other projects
- Mouser: .1" spacing headers, 36 pin, right angle -- break off 8 pins for cable adapter
- PC board for cable adapter
- Mouser:10K Resistors
- Mouser:.1uF Capacitors
- breadboards Pololu or Ada Fruit
- ATmega168 chips Mouser:unprogrammed or Ada Fruit:preprogrammed
- Mouser:16Mhz Oscillators