HAW-Arduino
Sensors and Arduino
08.04.2013 F. Schubert
HAW - Arduino
Report for the Tasks
Description
Datasheets
Schematics
Calculations
Source-codes with comments
Documentation of the results
08.04.2013
HAW - Arduino
First Steps
Introduction
Hardware and software
Installation of the environment
The first Arduino-program
Inputs and outputs
Voltmeter
Thermometer
Piezo sensor
Servo-motor
08.04.2013
HAW - Arduino
The Hardware
HAW-Arduino USB-Board
Breadboard small
Breadboard big
USB cable
Piezo-buzzer
Potentiometer
Switches
LEDs
Transistor
Resistors
Photoresistor
Photodiode
08.04.2013
LCD-module
NTC
Operational amplifier
Comparator
Wires
Cables
Soldering equipment
Socket strips
Connectors
Experimentation board
Relay
IR-transmitter
HAW - Arduino
What means Arduino?
Hardware
08.04.2013
Programming-software
HAW - Arduino
Community
Hardware
Cheap, fast and open
AVR ATmega 168 (328) Microcontroller
C-Programming
Programming via USB
Power supply via USB or external
08.04.2013
HAW - Arduino
Arduino Characteristics
16 kByte EEPROM
1 kByte RAM
16 MHz Clock
Inputs and Outputs
14 digital Inputs/Outputs
6 analog Inputs
6 PWM-Outputs
I2C-Bus, serial Bus (TX/RX)
08.04.2013
HAW - Arduino
Arduino Duemilanove Board
Digital Inputs and Outputs
LED at Pin 13
Power LED
USB Connector
Reset Button
TX / RX LEDs
Microcontroller
External Power Supply
Analog Inputs
08.04.2013
HAW - Arduino
Arduino Duemilanove Schematic
08.04.2013
HAW - Arduino
Arduino-Software
Verify
(Compile)
Serial Monitor
ON
Stop
Upload to
I/O Board
New
Open
Save
Status Field
Status Messages
08.04.2013
HAW - Arduino
10
Installation
Unzip of the Arduino-software
Connection of the Arduino-board
Installation of the drivers (administrator rights
needed)
Reboot the computer
Run the Arduino-software
Go on..
08.04.2013
HAW - Arduino
11
Unzip the Arduino-Softwae
08.04.2013
HAW - Arduino
12
Connection of the Arduino-Board
LED at Pin 13 blinks
Power LED is on
08.04.2013
HAW - Arduino
13
Driver Installation
08.04.2013
HAW - Arduino
14
Selecting the COM-Port
08.04.2013
HAW - Arduino
15
Selecting the Board
08.04.2013
HAW - Arduino
16
Status-Messages
Upload done
Wrong serial port
Wrong board
08.04.2013
HAW - Arduino
17
Troubleshooting
Press the reset-button on
Arduino and try again
Check the serial port (Connection and
number)
Read the red text (Debugging output) at the
bottom to determine the problem
The status area shows what is wrong
08.04.2013
HAW - Arduino
18
Cycle of Development
EDIT
UPLOAD
COMPILE
COMPILE
UPLOAD
ERROR ?
YES
UPLOAD
YES
ERROR ?
ERROR ?
YES
RUN
08.04.2013
HAW - Arduino
19
Program-Structure
Declaration of variables
int ledPin = 13;
// LED connected to digital pin 13
Initialization
setup( ) Set the inputs and outputs
void setup()
{
pinMode(ledPin, OUTPUT);
}
// run once, when the sketch starts
// sets the digital pin as output
Main program
loop( ) Loop without end
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
08.04.2013
// run over and over again
// sets the LED on
// waits for a second
// sets the LED off
// waits for a second
HAW - Arduino
20
The blinking LED
08.04.2013
HAW - Arduino
21
Program Examples
08.04.2013
HAW - Arduino
22
Hardware
HAW-Arduino
08.04.2013
Small Breadboard Big Breadboard
HAW - Arduino
23
Solderless Breadboard
Not connected
08.04.2013
All connected
All connected
HAW
HAW-- Arduino
Arduino
Group of 5 connected
24
Preparing special pins
Turn pin by 90 !!!
08.04.2013
HAW - Arduino
25
Power Supply
From USB (Current is limited to 500 mA)
External power supply (Duemilanove switches
automatically) (VIN and GND or power jack)
SMPS
Battery
Diecimila
Jumper to EXT
08.04.2013
HAW
HAW- - Arduino
Arduino
26
Rules for the Development
First draw the circuit
Program the Arduino before you connect the
inputs and outputs!
If you have different power supplies connect the
different GNDs if necessary
Connect and test the circuit on the solderless
board before you connect it to the Arduino
Connect the power supplies when the circuit is
complete and tested
08.04.2013
HAW - Arduino
27
Digital and Analog Input/Output
Digital I/O
pinmode(pin, mode)
digitalWrite(pin, value)
int digitalRead(pin)
Analog I/O
analogReference(type)
int analogRead(pin)
analogWrite(pin, value)
08.04.2013
- initialization
- initialization
- PWM
HAW - Arduino
28
Digital Output
Make an external LED at pin 6 blinking
VCC (from USB)
Arduino Board
220
Pin 6
GND
Write a program for a traffic light with 3 LEDs
VCC (from USB)
Arduino Board
Pin 6
Pin 5
Pin 4
GND
08.04.2013
HAW - Arduino
29
Digital Input
A digital input floats between 0 and 5 V, if it is
not connected
A resistor pulls an input to 5V (pull up) or to
GND (pull down)
Using a pullup-resistor the switch pushes the
input to GND
Using a pulldown-resistor the switch pushes
the input to 5 V
08.04.2013
HAW - Arduino
30
Digital Input
Pullup-resistor
Pulldown-resistor
VCC
VCC
Arduino Board
Arduino Board
Digital Input
Digital Input
GND
GND
08.04.2013
HAW - Arduino
31
Tasks for Digital Input
Connect a switch to pin 2 of the Arduino
The switch controls the function of the traffic
light:
High:
Normal function
Low:
Yellow light blinking
08.04.2013
HAW - Arduino
32
Digital Output expanded
Maximum of an ATmega8 output:
5 V and 40 mA
The output can be expanded by a relay or a
transistor:
Relay:
5 V type
Transistor:
Emitter to GND
Base resistor
08.04.2013
HAW - Arduino
33
Tasks for Digital Output expanded
Connect the 12 V motor to pin 6 of the Arduino
first over a relay and then over a npn-transistor
(BD 139).
For the motor use an external supply voltage
(dont forget to connect the different GNDs!).
Switch the motor on and off by a switch at pin 11
of the Arduino.
The base resistor of the transistor is 1 k.
Protect the Arduino and the transistor by a
protective diode!
08.04.2013
HAW - Arduino
34
+12 V
VCC (from USB)
1N4148
4,7 k
Arduino Board
5V
Pin 6
Pin 11
GND
08.04.2013
HAW - Arduino
35
+12 V
VCC (from USB)
M
4,7 k
1N4148
Arduino Board
5V
1 k
Pin 6
BD139
Pin 11
GND
08.04.2013
HAW - Arduino
36
PWM Output
Pulse Width Modulation
Characteristics:
Pulse width range HIGH
level
Pulse period
width
LOW
Voltage levels
period
Average is like an analog voltage UAV
UAV = width/period *(HIGH LOW) + LOW
For PWM use the analogWrite() instruction
08.04.2013
HAW - Arduino
37
Analog Input
The ATmega 168 has 6 ADC inputs
The maximum input range
is from 0 V to 5 V
The resolution is 10 bit
(1024 values)
The reference voltage is variable
08.04.2013
HAW - Arduino
38
The ADC of the Arduino
Determine the function: SerialOut = f(UIN, UREF)
0 UIN UREF
UREF : 1.1 V, 3.3 V and 5 V
analogReference(type)
Description
Configures the reference voltage used for analog input. The analogRead() function will
return 1023 for an input equal to the reference voltage. The options are:
DEFAULT: the default analog reference of 5 volts.
INTERNAL: an built-in reference, equal to 1.1 volts on the ATmega168 and 2.56 volts on the
ATmega8.
EXTERNAL: the voltage applied to the AREF pin is used as the reference.
Parameters
type: which type of reference to use (DEFAULT, INTERNAL, or EXTERNAL).
08.04.2013
HAW - Arduino
39
External UREF
3,3 V
4,7 K
08.04.2013
HAW - Arduino
40
Characteristics of the Voltmeter
High-impedance input
Input-range: -5 V to + 5 V
UREF = 5 V
Output on LCD :
+ 2 . 7 3
08.04.2013
- 8 7 6
HAW - Arduino
m V
41
Blockdiagram of the Voltmeter
UIN
08.04.2013
Pre-Amp
Protection
Circuit
HAW
Arduino
HAW -- Arduino
Arduino
LCD
42
Pre-Amplifier (Level-Shifter)
08.04.2013
HAW - Arduino
43
Calculation of the PreAmp
08.04.2013
HAW - Arduino
44
Pre-Amplifier (Level-Shifter)
08.04.2013
HAW - Arduino
45
Protection Circuit
5V
Arduino Board
1 K
BAT 85
Pin 2
U
OUT
08.04.2013
BAT 85
HAW - Arduino
470 nF
46
Connection of the LCD-Module
08.04.2013
HAW - Arduino
47
Pins of the Adaptor
08.04.2013
LCD-Module
24-Pin-Socket
Description
Symbol
12
GND
VSS
24
+5V
VDD
N.C.
Contrast 0,3 1,2 V
VEE
H = Data / L = Command
RS
H = Read / L = Write
R/W
Enable
N.C.
LSB (8 Bit)
D0
N.C.
D1
N.C.
D2
10
N.C.
D3
11
14
12
15
D5(D1)
13
16
D6(D2)
14
17
LSB (4 Bit)
MSB
HAW - Arduino
D4(D0)
D7(D3)
48
Program Example for the LCD-Module
LiquidCrystal Library
This library allows an Arduino board to control
LiquidCrystal displays (LCDs) based on the XXX
chipset, which is found on most text-based
LCDs. The library works with in either 4- or 8bit mode (i.e. using 4 or 8 data lines in addition
to the rs, rw, and enable control lines).
Note: We use 4-bit mode.
Function
LiquidCrystal()
clear()
home()
setCursor()
write()
print()
08.04.2013
HAW - Arduino
49
The Voltmeter
Power Supply
Input Voltage
Generation of
the Input Voltage
Protection Circuit
Pre-Amplifier
08.04.2013
Arduino and Display
HAW - Arduino
50
08.04.2013
HAW - Arduino
51
Characteristics of the Thermometer
NTC:
Temperature / C
Resistor / k
27,25
50
4,162
100
0,949
Input-range: 0 C to 100 C
Buzzer alarm, if temperature encreases 90 C
Output on LCD :
4 2
C
1 0 8
08.04.2013
HAW - Arduino
52
Tasks for the Thermometer
Download the datasheet of the NTC-resistor
Linearize the characteristic of the NTC in the
range from 0 C to 100 C by connecting a
serial resistor RL = R50 of the NTC.
R
Develop the resulting characteristic mL
R RL
Substitute the resulting characteristic by a
straight line mT = f()
08.04.2013
HAW - Arduino
53
08.04.2013
HAW - Arduino
54
VCC (from USB)
Arduino Board
5V
R
LCD-Module
L
Pin 2
NTC
08.04.2013
GND
HAW - Arduino
55
Tasks for Analog Input and PWM Output
Dimm an LED with a potentiometer
Check the function of the multicolour LED
Write a program for controlling the colour of the
multicolour LED with a potentiometer
Control the rpm of the DC-motor with a
potentiometer
Sense the dark with the photoresistor
Write a program for the piezo buzzer to play a
melody
08.04.2013
HAW - Arduino
56
Notes
08.04.2013
note
frequency/Hz
period/s
261
3830
294
3400
329
3938
349
2864
392
2550
440
2272
493
2038
523
1912
HAW - Arduino
57
+12 V
VCC (from USB)
M
10 k
1N4001
Arduino Board
5V
1 k
Pin 6
BD139
Pin 2
GND
08.04.2013
HAW - Arduino
58
VCC (from USB)
Arduino Board
5V
R
220
L
Pin 2
GND
08.04.2013
HAW - Arduino
59
Piezo Buzzer as Sensor
Introduction
Piezo buzzers exhibit the reverse piezoelectric effect.
The normal piezoelectric effect is generating electricity
from squeezing a crystal.
Can get several thousand volts, makes a spark
Piezo Knock Sensor
To read a piezo you can connect it to an analog input, but: - You
need to drain off any voltage with a resistor
The protection diodes inside the AVR chip protect against the high
voltage
Tasks
Piezo-sensor: input value -> serial out
Piezo-sensor: input value -> buzzer frequency
08.04.2013
HAW - Arduino
60
VCC (from USB)
Arduino Board
5V
Pin 2
1 M
08.04.2013
GND
HAW - Arduino
61
Servo Motor
Servos are DC motors with built in gearing and feedback control
loop circuitry.
Servo Wiring
All servos have three wires:
Black or Brown is for ground.
Red is for power (~4.8-6V).
Yellow, Orange, or White is the signal wire (3-5V).
Tasks
Pot position 0180 to servo position and LCD
Railroad crossing barrier
Railroad crossing sign (blinking, beep)
08.04.2013
HAW - Arduino
62
Library for the Servo Motor 1
Servo library
This library allows an Arduino board to control RC servo motors. Servos have integrated
gears and a shaft that can precisely controlled. Standard servos allow the shaft to be
positioned at various angles, usually between 0 and 180 degrees. Continuous rotation
servos allow the rotation of the shaft to be set to various speeds.
As of Arduino 0017, the Servo library supports up to 12 motors on most Arduino boards
and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables
analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on
those pins. On the Mega, up to 12 servos can be used without interfering with PWM
functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.
In Arduino 0016 and earlier, the Servo library uses functionality built in to the hardware,
and works only on pins 9 and 10 (and does not work on the Arduino Mega). In this case,
if only one servo is used, the other pin cannot be used for normal PWM output with
analogWrite(). For example, in Arduino 0016 and earlier, you can't have a servo on pin 9
and PWM output on pin 10.
08.04.2013
HAW - Arduino
63
Library for the Servo Motor 2
Circuit
Servo motors have three wires: power, ground, and signal. The power wire is typically
red, and should be connected to 5V power supply. The ground wire is typically black or
brown and should be connected to a ground pin. The signal pin is typically yellow,
orange or white and should be connected to a digital pin on the Arduino board. Note
servos draw considerable power, so if you need to drive more than one or two, you need
a separate power supply (not the +5V pin on your Arduino!).
Functions
attach()
write()
read()
attached()
detach()
08.04.2013
HAW - Arduino
64
Program Example for the Servo Motor
// Sweep
// by BARRAGAN <http:
//barraganstudio.com>
#include <Servo.h>
Servo myservo;
int pos = 0;
// create servo object to control a servo
// variable to store the servo position
void setup()
{
myservo.attach(9);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
08.04.2013
// attaches the servo on pin 9 to the servo object
// goes from 0 degrees to 180 degrees
// in steps of 1 degree
// tell servo to go to position in variable 'pos'
// waits 15ms for the servo to reach the position
// goes from 180 degrees to 0 degrees
// tell servo to go to position in variable 'pos'
// waits 15ms for the servo to reach the position
HAW - Arduino
65
VCC (from USB)
+5 V
red
10 k
Arduino Board
Servo
5V
Pin 6
orange
Pin 2
brown
GND
08.04.2013
HAW - Arduino
66
Sensors and Actors
Switches
Potentiometer
Temperature Sensor
Photoresistor
Piezo
LCD
Relay
Transistor
LED
DC-Motor
Servo-Motor
Buzzer
08.04.2013
HAW - Arduino
67
Special Sensors
Triple Axis Accelerometer ADXL335
Piezo Vibration Sensor
Reed Switch and Magnet
Force sensitive Resistor
PIR Motion Sensor
Ultrasonic Rangefinder Maxbotix LV-EZ1
Humidity Sensor HIH-4030
IR Receiver TSOP85
Photocell and Optical Detector/Phototransistor
Flex Sensor
SoftPot
08.04.2013
HAW - Arduino
68