dimecres, 22 de juliol del 2015

Servomotores: Control con Arduino.



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



[46] Software generador diagrama tiempos Wavedrom http://wavedrom.com/