Introduction
In this tutorial we will control the position of a RC (hobby) servo motor with a Joystick.
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.
Control 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
A Joystick have 5 pins:
- Ground
- 5V
- VRx: X position connects to Analog pin 0
- VRy: Y position
- SW: Z press
How Joystick works?
Joystick has 2 potentiometers and a switch.
A potentiometer has a wiper sliding on a resistive strip. If the wiper is close to GND, it outputs 0V, and if it is close to VCC or 5V, it outputs 5V.
In Arduino IDE, if the wiper is close to GND you get 0 value and if it close to VCC, you get 1023. Hence you get approx. 512 when joystick is at default position.
Code
[pastacode lang=”c” manual=”%23include%20%3Cservo.h%3E%0A%0Adouble%20Angle%3B%0Adouble%20Potentiometer%3B%0AServo%20servo_3%3B%0A%0Avoid%20setup()%7B%0A%20Angle%20%3D%200%3B%0A%20pinMode(A0%2CINPUT)%3B%0A%20servo_44.attach%7B44)%3B%20%2F%2F%20init%20pin%0A%7D%0A%0Avoid%20loop()%7B%0A%20Potentiometer%20%3D%20analogRead(A0)%3B%0A%20Angle%20%3D%20((Potentiometer)%20*%20(180))%20%2F%20(1023)%3B%0A%20servo_44.write(Angle)%3B%20%2F%2F%20write%20to%20servo%0A%20delay(50)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]
Control 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 servo using Pin 3.
Circuit Diagram
Code
[pastacode lang=”c” manual=”%23include%20%3Cservo.h%3E%0A%0Adouble%20Angle%3B%0Adouble%20Potentiometer%3B%0AServo%20servo_3%3B%0A%0Avoid%20setup()%7B%0A%20Angle%20%3D%200%3B%0A%20pinMode(A0%2CINPUT)%3B%0A%20servo_3.attach(3)%3B%20%2F%2F%20init%20pin%0A%7D%0A%0Avoid%20loop()%7B%0A%20Potentiometer%20%3D%20analogRead(A0)%3B%0A%20Angle%20%3D%20((Potentiometer)%20*%20(180))%20%2F%20(1023)%3B%0A%20servo_3.write(Angle)%3B%20%2F%2F%20write%20to%20servo%0A%20delay(50)%3B%0A%7D” message=”” highlight=”” provider=”manual”/]