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.


Deja un comentario

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