Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad: FISICC
Curso: Sistemas de
Arquitectura
Seccin: A
Catedrticos: Ing. Oscar
Rodas
Ing. Cristian Aguilar
El valor valor de la resistencia del led del sensor lo calculamos con la siguiente
VccVled
Rled=
ecuacin:
donde vcc es el voltaje de la bateria de
If
alimentacin, Vled es el voltaje requerido por el led, If es la corriente del mismo.
Usamos el puente H para lograr que el motor elctrico DC logre girar en ambos sentidos,
avance y retroceso.
Cdigo:
//definicion de los pines de los motores
//motor DC Izquierdo (A)
#define motorA_fase D3 //GPIO (direccion del motor)--> 0 == Adelante || 1 == Retroceso
#define motorA_PWM D1 //PWM (velocidad del motor) --> valor de 0 -- 255
//motor DC Derecho (B)
#define motorB_fase D2 //GPIO (direccion del motor)--> 0 == Adelante || 1 == Retroceso
#define motorB_PWM D0 //PWM (velocidad del motor) --> valor de 0 -- 255
//LEDS indicadores
#define led_izquierda D5 //led indicador
#define led_derecha D4 //led indicador
//definicion de los pines de los sensores QRD1114
#define derecho_aux A0
#define derecho A1
#define central A2
#define izquierdo A3
#define izquierdo_aux A4
//limite entre la superficion blanca y negra
#define limit_superficie 2654
//controles del tracker
int control_comienzo = 0; //0 si es la primera vez, 1 en caso contrario
//metodo para configurar los modos de pines y puerto serial
void setup(){
//inicialiazion del puerto Serial
Serial.begin(9600);
//configuracion del los pines del motor Derecho
pinMode(motorB_fase, OUTPUT); //direccion del motor
pinMode(motorB_PWM, OUTPUT); //velocidad del motor
//configuracion de los pines del motor Izquierdo
pinMode(motorA_fase, OUTPUT); //direccion del motor
pinMode(motorA_PWM, OUTPUT); //velocidad del motor
//configuracion de los pines de los LEDS indicadores
pinMode(led_derecha, OUTPUT); //led indicador derecha
pinMode(led_izquierda, OUTPUT); //led indicador izquierda
}
//metodo para que avance hacia adelante
void mover_adelante(){
digitalWrite(led_derecha, LOW); //LED apagado
digitalWrite(led_izquierda, LOW); //LED apagado
digitalWrite(motorA_fase, LOW); //motor en fase hacia adelante
digitalWrite(motorB_fase, LOW); //motor en fase hacia adelante
analogWrite(motorA_PWM, 100); //velocidad del motor
analogWrite(motorB_PWM, 100); //velocidad del motor
}
//metodo para que avance hacia atras
void mover_atras(){
digitalWrite(led_derecha, LOW); //LED apagado
digitalWrite(led_izquierda, LOW); //LED apagado
digitalWrite(motorA_fase, HIGH);
digitalWrite(motorB_fase, HIGH);
analogWrite(motorA_PWM, 100);
analogWrite(motorB_PWM, 100);
}
//metodo para que gire hacia la derecha
void mover_derecha(){
digitalWrite(led_derecha, HIGH); //LED encendido
delay(100);
digitalWrite(led_izquierda, LOW); //LED apagado
digitalWrite(motorB_fase, HIGH);
digitalWrite(motorA_fase, LOW);
analogWrite(motorB_PWM, 100);
analogWrite(motorA_PWM, 80);
}
//metodo para que gire hacia la izquierda
void mover_izquierda(){
digitalWrite(led_derecha, LOW); //LED apagado
digitalWrite(led_izquierda, HIGH); //LED encendido
delay(100);
digitalWrite(motorA_fase, HIGH);
digitalWrite(motorB_fase, LOW);
analogWrite(motorA_PWM, 100);
analogWrite(motorB_PWM, 80);
}
//metodo par que pare
void parar(){
digitalWrite(led_derecha, HIGH); //LED encendido
digitalWrite(led_izquierda, HIGH); //LED encendido
digitalWrite(motorA_fase, LOW);
digitalWrite(motorB_fase, LOW);
analogWrite(motorA_PWM, 0);
analogWrite(motorB_PWM, 0);
}
//main
void loop(){
//variables de control de los sensores QRD1114
int sensor_derecho_aux = analogRead(derecho_aux);
int sensor_derecho = analogRead(derecho);
int sensor_central = analogRead(central);
int sensor_izquierdo = analogRead(izquierdo);
int sensor_izquierdo_aux = analogRead(izquierdo_aux);
//comprobacio el estado de control
if(control_comienzo == 0){
Serial.println("Bon voyage");
mover_adelante();
delay(100);
control_comienzo = 1;
}else{
//comprobacion que el Sensor del centro este sobre la linea blanca y los demas sobre la linea negra
if (sensor_central >= limit_superficie && sensor_derecho_aux < limit_superficie && sensor_derecho < limit_superficie && sensor_izquierdo < limit_superficie && sensor_izquierdo_aux <
limit_superficie){
mover_adelante();
Serial.println("Mover hacia adelante");
delay(100);
//comprobacion que el sensor derecho este sobre la linea blanca y el auxiliar sobre la negra
}else if (sensor_derecho >= limit_superficie && sensor_derecho_aux < limit_superficie){
mover_izquierda();
Serial.println("Mover hacia la izquierda");
delay(100);
//comprobacion que el sensor derecho auxiliar este sobre la linea blanca y el derecho sobre la linea negra
}else if (sensor_derecho <= limit_superficie && sensor_derecho_aux >= limit_superficie){
mover_izquierda();
Serial.println("Mover hacia la izquierda");
delay(100);
//comprobacion que el sensor derecho, derecho auxiliar este sobre la linea blanca y los demas sobre la linea negra
}else if (sensor_derecho >= limit_superficie && sensor_derecho_aux >= limit_superficie && sensor_central < limit_superficie){
mover_izquierda();
Serial.println("Mover hacia la izquierda");
delay(100);
//comprobacion que el sensor izquierdo este sobre la linea blanca y el auxiliar este sobre la linea negra
}else if (sensor_izquierdo >= limit_superficie && sensor_izquierdo_aux < limit_superficie){
mover_derecha();
Bibliografa:
http://www.education.rec.ri.cmu.edu/products/cortex_video_trainer/lesson/55LineTracking1.html
https://www.kickstarter.com/projects/sparkdevices/spark-core-wi-fi-for-everything-arduinocompatible
https://www.fairchildsemi.com/datasheets/QR/QRD1114.pdf
Anexos: