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:
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
Publicar un comentario