VAMOS A COMENZAR A RECORDAR PRIMERO COMO USAR UN SERVO Y DESPUÉS CÓMO VARIAR SU POSICIÓN EN TIEMPO REAL:
¿CÓMO PROGRAMAR PARA QUE SE MUEVA A VOLUNTAD?
HAY DOS FORMAS, LA PRIMERA PARA QUE SE DESPLACE A LA POSICIÓN QUE DESEAMOS INDEPENDIENTEMENTE DE LA VELOCIDAD, LA SEGUNDA PARA CONTROLAR SU VELOCIDAD POR SI TIENE QUE HACER UNA OPERACIÓN SENSIBLE:
A) A UNA POSICIÓN DETERMINADA
#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
}
void loop() {
// Desplazamos a la posición 0º
servoMotor.write(0);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 180º
servoMotor.write(180);
// Esperamos 1 segundo
delay(1000);
}
B) A UNA POSICIÓN DETERMINADA
// Incluímos la librería para poder controlar el servo
#include <Servo.h>
// Declaramos la variable para controlar el servo
Servo servoMotor;
void setup() {
// Iniciamos el monitor serie para mostrar el resultado
Serial.begin(9600);
// Iniciamos el servo para que empiece a trabajar con el pin 9
servoMotor.attach(9);
// Inicializamos al ángulo 0 el servomotor
servoMotor.write(0);
}
void loop() {
// Vamos a tener dos bucles uno para mover en sentido positivo y otro en sentido negativo
// Para el sentido positivo
for (int i = 0; i <= 180; i++)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
// Para el sentido negativo
for (int i = 179; i > 0; i--)
{
// Desplazamos al ángulo correspondiente
servoMotor.write(i);
// Hacemos una pausa de 25ms
delay(25);
}
}
CAMBIA EL DELAY 25 POR UN DELAY 500 Y COMPRUEBA QUE SE MOVERÁ MUCHO MÁS DESPACIO.
EL DELAY ES EL TIEMPO QUE TARDA EL MOTOR DE AVANZAR ENTRE GRADO Y GRADO.
CAMBIA LOS GRADOS 180 POR 60 Ó 46 Ó 127 Y COMPRUEBA QUE L AMANERA DE SABER HASTA DÓNDE
MUEVO EL SERVOMOTOR ES CAMBIANDO EL VALOR DE i
PUES RESULTA QUE SI NUESTRO POTENCIÓMETRO TIENE 1024 VALORES, Y EL SERVOMOTOR TIENE 180 POSIBLES VALORES DE GRADOS, LA FUNCIÓN map, ME HACE UNA PROPORCIONALIDAD ENTRE ESTAS DOS LECTURAS Y ME MANDA EL MOTOR A UNA POSICIÓN PROPORCIONAL A LA LECTURA QUE HAGA DEL POTENCIÓMETRO.
#include <Servo.h>
Servo Servo; //Declaramos que queremos controlar un Servo, al cual le vamos a poner un nombre cualquiera
int pot = 0; //El pin análogo donde va conectado el Potenciómetro
int val; //El valor a leer por el puerto análogo
int val; //El valor a leer por el puerto análogo
void setup()
{
Servo.attach(9); //El pin al cual conectaremos nuestro Servo
}
{
Servo.attach(9); //El pin al cual conectaremos nuestro Servo
}
void loop()
{
val = analogRead(pot); //Aquí le decimos que lea el valor del potenciómetro, valor el cual oscila entre 0 y 1023
val = map(val, 0 ,1023, 0, 180); //Traduce la lectura análoga (0, 1023) a grados (0°, 180°)
Servo.write(val); //Mueve el Servo según la lectura análoga
delay(15);
}
{
val = analogRead(pot); //Aquí le decimos que lea el valor del potenciómetro, valor el cual oscila entre 0 y 1023
val = map(val, 0 ,1023, 0, 180); //Traduce la lectura análoga (0, 1023) a grados (0°, 180°)
Servo.write(val); //Mueve el Servo según la lectura análoga
delay(15);
}
No hay comentarios:
Publicar un comentario