living with the lab - Louisiana Tech University

Download Report

Transcript living with the lab - Louisiana Tech University

living with the lab
Using Hobby Servos with the Arduino
© 2012 David Hall
living with the lab
DISCLAIMER & USAGE
The content of this presentation is for informational purposes only and is intended only for students
attending Louisiana Tech University.
The author of this information does not make any claims as to the validity or accuracy of the information
or methods presented.
Any procedures demonstrated here are potentially dangerous and could result in injury or damage.
Louisiana Tech University and the State of Louisiana, their officers, employees, agents or volunteers, are
not liable or responsible for any injuries, illness, damage or losses which may result from your using the
materials or ideas, or from your performing the experiments or procedures depicted in this presentation.
If you do not agree, then do not view this content.
The copyright label, the Louisiana Tech logo, and the “living with the lab” identifier should not be removed
from this presentation.
You may modify this work for your own purposes as long as attribution is clearly provided.
2
living with the lab
wires to power & control servo
white = signal
red = 5V
black = Gnd
output shaft
3
living with the lab
servo components
1. small DC motor
2. gearbox with small plastic gears to reduce the RPM and increase output torque
3. special electronics to interpret a pulse signal and deliver power to the motor
4
living with the lab
types of servos
continuous rotation
can rotate all the way around in either direction
pulse tells servo
which way to spin & how fast to spin
standard
can only rotate 180 degrees
pulse tells servo
which position to hold
5
living with the lab
Arduino programming
these lines of code make the servo go full speed counter clockwise
void loop()
{
digitalWrite(3, HIGH);
delayMicroseconds(1700);
digitalWrite(3, LOW);
delay(20);
}
// hold pin 3 high for 1700μs or 1.7ms
// hold pin 3 low for 20ms
full speed
clockwise
voltage (V)
pulse width varies between 1.3ms and 1.7ms
full speed
counter clockwise
5V -
20ms
0V -
time (milliseconds)
pulse
width
(μs)
servo action
1300
full speed CW
1400
½ speed CW
1500
stopped
1600
½ speed CCW
1700
full speed CCW
speed not linear with pulse duration
6
living with the lab
wiring servo to breadboard
Since the servos will likely be hooked up for a while, it is worthwhile to keep the wiring
tidy, cutting short jumpers from the power bus.
The red wire from the power bus should go back to Vin or 5V, and the black wire should
go back to Gnd.
7
living with the lab
playing around with programing
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
int i;
for (i=0; i<200; i++) {
digitalWrite(3, HIGH);
delayMicroseconds(1300);
digitalWrite(3, LOW);
delay(20);
}
delay(1000);
for (i=0; i<400; i++) {
digitalWrite(3, HIGH);
delayMicroseconds(1700-i);
digitalWrite(3, LOW);
delay(20);
}
}
“for” loop executes 200 times
i = 0, 1, 2, 3, 4, . . . 199
create a square wave with a pulse width
of 1300ms followed by a 20ms pulse
wait one second
this for loop causes the servo to go from
full speed CCW (pulse width = 1700ms) to
full speed CW (pulse width = 1300ms)
8