15. Control de servomotores con Arduino
Un servomotor es un motor de corriente continua que funciona mediante señales de ancho variable (PWM) y puede situarse dentro de su rango de funcionamiento, generalmente entre -90o y +90o (es decir un recorrido de 180 grados)
Está formado por un motor de DC, unos engranajes, un potenciómetro solidario con el eje de los engranajes del motor y un circuito electrónico. Tiene tres cables de conexión, dos de alimentación +Vcc y GND y uno de entrada de control mediante pulsos (PWM).
Su funcionamiento es simple, al introducir una señal PWM, el circuito electrónico interno compara esta señal con la señal de posición del potenciómetro y mueve el motor hasta ajustar los grados requeridos y equilibrar las señales.
Los parámetros más importantes del servo SG-90 [43] son:
Tensión de funcionamiento: Entre 4,8 y 6 Volts.
Torque [44] es el par motor o momento de fuerza sobre el eje de transmisión de potencia.
Velocidad 0.1 m/s
Peso 14,7 grm
Conexionado: Rojo +Vcc, Marrón GND, Amarillo señal de control.
Señal de control. El ancho de la señal de control PWM posicionará el servo de forma que para 1ms tenemos -90 grados ,1,5 ms son 0 grados y con 2ms tendremos 90 grados.
Control
de un servomotor mediante potenciómetro.
Materiales:
1
Arduino.
1
Servomotor SG90
1
Potenciómetro o resistencia variable de 10kΩ
Cables
y protoboard
Circuito:
Esquema:
Programa:
Código:
Para
realizar la programación utilizamos la librería Servo.h. Como
tenemos la entrada analógica del potenciómetro que varía entre 0 y
1023, tenemos que ajustar estos valores a la salida PWM que está
entre 0 y 180, para ello mapeamos la variable mediante el comando map
cuya función es ajustar estos valores.
Esto
significa que cada 5,6 valores en la entrada analógica 1 tendremos
un grado de desplazamiento en el servo.
//-----------------------------------------------------------
//Control
servo mediante Potenciómetro
//
In pot pin analogico 1
//
OUT PWM servo pin digital 5
//------------------------------------------------------------
#include
<Servo.h>
int
_ABVAR_1_valorpot = 0 ;
Servo
servo_pin_5;
void
setup()
{
servo_pin_5.attach(5);
}
void
loop()
{
_ABVAR_1_valorpot
= map ( analogRead(1) , 0 , 1023 , 0 , 180 ) ;
servo_pin_5.write(
_ABVAR_1_valorpot );
}
Control de un servomotor mediante LDR (Resistencia dependiente de la luz).
Una
ligera variación del circuito anterior es utilizar una LDR como
elemento de control. Podemos utilizar este circuito para realizar un
seguimiento del sol para una placa solar controlada por un servo.
Materiales:
1
Arduino.
1
Servomotor SG90
1
Resistencia de 10kΩ
1
LDR
Circuito:
Esquema:
Programa:
Vamos
a utilizar la librería Servo.h y el sensor analógico de luz
ambiente (LDR).
La
LDR se conectará al pin analógico 0 y la salida PWM del servo en el
pin 10 digital.
Código:
//--------------------------------------------------
//
LDR controla Servomotor
//
Servo en pin 10 digital
//LDR
en analog 0
//--------------------------------------------------
#include
<Servo.h>
int
_ABVAR_1_ldr = 0 ;
Servo
servo_pin_10;
void
setup()
{
servo_pin_10.attach(10);
}
void
loop()
{
_ABVAR_1_ldr
= map ( analogRead(0) , 0 , 1023 , 0 , 255 ) ;
servo_pin_10.write(
_ABVAR_1_ldr );
}
Links:
[43]
Servomotor SG90 http://abc-rc.pl/sg-90
[44]
Par motor https://es.wikipedia.org/wiki/Par_motor
[45]
Vídeo https://www.youtube.com/watch?v=Iif9ZIY9jMU
[46]
Software generador diagrama tiempos Wavedrom http://wavedrom.com/