CONTACTO

Encuentra información referente a la programación, diseño gráfico, electrónica y mucho más, la página está pensada para compartir contenido educativo relevante coadyuvando a su aprendizaje diario.


Controlar servomotor con Arduino

Controlar un servomotor con Arduino es muy fácil, ya que tiene una librería preinstalada en el IDE de Arduino para el manejo de estos servos, con esta librería podemos mover y detener en cualquier momento un servomotor, además de controlar los grados de posición del servo.

El uso de estos servomotores con Arduino nos da la posibilidad de realizar múltiples proyectos como brazos robóticos, domótica, sistemas automatizados, etc., sin la necesidad de tener conocimientos profundos sobre la electrónica.

¿Qué es un servomotor?

Un servomotor no es más que un motor de corriente continua con una caja reductora y su respectivo controlador electrónico que nos da la posibilidad de posicionar su eje en grados según lo necesitemos, teniendo un rango de trabajo de 180 o 360 grados, según el tipo de servomotor que usemos.

¿Cómo funciona un servomotor?

Estos servomotores funcionan con señales PWM o modulación de ancho de pulso, con el cual podemos variar la posición del eje del servomotor modificando el ancho del flanco de subida de su ciclo de trabajo, que generalmente es de 20 ms, es decir si nuestro ciclo de trabajo es de 20 ms, esto nos da un límite para trabajar con el servo, el flaco de subida no pude durar más 20 ms, esto normalmente no ocurre puesto que los servomotores tiene un rango de trabajo que varía entre 0,5 ms y 2,5ms, lo que quiere decir que el flaco de subida debe estar dentro este rango, si configuramos nuestro servo a 0,5 ms el servomotor se posicionara a 0 grados y 2,5 ms se posicionara a 180 grados, y la división de la diferencia entre estos números representara el restos de los valores en grados que el servomotor puede trabajar, estos datos no es el mismo para todos, suele variar según el fabricante, por lo cual se recomienda consultar la hoja de datos del servomotor que vayamos a utilizar.

Controlar servomotor con Arduino Creatividad Codificada

Conexión de un servomotor

Un servomotor normalmente presenta tres cables, donde dos son de alimentación y el restante es utilizado para recibir la señal PWM, los colores de los cables cambian según el fabricante, pero en la mayoría de los casos el cable que recibe la señal PWM es de color amarillo, naranja o blanco.

Controlar servomotor con Arduino
Creatividad codificada

Librería servo de Arduino

Según la documentación oficial de Arduino indica que podemos controlar 12 servomotores en la mayoría de las placas de Arduino, en el caso de Arduino Mega podemos controlar hasta 48 servomotores, debemos tomar en cuenta que esta librería hace uso del Timer 2 de 16 bits lo que quiere decir que no podemos realizar ninguna operación con este Timer,  si quieres aprender más sobre Timers entra en este <<ENLACE>>

Para usar esta librería debemos incluir la siguiente instrucción

#include <Servo.h>

Cuando incluimos la librería “servo” de Arduino podemos ya usar todas las funciones disponibles en esta librería y así poder controlar servomotores con Arduino de una manera más sencilla y rápida.

Funciones de la librería servo de Arduino

Para utilizar estas funciones previamente debemos declarar un objeto del tipo servo con el nombre que deseamos nombrar a nuestro servo.

Servo servo1;

Con estas funciones podremos realizar prácticamente cualquier proyecto con Arduino que incluya el manejo de servomotores, estas funciones son las siguientes:

servo1.attach()

Esta función nos permite declarar el pin que vamos a utilizar para manejar nuestro servomotor en Arduino y el ancho de pulso mínimo y máximo del flaco de subida, esta función puede tener uno o tres parámetros, el primer parámetro se usa para declarar el pin que vamos a usar, el segundo y tercer parámetro se usa para declarar el ancho de pulso mínimo y máximo soportado por nuestro servomotor, estos datos se la mide en microsegundos y la podemos obtener en la hoja de datos de nuestro servomotor, estos datos son necesarios para calibrar de manera correcta nuestro servomotor, en caso que no declaremos estos datos en los parámetros de esta función Arduino utilizara como ancho de pulso mínimo 544 que será usada para obtener 0 grados y 2400  como ancho de pulso máximo para obtener los 180 grados.

servo1.attach(pin, mínimo, máximo);
servo1.attach(9, 600, 2300);

servo1.write()

Esta función solo tiene un parámetro y se la usa para declarar el ángulo al cual queremos posicionar el eje de nuestro servomotor en Arduino, este valor puede variar entre 0 a 180 grados.

servo1.write(90);

servo1.writeMicroseconds()

Esta función nos da la facilidad de trabajar con el ancho de pulso de flanco de subida que trabaja nuestro servomotor, esto es útil para calcular el ángulo que deseamos en el eje de nuestro servomotor, estos datos son escritos en microsegundos, y se las obtiene en la hoja de datos de nuestro servomotor, por ejemplo si en la hoja de datos tiene un ancho de pulso de trabajo de 1000 a 2000 microsegundos, 1000 representara a 0 grados, 1500 representara a 90 grados y 2000 representara a 180 grados.

servo1.writeMicroseconds(1500); // el eje estará a 90 grados

servo1.read()

Como dice su nombre nos permite leer el ángulo actual del eje de nuestro servomotor en Arduino, esto nos da la posibilidad de realizar varios controles al ángulo que se esté ejecutando en ese mismo instante.

servo1.read();

servo1. attached()

Gracias a esta función podemos verificar si el pin está declarado para enviar la señal al servomotor, y así podemos realizar alguna tarea extra en caso que no esté declarado el pin parea enviar la señal al servomotor, esta función nos devuelve una variable booleana, donde “true” quiere decir que está declarado el pin y “false” en caso de no estar declarado.

servo1.attached();

servo1.detach()

Desvincula el pin asignado para enviar la señal al servomotor.

servo1.detach();

Control de dos servomotores con Arduino mediante un potenciometro y dos pulsadores

El ejercicio consiste en controlar un servomotor con un potenciometro y otro con dos pulsadores para cambiar los grados del eje del servomotor.

Materiales para controlar dos servomotores con Arduino

  • Arduino Uno o equivalente
  • 2 servomotores
  • 2 resistencias de 10 kΩ
  • Potenciometro de 10 KΩ
  • Cables lo necesario.

Circuito del proyecto

Controlar servomotor con Arduino
Creatividad codificada

Código fuente para controlar dos servomotores con Arduino mediante un potenciometro y dos pulsadores

/* AUTOR: CREATIVIDAD CODIFICADA
 *  www.creatividadcodificada.com
 *  NOMBRE DEL PROYECTO: Manejo de dos servomotres SG90 
 *  con Arduino
 *    
 *  ******* [SERVOMOTOR CON ARDUINO ] *******
*/ 
#include <Servo.h>
Servo servo1, servo2;
int gradosBoton = 90;
int pinPoten = 0;
int leerPoten;
int gradosPoten;

void setup() {
 //  Enviamos las señales a los servomotores por los pines 9 y 10
 // y los calibramos 
 servo1.attach(9,720,2250);
 servo2.attach(10,720,2250);
 // Configuramos los pines 4 y 5 como entradas 
 pinMode(4,INPUT);
 pinMode(5,INPUT);
}

void loop() {
  // Hacemos dos controles para saber cuando se acciona el pulsador 
  // y aumentar o reducir los grados del eje del servomotor  
 if(digitalRead(4) == HIGH)
  {
    gradosBoton++;
    if(gradosBoton>=180) gradosBoton = 180;
    servo1.write(gradosBoton);
    
  }
   
  if(digitalRead(5) == HIGH)
  {
    gradosBoton--;
    if(gradosBoton<=0) gradosBoton = 0;
    servo1.write(gradosBoton);
    
  }

  // Leemos la señal analogica del potenciometro 
  // y hacemos un mapeo para tener datos de 0 a 180  
  leerPoten = analogRead(pinPoten);
  gradosPoten = map(leerPoten, 0, 1023, 0, 180);
  servo2.write(gradosPoten);
  delay(60); 

  }
void sumarGrados()
{
  gradosBoton++;
  if(gradosBoton>=180)
  {
    gradosBoton=180;
    }
  }
void restarGrados()
{
  gradosBoton--;
  if(gradosBoton<=0)
  {
    gradosBoton=0;
    }
  }

1 comentario sobre: “Controlar servomotor con Arduino

Comentarios

Su dirección de email no sera publicado. Los campos obligatorios están marcados con *.