reporte line tacker

6
Universidad Galileo Guatemala 28 de Abril del 2016 Facultad: FISICC Alumno: Alexander Hung / Abraham Hernández Curso: Sistemas de Arquitectura Carnet: 14001240 / 14005269 Sección: A Hora de clase: 16:00-17:40 Catedráticos: Ing. Oscar Rodas Ing. Cristian Aguilar Día de clase: Jueves L Objetivos: Este proyecto consiste en diseñar y consturir un carrito que siga una linea blanca sobre una superficie negra por medio de sensores infrarrojos, para eso debemos aprender el uso de las tarjetas microcontroladoras, sensores y motores para combinarlos. Resumen: Para fabricar el carrito usamos dos motores DC, 5 sensores infrarrojos QRD1114 un puente H y una tarjeta Spark Core para controlar dichos motores, para programar usamos una tarjeta oruga, la cual usa el mismo lenguaje que arduino. Teoría: Un line tracker se compone de un sensor de luz infrarroja y un LED infrarrojo, funciona mediante la iluminación de una superficie con luz infrarroja, el sensor a continuación recoge la radiación infrarroja reflejada y , en base a su intensidad, determina la reflectividad de la superficie en cuestión, las superficies de color reflejarán más luz que las superficies oscuras; por lo tanto, las superficies de colores claros aparecerá más brillante al sensor, esto permite al sensor detectar una línea oscura sobre una superficie pálida, o una línea pálida sobre una superficie oscura. Los sensores que utilizamos son los QRD1114. 1 Proyecto #3 Line Tracker

Upload: abraham-hernandez

Post on 11-Jul-2016

244 views

Category:

Documents


0 download

DESCRIPTION

line tracker

TRANSCRIPT

Universidad GalileoGuatemala 28 de Abril del 2016

Facultad: FISICCAlumno: Alexander Hung / Abraham Hernndez

Curso: Sistemas de ArquitecturaCarnet: 14001240 / 14005269

Seccin: AHora de clase: 16:00-17:40

Catedrticos: Ing. Oscar Rodas Ing. Cristian AguilarDa de clase: Jueves

1

LProyecto #3 Line Tracker

Objetivos: Este proyecto consiste en disear y consturir un carrito que siga una linea blanca sobre una superficie negra por medio de sensores infrarrojos, para eso debemos aprender el uso de las tarjetas microcontroladoras, sensores y motores para combinarlos.

Resumen: Para fabricar el carrito usamos dos motores DC, 5 sensores infrarrojos QRD1114 un puente H y una tarjeta Spark Core para controlar dichos motores, para programar usamos una tarjeta oruga, la cual usa el mismo lenguaje que arduino.

Teora: Un line tracker se compone de un sensor de luz infrarroja y un LED infrarrojo, funciona mediante la iluminacin de una superficie con luz infrarroja, el sensor a continuacin recoge la radiacin infrarroja reflejada y , en base a su intensidad, determina la reflectividad de la superficie en cuestin, las superficies de color reflejarn ms luz que las superficies oscuras; por lo tanto, las superficies de colores claros aparecer ms brillante al sensor, esto permite al sensor detectar una lnea oscura sobre una superficie plida, o una lnea plida sobre una superficie oscura.Los sensores que utilizamos son los QRD1114.

El valor valor de la resistencia del led del sensor lo calculamos con la siguiente ecuacin: donde vcc es el voltaje de la bateria de alimentacin, Vled es el voltaje requerido por el led, If es la corriente del mismo.

La tarjeta controladora que usamos es un Spark Core el cual es compatible con el lenguaje de arduino, la lectura analoga del spark core es de 12 bits en comparacin del arduino que es de 10 bits, esto nos da una mejor resolucin; por este motivo decidimos usar dicha tarjeta.

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 trackerint control_comienzo = 0; //0 si es la primera vez, 1 en caso contrario//metodo para configurar los modos de pines y puerto serialvoid 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 adelantevoid 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 atrasvoid 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 derechavoid 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 izquierdavoid 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 parevoid 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);}//mainvoid 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){ 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(); Serial.println("Mover hacia la derecha"); delay(100); //comprobacion que el sensor izquierdo auxiliar este sobre la linea blanca y izquierdo sobre la linea negra }else if(sensor_izquierdo_aux >=limit_superficie && sensor_izquierdo < limit_superficie){ mover_derecha(); Serial.println("Mover hacia la derecha"); delay(100); //comprobacion que los sensores izquierdo, izquierdo auxiliar este sobre la linea blanca y los demas sobre la linea negra }else if(sensor_izquierdo >= limit_superficie && sensor_izquierdo_aux && sensor_central < limit_superficie){ mover_derecha(); Serial.println("Mover hacia la derecha"); delay(100); //compobrobacion que todos los sensores esten en blanco }else if (sensor_central >= limit_superficie && sensor_derecho >= limit_superficie && sensor_derecho_aux >= limit_superficie && sensor_izquierdo >=limit_superficie && sensor_izquierdo_aux >= limit_superficie){ parar(); Serial.println("Tracker parado"); delay(100); }

}}

Bibliografa:http://www.education.rec.ri.cmu.edu/products/cortex_video_trainer/lesson/5-5LineTracking1.htmlhttps://www.kickstarter.com/projects/sparkdevices/spark-core-wi-fi-for-everything-arduino-compatiblehttps://www.fairchildsemi.com/datasheets/QR/QRD1114.pdf

Anexos: