Lo primero que es importante saber es el funcionamiento del circuito, cuyo esquema gráfico se muestra en la siguiente fotografía:
Para ver el código de la programación, no tienes mas que pulsar el botón de arriba, y no te asustes, a continuación lo explicaré lo mejor que pueda:
int motorrightback=12; { Aquí indicamos la posición de
los motores, derecha e
Se realiza un loop cada muy poco tiempo, por lo que el robot está constantemente comprobando si hay obstáculos.
Si tienes dudas, no te las guardes, escribe aquí poniendo tu correo electrónico y, a continuación, haz la pregunta: Para ver el código de la programación, no tienes mas que pulsar el botón de arriba, y no te asustes, a continuación lo explicaré lo mejor que pueda:
Lo primero que puedes ver es #include <Ultrasonic.h> , esto es una librería, es decir, un código que otra persona ya ha creado y que lo comparte. Esta librería la descargamos de internet ya que nos facilitaba mucho el trabajo, nos permite utilizar funciones que en otro caso tendríamos que crear nosotros gastando bastante tiempo en ello. Esta librería en concreto nos permite utilizar los sensores de ultrasonido, ya lo veréis más adelante.
En la siguiente parte que vamos a ver es donde declaramos las variables que vamos a usar, es decir, reservamos memoria en la placa arduino para mas tarde darle valor, o para decirle a la placa en que pines ( puertos donde conectamos mediante cables la placa y lo que sea) se encuentra cada cosa.
Ultrasonic ultrafront(9,8); Aquí indicamos en que pines están
los sensores, y cada uno tiene
los sensores, y cada uno tiene
Ultrasonic ultraleft(7,6); dos, uno para mandar los ultrasonido y
otro para recibirlos.
otro para recibirlos.
int motorrightfront=4; {
int motorrightback=12; { Aquí indicamos la posición de
los motores, derecha e
int motorleftfront=11; { izquierda, y cada uno tiene dos
pines cada uno para ir
pines cada uno para ir
int motorleftback=10; { adelante o atrás.
int motorrightspeed=5
int ledred=2; Aquí indicamos la posición de los leds.
int ledwhite=3;
int giro=240;
float distanciafront=100.0; En esta parte simplemente le ponemos
nombres a valores que vamos
float distancialeft=100.0; a utilizar más adelante.
nombres a valores que vamos
float distancialeft=100.0; a utilizar más adelante.
float peligro=35.0; int son números enteros (1 2 46 etc.)
y float son numeros con
y float son numeros con
float peligroleft=40.0; decimales ( 1,4 56,34 6785,9 etc.)
Cuando veáis void --- es una función, parte del código que realiza una acción. Arduino tiene dos funciones principales, "setup" y "loop".
void setup() {
pinMode (motorrightfront, OUTPUT);
pinMode (motorrightback, OUTPUT);
pinMode (motorleftfront, OUTPUT);
pinMode (motorleftback, OUTPUT);
pinMode (motorrightspeed, OUTPUT);
pinMode (ledred, OUTPUT);
pinMode (ledwhite, OUTPUT);
//stop();
//delay (100);
}
en void setup preparamos el robot, le decimos si los pines que declaramos antes son de entrada (INPUT) o salida (OUTPUT). Pero input solo son los sensores, y esos los declaramos antes.Por último el delay lo que hace es parar el programa el tiempo que le indiquemos, 0,1 segundos en este caso para que no ande nada más que lo encendamos.
void loop()
{
checkfront();
act();
delay (400);
}
El void loop es la función que se está ejecutando una y otra vez, es un bucle y una vez que llega al final vuelve al principio. Las funciones que se encuentran aqui dentro las creamos fuera y las llamamos en el loop.
void checkfront () Esta función mira si hay algun objeto delante:
{
distanciafront = ultrafront.Ranging(CM); ←-- Función de la libreria que mediante el sensor delantero mide a qué distancia en centímetros se encuentra el objeto más cercano.
}
void checkleft()
{ Hace lo mismo que
la anterior pero con
el otro sensor
la anterior pero con
el otro sensor
distancialeft = ultraleft.Ranging (CM);
}
void act()
{
if (distanciafront > peligro) Si la distancia que medimos antes es
mayor que la de peligro (35.0),
mayor que la de peligro (35.0),
{ entonces realiza la función gofront.
gofront();
}
else Si no lo es realiza la función de medir por la izquierda
con el otro sensor, y si no hay peligro gira a la
con el otro sensor, y si no hay peligro gira a la
{ izquierda, y en caso contrario a la derecha.
checkleft();
if (distancialeft > peligroleft){
turnleft();}
else {
turnright();}
delay (giro); Aquí establecemos el tiempo que estará
girando, calculado mediante pruebas y es
240 milisegundos = 0’240 segundos.
girando, calculado mediante pruebas y es
240 milisegundos = 0’240 segundos.
stop();
}
}
En las siguientes funciones establecemos en qué sentido tienen que girar los motores para realizar las distintas funciones, y también cuando un led se va a encender :
void gofront() (Ambos motores hacia delante )
{
digitalWrite(motorrightback, LOW);
digitalWrite(motorleftback, LOW);
analogWrite (motorrightspeed, 250); ←-- Esto es para corregir el
problema por el cual la rueda
problema por el cual la rueda
derecha iba más rápido,
cambiando su velocidad
por defecto.
digitalWrite(motorrightfront, HIGH);
cambiando su velocidad
por defecto.
digitalWrite(motorrightfront, HIGH);
digitalWrite(motorleftfront, HIGH);
digitalWrite(ledwhite, HIGH);
digitalWrite(ledred, LOW);
}
void turnleft() ( Motor derecho hacia delante y motor izquierdo hacia atrás)
{
digitalWrite(ledred, HIGH);
digitalWrite(ledwhite, LOW);
digitalWrite(motorrightback, LOW);
digitalWrite(motorleftfront, LOW);
digitalWrite(motorrightfront, HIGH);
digitalWrite(motorleftback, HIGH);
}
void turnright() ( Motor derecho hacia atrás y motor izquierdo hacia delante )
{
digitalWrite(ledred, HIGH);
digitalWrite(ledwhite, LOW);
digitalWrite(motorrightfront, LOW);
digitalWrite(motorleftback, LOW);
digitalWrite(motorrightback, HIGH);
digitalWrite(motorleftfront, HIGH);
}
La siguiente función es para apagar ambos motores al final del loop :
void stop()
{
digitalWrite(motorleftfront, LOW);
digitalWrite(motorrightfront, LOW);
digitalWrite(motorleftback, LOW);
digitalWrite(motorrightback, LOW);
}
Se realiza un loop cada muy poco tiempo, por lo que el robot está constantemente comprobando si hay obstáculos.
No hay comentarios:
Publicar un comentario