domingo, 10 de diciembre de 2017

Servomotores & Arduino SG90 MG90 MG995 MG996



Un servomotor es un dispositivo electromecánico el cual es capaz de ubicarse y mantener una posición que le ordenemos por medio de una señal externa. Esta clase de dispositivos funciona por medio de un motor, un circuito de control, un sistema de retroalimentación y, algunas veces, una caja reductora.


Existen en el mercado muchos modelos de servomotores, desde grandes servomotores trifásicos hasta pequeños, usados en aeromodelismo. En el presente tutorial mostraremos cómo usar los servomotores más usuales con Arduino.

Lo primero que debes saber es que todo servomotor para su funcionamiento necesita, una señal con la que le indiques la posición que quieres que adopte y una alimentación, de ahí que la todos tienen 3 cables, como mínimo. Para conseguir que el motor adopte la posición que nosotros deseamos, debemos proveerle de una señal de PWM a través del pin de señal, siendo el ancho de pulso proporcional al ángulo en que se debe ubicar con respecto al ángulo cero.

Controlar un servomotor con Arduino puede ser logrado en realidad de una forma sencilla diseñando un programa que asigne a cada ángulo un ancho de pulso, sin embargo desperdiciaríamos un poco nuestro tiempo dado que existe una librería estándar para Arduino que nos permiten el control de los servomotores de una forma mucho más sencilla.

Con esta librería seremos capaces de controlar casi cualquier servomotor, realizando sólo algunos pequeños ajustes para el caso de servomotores especiales, como aquellos que son capaces de girar 360 grados, para los servomotores más comunes: Sg90, Mg90s, S3003 y para la mayoría de los servos comerciales, podemos usar exactamente el mismo código. Debemos señalar que no debemos alimentar nunca ningún servomotor desde nuestro Arduino o podríamos causar daños irreparables.

¿Cómo controlar un servomotor con Arduino?

Lo primero que debes hacer es añadir a tu programa la librería: “Servo”, luego de lo cual aparecerá en la parte superior de tu programa la palabra: “#include <Servo.h>” (esta librería viene ya incluida en el IDE de Arduino). Una vez hecho esto seremos capaces de usar todos los comandos de la librería, la lista completa y la explicación de cada uno de los comandos se encuentra en la página de referencia de Arduino (link), sin embargo a continuación te explicaremos los comandos más básicos y su uso más simple:

·         Servo: Servo es un tipo de dato creado para manejo interno de la librería. Lo primero que debemos definir en nuestro programa es una variable del tipo Servo, ésta definirá nuestro objeto a controlar, definiremos una variable diferente por cada servo que queramos controlar, como ejemplo a continuación llamaremos a nuestro servomotor “myservo”, con el finde definir las demás funciones.

·         .attatch(): Debemos llamar a esta función de acuerdo a la forma como hemos nombrado a nuestro servo, en nuestro caso debe ser: “myservo.attatch(x)”, donde la “x” representa el pin donde conectamos el pin de señal de nuestro servomotor.

·         .write(): Debemos llamar a esta función de acuerdo a la forma como hemos nombrado a nuestro servo, en nuestro caso debe ser: “myservo.write(x)”, donde la “x” representa el ángulo donde queremos que se ubique nuestro servomotor.

·         .read(): Lee el ángulo en que se encuentra el servomotor de acuerdo al último valor que le ordenamos con la función “myservo.write()”, debemos llamar a esta función de acuerdo a la forma como hemos nombrado a nuestro servo, en nuestro caso debe ser: “myservo.read().

Esquema de conexión con Arduino:



Ejemplo de código Arduino

Para el presente ejemplo usaremos el ejemplo “Sweep” incluido en la librería misma, para esto, conectaremos nuestro servomotor al pin 9 del Arduino y cargamos el porgrama:


#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

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 >= 0; 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
  }
}


Una vez cargado, podremos observar que el servo se mueve desde el ángulo 0 hasta 180 y luego regresa, repetitivamente.



FIN DEL POST

0 comentarios:

Publicar un comentario

Display matricial 8x8 con Arduino SPI y MAX7219

La matrices led de 8x8 son elementos extremadamente útiles para desplegar mensajes que puedan ser visibles desde la distancia. ...