DESCRIPCIÓN:
ES un móvil seguidor de línea negra haciendo uso de sensores infrarrojos, los cuales detectan la línea y envían una señal al resto del circuito. Allí, de acuerdo a la programación realizada, se tomará una decisión respecto a las acciones que eL carro debe realizar para mantenerse en el camino y llegar a la meta. Este diseño electrónico cuenta con dos sistemas: percepción y potencia.
Percepción
Es el sistema encargado de obtener la información del entorno para enviarla al sistema de comunicación en el cual se determinarán las acciones para el carro. En este caso se usarán leds infrarrojos, un emisor y un receptor, los cuales están encargados de detectar la línea negra que define el camino a seguir. En este caso se utilizarán dos sensores CNY70.
Potencia
La señal de salida obtenida de los sensores infrarrojos se convierte en la señal de entrada a la fase de programación, en la que interviene un módulo electrónico (Arduino) para el control del robot. Para ello se utilizará un componente SN754410NE quienes realizarán la función de indicar a los motores
Se debe crear un puente H para control de los motores
el puente H se usa para invertir el giro de un motor, pero también puede usarse para frenarlo (de manera brusca), al hacer un corto entre las bornas del motor, o incluso puede usarse para permitir que el motor frene bajo su propia inercia, cuando desconectamos el motor de la fuente que lo alimenta.
S1 | S2 | S3 | S4 | Resultado |
1 | 0 | 0 | 1 | El motor gira en avance |
0 | 1 | 1 | 0 | El motor gira en retroceso |
0 | 0 | 0 | 0 | El motor se detiene bajo su inercia |
1 | 0 | 1 | 0 | El motor frena (fast-stop) |
MATERIALES:
- 2- Led infrarrojo CNY70
- 2 – Resistencias 220
- 2- Resistencias 47K
- 1- SN754410NE
- 1- Protoboard
- 2- Motores DC
PROCESO DE MONTAJE
- Disponer de todos los materiales para poner en practica el laboratorio.
- Realizamos el montaje de nuestro carro.
- por ultimo montamos el resto de materiales para nuestro carro seguidor de linea.
CÓDIGO ARDUINO
- #define M1A 19 //Motor 1A#define M1B 18 //Motor 1B
#define M2A 17 //Motor 2A
#define M2B 16 //Motor 2B
#define PIN_PWM 11 //Modulacion por ancho de pulso – Emular salida analogica con salida digital
#define VEL 100 //Velocidad
#define S1 0 //IZQ
#define S2 1 //DER
#define _UMBRAL_ 200 //Umbral de los sensores
unsigned long timeserial;
void setup (){
Serial.begin(9600);
timeserial = millis();
pinMode(M1A, OUTPUT);
pinMode(M1B, OUTPUT);
pinMode(M2A, OUTPUT);
pinMode(M2B, OUTPUT);
STOP(10000);
analogWrite(PIN_PWM, VEL);
}
void loop()
{
byte SDER = (analogRead(S1)> _UMBRAL_ )?0:1;
byte SIZQ = (analogRead(S2)> _UMBRAL_ )?0:1;
if(SDER && SIZQ)
STOP(0);
else if (!SDER && SIZQ)
DER(0);
else if (SDER && !SIZQ)
IZQ(0);
else
ADE(0);
if(millis() – timeserial > 500){
timeserial = millis();
Serial.print(“Sensor1: “);
//Serial.print(SDER);
Serial.print(analogRead(S1));
Serial.print(” Sensor2: “);
//Serial.println(SIZQ);
Serial.println(analogRead(S2));
}
}
void ATR(uint16_t time){
digitalWrite(M1A, HIGH);
digitalWrite(M1B, LOW);
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
delay(time);
}
void ADE(uint16_t time){
digitalWrite(M1A, LOW);
digitalWrite(M1B, HIGH);
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
delay(time);
}
void DER(uint16_t time){
//Llanta Izquierda
digitalWrite(M1A, HIGH);
digitalWrite(M1B, LOW);
//llanta Derecha
digitalWrite(M2A, LOW);
digitalWrite(M2B, HIGH);
delay(time);
}
void IZQ(uint16_t time){
//Llanta Izquierda
digitalWrite(M1A, LOW);
digitalWrite(M1B, HIGH);
//Llanta Derecha
digitalWrite(M2A, HIGH);
digitalWrite(M2B, LOW);
delay(time);
}
void STOP(uint16_t time){
digitalWrite(M1A, LOW);
digitalWrite(M1B, LOW);
digitalWrite(M2A, LOW);
digitalWrite(M2B, LOW);
delay(time);
}