Introduction
A servo motor is a rotary actuator that allows for precise control of angular position. It consists of a suitable motor coupled to a sensor for position feedback.
Controlling Servo Angle
Servo is controlled on the concept of PWM (Pulse Width Modulation). The refresh interval (the minimum time to refresh servos in microseconds) is 20000, which means that the servo is refreshing at a frequency of 50Hz. For most of the servos, a certain range of PWM correspond to the range of angle servo can rotate. Minimum pulse width is the shortest time for the pulse has been HIGH and maximum pulse width is the longest time for which the pulse is HIGH. Hence if the range of motor angular position is from 0 to 180, then minimum pulse width corresponds to 0 and maximum pulse width corresponds to 180.
Controlling Servo using evive and Arduino IDE
evive has two dedicated servo motor outputs pins.
Signal pin of servo 1 is connected to digital pin 44 and servo 2 is connected to digital pin 45.
Circuit Diagram
In the following example, I will be showing you how to control servo through channel 1. Given below is the circuit diagram:
A Servo pin has three wires (Order to be connected in evive, left to right)
- Brown wire: GND
- Red wire: VCC
- Orange wire: Signal
Code for setting servo angle
There is a servo library which can be used to control the servo motor. The available functions are provided in the table below:
Function | Return data type | Comment |
---|---|---|
attach(int pin); | unit8_t | Attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure |
attach(int pin, int min, int max); | unit8_t | As above but also sets min and max values for writes |
detach(); | void | |
write(int value); | void | If value is |
writeMicroseconds(int value); | void | Write pulse width in microseconds |
read(); | Integer | Returns current pulse width as an angle between 0 and 180 degrees |
readMicroseconds(); | Integer | Returns current pulse width in microseconds for this servo (was read_us() in first release) |
attached(); | bool | Return true if this servo is attached, otherwise false |
In this example we will attach a servo motor and set the angle of the servo to 90 degrees.
[pastacode lang=”c” manual=”%2F*%0A%20*%20Setting%20Servo%20Angle%0A%20*%20%0A%20*%20Made%20by%20Pankaj%20Verma%0A%20*%2F%0A%20%0A%23include%20%3Cservo.h%3E%0A%0AServo%20servo_44%3B%0A%0Avoid%20setup()%7B%0A%20servo_44.attach(44)%3B%20%2F%2F%20init%20pin%0A%20servo_44.write(90)%3B%20%2F%2F%20write%20to%20servo%0A%7D%0A%0Avoid%20loop()%7B%0A%7D” message=”” highlight=”” provider=”manual”/]
Controlling Servo using Arduino Uno
Arduino uno has 6 PWM pins: 3, 5, 6, 9, 10, and 11 which provide 8-bit PWM output with the analogWrite() function.
We will controlling serov using Pin 3.
Circuit Diagram
A Servo pin has three wires (Order to be connected in evive, left to right)
- Brown wire: GND
- Red wire: VCC
- Orange wire: Signal
Code for setting servo angle
[pastacode lang=”c” manual=”%2F*%0A%20*%20Setting%20Servo%20Angle%0A%20*%20%0A%20*%20Made%20by%20Pankaj%20Verma%0A%20*%2F%0A%20%0A%23include%20%3Cservo.h%3E%0A%0AServo%20servo_3%3B%0A%0Avoid%20setup()%7B%0A%20servo_3.attach(3)%3B%20%2F%2F%20init%20pin%0A%20servo_3.write(90)%3B%20%2F%2F%20write%20to%20servo%0A%7D%0A%0Avoid%20loop()%7B%0A%7D” message=”” highlight=”” provider=”manual”/]