Overview
In this lesson, we’ll show how to control SG90 servo using Raspberry Pi.
Hardware Preparation
1 * Raspberry Pi
1 * Breadboard
1 * SG90 servo motor
Jumper wires
1 * T-Extension Board
1 * 40-Pin Cable
Work Principle
A SG90 is a servo which can rotate approximately 180 degrees. It consists of a DC-motor, position system and gears. there are three wires: the red wire is connected to power, the brown wire is connected to Ground, the yellow wire is connected to PWM Signal. The rotate angle is determined by the equation:
DutyCycle=PulseWidth/Period
Period=1/Frequency
so
DutyCycle=PulseWidth/(1/Frequency)=PulseWidth*Frequency
Circuit Graph:

Sample code
For C language user, please take steps as following:
For Raspbian OS, there is a software module called Servoblaster which provides an interface to drive multiple servos via the GPIO pins. In additional ,it can send PWM Signal. In this project we’ll use ServoBlaster to drive SG90 servo. learn more about ServoBlaster, please visit here.
1) We need install the ServoBlaster module firstly,
cd ~
git clone https://github.com/richardghirst/PiBits
cd PiBits/ServoBlaster/user
make
sudo make install
Note: If display error message”servod:cannot parse the hardware name string”, please open file /PiBits/ServoBlaster/user/servod.c, then find code line960, change the code”else if (strstr(modelstr, “BCM2709″)” to
else if (strstr(modelstr, “BCM2709”) || strstr(modelstr, “BCM2835”)), then repeat above steps.
Check the ServoBlaster is installed succesfully by typing following command:
ls /dev/servoblaster
2) Download sample C code to /home/pi by typing following terminal command:
cd ~
sudo wget https://osoyoo.com/driver/pi3_start_learning_kit_lesson_12/servo.c
Note:
If you want to customize the sample code file , you can use nano editor to edit source code by typing following command in terminal:
sudo nano servo.c
2) Compile Code
gcc -Wall -o servo servo.c
4) Run program
sudo ./servo
5) Running result
Once run the program, the servo motor will go to centre position, that is 90 degree.
C Sample Code Analysis:
#include < stdio.h >
#include < stdlib.h >
#include < unistd.h >
int main()
{
// run servo program
system("sudo /home/pi/PiBits/ServoBlaster/user/servod --pcm");
printf("\n");
while(1)
{
printf("\n");
printf("--------------------------------------->\n");
system("echo 0=50 > /dev/servoblaster");//go to 0 degree
printf("0 degree\n");
sleep(1);
system("echo 0=150 > /dev/servoblaster");//go to 90 degree
printf(" 90 degree\n");
sleep(1);
system("echo 0=250 > /dev/servoblaster");//go to 180 degree
printf(" 180 degree\n");
sleep(1);
}
return 0;
}
However it would be better to control servo by using shell script. for more information about shell script, please visit Here. Next we’ll present a shell script example:
1) Download sample code servo.sh from osoyoo.com by typing following commands in terminal:
cd ~
sudo wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_12/servo.sh
If you want to customize the sample code file , you can use nano editor to edit source code by typing following command in terminal:
nano servo.sh
3) Change shell script permissions
sudo chmod 777 servo.sh
4)Run shell script by typing following terminal command:
./servo.sh
5) Running result
Once run the program, the servo will go to 90 degree position fistly, then go to 0 degree position, then from 0 go to 180 degree position, and finnally go to 90 degree position.
Shell script example Analysis:
#!/bin/bash
echo 'Program is running,Press Ctrl+C to end the program'
i=50
#run servod program
sudo ~/PiBits/ServoBlaster/user/servod --pcm
#go to centre position
echo 0=150 > /dev/servoblaster
#delay 1s
sleep 1
#hile loop
while [ $i -ne 250 ]
do
#go to $i position
echo 0=$i > /dev/servoblaster
sleep 0.1
#i+2
i=$(($i + 2))
done
#finally go to centre position
echo 0=150 > /dev/servoblaster
For python user, please take steps as followed:
1) Download the sample python code from osoyoo by typing folloing terminal command:
cd ~
sudo wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_12/servo.py
2)Run the program
sudo python servo.py
3) Running result
Once run the program, the terminal will show print message as code firstly. the servo will go to to 90 degree position firstly, then it will go around among 0, 90, 180 degree position.
Python code Analysis
import os
import time
#run servod program
os.system('sudo /home/pi/PiBits/ServoBlaster/user/servod --pcm')
#print message at the beginning ---custom function
def print_message():
print ('|**********************************|')
print ('| Servo test |')
print ('| ---------------------------- |')
print ('| Servo Connect to GPIO 7 |')
print ('| ---------------------------- |')
print ('| |')
print ('| OSOYOO|')
print ('|**********************************|\n')
print ('Program is running...')
print ('Please press Ctrl+C to end the program...')
pass
def main():
#print info
print_message()
while True:
#go to 0 degree(left position)
os.system("echo 0=50 > /dev/servoblaster")
print('\n')
print('------------------------------------->')
print('0 degree')
time.sleep(0.5)
#go to 90 degree(middle position)
os.system("echo 0=150 > /dev/servoblaster")
print(' 90 degree')
time.sleep(0.5)
#go to 180 degree(right position)
os.system("echo 0=250 > /dev/servoblaster")
print(' 180 degree')
time.sleep(0.5)
# if run this script directly ,do:
if __name__ == '__main__':
try:
main()
#when 'Ctrl+C' is pressed,child program destroy() will be executed.
except KeyboardInterrupt:
pass
DownLoad Url osoyoo.com
You must be logged in to post a comment.
hi can you help me I have checked and dont see any /dev/servoblaster in my file
hi can you help me I have checked and don’t see any “/dev/servoblaster” in my file