The Arduino is a pocket-sized computer (also called a "microcontroller") that you can program and use to control circuits. It interacts with the outside word through sensors, leds, motors, speakers... even the internet; this makes it a flexible platform for lots of creative projects. Some popular uses include:

- programmable light displays that respond to music or human interaction
- robots that use information from sensors to navigate or perform other tasks
- unique, customizable controllers and interfaces for music, gaming, and more
- connecting real world objects to the internet (twitter is especially popular)
- anything interactive
- automating and prototyping

There are tons of amazing Arduino Projects posted online, here are some of my favorites:

Twitter Mood Light by RandomMatrix, a light that changes color depending on what kinds of emotional words are trending on Twitter

Nebulophone Synth by Bleep Labs:

Singing Plant by Mads Hobye:

Polargraph Drawing Machine by Sandy Noble:

Flame-Throwing Jack-O-Lantern by Randy Sarafan and Noah Weinstein:

Rain-sensitive light up umbrella by snl017

There are quite a few microcontrollers on the market today, but the Arduino stands apart from the rest becuase of the active online community around it. If you search on google or youtube, you will find tons of great project ideas and information to get you started. Even though you might not have any experience programming or working with a microcontroller, the Arduino is simple to get up and running, and it's a fun way to learn about electronics through experimentation.

This Instructable was written for an Intro to Arduino class I'm teaching at Women's Audio Mission this month. I'll be posting Instructables on more advanced Arduino topics and on building customizable MIDI controllers with Arduino in the next few weeks as the class continues. More info about Arduino can be found on the Arduino reference page.

For this class you will need:

(1x) Arduino Uno Amazon or you can pick one up at a local Radioshack
(1x) usb cable Amazon
(1x) breadboard (this one comes with jumper wires) Amazon
(1x) jumper wires Amazon
(4x) red LEDs Digikey C503B-RCN-CW0Z0AA1-ND
(4x) 220Ohm resistors Digikey CF14JT220RCT-ND
(1x) 10kOhm resistor Digikey CF14JT10K0CT-ND
(1x) tact button Digikey 450-1650-ND
(1x) 10kOhm potentiometer Digikey PDB181-K420K-103B-ND
(1x) RGB LED (common cathode) Digikey WP154A4SUREQBFZGC

Tips on ordering stuff: Digikey is usually the cheapest place you can get components and they ship really fast, but sometimes it's difficult to find what you're looking for because they have so much stuff. If Digikey gives you too much trouble try Jameco, you'll pay a few cents more per component, but it's a lot easier to navigate their inventory. If you need stuff right away, you can find components, breadboards, cables, and Arduinos at your local Radioshack, but you will usually pay a bit more. Adafruit and Sparkfun are good online store for finding cool sensors or other Arduino accessories and they usually have tutorials and sample code for their more complicated parts. Amazon is also a good place to check, right now they have Arduino Unos for $22, which is the cheapest I've ever seen them.

In this Instructable I'll be using 123D circuits to demonstrate and simulate the circuits, the embedded circuit simulations work best with the Chrome browser.

Step 1: What is Arduino

First we'll take a look at all the parts of the Arduino. The Arduino is essentially a tiny computer that can connect to electrical circuits. The Arduino Uno is powered by an Atmega 328P chip, it is the biggest chip on the board (see the image note on the image above). This chip is able to execute programs stored in its (very limited) memory.

We can load programs onto the chip via USB using the Arduino IDE (download this if you haven't already). The USB port also provides power to the Arduino. Alternatively, we could power a programmed board using the power jack, in that case we do not need a USB connection.

The Arduino has a few rows of pins that we can plug wires into. The power pins are labeled in the image above. The Arduino has both a 3.3V or 5V supply; in this class we will use the 5V supply, but you might find some chips or components that require 3.3V to run, in that case the 3.3V supply will be useful. You will also find some pins labeled "GND" on the Arduino, these are ground pins (ground is the same thing as 0V). Electrical current always flows from some positive voltage to ground, so these pins are useful for completing circuits, we will use them often.

The Arduino has 14 digital pins, labeled 0-14, that connect to circuits to turn them on or off, or to measure buttons and other 2-state circuits (a button is two state because it is either pressed or not pressed, as opposed to a dial, which has a range of possible states). These pins can act as either inputs or outputs, meaning they can control a circuit or measure it.

Next to the power connections are the Analog input pins, labeled A0-A5. These pins are used to make analog measurements of sensors or other components. Analog inputs are especially good for measuring things with a range of possible values. For example, an analog input pin will let us measure the amount of flex of a flex sensor, or the amount that a dial has been turned. You can use an analog input to measure a digital component (like a button) or even act like a digital output, they are basically digital pins with extra powers.
<p>lolz took me like half an hour to complete this step now im scared for the projects</p>
<p>Very clear, thanks very much indeed. I'm currently studying beginners Java and can see the similarity. I've ordered my UNO today!</p>
<p>great guide men, wish i had this when i started</p>
<p>Hi,</p><p>If you're looking for a tool to help you create the circuit schematics or code snippets, check this one:</p><p><a href="http://www.circuito.io" rel="nofollow">www.circuito.io</a></p><p>It's free and fast</p>
<p>Never used Arduino before but are very interested what you can make with it, this is great advice and will be looking forward to working for nasa in a couple of weeks after I have made a baby iss thank you</p>
<p>Very informative thankyou... I am hoping to connect LED's to the 6 PWM pins and have them fade in sequence then back up to full brightness on a loop... Does anyone have any hints as the instructions here to do with fading only cover doing one pin at a time?</p><p>I appreciate any help I can get as I am still learning mainly through trial and error but a few pointers will go a long way :)</p>
<p>I have sorted my problem with a bit of experimentation... I am basically building an LED starlight screen for a local hall. I will have 10 LED's connected to each of the 6 pins randomly placed on the screen so when each 10 fade in and out, they look like they are twinkling. The code if anyone wants to make use of it is as follows... </p><p>Also, If anyone has any feedback on a better approach it would be most welcome :)</p><p>//LEDs - fading between 6 PWM pins</p><p>//pin connections</p><p>int row1 = 3;</p><p>int row2 = 5;</p><p>int row3 = 6;</p><p>int row4 = 9;</p><p>int row5 = 10;</p><p>int row6 = 11;</p><p>void setup(){</p><p> pinMode(row1, OUTPUT);</p><p> pinMode(row2, OUTPUT);</p><p> pinMode(row3, OUTPUT);</p><p> pinMode(row4, OUTPUT);</p><p> pinMode(row5, OUTPUT);</p><p> pinMode(row6, OUTPUT);</p><p>}</p><p>void loop(){</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row1, 255-brightness);</p><p> analogWrite(row2, brightness);</p><p> delay(15);</p><p> }</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row2, 255-brightness);</p><p> analogWrite(row3, brightness);</p><p> delay(15);</p><p> }</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row3, 255-brightness);</p><p> analogWrite(row4, brightness);</p><p> delay(15);</p><p> }</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row4, 255-brightness);</p><p> analogWrite(row5, brightness);</p><p> delay(15);</p><p> }</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row5, 255-brightness);</p><p> analogWrite(row6, brightness);</p><p> delay(15);</p><p> }</p><p> for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(row6, 255-brightness);</p><p> analogWrite(row1, brightness);</p><p> delay(15);</p><p> }</p><p>}</p>
<p>Thank you very much for this simple and awesome guide!</p>
<p>Works Great!!!</p>
<p>Dear Sir!</p><p>(Sorry about <br>My language Knowledge)</p><p>First I want to say I&rsquo;m really new to ARDUINO projects, Now I&rsquo;m <br>try to do fuel gauge project for my Bike. In that case I need your help sir. My <br>question is I want to Increased and Decreased defined some Value like (Ex:-Proposed <br>Value = 700Km) proportionally Increased and Decreased according to potentiometer <br>values. </p><p>Example:-</p><p>//Potentiometer</p><p> Pot_Max_ Value = 100;</p><p>//Defined Value (My <br>Proposed Maximum Value)</p><p>My_MaxValue = 700;</p><p>I want to run Program like <br>this: ( This is not correct program method this is just idea for how I want to run the program)</p><p> If Pot_Max_ <br>Value = 0;</p><p>My_MaxValue <br>= 0; //My max value should be 0 proportionally potentiometer value</p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 0</p><p>If Pot_Max_ Value = 1;</p><p>My_MaxValue <br>= 7; //My max value should be 7 proportionally potentiometer value</p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 7</p><p>If Pot_Max_ Value =2;</p><p>My_MaxValue <br>= 14; //My max value should be 14 proportionally potentiometer value</p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 14</p><p> .</p><p> .</p><p>If Pot_Max_ Value =5;</p><p>My_MaxValue <br>= 35; //My max value should be 35 proportionally potentiometer value</p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 35</p><p> .</p><p> .</p><p>If Pot_Max_ Value =10;</p><p>My_MaxValue <br>= 70; //My max value should be 70 proportionally <br>potentiometer value </p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 70</p><p> .</p><p> .</p><p>If Pot_Max_ Value =25;</p><p>My_MaxValue <br>= 175; //My max value should be 175 proportionally <br>potentiometer value </p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 175</p><p> .</p><p> .</p><p>If Pot_Max_ Value =75;</p><p>My_MaxValue <br>= 525; //My max value should be 525 proportionally <br>potentiometer value </p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 525</p><p> .</p><p> .</p><p>If Pot_Max_ Value =100;</p><p>My_MaxValue <br>= 700; //My max value should be 700 proportionally <br>potentiometer value </p><p>Lcd.print <br>= (My_MaxValue); // LCD should print my max value like 700</p><p>Sir I want to run program like <br>above mentioned and short it like this </p><p>for (int brightness=0;brightness&lt;256;brightness++){</p><p> analogWrite(ledPin,brightness);</p><p>delay(5);</p><p>Please help me on this sir!! <br> Really sorry about your valuable time wasting <br>for my work.</p><p>Thank you</p><p> Udana</p><p>Email &ndash; Udanagayan@gmail.com</p>
<p>Great Intro. for Starters :) -Many Thanks</p>
<p>I have a question...I am using prewired LED's is that a problem? I assume all I have to do is wire from the apropriate output and then to the ground?</p>
<p>if they already have current limiting resistors, then yes.</p>
<p>Thanx for the answer! My LED's all have resistors prewired and boy was it simple. Now all I have to do is figuire out how to program what I want it to do! Lol</p>
<p>exactly what i was looking for</p>
<p>Arduino is not a microcontroller, but rather a microcontroller-based SBC (Single Board Computer). The microcontroller is the board's AVR. A power supply for instance, like on Arduino, is never part of a microcontroller, which is a single IC.</p>
<p>you are right....</p>
<p>nice project</p>
<p>Hi all,</p><p>I have purchased a kit &quot;Arduino basics, 15 tutorial in 8 categories&quot;<br>I lost the manual the next day in a train.<br>I am looking for this manual as it covers all the devices in the kit.<br>Could someone post a scan of it?<br>Or could you refer me to where I could found this manual.<br>Thanks</p>
<p>awesome work and very helpful...thanks i learn my first arduino by you..</p>
<p>Thank you for your work, it was helpfull for me.</p>
<p>Well, instead of so much attention Amanda made a mistake.</p><p>digitalWrite(ledState, LOW); </p><p>It should be-</p><p>digitalWrite(ledPin, LOW);</p><p>Same for HIGH.</p>
<p>good catch! I think I fixed it, let me know if there are any more issues. Thanks!</p>
<p>cheap and good Arduino!!</p><p>https://sites.google.com/site/arduinouk/</p>
<p>Hey everyone, If you are looking to learn how to program the Arduino, check out this starter shield from fireflyelectronix.com Makes it really easy to learn without having to mess with wiring up components on a breadboard.</p>
helpfull for me.
hi this is an amazing instructable for beginners like me... can you please post an instructable regarding ne 555 timer chip using arduino UNO
<p>hiii </p><p>when button was pressed it randomly sent pressed and unpressed irrespective the button was pressed or not ..can you tell me why it was so ?? as i did re-check my connections still it was happeneing.</p>
<p>maybe try changing the orientation of the button? not sure exactly, hope you worked it out!</p>
<p>On the breadboard diagram on this page,the bottom row is labeled red or positive, but on another diagram in this instructable, the bottom row is labeled black, for ground. Since a black wire is leading from the red row, I wondered if there was an error. </p>
<p>the black wires are all ground, sorry if that was confusing, you can double check bc they are connected to ground on the Arduino. I'm not sure it was always labelled like that!</p>
<p>Excellent instructable, I really liked the way you explain everything so clearly. Thank you very much for this. I can not wait for my Arduino and make the examples</p>
excelente! from argentine!
I also ordered an arduino uno rev3 from amazon
<p>I am a complete noob to Arduino and look forward to doing my first projects with my 10 year old daughter. I was able to order my Uno rev3 from eBay for $13. I can't wait for it to arrive.</p>
<p>thanks for making n' posting this Instructable. I've been wanting to play with Arduinos but being that I've got no education in this field I feel a bit out'a my league... this Instructable is very helpful. </p>
<p>you got it! This is another great post to get you up to speed on electronics:</p><p>http://www.instructables.com/id/Basic-Electronics/</p>
<p>nice job!, I love Arduino :), You can do interesting thinks using it. Now I am working on a wheatear station accessed over the internet. </p><p>My first arduino (atmega328p) project was this DSRL controller: </p><p><a href="http://www.instructables.com/id/APCC-Advanced-Photo-Camera-Control/" rel="nofollow">http://www.instructables.com/id/APCC-Advanced-Photo-Camera-Control/</a></p>
<p>looks great</p>
<p>I'll be spending more time with this later. For now I'll just say that this looks like just what I need to get started with an arduino. </p><p>I do have experience with breadboarding, and I would like to add a bit of advice for those that are new to it. Not all boards are labeled for positive and negative. To help keep it straight, it is a good idea to &quot;label&quot; the power lines with short pieces of red and black wire so you have an easy visual cue as to their polarity. The first time you let the smoke out of the wires (the insulation is there to keep the smoke inside) is something you won't forget.</p>
<p>that's a great tip, thanks!</p>
<p>Amanda,</p><p>Incredible instructable! I worked in computer technology for 32 years before retiring. About 15 of that programming or managing programming teams. Have taken dozens of expensive technical classes. By far your instuctable out shined all of them.</p><p>Your attention to detail and clarity of explanation are some of the best I have ever come across. You have real talent. I look forward to getting an Arduino board and getting started. Which is saying something since I was so burned out when I retired I thought I would never be interested in technology again.</p><p>Thank you, and keep up the great work!</p>
<p>thanks for the comment, that's so nice to hear! Definitely keep going with Arduino, it's such a fun tool to work with and the possibilities are limitless!</p>
Just what I have been looking for is there a PDF?
<p>there's a button at the top of the page for pdf</p>
Thanks very much I got it now whereas it was not showing before.<br>May I say what a great tutorial you have done.<br>I will look forward to all of your posts.&amp; Instructables.

About This Instructable


2,801 favorites


Bio: I'm a grad student at the Center for Bits and Atoms at MIT Media Lab. Before that I worked at Instructables, writing code for ... More »
More by amandaghassaei: OTCA Metapixel - Conway's Game of Life "9 Degrees of Freedom" IMU Twitter Controlled Pet Feeder
Add instructable to: