Arduino - Servomotor

Un servomotor es un dispositivo pequeño que tiene un eje de salida. Este eje se puede colocar en posiciones angulares específicas enviando al servo una señal codificada. Mientras exista la señal codificada en la línea de entrada, el servo mantendrá la posición angular del eje. Si cambia la señal codificada, cambia la posición angular del eje. En la práctica, los servos se utilizan en aviones controlados por radio para colocar superficies de control como los elevadores y timones. También se utilizan en coches controlados por radio, títeres y, por supuesto, robots.

Los servos son extremadamente útiles en robótica. Los motores son pequeños, tienen circuitos de control integrados y son extremadamente potentes para su tamaño. Un servo estándar como el Futaba S-148 tiene 42 oz / pulgadas de torque, lo cual es fuerte para su tamaño. También consume energía proporcional a la carga mecánica. Un servo con poca carga, por lo tanto, no consume mucha energía.

Las entrañas de un servomotor se muestran en la siguiente imagen. Puede ver el circuito de control, el motor, un conjunto de engranajes y la carcasa. También puede ver los 3 cables que se conectan al mundo exterior. Uno es para alimentación (+ 5 voltios), tierra y el cable blanco es el cable de control.

Funcionamiento de un servomotor

El servomotor tiene algunos circuitos de control y un potenciómetro (una resistencia variable, también conocida como potenciómetro) conectado al eje de salida. En la imagen de arriba, la olla se puede ver en el lado derecho de la placa de circuito. Este potenciómetro permite que los circuitos de control controlen el ángulo de corriente del servomotor.

Si el eje está en el ángulo correcto, entonces el motor se apaga. Si el circuito encuentra que el ángulo no es correcto, hará girar el motor hasta que esté en el ángulo deseado. El eje de salida del servo es capaz de viajar alrededor de 180 grados. Por lo general, está en algún lugar en el rango de 210 grados, sin embargo, varía según el fabricante. Se utiliza un servo normal para controlar un movimiento angular de 0 a 180 grados. Mecánicamente no es capaz de girar más debido a un tope mecánico integrado en el engranaje de salida principal.

La potencia aplicada al motor es proporcional a la distancia que necesita recorrer. Por lo tanto, si el eje necesita girar una gran distancia, el motor funcionará a máxima velocidad. Si necesita girar solo una pequeña cantidad, el motor funcionará a una velocidad más lenta. Se llamaproportional control.

¿Cómo se comunica el ángulo en el que debe girar el servo?

El cable de control se utiliza para comunicar el ángulo. El ángulo está determinado por la duración de un pulso que se aplica al cable de control. Se llamaPulse Coded Modulation. El servo espera ver un pulso cada 20 milisegundos (0,02 segundos). La longitud del pulso determinará qué tan lejos gira el motor. Un pulso de 1,5 milisegundos, por ejemplo, hará que el motor gire a la posición de 90 grados (a menudo denominada posición neutra). Si el pulso es inferior a 1,5 milisegundos, el motor hará girar el eje más cerca de 0 grados. Si el pulso es superior a 1,5 milisegundos, el eje gira más cerca de 180 grados.

Componentes requeridos

Necesitará los siguientes componentes:

  • 1 × placa Arduino UNO
  • 1 × servomotor
  • 1 × ULN2003 conducción IC
  • Resistencia de 1 × 10 KΩ

Procedimiento

Siga el diagrama del circuito y realice las conexiones como se muestra en la imagen que se muestra a continuación.

Bosquejo

Abra el software Arduino IDE en su computadora. La codificación en el lenguaje Arduino controlará su circuito. Abra un nuevo archivo de dibujo haciendo clic en Nuevo.

Código Arduino

/* Controlling a servo position using a potentiometer (variable resistor) */

#include <Servo.h>
   Servo myservo; // create servo object to control a servo
   int potpin = 0; // analog pin used to connect the potentiometer
   int val; // variable to read the value from the analog pin

void setup() {
   myservo.attach(9); // attaches the servo on pin 9 to the servo object
}

void loop() {
   val = analogRead(potpin);
   // reads the value of the potentiometer (value between 0 and 1023)
   val = map(val, 0, 1023, 0, 180);
   // scale it to use it with the servo (value between 0 and 180)
   myservo.write(val); // sets the servo position according to the scaled value
   delay(15);
}

Código a tener en cuenta

Los servomotores tienen tres terminales: potencia, tierra y señal. El cable de alimentación suele ser rojo y debe conectarse al pin de 5 V del Arduino. El cable de tierra es típicamente negro o marrón y debe conectarse a un terminal de ULN2003 IC (10-16). Para proteger su placa Arduino de daños, necesitará algún controlador IC para hacer eso. Aquí hemos utilizado ULN2003 IC para impulsar el servomotor. El pin de señal suele ser amarillo o naranja y debe conectarse al pin número 9 de Arduino.

Conexión del potenciómetro

Un divisor de voltaje / divisor de potencial son resistencias en un circuito en serie que escalan el voltaje de salida a una relación particular del voltaje de entrada aplicado. A continuación se muestra el diagrama del circuito:

$$ V_ {out} = (V_ {in} \ times R_ {2}) / (R_ {1} + R_ {2}) $$

V out es el potencial de salida, que depende del voltaje de entrada aplicado (V in ) y las resistencias (R 1 y R 2 ) en la serie. Significa que la corriente que fluye a través de R 1 también fluirá a través de R 2 sin dividirse. En la ecuación anterior, a medida que cambia el valor de R 2 , V out se escala en consecuencia con respecto al voltaje de entrada, V in .

Normalmente, un potenciómetro es un divisor de potencial, que puede escalar el voltaje de salida del circuito en función del valor de la resistencia variable, que se escala con la perilla. Tiene tres pines: GND, señal y + 5V como se muestra en el diagrama a continuación -

Resultado

Al cambiar la posición NOP de la olla, el servomotor cambiará su ángulo.