Arduino y Robótica son a día de hoy inseparables. Prueba de ello son los muchos proyectos arduino que circulan por Internet de brazos robóticos, vehículos, cuadrúpedos mecanizados, hexápodos, arañas futuristas, máquinas de vending, drones, robots de película… Pero, ¿como se consigue el movimiento? Gracias a los servos.

Miniservo HD-1180A de Power HD

Un servo, o servomotor, es un motor eléctrico que permite un giro controlado en velocidad y puede mantenerse en una posición fija. Es decir, podemos controlar a que velocidad gira y una vez completado el giro deseado mantenerlo en esa posición.

Hay muchos tipos de servo, en este caso estoy utilizando el miniservo md-1180a de PowerHD.

Para manejar el servomotor necesitamos conectarlo a 3 pines, positivo a 5v, tierra y un pin PWM, que simula una salida analógica. Este último es con el que controlamos el movimiento, en el ejemplo utilizamos el pin 6 de arduino para conectarlo.

PWD son las siglas de Pulse Width Modulation o Modulación por Ancho de Pulso. En el caso de Arduino UNO, los puertos PWD son 3, 5, 6, 9, 10 y 11, están marcados con el símbolo «~«.

Si queréis saber más de PWD podéis ir aquí: https://playground.arduino.cc/ArduinoNotebookTraduccion/Appendix3

Es más sencillo de lo que parece, veamos un código de ejemplo donde posiciona en 0º y en 180º alternativamente esperando un segundo entre cada movimiento.

// Incluimos lib para controlar servomotores
#include <Servo.h> 
// Declaramos variable de control del servo
Servo servo1;

void setup(){
  // Indicamos el pin de control del servo1, en nuestro caso el 6
  servo1.attach(6);
  // Ponemos el servo1 en posición 0
  servo1.write(0);
}

void test1(){  
  servo1.write(0);
  delay(1000);
  servo1.write(180);
  delay(1000);
}

test1();

A continuación otro ejemplo, paso controlado por todas las posiciones, en un sentido y en el opuesto:

// Incluimos lib para controlar servomotores
#include <Servo.h> 
// Declaramos variable de control del servo
Servo servo1;
 
void setup() {
  // Indicamos el pin de control del servo1, en nuestro caso el 6
  servo1.attach(6);
  // Ponemos el servo1 en posición 0
  servo1.write(0);
}

void rotap(int stepv){
  for (int i = 0; i <= 180; i++) {
    // posiciona servo1 en angulo i
    servo1.write(i);
    // pausamos "stepv" milisegundos:
    delay(stepv);
  }  
}

void rotan(int stepv){
  for (int i = 179; i >0; i--) {
    // posiciona servo1 en angulo i
    servo1.write(i);
    // pausamos "stepv" milisegundos:
    delay(stepv);    
  }  
}

void loop() { 
  // Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo
  rotap(20);
  rotan(20); 
}

Esto es todo por el momento, jugad un poco con el código a ver que pasa 😉

En breve veremos como combinar varios servos para hacer un sencillo brazo robótico.

Feliz día!

 

 

 

Deja tu comentario