Arduino Servo Motor Controlling

Author : Dinesh Kumar Wickramasinghe

Introduction and Images

Hello friends, This tutorial is about controlling servo motors with your favorite Microrontroller board Arduino. Servo motor is an essential part of all robotics lovers for requirements like robotics arms controlling. And also you do not need any intermediate controller IC s when you are dealing with Arduino. That means you can directly connect your servo motor to Arduino.

Here are two images of my setup.

Since there are several websites on Internet which explains the functionality of the Servo motor, I am not going to explain it here (Please see the links provided in the end of this article). Giving you only the source code samples. This code is based on the Arduino official tutorial of Servo Motor controlling. You can also find these examples from the examples code library of Arduino IDE.

There are basically two examples called "Knob" and "Sweep"

The "Knob" example is to control the angle of the Servo by using a Potentio meter. Once you read the Potentio meter value using the analogRead() function, then you will get minimum of 0 and Maximum of 1023 values. But to set the servo angle, we need to pass a value between 0 and 180. So, to map the ranges, the code uses the map() function. Here is the schematic and the sketch (source code).

Arduino Servo Knob

/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott 

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Knob
*/

#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, 180);     // 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
}
                           

Other example is "Sweep". This example code will continuasly rotate the servo from 0 to 180 degrees and backwords. Below is the schematic and the source code for "Sweep".

Arduino Servo Sweep
/* Sweep
 by BARRAGAN 
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

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 >= 0; 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
  }
}
                        

If you have any comments or questions regarding this project, Please add them in below comments section.

Here are some good readings to improve your knowledge more.


Have a nice day!!

Comments Area
Add your questions and comments here. Comments will be published after the admin approval

 

Similar Projects

Go Top