Control de Servomotores con PWM y Arduino

Ya hemos presentado en el blog a Arduino (http://www.ikkaro.com/Tutoriales-basicos-arduino) y de hecho aparecen en varios proyectos entre ellos este (http://www.ikkaro.com/node/529)

Ahora vamos a avanzar un poco más y vamos a modular señales por ancho de pulso (PWM), esto nos puede servir por ejemplo para manejar servomotores como los presentados aquí (http://www.ikkaro.com/node/741) o leds rgb entre otros. Para el que no conozca que es PWM es una modulación que se le hace a una señal y que sirve para “transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga” (Wikipedia)

Los servomotores se controlan con 3 hilos: uno para el voltaje positivo, otro para el tierra y otro para la señal de control, que viene modulada en PWM.

Arduino por su lado tiene 6 salidas digitales que pueden actuar como salidas PWM (son los pines: 11, 10, 9, 6, 5, 4) y además una librería preparada para el manejo de servos. Por lo tanto, vamos a utilizar una de esas salidas para hacer nuestras primeras pruebas controlando un servomotor.

El código ejemplo de la librería servo de Arduino puede servirnos, conectamos el voltaje a 5v, masa a gnd y la señal de control del servomotor (que es la que viene modulada en PWM) a uno de los pines de arduino que tenga PWM, por ejemplo en este código al pin digital 9.

// Sweep
// by BARRAGAN <http://barraganstudio.com>

#include <Servo.h>
 
Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created
 
int pos = 0;    // variable to store the servo position
 
void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}
 
 
void loop()
{
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees
  {                                  // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable ‘pos’
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees
  {                               
    myservo.write(pos);              // tell servo to go to position in variable ‘pos’
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Este código nos permitiría hacer girar el servomotor de 0º a 180º y después de vuelta a los 0ª.

Proximamente más.

¿Todavía no tienes ni Raspberry Pi ni Arduino?
Indispensables para introducirte en el mundo del cacharreo. Un mundo nuevo se abrirá ante ti. CONSIGUE UNA YA!!
Raspberry Pi 3 Arduino

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *