Ir al contenido principal

Servomotor SG90 con joystick


Controlar Servomotor en Arduino con un joystick

El micro servomotor SG90 es un servomotor ideal para aprender los primeros pasos con servomotores en Arduino. Aquí podrás aprender a realizar la conexión de un servomotor con un joystick.


El rango de trabajo de este servomotor nos permite realizar posiciones de 0 a 180º, este solo nos permite girar con un ángulo aproximado a 180º. Al utilizar potencias muy bajas se puede conectar a la salida de 5V de nuestra placa Arduino.



El SG90 tiene una fuerza de 1,4 kg por centímetro aproximadamente, pero no debemos tomárnoslo al pie de la letra, ya intervienen otros factores.


Para esta práctica utilizaremos un elemento de control como un joystick analógico. Ya que este elemento de control nos permite utilizar el eje X, el eje Y y un botón, utilizaremos el eje X como principal. Si deseáramos añadir otro servomotor, se lo destinaremos al eje Y. También podríamos usar el botón como otro control, pero en este ejemplo solo haremos uso del pin X del joystick.

Características del servomotor

El SG90 se caracteriza por ser pequeño, ligero y barato, con estructura y componentes de plástico. Se suele utilizar en proyectos de electrónica para partes móviles con ejes. Especificaciones sg90:

Sus dimensiones son: 21,5 x 11,8 x 22,7mm y tiene un peso de 9 g tiene una fuerza por centímetro cuadrado de 1,4 kg.
Tiene un rango de movimiento de 0 a 180º, esto nos limita alcanzar algunos movimientos, para eso elegiríamos otro servomotor con esas características.
La alimentación del SG90 es de 4,8V a  7,2V.
Su velocidad es de 0,1 s/60º a  4,8V y 0,08 s /60º con 6V.

Comunicaciones 

Para que el Arduino sepa la posición del servomotor, este envía un pulso PWM así el tiempo de este  es equivalente a su posición en el eje. Esta señal tendrá entre 1 y 2ms y el tiempo total será de 20ms o 50 Hz, lo que nos permite cambiar la posición cada 20ms. Cada servo tiene sus tiempos y serán diferentes, este es del SG90.

Por ejemplo, si damos un pulso de 1ms posicionaremos el servo en 0º, o su lado derecho, le damos un pulso PWM de 1,5ms y se posicionará en 90º, o posición central, y si queremos posicionarlo en su lado izquierdo, daremos un pulso PWM de 2ms posicionándose en 180º.

Precio

Este servomotor es sencillo y con características reducidas comparado con servomotores como el MG90S, el MG996R o el SG9018

Al tener características técnicas muy básicas o reducidas suele encontrarse entre 1,30 € a los 4 € por unidad, aunque hay lotes de 10 unidades que rondan los 10-13 €. Este precio varía según la tienda que lo suministre. Podéis encontrar el SG90 en un paquete de 2 unidades por unos cuatro euros aproximadamente. Pero recomiendo, si vamos a utilizarlo en más ocasiones, adquirir un lote de 10 unidades, debido a que probablemente en un futuro sean necesarios más o pueden ser dañados.

Materiales 

  • Un servomotor SG90
  • Protoboard
  • Cables con pines macho
  • Joystick
  • Arduino UNO (recomendable)

Conexiones

El SG90 tiene 3 pines diferenciados por colores. Suelen ser naranja, rojo y marrón. Hay que recordar que si utilizamos una fuente de alimentación externa, conectemos todas las GND al mismo pin.











  • PWM - pin digital 9
  • Vcc +5V - 5v
  • GND - GND
  • GNG - GNG
  • +5V - +5V
  • Eje X - pin A1

Montaje

Realizaremos el montaje para 1 servomotor y control por joystick utilizando solo el eje X. No obstante, os dejaré anotaciones para que podáis modificar el código con su esquema para poder instalarlo con un segundo servomotor y utilizar cada uno de ellos con un eje del joystick.
Las salidas del joystick son salidas analógicas.

Un servomotor más joystick:

Resultado:





Dos servomotores más joystick con dos ejes:

En este caso el pin eje Y se conectara con A2

Código

Este código lo he modificado para utilizarlo con los dos montajes. En el caso del montaje de dos servomotores deberemos borrar las barras laterales ( //) para permitir que lea las órdenes.
Para poder utilizar el servomotor deberemos instalar la librería Servo.h.

#include <Servo.h>         
Servo servo1; 
//Servo servo2;
int angulo1 = 0;
//int angulo2 = 0;
int Eje_X = A1;
//int Eje_Y = A2;
void setup()
    {
        servo1.attach(9); 
        //servo2.attach(10);  
    }

void loop(){
    {
        angulo1  = map( analogRead(A1), 0, 1024, 0, 180);
        servo1.write(angulo1);
    }
//{
  //angulo2  = map( analogRead(A2), 0, 1024, 0, 180);
  //servo2.write(angulo2);
//}
}

Comentarios