This document provides an overview of using Arduinos for hardware hacking and includes instructions for four example projects:
1. An LED sweep circuit that uses digital output pins to light up LEDs in sequence.
2. An analog LED sweep that dims the brightness of trailing LEDs using PWM.
3. A variable speed circuit that uses a potentiometer as a voltage divider to control delay time based on input voltage.
4. A pause button circuit that uses an interrupt pin to pause and resume the LED sweeping pattern when a button is pressed.
Safety tips are also provided around using appropriate voltages and ensuring components are oriented correctly.
2. Downloading the Arduino IDE
● Go to www.arduino.cc/en/main/software
○ Download whichever software fits your Operating
System
● Linux users: find the "arduino" package in
your distro's repository
● OSX users: make sure to also install USB
FTDI drivers
○ http://www.ftdichip.com/Drivers/VCP.htm
3. What you have in front of you:
● Arduino Duemilanove
● USB Cable
● Breadboard
● Box of jumper wires
● 4 1k-ohm resistors (Brown-Black-Red)
● 1 100k-ohm resistor (Brown-Black-Yellow)
● 1 100k-ohm potentiometer
● 4 Light Emitting Diodes (LEDs)
● 1 push button switch
5. Rules for LEDs
● Always use inline resistor
● Make sure direction is right (long pin is +)
6. Digital Output
Voltage can be HIGH (+5 V) or LOW (0 V)
pinMode(pin, OUTPUT) sets pin to output
digitalWrite(pin, HIGH) sets voltage high
digitalWrite(pin, LOW) sets voltage low
7. Breadboards
● Red channel for power
● Blue channel for ground
● Slots on horizontal channels all
connected together internally
● Except break in middle of
board
● Bridge two unconnected lines
of breadboard to build your
circuit
8. Basic Arduino Program Structure
void setup()
{
//All initial settings go here
}
void loop()
{
//Runs indefinitely after setup has completed
}
9. Lab 1: LED sweep
● Connect LEDs to Arduino pins 8, 9, 10, 11
● Turn only one on at a time
● Sweep left and then right
10. "Analog Output" : PWM
● Higher voltage gives brighter LED
● Use PWM to approximate lower voltages
● More time spent high (duty cycle) means
higher average voltage
● analogWrite(pin, level) sets PWM duty cycle
● Levels are from 0 to 255 (8 bits)
Duty Cycle = th / T
th
T
11. Lab 2: Analog LED Sweep
● Sweep left and right as before
● But keep a trail of dimmer LEDs behind
● Divide the level of secondary LEDs down by
two after each step
13. Analog Input
● Arduino has an Analog-to-Digital Converter
● Pins A0 - A5
● Use analogRead(pin) to get voltage level
● Levels go from 0 to 1023 (10 bits)
14. Lab 3: Variable Speed
● Use potentiometer (variable resistor) and
resistor to form variable voltage divider
● Connect output of voltage divider to pin A0
● Read output voltage and use it to control
delay time
15. Buttons and Switches
● Two kinds of switches
○ Single Throw - open or closed
○ Double Throw - one branch or another
● Closed switch has 0 resistance
○ Acts as a wire
● Open switch has infinite resistance
○ No current can flow
16. Pull-up Resistors
● Open switch with no voltage driver is an
antenna, not necessarily ground
● Use pull-up resistors when combining single-
throw switches and digital logic
17. Interrupts
● Tell the Arduino that a digital input has
changed
● attachInterrupt(interrupt, function, mode)
sets function to be run on interrupts
● Interrupt 0 -> pin 2, Interrupt 1 -> pin 3
● Modes are CHANGE, RISING, FALLING,
LOW
18. Lab 4: Pause Button
● Connect push button to Arduino pin 2
● Set pin mode to INPUT_PULLUP
● Attach interrupt for pin 2
● When button pressed (switch closed), pause
the sweeping
● When button released (switch open), resume
the sweeping
20. Some safety rules to remember
● Do not use very high voltages
○ microcontrollers like Arduino use either 5 V or 3.3 V
● Do not short power to ground
● Do not touch small resistor (< 100 Ohm)
after voltage is applied
○ power is inversely proportional to resistance
○ power in resistor is dissipated as heat
○ small resistor + normal voltage = hot! hot! hot!
● Make sure directional components are in
right direction