martes, 8 de enero de 2019

FELIZ AÑO NUEVO 2019, A TODOS MIS ALUMNOS DE 4º DE ESO DE ROBÓTICA 

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

Conexion servomotor con Arduino

#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

 ¿CÓMO PROGRAMAR PARA QUE SE MUEVA EN TIEMPO REAL?

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
void setup()
{
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);
}

No hay comentarios:

Publicar un comentario