Professional Documents
Culture Documents
Sik Guide Sik Guide: DIG Ital (PWM) DIG Ital (PWM)
Sik Guide Sik Guide: DIG Ital (PWM) DIG Ital (PWM)
1
2
3
RX
4
TX
5
)
6 M
(PW
7
TAL
8
I
DIG
˜9
10
11
SIK GUIDE
12
13
D
GN
F
ARE
What is an Arduino? 1
Inventory of Parts 11
Arduino Uno 13
Breadboard 15
Circuit #2 - Potentiometer 24
arduino.cc
d
h
E
W
SW
S
1 Windows
Download
Click on the “ + ” sign next to your
appropriate computer operating system.
Mac OS X
Windows
Mac OS X
Linux: 32 bit, 64 bit
Linux:source
32 bit, 64 bit
user
•••••••••
Choose the appropriate Operating System installation package for your computer.
// Connect your Arduino Uno to your Computer
Use the USB cable provided in the SIK kit to connect the Arduino
to one of your computer’s USB inputs.
2
3
// Install Drivers
Depending on your computer’s operating system, you will need to follow specific
instructions. Please consult the URLs below for specific instructions on how to
install the drivers onto your Arduino Uno.
* You will need to scroll to the section labeled “Install the drivers”.
http://arduino.cc/en/Guide/Windows
http://arduino.cc/en/Guide/MacOSX
http://www.arduino.cc/playground/Learning/Linux
// Open the Arduino IDE:
Open the Arduino IDE software on your computer. Poke around and get to know
the interface. We aren’t going to code right away, this is just an introduction. The
step is to set your IDE to identify your Arduino Uno.
1 2 3 4 5 6
9
GUI (Graphical User Interface)
1 Verify: Compiles and approves your code. It will catch errors in syntax (like missing semi-colons or parenthesis). // See Diagram Below
2 Upload: Sends your code to the Arduino board. When you click it, you should see the lights on your board blink rapidly. // See Diagram Below
4 Open: This button will let you open up an existing sketch. // See Diagram Below
6 Serial Monitor: This will open a window that displays any serial information your Arduino is transmitting. It is very useful for debugging.
7 Sketch Name: This shows the name of the sketch you are currently working on.
8 Code Area: This is the area where you compose the code for your sketch.
9 Message Area: This is where the IDE tells you if there were any errors in your code.
// The three most important commands for this guide are seen below:
Open
Verify
Upload
4 // Select your board: Arduino Uno
File Edit Sketch Tools Help
Auto Format
Archive Sketch
Fix Encoding & Reload
Serial Monitor
Tools Help
Auto Format
Archive Sketch
Fix Encoding & Reload
Serial Monitor
Board
Serial Port com 1
Select the serial device of the Arduino board from com 12
Programmer
the Tools | Serial Port menu. This is likely to be Burn Bootloader
com3 or higher (COM1 and COM2 are usually
reserved for hardware serial ports). To find out,
C
O.C
Tools Help
Auto Format
WW
Archive Sketch
Fix Encoding & Reload
Serial Monitor
W
Board
Serial Port /dev/tty.usbmodem262471
/dev/cu.usbmodem262471
Programmer
Select the serial device of the Arduino board from /dev/tty.Bluetooth-Modem
IN
Burn Bootloader /dev/cu.Bluetooth-Modem
the Tools > Serial Port menu. On the Mac, this
G
/dev/tty.FireFly-7256-SPP
ALO
should be something with /dev/tty.usbmodem /dev/cu.FireFly-7256-SPP
(for the Uno or Mega 2560) or
AN
/dev/tty.tiPhone-WirelessiAP-1
A5
http://www.arduino.cc/playground/Learning/Linux
Download Arduino Code (For use with the circuits in this guide)
5
Type in the following URL to download the code:
sparkfun.com/sikcode
// Copy “SIK Guide Code” into “Examples” library in Arduino folder
Contents
Resources
Find “Arduino” in your applications
folder. Right click(ctrl + click) on
Java
“Arduino”. Select “Show Package
Unzip the file “SIK Guide Code”. Contents”.
It should be loacted in your examples
browser’s “Downloads” folder. Arduino
Right click the zipped folder and Open
Copy the “SIK Guide Code” folder
choose “unzip”. Show Package Contents
Move to Trash into Arduino’s folder named
“examples”.
http://www.arduino.cc/playground/Learning/Linux
Getting Started with Circuits
Potentiometer Diode
(1N4148)
* ACTUAL SIZE
x1 x2
x1 x1
(TMP36) (P2N2222AG)
A18
FRONT FRONT
BACK BACK
x1 x2
x1 x2
Flex Sensor Arduino Board
UNO - SMD
PTH Version
Version
MADE
IN ITALY
x1
RX
TX
L
13
RESET-EN 12
RESET
11
3.3V
10
5V
9
GND
8
POWER
GND
VIN 7
6
DIGITAL (PWM )
A0 5
A1 4
x1
RESET
A2 3
ANALOG IN
A3 2
A4 TX 1
A5 RX 0
Servo WWW.ARDUINO.CC
x1
Breadboard
Standard Solderless
x1
a b c d e f g h i
1 1
Relay 2
3
2
3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
x1 16 16
17 17
18 18
19 19
Integrated Circuit 20
21
20
21
(IC) 22
23
22
23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
x1 x1
2
1
8
3 4 5
10
9
Arduino Uno
1 Power In (Barrel Jack) - Can be used with either a 9V or 12V wall-wart or battery.
2 Power In (USB Port) - Provides power and communicates with your board when plugged into your computer via USB.
3 LED (RX: Receiving) - This shows when the Arduino is receiving data (such as when being programmed).
4 LED (TX: Transmitting) - This shows when your Arduino is transmitting data (such as when running a program).
5 LED (Pin 13: Troubleshooting) - This LED is incorporated into your sketch to show if your program is running properly.
6 Pins (ARef, Ground, Digital, Rx, Tx) - These various pins can be used for inputs, outputs, power, and ground. // See Diagram Below
8 Reset Button - This is a way to manually reset your Arduino, which makes your code restart.
9 ICSP Pins (Uploading Code without Bootloader) - This is for "In-Circuit Serial Programming," used if you want to bypass the boot loader.
10 Pins (Analog In, Power In, Ground, Power Out, Reset) - These various pins can be used for inputs, outputs, power, and ground. // See Diagram Below
// Pins Diagram
The header pins are one of the most important parts for putting our
example circuits together. Take a moment and locate the input/output
ports of your Arduino Uno.
SCL
SDA
ARef
Ground
RFU
Digital
IOREF
Digital
Reset
Digital
Power Out
Digital
Power Out
Digital
Ground
Digital 6
Ground
10 Power In Digital
Digital
Analog Digital
Analog Digital
Analog Digital
Analog Digital
Analog TX - Out
Analog RX - In
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
This line divides the board in half, restricting electricity to one half or the other.
Breadboard
1 Vertical Connection (+ Power and - Ground // See Diagram Below)
Making a Connection:
2 Horizontal Connection (a-e & f-j // See Diagram Below) Above the breadboard
LED
How’s it all connected?
CONNECTED!
a b c d e f g h i
1
2
1
2 Power:
3 3
4 4
5 5 Each + sign runs power anywhere in the
6
7
6
7
vertical column.
8 8
9 9
10
11
10
11
Ground:
12 12
13
14
13
14
Each - sign runs to ground anywhere in the Inside the breadboard
15 15 vertical column.
16 16
17 17
18 18
19
20
19
20
Horizontal Rows:
21 21
22
23
22
23
Each of these rows numbered 1-30 are
24 24 comprised of five horizontal sockets.
25 25
26 26 Components placed in the same row will be
27
28
27
28
connected in a circuit when power is running.
29 29
30 30
a b c d e f g h i
5V Current Your Arduino runs on five volts. This is the power that will be supplied from your
computer via USB and will be the driving force behind any components you use in your circuits. By
plugging your Arduino board into your computer, you are supplying it with just the right voltage it
needs to thrive! 5V can’t hurt you, so don’t be afraid to touch anything in your citcuit.
1
Circuit 2
Resistor (330ohm)
(Orange-Orange-Brown)
Resistor
X 1 X 1 X 3 This section lists the parts you
will need to complete the circuit.
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6
LED: Make sure the short leg,6
7
marked with flat side, goes into
7
330Ω Resistor: The color banding the negative position (-).
8 8
should read orange-orange-
9 9
brown-gold. The component legs
10 10
can go in either hole.
11 11
12 12
13 13
14 14
15 Flat Edge 15
16 16
17 17
18 Short Leg 18
19 19
20 20
21 21
Jumper Wire: All jumper wires 22 22
work the same. They are used to 23 23
connect two points together. This 24 24
guide will show the wires with different 25 25
colored insulations for clarity, but using
different combinations of colors is 26 26
completely acceptable. 27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference:
LED (5mm) + c2 c3 Components like LEDs are inserted into the Breadboard sockets c2(long leg) c3(short leg).
-
+ -
Jumper Wire GND “GND” on the Arduino should be connected to the row marked “-” on the Breadboard.
Jumper Wire 5V + “5V” on the Arduino connects to the row marked “+” on the Breadboard.
Jumper Wire Pin 13 e2 “Pin 13” on the Arduino connects to socket “e2” on the Breadboard.
// Circuit #1
Circuit #1
/*
Blink
*/
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
This compiles your code. The IDE changes it from text into instructions the computer
Verify can understand.
This sends the instructions via the USB cable to the computer chip on the Arduino board.
Upload
The Arduino will then begin running your code automatically.
// The result of a completed circuit with correct code after verified and uploaded.
1
This is where you will find the
Circuit 2 Arduino Code:
Arduino code for each circuit.
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 1
Code to Note: Remember to Verify and
Upload your code.
Begin to understand how the
Arduino code works. See below.
Before you can use one of the Arduino's pins, you need to tell the
pinMode(13, OUTPUT); Arduino whether it is an INPUT or OUTPUT. We use a built-in
"function" called pinMode() to do this.
LED Not Lighting Up? Almost all modern flat screen televisions and monitors
LEDs will only work in one direction. Try taking it out and have LED indicator lights to show they are on or off.
twisting it 180 degrees (no need to worry, installing it backwards does
no permanent harm).
Still No Success?
A broken circuit is no fun, send us an e-mail and we will get
back to you as soon as we can: techsupport@sparkfun.com
2
CIRCUIT
Circuit 2 #5
#2
Potentiometer
+5 Volts In this circuit you’ll work with a potentiometer.
A potentiometer is also known as a variable resistor.
Pin 13 Arduino Potentiometer
Arduino When it’s connected with 5 volts across its two outer
Pin AØ pins, the middle pin outputs a voltage between 0 and
5, depending on the position of the knob on the
potentiometer. In this circuit, you’ll learn how to use
LED
a potentiometer to control the brightness of an LED.
resistor (330ohm)
(Orange-Orange-Brown)
GND
(ground) (-)
IC
Potentiometer LED 330Ω Wire
PARTS:
Resistor
X 1 X 18 X 18 19
6
X
p.24
p.10
Circuit 2: Potentiometer
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Digital versus Analog:
a6
Potentiometer a7
If you look closely at your Arduino, you'll see some pins labeled "DIGITAL",
a8
and some labeled "ANALOG". What's the difference?
LED (5mm) + h20 h21
- Many of the devices you'll interface to, such as LEDs and pushbuttons, have
+ -
only two possible states: on and off, or as they're known to the Arduino,
330Ω Resistor i21 + "HIGH" (5 Volts) and "LOW" (0 Volts). The digital pins on an Arduino are
great at getting these signals to and from the outside world, and can even do
tricks like simulated dimming (by blinking on and off really fast), and serial
Jumper Wire e6 communications (transferring data to another device by encoding it as patterns
of HIGH and LOW).
Jumper Wire A0 e7
LOW HIGH
Jumper Wire e8 +
DIGITAL off on
Jumper Wire Pin
5V13 j20 0 volts 5 volts
0 volts 5 volts
ANALOG
0 1023
2
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 2
Code to Note:
A "variable" is a number you've given a name to. You must
introduce, or "declare" variables before you use them; here we're
int sensorValue;
declaring a variable called sensorValue, of type "int" (integer). Don't
forget that variable names are case-sensitive!
Not Working
Make sure you haven't accidentally connected the
potentiometer's wiper to digital pin 2 rather than analog
pin 2. (the row of pins beneath the power pins).
Still Backward
You can try operating the circuit upside down.
Sometimes this helps.
CIRCUIT #3
3
Circuit 2
RGB LED
Pin 11 Pin 10 Pin 9
You know what’s even more fun than a blinking
LED? A colored one. RGB, or red-green-blue, LEDs
have three different color-emitting diodes that can be
resistor
(330ohm)
combined to create all sorts of colors. In this circuit,
(Orange-Orange-Brown) you’ll learn how to use an RGB LED to create unique
color combinations. Depending on how bright each
green
blue
red
diode is, nearly any color is possible!
GND
(ground) (-)
LED
IC
Potentiometer
330Ω Transistor
LED Wire
330Ω
PARTS:
red
blue
common
green
p.10
p.28
Circuit 3: RGB LED
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
* The longest lead is the common(gnd). 7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: The shocking truth behind analogWrite():
a4 a5 a6 a7
RGB LED (5mm) We've seen that the Arduino can read analog voltages (voltages between 0 and
5 Volts) using the analogRead() function. Is there a way for the Arduino to
330Ω Resistor 5V e7
e4 eg4
11 output analog voltages as well?
The answer is no... and yes. The Arduino does not have a true analog voltage
330Ω Resistor 5V e7
e6 eg6
11 output. But, because the Arduino is so fast, it can fake it using something
called PWM ("Pulse-Width Modulation").
HIGH (5 volts)
Jumper Wire Pin 11 h7 90% 0.5 v
LOW (0 volts)
10%
Jumper Wire 5V +
HIGH (5 volts)
Jumper Wire GND 50%
LOW (0 volts)
2.5 v
50%
10%
HIGH (5 volts)
LOW (0 volts)
4.5 v
90%
3
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 3
Code to Note:
if (x <= 255) "If / else" statements are used to make choices in your programs. The
{} statement within the parenthesis () is evaluated; if it's true, the code within
else the first brackets {} will run. If it's not true, the code within the second
{} brackets {} will run.
analogWrite(RED_PIN, redIntensity);
to
analogWrite(RED_PIN, redIntensity/3);
4
CIRCUIT #4
Pin 2
Pin 2 Pin 33
Pin Pin 44
Pin Pin 55
Pin Multiple LEDs
LED
Light Emitting Diode
So you have gotten one LED to blink on and off –
fantastic! Now it's time to up the stakes a little bit – by
resistor
connecting EIGHT LEDS AT ONCE. We'll also give
(330ohm)
(Orange-Orange-Brown)
our Arduino a little test by creating various lighting
sequences. This circuit is a great setup to start practicing
GND writing your own programs and getting a feel for the
way Arduino works.
Pin 66
Pin Pin 77
Pin Pin 88
Pin Pin 99
Pin
GND
(ground) (-)
arrays[ ] - used to make managing variables easier by
grouping them together
Resistor
X 8 X 8 X 10
p.32
Circuit 4: Multiple LEDs
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Component: Image Reference:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 4
Code to Note:
When you have to manage a lot of variables, an
"array" is a handy way to group them together. Here
int ledPins[] = {2,3,4,5,6,7,8,9};
we're creating an array of integers, called ledPins,
with eight elements.
Computers like to do the same things each time they run. But
sometimes you want to do things randomly, such as simulating the
index = random(8);
roll of a dice. The random() function is a great way to do this. See
http://arduino.cc/en/Reference/Random for more information.
Some LEDs Fail to Light Scrolling marquee displays are generally used to spread
It is easy to insert an LED backwards. Check the LEDs short segments of important information. They are built
that aren't working and ensure they the right way out of many LEDs.
around.
Starting Afresh
Its easy to accidentally misplace a wire without noticing.
Pulling everything out and starting with a fresh slate is
often easier than trying to track down the problem.
5
CIRCUIT
Circuit 2 #5
Push Buttons
Pin
Pin 22 Pin
Pin 33
Up until now, we’ve focused solely on outputs. Now
+5 Volts we’re going to go to the other end of spectrum and
Pin 13 play around with inputs. In this circuit, we’ll be
looking at one of the most common and simple
resistor
inputs – a push button. The way a push button works
with Arduino is that when the button is pushed, the
LED voltage goes LOW. The Arduino reads this and reacts
accordingly. In this circuit, you will also use a pull-up
resistor, which helps clean up the voltage and prevents
resistor (330ohm) false readings from the button.
(Orange-Orange-Brown)
GND
(ground) (-)
IC Button
Push LED 10KΩ
330Ω 330Ω
Wire Wire
PARTS:
Resistor Resistor
X 21 X 18 X 28 X19 X 1 X 7
p.36
p.10
Circuit 5: Push Buttons
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: How to use logic like a Vulcan:
d4 g4
Push Button One of the things that makes the Arduino so useful is that it can make complex decisions
d6 g6
based on the input it's getting. For example, you could make a thermostat that turns on a
d9 g9 heater if it gets too cold, a fan if it gets too hot, waters your plants if they get too dry, etc.
Push Button
d11 g11
In order to make such decisions, the Arduino provides a set of logic operations that let you
build complex "if" statements. They include:
LED (5mm) + h20 h21
-
+ -
== EQUIVALENCE A == B is true if A and B are the SAME.
10KΩ Resistor i6 a15
+
Jumper Wire i9 You can combine these functions to build complex if() statements.
For example:
Jumper Wire Pin 2 h6
if ((mode == heat) && ((temperature < threshold) || (override == true)))
{
Jumper Wire Pin 3 h11 digitalWrite(HEATER, HIGH);
}
Jumper Wire Pin 13 j20 ...will turn on a heater if you're in heating mode AND the temperature is low, OR if you
turn on a manual override. Using these logic operators, you can program your Arduino to
make intelligent decisions and take control of the world around it!
5
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 5
Code to Note:
Light Not Turning On The buttons we used here are similar to the buttons in
The pushbutton is square, and because of this it is easy to most videogame controllers.
put it in the wrong way. Give it a 90 degree twist and see
if it starts working.
Underwhelmed
No worries, these circuits are all super stripped down to
make playing with the components easy, but once you
throw them together the sky is the limit.
6
CIRCUIT
Circuit 2 #6
Photo Resistor
Pin 9 +5 Volts So you’ve already played with a potentiometer, which
varies resistance based on the twisting of a knob. In
this circuit, you’ll be using a photo resistor, which
photo
LED changes resistance based on how much light the
resistor
sensor receives. Since the Arduino can’t directly
interpret resistance (rather it reads voltage), we use a
voltage divider to use our photo resistor. This voltage
Pin AØ
resistor (330ohm) divider will output a high voltage when it is getting a
(Orange-Orange-Brown)
lot of light and a low voltage when it is not.
GND
(ground) (-)
Resistor Resistor
X 1 X 1 X 1 X 6 X 1
p.40
Circuit 6 : Photo Resistor
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Measuring resistive sensors:
Photo Resistor f5 f6
Many of the sensors you'll use (potentiometers, photoresistors, etc.) are
resistors in disguise. Their resistance changes in proportion to whatever
LED (5mm) + h20 h21 they're sensing (light level, etc.).
-
+ -
The Arduino's analog input pins measure voltage, not resistance. But we can
330Ω Resistor (sensor) i21 + easily use resistive sensors with the Arduino by including them as part of a
"voltage divider".
Jumper Wire j1 +
Pin
Pin 33
Jumper Wire A0 j5
Jumper Wire j6
GND
(ground) (-)
Jumper Wire Pin 9 j20
Jumper Wire 5V + A voltage divider consists of two resistors. The "top" resistor is the sensor
you'll be using. The "bottom" one is a normal, fixed resistor. When you
connect the top resistor to 5 Volts, and the bottom resistor to ground, the
Jumper Wire GND middle will output a voltage proportional to the values of the two resistors.
When one of the resistors changes (as it will when your sensor senses things),
the output voltage will change as well!
Although the sensor's resistance will vary, the resistive sensors (flex
sensor,light sensor, softpot, and trimpot) in the SIK are around 10K Ohms.
We usually want the fixed resistor to be close to this value, so using a 10K
resistor is a great choice for the fixed "bottom" resistor.
6
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 6
Code to Note:
LED Remains Dark A street lamp uses a light sensor to detect when to turn
This is a mistake we continue to make time and time the lights on at night.
again, if only they could make an LED that worked both
ways. Pull it up and give it a twist.
Temperature Sensor
5 Volts
A temperature sensor is exactly what it sounds like – a
Pin AØ sensor used to measure ambient temperature. This
particular sensor has three pins – a positive, a ground,
and a signal. For every centigrade degree it reads, it
outputs 10 millivolts. In this circuit, you’ll learn how to
integrate the temperature sensor with your Arduino,
TMP36 and use the Arduino IDE’s debug window to display
+5v
signal (precision the temperature.
gnd temperature
sensor)
X 1 X 5
FRONT
BACK
p.44
Circuit 7: Temperature Sensor
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Opening your serial monitor:
Temperature Sensor f5 f6 f7
This circuit uses the Arduino IDE's serial monitor. To open this, first upload the
program then click the button which looks like a magnifying glass in a square.
Jumper Wire j5
1
Jumper Wire A0 j6
Jumper Wire j7 +
2
Jumper Wire 5V +
3
Jumper Wire GND
7
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 7
Code to Note:
Before using the serial monitor, you must call Serial.begin() to
initialize it. 9600 is the "baud rate", or communications speed.
Serial.begin(9600);
When two devices are communicating with each other, both
must be set to the same speed.
isn't working, make sure you have voltage: 0.73 deg C: 22.75 deg F: 72.96
assembled the circuit correctly and
voltage: 0.73 deg C: 22.75 deg F: 72.96
verified and uploaded the code to
your board or see the troubleshoot- voltage: 0.73 deg C: 22.75 deg F: 72.96
Nothing Seems to Happen Building climate control systems use a temperature sensor
This program has no outward indication it is working. To to monitor and maintain their settings.
see the results you must open the Arduino IDE's serial
monitor (instructions on previous page).
Gibberish is Displayed
This happens because the serial monitor is receiving data at
a different speed than expected. To fix this, click the
pull-down box that reads "*** baud" and change it to
"9600 baud".
A Single Servo
Pin 9
Servos are ideal for embedded electronics applications
because they do one thing very well that spinning motors
cannot – they can move to a position accurately. By
Mini Servo varying the pulse of voltage a servo receives, you can
move a servo to a specific position. For example, a pulse
signal
(white) of 1.5 milliseconds will move the servo 90 degrees. In this
+5v circuit, you’ll learn how to use PWM (pulse width
gnd
(red) modulation) to control and rotate a servo.
(black)
GND
+5 volts
(ground) (-)
(5V)
Servo Wire
PARTS:
X 1 X 8
p.48
Circuit 8: A Single Servo
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Expand your horizons using Libraries:
Servo e5 e6 e7
Arduino gives you a very useful set of built-in commands for doing basic input and output,
making decisions using logic, solving math problems, etc. But the real power of Arduino is
the huge community using it, and their willingness to share their work.
Jumper Wire e5
Libraries are collections of new commands that have been packaged together to make it easy
to include them in your sketches. Arduino comes with a handful of useful libraries, such as
Jumper Wire e6 the servo library used in this example, that can be used to interface to more advanced
devices (LCD displays, stepper motors, ethernet ports, etc.)
Jumper Wire e7 See http: //arduino.cc/en/Reference/Libraries for a list of the standard libraries and
information on using them.
Jumper Wire Pin 9 a7 But anyone can create a library, and if you want to use a new sensor or output device,
chances are that someone out there has already written one that interfaces that device to the
Arduino. Many of SparkFun's products come with Arduino libraries, and you can find even
Jumper Wire b5 more using Google and the Arduino Playground at http://arduino.cc/playground/. And
when YOU get the Arduino working with a new device, consider making a library for it and
sharing it with the world!
Jumper Wire a6 +
To use a library in a sketch, select it from Sketch > Import Library.
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 8
Code to Note:
#include is a special "preprocessor" command that inserts a library
(or any other file) into your sketch. You can type this command
#include <Servo.h>
yourself, or choose an installed library from the "sketch / import
library" menu.
The servo library adds new commands that let you control a servo.
Servo servo1;
To prepare the Arduino to control a servo, you must first create a
Servo "object" for each servo (here we've named it "servo1"), and
servo1.attach(9);
then "attach" it to a digital pin (here we're using pin 9).
Servos don't spin all the way around, but they can be commanded to move to
a specific position. We use the servo library's write() command to move a
servo1.write(180);
servo to a specified number of degrees(0 to 180). Remember that the servo
requires time to move, so give it a short delay() if necessary.
Servo Not Twisting Robotic arms you might see in an assembly line or sci-fi
Even with colored wires it is still shockingly easy to plug a movie probably have servos in them.
servo in backward. This might be the case.
resistor
(5V)
Pin AØ
Flex Sensor 9
In this circuit, we will use a flex sensor to measure,
(10K ohm)
(Brown-Black-Orange)
well, flex! A flex sensor uses carbon on a strip of
plastic to act like a variable resistor, but instead of
changing the resistance by turning a knob, you
flex change it by flexing (bending) the component. We
sensor use a "voltage divider" again to detect this change in
resistance. The sensor bends in one direction and the
+5 volts
(5V)
more it bends, the higher the resistance gets; it has a
range from about 10K ohm to 35K ohm. In this
circuit we will use the amount of bend of the flex
Pin 9
sensor to control the position of a servo.
Mini Servo
GND
(ground) (-)
IC Sensor
Potentiometer
Flex Servo
LED 330Ω10KΩ Wire
PARTS:
Resistor
Resistor
X X11 X 8 X 1 X 8 X1 X 11
p.10
p.52
Circuit 9: Flex Sensor
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Debugging your sketches using the Serial Monitor:
Servo e1 e2 e3
It happens to everyone - you write a sketch which successfully compiles and uploads,
but you can't figure out why it's not doing what you want it to. Larger computers
Jumper Wire e1 have screens, keyboards, and mice that you can use to debug your code, but tiny
computers like the Arduino have no such things.
Jumper Wire e2 The key to visibility into a microcontroller is output. This can be almost anything,
including LEDs and buzzers, but one of the most useful tools is the serial monitor.
Using Serial.print() and println(), you can easily output human-readable text and
Jumper Wire e3
data from the Arduino to a window back on the host computer. This is great for your
sketch's final output, but it's also incredibly useful for debugging.
Flex Sensor h19 h20
Jumper Wire Pin 9 a3 for (x = 1 ; x < 9 ; x++) And if you run the code again, you'll see the
{ output you wanted:
Serial.print(x);
Jumper Wire 5V + } 12345678
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 9
Code to Note:
Serial.print("sensor: "); Because map() could still return numbers outside the "to"
range, we'll also use a function called constrain() that will
Serial.print(flexposition);
"clip" numbers into a range. If the number is outside the
Serial.print(" servo: "); range, it will make it the largest or smallest number. If it is
Serial.println(servoposition); within the range, it will stay the same.
Pin AØ
Pin 0
Soft Potentiometer
+5 volts
In this circuit, we are going to use yet another kind of
resistor (10K ohm) V+
variable resistor – this time, a soft potentiometer (or
gnd
Brown-Black-Orange)
red
Pin 10
green
Pin 11
blue GND
(ground) (-)
resistor (330ohm)
(Orange-Orange-Brown)
LED
IC 330Ω LED
Soft Potentiometer Wire
330Ω 330Ω 10KΩ
PARTS:
p.10
p.56
Circuit 10: Soft Potentiometer
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Component: Image Reference:
330Ω Resistor 5V e7
e4 eg4
11
330Ω Resistor 5V e7
e6 eg6
11
Jumper Wire e5
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 10
Code to Note:
LED Remains Dark or Shows Incorrect Color The knobs found on many objects, like a radio for
With the four pins of the LED so close together, it’s instance, are using similar concepts to the one you just
sometimes easy to misplace one. Try double checking each completed for this circuit.
pin is where it should be.
Bizarre Results
The most likely cause of this is if you’re pressing the
potentiometer in more than one position. This is normal
and can actually be used to create some neat results.
11
CIRCUIT
Circuit 2 #11
Buzzer
Pin 9
In this circuit, we'll again bridge the gap between the
digital world and the analog world. We'll be using a
buzzer that makes a small "click" when you apply
voltage to it (try it!). By itself that isn't terribly
exciting, but if you turn the voltage on and off
Piezo hundreds of times a second, the buzzer will produce a
Element tone. And if you string a bunch of tones together,
you've got music! This circuit and sketch will play a
classic tune. We'll never let you down!
GND
(ground) (-)
X 1 X 4
p.60
Circuit 11: Piezo Elements
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Creating your own functions:
Piezo Element j9 j7
Arduino contains a wealth of built-in functions that are useful for all kinds of things.
+ - (See http://arduino.cc/en/Reference for a list). But you can also easily create your
own functions. Here's a simple example named "add", which adds two numbers
Jumper Wire i7
together and returns the result. Let's break it down.
Your functions can take in values ("parameters"), and return a value, as this one does.
But you can also do either or none of those things, if you wish.
If you'll be passing parameters /to/ your function, put them (and their types) in the
parentheses after the function name. If you won't be giving your function any
parameters, just use an empty parenthesis () after the name.
If you'll be returning a value /from/ your function, put the type of the return value in
front of the function name. Then in your function, when you're ready to return the
value, put in a return() statement. If you won't be returning a value, put "void" in
front of the function name (just like you've already seen for the setup() and loop()
functions).
When you write your own functions, you make your code neater and easier to re-use.
11
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 11
Code to Note:
Up until now we've been working solely with numerical
data, but the Arduino can also work with text. Characters
char notes[] = "cdfda ag cdfdg gf ";
(single, printable, letters, numbers and other symbols) have
their own type, called "char". When you have an array of
char names[] = {'c','d','e','f','g','a','b','C'};
characters, it can be defined between double-quotes (also
called a "string"), OR as a list of single-quoted characters.
GND
(ground) (-)
+5 volts
(5V)
FRONT
P2N2
222A
A18
BACK
p.64
Circuit 12 : Spinning a Motor
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Putting it all together:
Transistor P2N2222AG a1 a2 a3
A18
222A
P2N2
At this point you're probably starting to get your own ideas for circuits that do fun
things, or help solve a real problem. Excellent! Here are some tips on programming in
general.
Diode 1N4148 GND
b7 b11
a3
Most of the sketches you write will be a loop with some or all of these steps:
DC Motor e7 e11
1. Perform some sort of input
2. Make some calculations or decisions
330Ω Resistor 5V e7
e2 eg2
11 3. Perform some sort of output
4. Repeat! (Or not!)
Jumper Wire e1 We've already shown you how to use a bunch of different input sensors and output
devices (and we still have a few more to go). Feel free to make use of the examples in
your own sketches - this is the whole idea behind the "Open Source" movement.
Jumper Wire Pin 9 j2
It's usually pretty easy to pull pieces of different sketches together, just open them in
two windows, and copy and paste between them. This is one of the reasons we've
Jumper Wire a7 + been promoting "good programming habits". Things like using constants for pin
numbers, and breaking your sketch into functions, make it much easier to re-use your
code in new sketches. For example, if you pull in two pieces of code that use the same
Jumper Wire e3 d11 pin, you can easily change one of the constants to a new pin. (Don't forget that not
all of the pins support analogWrite(); the compatible pins are marked on your board.)
Jumper Wire 5V + If you need help, there are internet forums where you can ask questions. Try
Arduino's forum at arduino.cc/forum, and SparkFun's at forum.sparkfun.com.
When you're ready to move to more advanced topics, take a look at Arduino's
Jumper Wire GND tutorials page at arduino.cc/en/Tutorial. Many of SparkFun's more advanced
products were programmed with Arduino, (allowing you to easily modify them), or
have Arduino examples for them. See our product pages for info.
Finally, when you create something really cool, consider sharing it with the world so
that others can learn from your genius. (And be sure to let us know so we can put it
on our home page!)
12
Circuit 2 Arduino Code:
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 12
Code to Note:
If the port has data waiting for you, there are a number of
ways for you to use it. Since we're typing numbers into the
port, we can use the handy Serial.parseInt() command to
speed = Serial.parseInt();
extract, or "parse" integer numbers from the characters it's
received. If you type "1" "0" "0" to the port, this function
will return the number 100.
Still No Luck
If you sourced your own motor, double check that it will
work with 5 volts and that it does not draw too much
power.
diode
coil
(flyback)
NO
NC
GND
(ground) (-)
IC
Relay Transistor
LED Diode 330Ω LED Wire
PARTS:
p.10
p.68
Circuit 13: Relays
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Component: Image Reference:
e9 f9
Relay Jumper Wire e15 f7
f5 f6e19
e15 f15
A18
222A
P2N2
LED (5mm) + c19 c20 Jumper Wire a23
e15 +
+ e19
-
+ -
330Ω Resistor 5V e7
e3 eg3
11 Jumper Wire e4 e9
330Ω Resistor 5V e7
e2 eg2
11 Jumper Wire 5V +
Jumper Wire j5
j7 j9
Jumper Wire h9 +
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 13
Code to Note:
LEDs Not Lighting Garage door openers use relays to operate. You might be
Double-check that you've plugged them in correctly. The able to hear the clicking if you listen closely.
longer lead (and non-flat edge of the plastic flange) is the
positive lead.
No Clicking Sound
The transistor or coil portion of the circuit isn't quite
working. Check the transistor is plugged in the right way.
6
QB 1 16 VCC
7 13
8 QC 2 15 QA
QD 3 14 SER
QE 4 13 OE
GND
(ground) (-)
QF 5 12 RCLK
QG 6 11 SRCLK
QH 7 10 SRCLR
GND 8 9 QH’
IC LED 330Ω Wire
PARTS:
p.72
Circuit 14: Shift Register
a b c d e f g h i
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
14 14
15 15
16 16
17 17
18 18
19 19
20 20
21 21
22 22
23 23
24 24
25 25
26 26
27 27
28 28
29 29
30 30
a b c d e f g h i
Component: Image Reference: Component: Image Reference:
e5 e6 e7 e8 e9 e10 e11 e12
IC Jumper Wire GND
+ +
a3
f5 f6 f7 f8 f9 f10 f11 f12
Open Arduino IDE // File > Examples > SIK Guide > Circuit # 14
Code to Note:
You'll communicate with the shift register (and a lot of other parts)
using an interface called SPI, or Serial Peripheral Interface. This
interface uses a data line and a separate clock line that work together
shiftOut(datapin, clockpin, MSBFIRST, data);
to move data in or out of the Arduino at high speed. The MSBFIRST
parameter specifies the order in which to send the individual bits, in
this case we're sending the Most Significant Bit first.
The Arduino's power LED goes out Similar to circuit #4, a scrolling marquee display delivers
This happened to us a couple of times, it happens when a mesage with multiple LEDs. Essentially the same task
the chip is inserted backward. If you fix it quickly the shift register achieves here in Circuit #14.
nothing will break.
Frustration
Shoot us an e-mail, this circuit is both simple and
complex at the same time. We want to hear about
problems you have so we can address them in future
editions: techsupport@sparkfun.com
Learning More
Visit us Online:
This is just the beginning of your exploration into
embedded electronics and coding. Our website has a
wealth of tutorials to whet your appetite for more
knowledge. We also host a community of hackers,
engineers, DIYers, etc. in our forums. So log on to our
website for more information about Arduino, or to plan
ahead for your next project!
sparkfun.com
NOTES:
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License.