Servomotores - Funciones con Arduino

teknikkos 327 views 6 slides Oct 03, 2019
Slide 1
Slide 1 of 6
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6

About This Presentation

Funciones para el control de servomotores con arduino uno.


Slide Content

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
FUNCIONES DE LA LIBRERÍA SERVO CON ARDUINO
Servo.h
El compilador ARDUINO debe incluir esta librería que permite trabajar con los
servomotores. La librería Servo.h debe ser el primero en llamarse antes de utilizar
las demás funciones de control de los servomotores. Si esta no es llamada, el
compilador mostrara errores en nuestro programa.
SINTAXIS
#include <Servo.h>
Servo
Crea un objeto de tipo servo para controlar las demás funciones de la librería
Servo.h.
SINTAXIS
Servo nombre_objeto;
PARÁMETROS
 nombre_objeto es el identificador o nombre que le damos al objeto creado.
Este identificador nos permite utilizar las demás funciones de la librería
Servo.h
EJEMPLOS
Servo miservo;
Servo.motor_servo;
attach()
se utiliza para establecer o definir el pin de control del servomotor. Asimismo, en
forma opcional, puede fijar el ancho mínimo y máximo del servomotor de tal manera
que pueda definir el rango de giro entre 0 y 180 grados.
SINTAXIS
nombre_objeto.attach(pin);
nombre_objeto.attach(pin, min, max);
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
 pin representa el identificador o número del pin donde se encuentra
conectado el terminal de control del servomotor.
 min se utiliza para fijar el ancho mínimo del pulso para que el servomotor
este en la posición de 0 grados. min se representa en microsegundos.

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
 max se utiliza para fijar el ancho máximo del pulso para que el servomotor
este en la posición de 180 grados. max se representa en microsegundos.
Con la ayuda de los valores de min y max podemos fijar unos límites en los que
queremos que se mueva el servomotor.
EJEMPLOS
miservo. Attach(9);
miservo. Attach(9, 400, 2400);
write()
Envía la señal correspondiente al servo para que se ubique en el ángulo indicado que
debe estar comprendido entre un valor entre 0 y 180 grados. los ángulos o posiciones
más utilizados son:
 0 : un extremo
 90 : centro
 180 : otro extremo
SINTAXIS
nombre_objeto.write(angulo);
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
 angulo es el valor a escribir en el servo y comprende de 0 a 180 grados, es
decir, nos permite colocar al servo en el ángulo que queramos.
EJEMPLOS
miservo.write(90);
miservo.write(180);
writeMicroseconds()
Envía al servo un pulso de un ancho de tantos microsegundos como queramos que
gire el servomotor.
SINTAXIS
Nombre_objeto.writeMicroseconds(tiempo_us);
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
 Tiempo_us es un identificador de una variable o un valor numérico
expresado en microsegundos. Este valor se define de acuerdo al tiempo
mínimo y máximo dados por el fabricante.

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
EJEMPLOS
miservo.writeMicroseconds(1200);
read ()
Se utiliza para conocer el ángulo o posición en el que actualmente se encuentra el
servo. El valor devuelto por la función read() está comprendido entre los valores de
0 y 180.
Esto puede ser útil en casos en los que se necesita una alta precisión, se podría mover
el servo y utilizar read() para asegurarnos de que esta en ese punto antes de realizar
el siguiente movimiento.
También puede emplearse para conocer la posición en la que se encuentra el servo
antes de comenzar a utilizarlo.
SINTAXIS
Nombre_objeto.read();
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
EJEMPLOS
 angulo = miservo.read();
 if(servo.read() == 20){
servo.write(70);
delay(500);
}
detach()
esta función es contraria a la función attach, es decir, desvincula un determinado
pin con el control del servomotor.
Esto puede ser útil si por ejemplo tenemos las salidas de Arduino multiplexadas.
Cuando queramos utilizarlas para controlar el servo, hacemos un attach y cuando
las usamos con otra finalidad las liberamos de este cometido.
SINTAXIS
Nombre_objeto.detach()
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
EJEMPLOS
miservo.detach();

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
attached()
Comprueba si tenemos establecido o fijado un pin para el control de un
servomotor. Esta función devuelve un valor verdadero (true) si el servo está
asociado a un pin y falso(false) si no está asociado a un pin.
Esto puede ser útil si a lo largo de nuestro programa hemos empleado
reiteradamente las funciones attach() y detach(), y permite asegurarnos de que
hemos vuelto a crear la asociación antes de intentar controlar el servo.
SINTAXIS
Nombre_objeto.attached();
PARÁMETROS
 nombre_objeto es el identificador o nombre del objeto creado con la función
Servo.
EJEMPLO
if (servo.attached() == false){
servo.write(50); //Si lo hay, movemos el servo.
}
Else {
servo.attach(9); // primero lo asignamos el pin
servo.write(50); // y despues lo movemos.
}
ESCALAMIENTO DE VALORES
Función map()
Esta función nos permite transformar un valor entero de un rango de entrada al
valor correspondiente en otro rango de salida.
Se debe tener en cuenta que los "límites inferiores" de cualquier rango pueden ser
más grandes o más pequeños que los "límites superiores" para que la función map()
se pueda usar para revertir una serie de números. La función también funciona con
números negativos.
La función map() usa números enteros por lo que no va a generar decimales, cuando
las operaciones matemáticas podrían indicar que debería hacerlo. Los decimales
remanentes se truncan, y no son redondeados o promediados.
SINTAXIS
Map(valor, de_minimo, de_maximo, para_minimo, para_maximo);
PARÁMETROS
 valor es un numero o el identificador de una variable a mapear

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
 de_minimo es el límite inferior del rango actual del número o identificador
de la variable.
 de_maximo es el límite superior del rango actual del número o identificador
de la variable.
 para_minimo es el límite inferior del nuevo rango a utilizar.
 para_maximo es el límite superior del nuevo rango a utilizar.
EJEMPLOS
 val = map(value, 0, 1023, 0, 255);
 y = map(x, 1, 50, 50, 1);
 y = map(x, 1, 50, 50, -100);
 adc = analogRead(A0);
angulo = map(adc, 0, 1023, 0, 180);

CONTROL DE SERVOMOTOR CON UN POTENCIOMETRO
a. CÓDIGO EN ARDUINO
#include <Servo.h>
Servo myservo; //creamos un objeto servo
void setup()
{ myservo.attach(9); // asignamos el pin 9 al servo.
Serial.begin(9600);
}

void loop()
{
int adc = analogRead(A0); // realizamos la lectura del potenciometro
int angulo = map(adc, 0, 1023, 0, 180); // escalar la lectura a valor entre 0 y 180
myservo.write(angulo); // enviamos el valor escalado al servo.
Serial.print("Angulo: ");
Serial.println(angulo);
delay(10);
delay(2000);
myservo.detach();
}

I+D PCB SOLUTION’S ELECTRÓNICA INDUSTRIAL
Tec. Nicanor Almidon 956410288
b. CONEXIÓN DEL ARDUINO