epelpad

Arduino: Servomotor sin librería


Programacion

Shout GifGIF
Para comenzar en el mundo de la electrónica y robótica en la actualidad se utilizan bastante los dispositivos de la empresa Arduino para gente principiante, universitarios y estudiantes en general. Por lo tanto si quieres comenzar en el fascinante mundo de la programación y robótica vas por buen camino aprendiendo de estos dispositivos como son los microcontroladores.

pro

Shout GifGIF
Pero... ¿Qué es Arduino?

micro

librerias Antes de interiorizar en lo que a la programación se refiere debes tener en consideración qué es Arduino, es una empresa que fabrica tarjetas de desarrollo compuestas principalmente por un microcontrolador de la marca Atmel modelo 328p o algún derivado del mismo y además de un driver "FTDI" que permite la comunicación serial vía USB.

arduino Para poder usar sus tarjetas de desarrollo, debes tener en consideración que el dispositivo se programa en un código abierto desarrollado por el mismo fabricante de la tarjeta mediante el software "Arduino IDE".

servo

Shout GifGIF
¿Qué es un servomotor?

servoh

Arduino: Servomotor sin librería Un servomotor
es un dispositivo que posee la capacidad de girar su eje en cualquier posición de su rango de operación y además mantenerse estable en dicha posición. Cada ubicación que posea, será identificada en ángulos, por ejemplo, algunos servomotores poseen un rango operacional desde los -90° hasta los 90°.
Programacion Se controlan mediante la modulación de ancho de pulso o PWM
, es decir, que para ubicarlo en cierto ángulo hay que enviar ciertos pulsos y de esta manera se obtiene una posición, algunos fabricantes de la industria de los servomotores tienen predefinidos los anchos de pulsos para cada grado, en caso contrario, se debe calibrar la programación para los ángulos que se obtengan del servomotor.
uno

Shout GifGIF
PWM para Servomotores explicación

microcontrolador

micro Los fabricantes de servomotores, semiconductores y dispositivos electrónicos en general, siempre realizan un "datasheet" en donde se pueden ver las características técnicas del elemento adquirido. En el caso de los servomotores se puede visualizar los anchos de pulso requeridos para obtener ciertas posiciones.

librerias Para el siguiente servomotor:

arduino

servo El fabricante postula el siguiente datasheet


servomotor


servoh En la figura anterior el fabricante, indica que el servomotor posee 3 cables, uno positivo que debe estar conectado a 5v, otro negativo que deberá estar conectado a 0v y un pin de señal de color naranjo, que deberá estar conectado a una salida digital del arduino que se encargará de enviar los anchos de pulsos.

Arduino: Servomotor sin librería También el fabricante especifica que el servomotor necesita ciclos de 20ms (milisegundos) o 20.000us (microsegundos) en total y que según el ciclo positivo dentro de la cantidad de tiempo especificada anteriormente se obtendrá el ángulo. Todo esto a una frecuencia de 50Hz, es decir que se deben enviar 50 ciclos de 20ms (milisegundos) en total. Según el ángulo que se obtiene serán:

Programacion -90° son 1ms positivo y 19ms negativo = 20ms
uno 0° son 1.5ms positivo y 18.5ms negativo = 20ms
pro 90° son 2ms positivo y 18ms negativo = 20ms

microcontrolador

Shout GifGIF
Por lo tanto si se desea que el servomotor en teoría se encuentre por ejemplo en 0° se deberán enviar 50 ciclos de 1.5ms positivo y 18ms en negativo

librerias

Shout GifGIF
Entonces la programación en el software quedará de la siguiente manera:

servo

[color=#000000][color=#000000]
int servo=9;        //Declara que servo es un entero de valor 9
int i = 0;          // Declara que i es un entero de valor 0

void setup()        // Configuración inicial
{
  pinMode(servo, OUTPUT);      // Declara que servo será la Salida digital número 9
}

void loop()    //Se repite de manera infinita
{
  for(int i=0; i<=50; i++){       //  ciclo for que se repetirá  50 veces.
      digitalWrite(servo, HIGH);  // Salida digital 9 quedará en positivo
      delayMicroseconds(1500);    // Espera 1500 microsegundos = 1.5 milisegundos
      digitalWrite(servo, LOW);   // Salida digital 9 quedará en negativo
      delayMicroseconds(18500);   // Espera 18500 microsegundos = 18.5 milisegundos
  }
}[/color][/color]


servomotor

Shout GifGIF
Por otra parte, si se desea que el servomotor realice movimientos de manera automática, por ejemplo que cada 2 segundos se mueva de 0° a 90° y viceversa de forma constante quedaría de la siguiente forma:

Arduino: Servomotor sin librería

[color=#000000][color=#000000]
int servo=9;        //Declara que servo es un entero de valor 9
int i = 0;          // Declara que i es un entero de valor 0

void setup()        // Configuración inicial
{
  pinMode(servo, OUTPUT);      // Declara que servo será la Salida digital número 9
}

void loop()    //Se repite de manera infinita
{
  for(int i=0; i<=50; i++){       //  ciclo for que se repetirá  50 veces.
      digitalWrite(servo, HIGH);  // Salida digital 9 quedará en positivo
      delayMicroseconds(1500);    // Espera 1500 microsegundos = 1.5 milisegundos
      digitalWrite(servo, LOW);   // Salida digital 9 quedará en negativo
      delayMicroseconds(18500);   // Espera 18500 microsegundos = 18.5 milisegundos
  }
 delay(2000);  //Espera 2000 milisegundos = 2 segundos
 for(int i=0; i<=50; i++){       //  ciclo for que se repetirá  50 veces.
       digitalWrite(servo, HIGH);  // Salida digital 9 quedará en positivo
       delayMicroseconds(2000);    // Espera 2000 microsegundos = 1.5 milisegundos
       digitalWrite(servo, LOW);   // Salida digital 9 quedará en negativo
       delayMicroseconds(18000);   // Espera 18000 microsegundos = 18.5 milisegundos
  }
 delay(2000);  //Espera 2000 milisegundos = 2 segundos
}[/color][/color]


Programacion

Shout GifGIF
Recomendaciones

pro

Shout GifGIF
En base a la experiencia personal, se recomienda variar la cantidad de ms de activación y desactivación pero que siempre sumen 20ms en total, puesto que los servomotores en general los de electrónica como los modelos sg90, mg90s, etc... vienen descalibrados. Esto quiere decir que el ángulo 0°, 90° o cualquiera en general, no representará lo que dice el fabricante.

Shout GifGIF
Por lo tanto en algunos casos por ejemplo, el ángulo 0° pueden ser 710us de activación y 19290us de desactivación, ambos suman 20.000us, claro está que no representan lo especificado por el fabricante, pero en la práctica el servomotor se encontrará en 0°.

librerias

Shout GifGIF
Espero que el post sea de tu agrado y te ayude a concretar algún proyecto. Cualquier, pregunta, duda, consulta, interrogante o inquietud, puedes enviar un mensaje y trataré de responder a la brevedad.

1 comentario - Arduino: Servomotor sin librería

darske
En el código que muestras, los ciclos se repiten 51 veces
samurayx_diego
Si me fijé, pero un moderador ha bloqueado el post para que no pueda editarlo