Carrito seguidor de linea - Arduino

Objetivo: Crear un seguidor de linea con la programación en arduino para controlar los puentes H, y controlar los motorreductores, en función con los sensores infrarrojos para detectar la linea negra o blanca.

Materiales:
- 2 sensores CNY70
- 2 Motorreductor
- 2 LLantas
- Protoboard
- Silicón
- Palos de madera
- Cables
- Pila de 9v
- Puente H L298N
- PowerBank
- Arduino Uno

Vídeo realizado por el equipo sobre el proyecto del carrito seguidor de linea: https://www.youtube.com/watch?v=d-PIamGGue0&feature=youtu.be

Código utilizado:


Realizado por:THEFENIX-THE FENIX-EMIC TRON.*/
int infraPin1 = 10;    // pin del infrarrojos utilizado como entrada digital en el lado derecho(#1).
int infraPin2 = 11;    // pin del infrarrojos utilizado como entrada digital en el lado izquierdo(#2).
int valorInfra1 = 0;  // Valor inicial de la lectura digital del infrarrojo #1.
int valorInfra2 = 0;  // Valor inicial de la lectura digital del infrarrojo #2.
int ENB = 5; //ENB conectado al pin 5 con señal PWM
int ENA = 9; //ENA conectado al pin 9 con señal PWM
int OUTPUT4 = 4;    // Output4 conectada al pin 4.
int OUTPUT3 = 3;    // Output3 conectada al pin 3.
int OUTPUT2 = 6;    // Output2 conectada al pin 6.
int OUTPUT1 = 7;    // Output1 conectada al pin 7.

void setup() {
  Serial.begin(9600); // Comenzamos comunicacion serial.
  pinMode(infraPin1, INPUT);     // Inicializa el pin 1 como entrada digital.
  pinMode(infraPin2, INPUT);     // Inicializa el pin 2 como entrada digital.
  pinMode (ENA, OUTPUT);     // Inicializa el pin 7  como salida digital.
  pinMode (ENB, OUTPUT);     // Inicializa el pin 6 como salida digital.
  pinMode (OUTPUT1, OUTPUT);     // Inicializa el pin 7  como salida digital.
  pinMode (OUTPUT2, OUTPUT);     // Inicializa el pin 6 como salida digital.
  pinMode (OUTPUT3, OUTPUT);     // Inicializa el pin 3 como salida digital.
  pinMode (OUTPUT4, OUTPUT);     // Inicializa el pin 4 como salida digital. 
  }
void loop() {
 
  valorInfra1 = digitalRead(infraPin1);   // Lee el valor de la entrada 10, esto es, el valor que lee el infrarrojo #1.
  Serial.print("SENSOR1 ");         //Imprimimos el texto "SENSOR1 "
  Serial.println(valorInfra1);    //Imprimimos la lectura del infrarrojo #1.
  valorInfra2 = digitalRead(infraPin2);    // Lee el valor de la entrada 11, esto es, el valor que lee el infrarrojo #2.
  Serial.print("SENSOR2 ");       //Imprimimos el texto "SENSOR2 "
  Serial.println(valorInfra2);    //Imprimimos la lectura del infrarrojo #2.
  
  if(valorInfra1==0)   // Si la lectura del infrarrojo #1 es 0, entonces se cumplira una de las siguientes condiciones:
  {
  if(valorInfra2==0){  // Si la lectura del infrarrojo #2 es 0, es decir los dos sensores estan sobre la linea negra, entonces los dos motores avanzaran en linea recta.
  digitalWrite(OUTPUT1,0);
  digitalWrite(OUTPUT2,1);
  digitalWrite(OUTPUT3,1);
  digitalWrite(OUTPUT4,0);
  analogWrite(ENA,150); // El pin ENA maneja los pines output1 y output2
  analogWrite(ENB,150); // El pin ENA maneja los pines output3 y output4
  }
  else // Si la lectura del infrarrojo #2 es 1, el sensor#1 esta sobre la linea negra y el sensor#2 esta fuera de la linea negra, entonces solo una rueda gira y esto causara el giro.
  {
  digitalWrite(OUTPUT1,0);
  digitalWrite(OUTPUT2,0);
  digitalWrite(OUTPUT3,1);
  digitalWrite(OUTPUT4,0);
  analogWrite(ENA,0);
  analogWrite(ENB,150);
  }
  }
  else // Si la lectura del infrarrojo #1 no es 0, sera 1, se daran las siguientes posibilidades:
  {if(valorInfra2==0)  // Como el sensor#1 esta fuera de la linea negra y el sensor#2 esta sobre la linea negra, entonces solo una rueda gira y esto causara el giro.
  {
  digitalWrite(OUTPUT3,0);
  digitalWrite(OUTPUT4,0);
  digitalWrite(OUTPUT1,0);
  digitalWrite(OUTPUT2,1);
  analogWrite(ENA,150);
  analogWrite(ENB,0);
  }
  else{ // si ambos sensores dan lectura 1, los dos estan fuera de la linea negra, para que vuelva a su trayectoria tiene que retroceder.
  digitalWrite(OUTPUT1,1);
  digitalWrite(OUTPUT2,0);
  digitalWrite(OUTPUT3,0);
  digitalWrite(OUTPUT4,1);
  analogWrite(ENA,150);
  analogWrite(ENB,150);
  }   
  }
  }

Diagrama:



Comentarios

Entradas populares de este blog

2.12 Instrucciones lógicas.

2.9 Instrucciones aritméticas.

2.10 Manipulación de la pila.