Introduction: Build Your Own Arduino

Picture of Build Your Own Arduino

Setting up an Arduino on a breadboard has become a process I have grown to love.

Within a few minutes you can have a fully working Arduino platform to work with as you will see in this tutorial. There have been several occasions when I was at school and quickly put together one of these for testing some ideas for a project. Plus it is just looks so neat with all the components laid out over the breadboard.

Some of my Arduino Projects

Whats is an Arduino?

Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists, and anyone interested in creating interactive objects or environments.

Arduino can sense the environment by receiving input from a variety of sensors and can affect its surroundings by controlling lights, motors, and other actuators. The microcontroller on the board is programmed using the Arduino programming language (based on Wiring) and the Arduino development environment (based on Processing). Arduino projects can be stand-alone or they can communicate with software on running on a computer (e.g. Flash, Processing, MaxMSP).[1]


Step 1: Components

Picture of Components
With a few inexpensive parts and a solderless breadboard you can quickly and easily build your own Arduino. This concept works great when you want to prototype a new design idea, or you don't want to tear apart your design each time you need your Arduino.
The example below shows how to hook up the components on your breadboard. We will go into further detail throughout this project.
Figure 1-1: Breadboard Arduino with USB programming ability.
Before we get started, make sure you have all the necessary items in the component list box.
If you need to purchase parts you can do so from my site at or see below for other online stores

* See note about the TTL-232R cable in programming options before purchasing.
10% OFF Entire Order at, use Coupon Code: INSTRUCTABLES upon check out.
You can buy components at or or or or just to name a few places off hand.

Origninal tutorial by:

Step 2: Setting Up Power

Picture of Setting Up Power
The first thing you need to do is set up power. With your breadboard and components in front of you... let's get started!
With this step, you will be setting the breadboard Arduino up for constant +5Volts power using a 7805 voltage regulator.
Figure 1-2: Power setup with LED indicator.
In order for the voltage regulator to work, you need to provide more than 5V power. A typical 9V battery with a snap connector would work just fine for this.
Power is going to come into the breadboard where you see the red and black + and squares. Then add one of the 10uF capacitors. The longer leg is the Anode (Positive) and the shorter leg is the Cathode (Negative). Most capacitors are also marked with a stripe down the negative side.
Across the empty space on the breadboard (the channel) you will need to place two hook-up wires for positive (red) and ground (black) to jump power from one side of the breadboard to the other.
Now add the 7805 voltage regulator. The 7805 has three legs. If you are looking at it from the front, the left leg is for voltage in (Vin) the middle leg is for ground (GND) and the third leg is for voltage out (Vout). Make sure the left leg is lined up with your positive power in, and the second pin to ground. 
Coming out of the voltage regulator and going to the power rail on the side of the breadboard you need to add a GND wire to the ground rail and then the Vout wire (3rd leg of the voltage regulator) to the positive rail. Add the second 10uF capacitor to the power rail. Paying attention to the Positive and Negative sides.
It’s a good idea to include an LED status indicator which can be used for troubleshooting. To do this you need to connect the right side power rail with the left power rail. Add positive to positive and negative to negative wires at the bottom of your breadboard.
Figure 1-3: Left and Right Power Rail Connections.
Having power on the left and right power rail will also help to keep your breadboard organized when providing power to the various components.
Figure 1-4: For the LED status indicator, connect a 220& resistor (colored as: red, red, brown) from power to the anode of the LED (positive side, longer leg) and then a GND wire to the cathode side.
Congratulations, now your breadboard is set up for +5V power. You can move onto the next step in the circuit design.

Step 3: Arduino Pin Mapping

Picture of Arduino Pin Mapping
Now we want to prepare the ATmega168 or 328 chip. Before we begin, let’s take a look at what each pin on the chip does in relationship to the Arduino functions. NOTE: The ATmega328 runs pretty much the same speed, with same pinout, but features more than twice the flash memory (30k vs 14k) and twice the EEPROM (1Kb vs 512b).
Figure 1-5: Arduino Pin Mapping
The ATmega168 chip is created by Atmel. If you look up the datasheet you won’t find that the above references are the same. This is because the Arduino has its own functions for these pins, and I have provided them only on this illustration. If you would like to compare or need to know the actual references for the chip, you can download a copy of the datasheet at Now that you know the layout of the pins, we can start hooking up the rest of the components.

Step 4: Component Hook Up

Picture of Component Hook Up
To start, we will build the supporting circuitry for one side of the chip and then move on to the other side. Pin one on most chips has an identifier marker. Looking at the ATmega168 or 328 you will notice a u-shaped notch at the top as well as a small dot. The small dot indicates that this is pin 1.
Figure 1-6: Supporting circuitry pins 15-28
From the GND power bus, add a jumper wire to pin 22. Next, from the positive power bus, add jumper wires to pin 20 (AVCC - Supply voltage for the ADC converter. Needs to be connected to power if ADC isn't being used and to power via a low-pass filter if it is (a low pass filter is a circuit that cleans out noise from the power source, we aren't using one)
Then add a jumper wire from the positive bus to pin 21 (Analog reference pin for ADC).
On the Arduino, pin 13 is the LED pin. Note that on the actual chip the pin is number 19. When uploading your sketch code and for all projects you will still reference this as Pin 13.
To hook up the LED, add a 220& resistor from GND to the cathode of the LED. Then from the anode of the LED add a jumper wire to pin 19.
Now we can move onto the other side of the chip. You are almost finished!

Figure 1-7: Supporting circuitry pins 1-14
Above the ATmega168 chip near the pin 1 identifier, place the small tact switch. This switch is used for resetting the Arduino. Right before you upload a new sketch to the chip you will want to press this once. Now add a small jumper wire from pin 1 to the bottom leg of the switch then add the 10K resistor from power to the pin 1 row on the breadboard. Finally add a GND jumper wire to the top leg of the switch.
Add power and GND jumpers to pin 7(VCC) and pin 8 (GND). Add the 16MHz clock crystal to pin 9 and 10 and then the two .22pF capacitors from pins 9 and 10 to GND. (See note below for alternative method).
Your basic breadboard arduino is now complete. You could stop right here if you wanted to and swap an already programmed chip from your Arduino board to the breadboard, but since you came this far, you might as well finish off by adding some programming pins. This will allow you to program the chip from the breadboard.
NOTE: Instead of using the 16MHz clock crystal, you can use a 16 MHz ceramic resonator with built-in capacitors, three-terminal SIP package. You will have to arrange your breadboard a little differently, the resonator has three legs. The middle leg will go to ground and the other two legs will go to pins 9 & 10 on the ATmega168 chip.
Referring to Figure 1-7, locate a spot where you have 6 columns on the breadboard that are not in contact with anything else. Place a row of six male header pins here.
With the breadboard facing you, the connections are as follows:
GND, NC, 5V, TX, RX, NC, I am also calling these pins 1,2,3,4,5,6. From your power bus rail, add the GND wire to pin 1 and a wire from power for pin 3. NC means not connected, but you can connect these to GND if you want to.
From pin 2 on the ATmega168 chip, which is the Arduino RX pin, you will connect a wire to pin 4 (TX) of your programming headers. On the ATmega168 chip, pin 3 Arduino TX gets connected to pin 5 (RX) on your header pins.
The communication looks like this: ATmega168 RX to Header Pin TX, and ATmega168 TX to Header Pin RX.
Now you can program your breadboard Arduino.

Step 5: Programming Options

Picture of Programming Options
The first option is to buy a TTL-232R 3.3V USB – TTL Level Serial Cable. These can be purchased at  or  
The other two options, which I prefer are to buy one of two breakout boards from They are:
  • FT232RL USB to Serial Breakout Board, SKU: BOB-00718 (This option takes up more space on your breadboard)
  • FTDI Basic Breakout - 3.3V SKU: DEV-08772 (This option, and using right angle male headers works the best out of all three because it is secured better on the breadboard)

Double check your connections, make sure your 9V battery is not connected and hook up your programming option.  Open up the Arduino IDE and in the Example sketch files, under Digital, load the Blink sketch.
Under the file option Serial Port, select the COM port that you are using with your USB cable. i.e. COM1, COM9, etc.
Under the file option Tools/Board, select either:
  • Arduino Duemilanove w/ATmega328
  • Arduino Decimila, Duemilanove or Nano w/ATmega128
(depending on which chip you are using with your breadboard Arduino)
Now press the upload icon and then hit the reset button on your breadboard. If you are using one of the SparkFun breakout boards, you will see the RX and TX lights blink. This lets you know that the data is being sent. Sometimes you need to wait a few seconds after pressing the upload button before pressing the reset switch. If you have trouble, just experiment a little with how fast you go between the two.
This sketch if uploaded properly will blink the LED on pin 13 on for one second, off for one second, on for one second… until you either upload a new sketch or turn off the power.
Once you have uploaded the code, you can disconnect the programming board and use your 9V battery for power.
  • No Power – Make sure your source power is above 5V.
  • Power but nothing works – recheck all your connection points.
  • Uploading error – Refer to and do a search on the particular error message you receive. Also check the forums as there is a lot of great help there.

Step 6: PCB Files

Picture of PCB Files

If anyone is interested in etching their own PCB (printed circuit board) I have included the component and solder side pcb files.

I have added a zip file which contains 300dpi JPG files of the component side and solder side.

If you have questions, feel free to email me and I will help you out the best I can. Just note I have classes throughout the day, so sometimes my replies can take a day to respond.


Mohamed SamyH (author)2017-09-27

can any one help me with this error message pls

avrdude: ser_open(): can't open device "\\.\COM3": The system cannot find the file specified.

WayneHuang made it! (author)2015-02-12

I Make it.

ntenorio (author)WayneHuang2017-06-08

Were you able to upload sketches with this setup?

JaisuryaV1 (author)2016-11-16

Can I add any other FTDI breakout board?

DavidB565 (author)2016-02-28


DavidB565 (author)2016-02-28

Who has a spare arduino board please give me:)

WissamI1 (author)2015-08-13

amazeing thank you

dymojim (author)2015-04-23

To be absolutely correct and avoid any risk of oscillations on the 5V line due to sudden load changes, especially considering the distances of the wiring around the 7805, there should be two additional ceramic capacitors of 100nF each from the input and the output of the 7805 to the ground. These are normally 2.54mm spaced lead components that are fitted into the board next to the regulator. There is space available on the breadboard to be able to fit these easily.

SandStoned (author)2015-03-21

Do you really need a 440 tie point breadboard rather than a 400 one? I can't seem to find a 440 pin

Victor Does (author)2014-10-13

I will definitely try this out! :D

GetTutorializedK (author)2014-10-05

That was very easy to make!
Thanks for the elaboration! :D :D

c_rider made it! (author)2014-05-14

Old instructable but this was a great idea and decided to do my own for when I don't want to pull apart my others.

I changed it a little since the photo, just to make it easier to access the output pins.


tmcisaac (author)2013-09-08

In the Arduino IDE, Go to file>preferences and turn on verbose output on UPLOAD.
Close the preferences window.
Now click Upload.
Your sketch will compile and when you see the baud rate or "send" in the output, press reset.

Hope is works.
Should work for avrdude in the cmd/terminal.

Also! With this method you only need the 5v, Tx, Rx and GND from an FTDI or UART/TTL programmer. No DTS or RTS,
Some UART boards have a line marked RTS or RST. Don't use these.

tmcisaac (author)tmcisaac2013-09-08

This is if you get the "out of sync" or errors on upload.

soeren (author)2013-08-10

Hi! Great tutorial. Can a normal USB cable be used instead of the 232r converter here? I have plenty lying around that I could just rip open.

kardita (author)2013-06-26

hi sir, good day, cn u give me an schematic of this? so that i cn make my own modified arduino, pls T_T i need it badly coz we are ask by our prof to make our own modified arduino, T_T pls...i need reply asap sirT_T

Derkatwork (author)2013-04-01

Very nice man! An old post of yours rang in at $15. Does your price include a breadboard, or just components? I'm looking at cost cutting for arduinos.

shiv.ram (author)2010-12-12 one has asked about the bootloading thing....
Its Important....

OCPik4chu (author)shiv.ram2012-10-15

This 'ible is only about Arduinos, Arduino is basically an ATMEL chip with the arduino bootloader installed. You can purchase certain chips that come preloaded with the bootloader from places like sparkfun or you can upload your own to blank chips (save a little $) but you will need to lookup ISP programmers, which ironically can be created with an arduino.

offtherails2010 (author)2012-06-24

awesome 'ible ! got this one bookmarked for my up and coming arduino adventure!!!

one quick question though... how did you create the simple breadboard diagrams ?

i want to be able to create these too so i can preserve my breadboard designs without having to take photos from multiple angles to document my work ???

please help if you can, i know this is an old ish 'ible & may not get a reply but i would be very grateful if you could point me in the right direction!

many thanks in advance ;-)

f0x0r (author)2012-05-16

Why do you use a 16 MHz although the Atmega 168 support up to 20 MHz?

mnasr (author)2011-08-16

i know this is an old thred
i have a small question
can i use atmega8a for this project
thanks in advance

soshimo (author)mnasr2011-12-13

Late reply, I know, but, yes, you can use an atmega8a. You will have to modify the connections though. You can read the datasheet to find out where vcc, vdd, reset, and any other pins you might need are and adjust the wiring accordingly. You can't just drop an an atmega8 where the other IC is though (if pin out is the same then you could, like I said, check the datasheet)

yooooo1089 (author)2011-10-20

gr9 work!

top.boy (author)2011-08-05

can i use atmega 8 ?

tachtanlee (author)2011-08-01

Does it matters 10uF Electrolytic capacitor's voltage?

yaly (author)2011-07-23

go and read here

yaly (author)2011-07-23

if you have a serial port in your computer you can use the following:
serial port atmega l
pin1 DTR 0.1uf reset l
pin2 RX TX l
pin3 TX RX l
pin4 ( not connected ) l
pin5 GND GND l
pin6 ( not connected ) l
pin7 ( not connected ) l
pin8 ( not connected ) l
pin9 ( not connected ) l
PS : on the right most of the picture there is "pin 1 reset"
it is pin 1 on the serial port and reset pin on atmega but there is a 0.1uf cap in between these two pins for auto reset as in arduino uno.

robonerd (author)2011-02-08

I know this post is from a ways back, but what program did you use to draw this design? Do you know of any free programs I can use to come up with something similar? Thanks for any help.

viper24 (author)robonerd2011-04-21

Fritzing is AWESOME.

wamj (author)viper242011-05-28


yaly (author)2011-05-16

hi there is some thing i don't understand the connection between the pc and the bread board is as follows: (USB to miniUSB cable-FT232RL-breadboard) is that right and please explain more deeply about when to press the reset button and what does it do. thanks best arduino instructable i've ever read.

DG91 (author)2011-04-16

hey guys jelmareanvlad its right, i dont understand either, if anyone could replay ill be very glad thanks

jelmareanvlad (author)2011-04-12

in the parts list you said that it was needed two 22pf capacitors and two 10uf capacitors but in the component part of the pcb are: one 10uf cap and 100uf cap!? where are the other two and why the 100uf cap hasnt been in the parts list? I dont understand...and what means "RAW" ?and why are there 2 power sources dc jack and "volts in +9 to 12v???????? PLEASE REPLY AS SOON AS POSSIBLE!! thank you in advance.... :((

shad0w88 (author)2010-02-19

I'm assuming you're using an ATMEGA168 with the bootloader pre-installed.. What option do I have if I can't get a pre-installed ATMEGA and a TTL-232R(or any of the options you mentioned)?.. I'd really like to do this instructable but i can't get the parts mentioned in my country :(

if you can get the arduino ide and go to

tools>burn bootloader>check what they have listed

you can use a isp or a friends arduino to burn it

tjmortenson (author)2011-03-20

On the PCB, could you tell me what the programming pin layout is? cause im making my own programming cable and want to know to pins.
Thanks in advance.

svippe (author)2011-03-19

!!!!READ THIS!!!!!

I followed this tutorial without knowing that you need to have a bootloaded chip for it to work. For you guys who just bought a chip and the other parts should follow this tutorial first:

purpulhaze (author)2010-04-07

I believe the cheapest route would be to use a usb  to rs-232 cable as they can be bought for as lil' as $2.00 shipped. Couldn't I  also tap into the power from the cable so I can eliminate the 9 volt battery. How well would a setup like this work with serial monitor though?


espert92 (author)purpulhaze2011-03-10

I did the breadboard setup above and bought a usb-to-rs232 cable. what now? how do I connect the two

msuzuki777 (author)espert922011-03-10

If you also bought the P4, in theory you could connect the cable to P4 and connect the P4 to the breadboard.

If you haven't bought the P4, I wouldn't yet. I think there is a way to interface the cable directly to the breadboard. I have one on order and when I get it, I will try to get it to work and will write an Instructable if it does.

Lazy Old Geek

msuzuki777 (author)purpulhaze2011-03-10

I recently ordered one of these usb to rs-232 cables but just thought of a problem. RS-232 signals are +5 and -5V instead of 0 and 5V so RS-232 will not interface directly with an Arduino or the breadboard.

However, I think these are all based on the Prolific PL2303 chip which I believe is 0-5V (TTL). If that is the case, then the correct signals are available. If I get it to work, I will do and Instructable.

Lazy Old Geek

robotakepri (author)2010-12-18

Hi, I'm a very newbie in this Arduino.
I have tried to build my own Arduino Board using ATmega328 chip with Arduino Bootloader and for upload the sketch, I'm using FTDI Basic Breakout - 5V ( both of this part are from SparkFun ). I've followed all your wiring schematic. The power LED and the 13 pin LED blink without any problems ( so I think nothing wrong with the ATmega 328 chip )
The problem occured when I try to upload the blink sketch to the board, there are some avrdude error that I don't understand how to solve .
The error message is :

Binary sketch size: 1010 bytes (of a 30720 byte maximum)
avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

For make sure all the wiring is correct, I upload the sketch through my Arduino Duemilanove board ( without the AT mega chip ), and within second the sketch uploaded to the board smoothly. No error at all.

So, can anyone help me to solve this problem ?

msuzuki777 (author)robotakepri2011-03-10

I've seen similar problems with some of my 'Arduinos'. The problem I had was intermittent connections on the serial connectors. If I just wiggled my USB-BUB it would work okay.

For this situation, make sure you also have a ground from your breakout board. Another possible problem is that Tx and Rx may be reversed. Different authors and vendors will label the Tx and Rx differently. The confusion is that a Tx (transmit) from one device say the Atmega is connected to the Rx of the other device say the FTDI. And vice versa.

Also, some Arduinos have DTR connected to the the Atmega Reset pin, but the newer Bootloader has RTS connected to the Reset through a capacitor. I am guessing that if you don't have anything connected to the Reset pin than it should load correctly but you may have to push reset to start the program.

Another thing to remember is with the Arduino software you may have to select the correct com port. Right now I have two Arduinos connected to my computer so I have to make sure I'm using the right one.

Good luck,


Foxtrot70 (author)robotakepri2011-02-01

I have the same problem. The chip I am using is the AT328 with UNO preloaded and I get the same error msg.

AEAM (author)2010-03-27

 works great with an ATMega168 ... I would really like to see an instructable that shows us how to use a simple rs232 cable and an rs232 chip setup instead of the expensive ftdi cable. that would be useful when we're beyond the prototyping phase and maybe want to do an inexpensive permanent setup with a serial comm option (ambient light based on twitter feed or server monitoring setup)

I also added a couple of LED's to tx/rx lines just to see the activity during sketch upload.

msuzuki777 (author)AEAM2010-09-03

Modern Device and Wulfden have a nice little RS-232 to TTL board, the P4 For the DIYer the schematics are also available. It's basically one IC and a bunch of resistors and capacitors and on zener diode. Lazy Old Geek

espert92 (author)msuzuki7772011-03-10

how do you use this. buy a usb-to-rs232 then use this to convert to TTL? then connect rx and tx to the breadboard setup?

msuzuki777 (author)espert922011-03-10

The Wulfden website is a little confusing but the P4 will not work with USB. It will work with RS-232 serial ports. I've never bought one as none of my current computers have an RS-232 serial port.

To use a P4 you do connect the Rx and Tx to the breadboard but you also need a ground and 5V. Serial ports do not provide 5V so it must be supplied external such as from the 7805 on this breadboard.

Lazy Old Geek

ArduinoFun (author)AEAM2010-04-02


About This Instructable




More by ArduinoFun:Arduino Lilypad Interactive Passion Sensing ScarfCreating Printed Circuit Boards with a INKJET PrinterDual Motor Driver with Arduino using a SN754410NE Quad Half H-Bridge
Add instructable to: