Para hacerte experto

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:


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
Ultrasonic ultraleft(7,6);              dos, uno para mandar los ultrasonido y 
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
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.
float peligro=35.0;                  int son números enteros (1  2  46  etc.)
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
  distancialeft = ultraleft.Ranging (CM);   
}








void act()
{
 if (distanciafront > peligro)       Si la distancia que medimos antes es 
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
 {                       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.
 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
   derecha iba más rápido,
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.



Si tienes dudas, no te las guardes, escribe aquí poniendo tu correo electrónico y, a continuación, haz la pregunta:


Nombre

Correo electrónico *
Mensaje *


No hay comentarios:

Publicar un comentario