In this guide I’ll cover the bare bones Arduino board based on the ATMEGA328 I use for many of my projects that you can make for about $4 a board (including PCB). I’ve always been a fan of the ease of use with Arduino but it can get expensive when you start putting them in many projects. There are also often a lot of extra components on an Arduino board that are not always needed for a given project and minimizing them will keep the board small and low cost.
The board will consist of the ATMEGA328, basic support components and connections for power and I/O. To keep the size and board cost down we won’t include a USB interface, debugging micro and voltage regulators that are on the UNO and allow us to add peripherals to suit the project as needed.
To get a good price on ATMEGA328P’s we’ll buy them without the Arduino bootloader on it. The bootloader is extra bit of firmware in the flash that allows programming through the Arduino IDE without a traditional programmer. This effectively turns a stock ATMEGA328 from Atmel into an Arduino and allows us to use all those great libraries.
Without a USB interface, to get the bootloader and to program the bare bones board we’ll need to use an actual Arduino UNO. You’ll only need one. We’ll make a boot loader shield to load it on all your ATMEGA328s. Afterwards the UNO will simply be used to program your bare bones Arduino boards through the USB serial interface (you could use a USB to UART RS232 COM cable to program as well but you’ll need to mod a reset connection to it).
What you’ll need
1x Arduino UNO
Bare bones Arduino Board
- 5x5cm 2 layer PCB Manufacturing from DFROBOT ($9.50 for 10 + ~$6 for shipping)
- 28 pin DIP socket
- 16Mhz Quartz Crystal Oscillator (50 for $5)
- 22pF DC 50V Ceramic Caps (30 for $4.15)
- 0.1uF Capacitors (100 for $6.50)
- Tactile Pushbutton (100 for $4.20)
- 2.54mm headers
- 4.7kΩ or 10kΩ and 200Ω resistors
- ATMEGA328P (10 for $14)
- ZIF Socket DIP 28
- 100mil pitch headers
- 2x LEDs and current limiting resistors
- 10kΩ resistor
- Optional: Crystal oscillator and 2x 22pF capacitors
By keeping the boards at 5cm x 5cm DFROBOT gives a great deal on 10 2 layer PCBs. The board design is pretty simple with the just the ATMEGA328, crystal, reset, D13 LED, option for TO-220 5V Regulator and/or micro USB connection (for 5V only, no data). I’ve also made sure to label the GPIO pinout per the Arduino UNO to avoid confusion between the ATMEGA328 pinout when using the Arduino IDE. The second outside row of headers are not tied to any GPIO
I made the boards using schematic and PCB layout software, DipTrace. The gerbers can be downloaded below.
The board in the Gerber downloads and image above is actually my second revision of the design. In the image below you’ll see my first revision. This one lacked proper pin labeling for the Arduino UNO and extra headers for prototyping but is otherwise the same.
Using the perf board, carefully align the 100mil headers to interface with the Arduino UNO and connect the following pins of the Arduino UNO to the ZIF socket with the slave ATMEGA328 to be loaded with the bootloader. The process of doing this is also covered on the Arduino site.
Arduino UNO to ATMEGA328 Pins
D10 → pin 1 (reset)
D11 → pin 17 (MOSI)
D12 → pin 18 (MISO)
D13 → pin 19 (SCK)
Optional: Add an LED with current limiting resistor on
D9 for heartbeat
D8 for error indicator
D7 for communication indicator
Now that we have everything assembled we can load the bootloader on to our ATMEGAs and then program them with the UNO.
Startup the Arduino IDE and open the ArduinoISP sketch in Examples. Load this program on to the Arduino UNO. Then under the Tools drop down select Programmer: Arduino as ISP and make sure Board: Arduino UNO. If you’re ATMEGA won’t be using the 16Mhz crystal and caps you’ll want to refer to here and download the appropriate hardware configuration for your IDE version and then select Board: ATmega328 on a breadboard (8 MHz internal clock). You can now select the Burn Bootloader and it will load it on to your ATMEGA328.
After successfully burning the bootloader to one ATMEGA328, do the same with the rest of your blank ones. It’s easiest to do this now as you’ll be using the UNO as a programmer afterwards. An ATMEGA328 with the bootloader on it can now be put into your bare bones board.
You’ll need to remove the ATMEGA328 from the UNO in order to use it as a programmer. Remove the shield and carefully remove the ATMEGA328 from your Arduino UNO being carefully not bend the pins. Be careful to always have at least one ATMEGA328 with the Arduino bootloader so you can use it load burn other micros with the bootloader.
Now you can use your Arduino UNO to program your bare bones board. Simply, connected the RST, RX, TX. Connect 5V and GND or use a separate power supply for your board.
There you have it, a simple low cost Arduino UNO for your projects!