Sunteți pe pagina 1din 20

Arduino

Week 2 Lab
ECE 1020
Prof. Ahmadi

Objectives
1.

Control the rotation of standard servo motor

2.

A standard servo motor is limited in its rotation


between 0 and 180 degrees

Control the speed of a continuous rotation servo


motor based on the light intensity

A continuous rotation servo motor can rotate freely


without restriction

Introduction to Servos

A servo is a small, electrically-driven motor that provides


rotary actuation
Servos are controlled by using Pulse-Width Modulation
(PWM)
The duration of a voltage pulse determines how far the
shaft will turn (i.e. the angle)
Servos will not hold their position indefinitely, so the
position pulse must be sent repeatedly
The holding force of a servo is determined by its torque
rating

PWM Generation
There

are 2 different ways in which you can


generate a PWM signal
1.
2.

Use the built-in PWM pins on the Arduino where you


only need to set the duty cycle
Manually generate one by alternating voltage HIGH
and LOW with specified delays

Both

methods are outlined next, you may choose


whichever one you would like to use

Part 1 Controlling Servo


Rotation (Built-in PWM)
int servoPin = 5;
int location = 100;
int inc = 5;
void setup()
{
pinMode(servoPin, OUTPUT);
}
void loop()
{
analogWrite(servoPin, location);
delay(50); //wait 50 ms

//variable to store the servo pin number


//variable to store the PWM value

//set the servo pin as an output

//send PWM value to motor

location=location+inc; //add 5 or -5 to location value


if(location==255) inc=-5;
if(location==100) inc=5;
}

Part 1 Schematic (Built-in


PWM)
Standard servo

Part 1 Controlling Servo


Rotation (Manual PWM)
int servoPin = 4;
int pulse = 500;
void setup()
{
pinMode(servoPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulse);
digitalWrite(servoPin, LOW);
delay(45);
}

//variable to store the servo pin number


//variable to store the pulse duration

//set the servo pin as an output


//set serial data transfer rate

//send 5V to the servo


//for pulse microseconds
//send 0V to the servo
//for 45 microseconds

You can change the duration of the pulse to vary the servos rotation angle.

Part 1 Schematic (Manual


PWM)
Standard servo

Part 1 Board Layout

Servo
motor
Pin 4
5V
Ground

Servo
connector

How to read a light sensor


[What is a light sensor?]
The

light sensor we are using is the same one we


used when working with the Lego Botball robotics
kit.
Light sensor is a photoresistor, also known as a light
dependent resistor.
A photoresistor is a sensor whose resistance varies
with light intensity. Most decrease in resistance as
the light intensity increases.

How to read a light sensor


[How to connect it?]
The

sensor is connected in series with a resistor


Both of which are between the +5V terminal of the
Arduino and the Ground terminal
They form a Voltage Ladder
The data we want comes from the voltage at the
point of connection between the sensor and
resistor [This is what will change in response to light]

Reading the Light Sensor


int sensorPin = A0;
int sensorValue = 0;
void setup()
{
Serial.begin(9600);
}
void loop()

//variable to set the sensor input pin

//set serial data transfer rate

{
sensorValue = analogRead(sensorPin); //read the value from the light sensor
Serial.print ("Sensor value = "); //print the sensor value to the computer screen
Serial.print(sensorValue);
Serial.println(";");
//"printLN" creates a new line
}

On your keyboard, press Ctrl+Shift+M after uploading your program to open the
serial communication dialog.

Light Sensor Schematic

Board Layout
Pin A0
Light sensor

5V

Light sensor connector

Resistor

Ground

Now lets combine the light


sensor with a servo motor to
build a light-sensitive servo that
rotates at speeds proportional
to the light intensity.

Part 2 Controlling Servo Rotation Speed


as a Function of Light Intensity (1)
int sensorPin = A0;
int outPin = 5;
int sensorValue = 0;
int m = 0;

void setup()
{
Serial.begin(9600);
pinMode(outPin, OUTPUT);
}

//variable to set the sensor input pin


//variable to store the output pin
//variable to store the value coming from the sensor
//variable to store the motor signal (i.e. the voltage)
//voltage controls the speed of a continuous servo

//set serial data transfer rate


//set the output pin as an output

Continued on next slide

Part 2 Controlling Servo Rotation Speed


as a Function of Light Intensity (2)
void loop()
{
sensorValue = analogRead(sensorPin);
Serial.print ("Sensor value = ");
Serial.print(sensorValue);
Serial.print(";");
m = map(sensorValue, 0, 1023, 0, 255);
analogWrite(outPin, m);

Serial.print ("m = ");


Serial.print(m);
Serial.println(";");

//read the value from the light sensor


//print the sensor value to the computer screen

//convert sensorValue to motor signal


//PWM output is from 0-255
//send the motor signal to the servo
//print the motor signal to the computer screen

Part 2 Schematic
Continuous rotation servo

Part 2 Board Layout


Light sensor connector
Light sensor

Servo
connector

Servo
motor

Pin A0

5V

Resistor

Pin 5

Ground

Command Reference

pinMode(pin,mode) configures the pin to behave either as an


input or an output
Serial.begin(speed) sets the data transfer rate for serial
communication
digitalWrite(pin,value) sets the specified pins voltage to HIGH
(5V) or LOW (0V)
delay(ms) pauses the program for the specified amount of
time in milliseconds
analogRead(pin) reads the value from the specified pin; maps
voltage from 0V to 5V into integer values between 0 and 1023
map(value, fromLow, fromHigh, toLow, toHigh) maps the
values in the from range to the to range
Serial.print() writes data to the computer in ASCII text format
http://arduino.cc/en/Reference/HomePage

S-ar putea să vă placă și