In this instructable,
I am going to show you what a servo motor is, how to use it, and ideas
for starting projects using it. I used arduino to control my servo, I
added how to use a 555 in some of the later steps.
Step 1: What Is a Servo Motor
If
you are like me, then you knew very little about servo motors, and how
to use them, so we should start from the beginning. A Servo motor uses
pulse width modulation (pwm) from a microcontroller or a 555 timing IC
(or something different I haven't heard about) to know what position to
move its horn to. They can move both clockwise or counterclockwise
thanks to an H bridge which is hardwired into them. Most Servos, unlike
conventional electric motors do not move in continuous rotations. the
standard servo moves anywhere between 0 and 180 degrees, which make them
useful for animatronics and robotics. The servo has three wires coming
out of it which usually ends in a female jack. the wire colors are
black, which gets connected to ground, red which gets connected to the
positive power supply, and white or yellow which gets connected to the
output of the microcontroller or 555 IC, and receives the pwm. Okay now
that you know the basics, lets get started
Step 2: Testing the Servo
the first thing that
you should do is make sure your servo motor is working. because the
servos wires end in a female header, you cannot plug it into the arduino
(unless you have a shield. insert solid core wires into the headers, so
you can attach it to the pins of the arduino (or anything else). When
you downloaded your programming environment for arduino, it should have
two examples for the servo. The one we are going to use first is called
sweep. Go to the "open" icon next to save near the top of the window on
the environment. click on it, and a list of files should come up. go
down to the one that says servo, and put your mouse over it. two files
should come out of it. one called "sweep" and one called "knob". click
on the one called sweep, compile the code and upload it to your board.
if everything is connected correctly, the servo should begin to go back
and forth from 0 to 180 degrees. If you cannot find the code, copy this:
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
be sure to plug in the white wire to digital pin 9, the black wire to one of the ground pins on arduino, and the red wire to the 5v pin on the arduino board.
// Sweep
// by BARRAGAN <http://barraganstudio.com>
// This example code is in the public domain.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
be sure to plug in the white wire to digital pin 9, the black wire to one of the ground pins on arduino, and the red wire to the 5v pin on the arduino board.
Step 3: New Code
Now that you know
your servo works, you can begin to incorporate sensors into the mix. the
first thing you should do is use a potentiometer. Use anything between
10 and 100k. keep the servo attached as it was using the sweep example.
attach the top pin on the pot to 3.3v on the arduino. Connect the bottom
pin to ground on the board. Connect the center of wiper pin of the pot
to A0 (the first analog pin) on arduino. go to "open" on the IDE again.
Go to servo and open "Knob". compile the code and upload it to your
board. When the program is running you will be able to control the
position of the servo with a potentiometer. If you cannot find the code,
copy this:
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Step 4: Prepare the Sensor
The sensor that I used that would probably work very well was the QRD1114 reflective sensor which has a discrete infrared LED, and phototransistor. to get the sensor to work, you must connect it in a very specific way. you could use other reflective sensor, but this one just seemed convenient, and I am using it in another project so they are readily available for me.
to setup this sensor you will need:
one QRD-1114
one 10k resistor
one 68 or 100ohm resistor
wire
Step 5: Using the Sensor With the Servo
Now
that you have your sensor setup so that it will work for with arduino,
you can replace the pot with it to make a servo that moves when
something is in front of it and moves back when nothing is in front of
it. use the same code that you did for the potentiometer. but this time
instead of using the pot, connect pin one on the qrd to A0 on the
arduino board. connect the two resistors to 3.3v, and connect pin 4 and 2
on the qrd to the ground on the board. run the program and when there
is something about 1 cm from the sensor the motor will turn one way, and
when the object moves away from the sensor the servo will move back.
try adding a photo cell to make a light sensitive servo. using sensors
with the servo, you can make robots, animatronics, and more. Have fun!
Step 6: Using a 555 and a Potentiometer
this is a simple circuit using a 555 to control the servo with a potentiometer. The circuit was originally meant as a tone generator, but with some simple modifications it became a servo tester. follow the schematic and it should work, but if you have any questions or problems, leave a comment and I will try to help you.'
to make this circuit you are going to need:
-one 555 timer
-one .1 µf ceramic disk capacitor
-one 1k resistor
-one 100 ohm resistor
-one 100k potentiometer
- a lot of jumper wires
Step 7: Using a 555 and Push Buttons
I
like this 555 circuit more than the one that uses the pot. the servo
acts less spastic, and is easier to control. When you hit one button the
servo will go clock wise and when you hit the other button it will go
counter clock wise.
for this circuit you are going to need:
-one 555 timer
-one .1 µf capacitor
-one 1k resistor
-two 100 ohm resistor
-one 33k resistor
-two push buttons
build the circuit from the previous step accept do not add the pot, add the push buttons and resistors in place of it.
for this circuit you are going to need:
-one 555 timer
-one .1 µf capacitor
-one 1k resistor
-two 100 ohm resistor
-one 33k resistor
-two push buttons
build the circuit from the previous step accept do not add the pot, add the push buttons and resistors in place of it.
No comments:
Post a Comment