Control a Servo with Arduino

Apply mechanical force with a servo and Arduino

Written By: Madeleine Schappi

Dash icon
Difficulty
Easy
Steps icon
Steps
17

Introduction

Servos are a basic component in many Arduino projects.

In this guide, we will learn how to switch on a servo, make it press a button, and take a photo with the micro servo and a 100% Arduino compatible development board, the Little Bird Uno R3.

Learning to control a servo motor will enable you to create all sort of projects, from robotic arms to DIY catapults and cocktail machines.

Step 1   Part 1

  • To start off we're going to hook our Servo up to our Arduino.
  • Once we've done this we'll create another circuit with our LDR/Photocell to catch Elves!

Step 2   Plug digital pin 9 into the servo

  • Plug Digital Pin 9 into the Servo's orange line.

Step 3   Plug 5V into the servo

  • Plug 5V into the Servo's red line.

Step 4   Plug Ground into the Servo

  • Plug Ground into the Servo's Black line.

Step 5   Upload the code

#include 

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(5);                       // waits 5ms 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(5);                       // waits 5ms for the servo to reach the position
  }
}
  • Load this code into your Arduino IDE
  • The servo should start swinging back and forth 180 degrees.
  • Now lets see if we can catch a Christmas Elf in action!

Step 6   Part 2

  • Now we're going to create a circuit and write some code that actuates the Servo when a change in light is detected.

Step 7   Insert 10K Resistor

  • Insert 10K Resistor into the Breadboard.

Step 8   Insert LDR into breadboard

  • Insert the LDR into Breadboard so that one leg is inline with our resistor.

Step 9   Connect Ground to the LDR

  • Connect Ground to the LDR

Step 10   Connect Analogue 0 to the LDR

  • Connect Analogue 0 to the LDR.

Step 11   Connect 5V to the 10k Ohm Resistor.

  • Connect 5V to the 10k Ohm Resistor.
  • Can you see the voltage divider we just made?

Step 12   Connect Digital Pin 9 to the Servo

  • Connect Digital Pin 9 to the Servo's orange signal pin.

Step 13   Connect the servo to ground

  • Connect the Servo to Ground

Step 14   Connect the Servo to 5V

  • Connect the Servo to 5V.

Step 15   Upload the code

#include 

Servo myservo;  // create servo object to control a servo
int ldr = 0;  //analog pin to which LDR is connected
int ldr_value = 0; //variable to store LDR values
int take_photo = 100; // value when we want to take a photo when a light comes on
int pos = 0;    // variable to store the servo position



void setup() {
Serial.begin(9600); //start serial Monitor
myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {

ldr_value = analogRead(ldr);
Serial.println(ldr_value); //prints photoresistor value
delay(100); // value updated every 0.1 second.

if (ldr_value < take_photo) // if sensor value is less than 100 it will turn the servo on.
   {
    //take photo

    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(5);                       // waits 5ms 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(5);                       // waits 5ms for the servo to reach the position
      }
      delay (10000);  //wait 10 seconds before checking again

    }
   else
   {
    Serial.println(ldr_value);
   }
}
  • Upload this code for turning the servo on when the light is bright.

Step 16   Use the Servo to Press a Button and Take a Photo

  • Now let's look at the light switching on and the servo pushing a button and taking a photo on my computer.

Step 17   Catching an Elf in the Act

  • Proof that the Elf in our house is up to mischief.
  • We caught him as he turned the light switch on
© 2021 Little Bird Electronics Pty Ltd.
Made with ❤️ in SYD. All prices inc GST. ABN 15 634 521 449. We're 🐥 @lbhq on Twitter.