Sie sind auf Seite 1von 29

17/12/2012

UNIVERSIDAD
AUSTRAL DE CHILE

ROBOT SEGUIDOR DE LNEAS.

N.A.S. Fernando Nanco C. /Andrs Snchez Jara / Juan Luis Almendras.

I.

INTRODUCCION

Una de las aplicaciones ms atrayentes de la electrnica, es la robtica, como en este caso, un robot seguidor de lnea, el cual, clasifica en el campo de la robtica mvil. La tarea fundamental de un robot mvil, es el desplazamiento, que puede ser un entorno conocido o desconocido, por esto es necesario que posea tres funciones fundamentales, la locomocin (nivel fsico), la percepcin (nivel sensorial) y la decisin (nivel de control). Una de las aplicaciones de robots mviles es el transporte de carga a nivel industrial, como es el caso de un sofisticado puerto de descarga en Inglaterra, en donde la carga proveniente de los barcos es transportada por robots mviles de grandes tamaos, operacin totalmente controladas, otra aplicacin son robots desactivadores de explosivos (ver fig. 2) tambin encontramos los robot de exploracin de terrenos no aptos para el hombre, como lo es el robot Spirit, que fue el primero de los dos robots que forma parte del Programa de Exploracin de Marte de la NASA, (ver fig. 1). En el presente informe, se da a conocer el proceso realizado para el logro de la construccin de un Robot Mvil autnomo, capaz de seguir una lnea de color negro, en una base de color claro. Se destaca en el proceso de elaboracin, cuatro etapas: Etapa Sensorial. Etapa de Procesamiento Lgico Programado mediante Arduino uno. Etapa de potencia mediante integrados "puente H" Y etapa de actuadores, que en este caso son los motores de robot.

Fig. 1 Robot Spirit y Oportunity.


2

Fig. 2 Robots desactivadores de bombas.

II. OBJETIVOS Objetivo General: El diseo de un robot seguidor de lnea y demostrar que este mismo es capaz de realizar la funcin de cmo su nombre lo dice seguir una lnea. Objetivos especficos Programacin Arduino Uno, para captar informacin de sensores infrarrojos. Programacin Arduino Uno, para ordenar el movimiento de motores mediante el puente H Justificacin del proyecto Para facilitar el quehacer humano en diferentes mbitos, es indispensable el estudio e implementacin de Sistemas Lgicos Programables, con los cuales optimizamos recursos, ya sean; econmicos, humanos y de tiempo. Ejemplo de ello, es un Robot Mvil

autnomo, capaz de seguir una lnea de color negro, mediante la Programacin de un micro controlador.

III. EXPLICACIN DE FUNCIONAMIENTO

Fig. 3 Funcionamiento esquemtico del Robot En la figura 3 se puede apreciar el funcionamiento a nivel esquemtico del circuito, los sensores QRE1113 constan de un led emisor que se alimenta a travs de arduino utilizando la salida de 5V, y una etapa receptora, un fototransistor, cuando una superficie reflectante como el color blanco de la superficie por donde se mover el rastreador, refleja la luz del led emisor y el fototransistor, baja su resistencia interna entre Colector y Emisor con lo cual hace que se desactive el motor cuando ve negro y se ponga en marcha cuando ve blanco el sensor, esto es que el motor sea desactivo cuando el sensor a detectado una superficie no reflectante. Estas rdenes son dadas a travs del procesamiento lgico programado en arduino, los cuales estn programadas las entradas y las salidas ante los determinados eventos, para si luego, estas rdenes son enviadas al sistema de potencia que en nuestro caso es el circuito integrado L298N, que va en un circuito impreso, el que recibe en PWM las ordenes de Arduino, con lo cual se puede controlar la velocidad ante determinadas circunstancias. Los motores son de corriente continua y los cuales incorporan una caja reductora para mover las ruedas, contra ms grandes sean las ruedas, mas velocidad alcanzar, aunque no hay que pasarse con el dimetro de estas porque si no en las curvas se saldr de trayectoria, unos 6 cm. Y no es lo ideal. Los sensores estn dispuestos mirando al suelo y a unos 2 o 3 mm de separacin, que es lo optimo para este tipo de sensores, desde el suelo a la superficie del sensor y la separacin entre ambos sensores es para que est fuera de la lnea negra que vayamos a usar como trayectoria
4

IV. ESTRUCTURA La estructura de nuestro robot seguidor de lnea fue elaborada a partir de una lamina de acrlico y aluminio, los cuales fueron en parte obtenidos de reciclajes y compradas en el mercado. Esta proporciona apoyo para los motores, Arduino, el circuito impreso, rueda libre delantera y ruedas de traccin.

Fig. 4 chasis de Robot seguidor de lneas NAS. Las llantas del mvil se encuentran en configuracin diferencial, esto es, debido a que la direccin que toma el carro, depende de la diferencia de velocidad entre sus dos llantas, es por eso que cada llanta es independiente de la otra y posee un motor cada una Ver fig. 4. Donde la rueda libre es la que aporta el apoyo en la parte posterior, esta debe exhibir la caracterstica de rodar y pivotar sobre s misma con un movimiento lo ms suave posible para no dificultar la rotacin del robot.

Fig. 5 llantas, motores, caja reductora del seguidor de lneas NAS.


5

La mayor parte de los motores que se utilizan en un robot giran demasiado rpido y no tiene el torque suficiente, es por eso que es imprescindible utilizar una caja de piones reductora como la que se muestra en Fig. 5 b). Esta permite transformar un pequeo motor rpido, pero poco potente, en un motor ms lento pero con mayor torque. Estos son dos motores DC que poseen la caracterstica de girar a igual velocidad en los dos sentidos. V. NIVEL SENSORIAL La percepcin de este robot es de tipo visual, aunque no debemos pensar que el robot va a ver. Su captacin visual consiste en diferenciar entre dos colores. Para este caso, la lnea de color negro sobre una superficie blanca o de un color ms claro. Aprovechando la propiedad fsica de la reflexin, el diodo emite una luz infrarroja dirigida hacia el suelo, y el fototransistor recibe los fotones generados por la reflexin que se produce sobre el suelo. Fig. 6 Sensor Infrarrojo Para nuestro caso, se debe disponer dos sensores ubicados en los bordes de la lnea negra. Los sensores adecuados para este tipo de aplicaciones son QRE1113 Sensor de lineas (Breakout - Analogico) sensores infrarrojos, los cuales constan de un emisor y un receptor.

Fig.6 Sensor de linias QRR1113 Cuando el diodo LED infrarrojo emite un haz de luz, en el punto a. se obtiene una seal de nivel alto o bajo dependiente de la superficie en la que refleje, si el sensor se encuentra en la lnea negra el voltaje sube, cuando esta sobre la superficie blanca el voltaje baja. Se deben realizar pruebas sobre la ubicacin de los sensores para que el mvil se desplace adecuadamente, porque puede suceder que aun cuando los sensores reconozcan la
6

lnea negra y el circuito de control realice la correccin de trayectoria, el mvil se salga de curso por la velocidad y masa del mismo (cantidad de movimiento). De esta forma los casos a tener en cuenta es: distancia entre el eje de las llantas y los sensores, distancia entre los mismos sensores con respecto al ancho de la lnea negra y su alineacin. Esta versin de la tarjeta QRE1113 Breakout cuenta con una salida anloga fcil de usar, que puede variar dependiendo de la cantidad de luz infrarroja reflejada que es devuelta al sensor. Esta Tarjeta es ideal para pequeas aplicaciones de deteccin de lneas y se puede utilizar en sistemas de 3.3V y 5V. La tarjeta QRE1113 es un sensor de reflectancia IR y se compone de dos partes, un led emisor IR y un fototransistor sensible a luz IR. Cuando suministras energa a los pines Vcc y GND del IR Led el interior del sensor se ilumina. Una resistencia de 100 Ohm se coloca en serie con el LED para limitar la corriente. Una Resistencia de 10K coloca la salida del pin en alto, pero cuando la luz del LED se refleja en el fototransistor la salida comenzara a bajar. Cuanta ms luz IR detectada por el fototransistor, menor ser la tensin de salida de la tarjeta Breakout. Siendo su diagrama interno el de la figura 7.

Fig. 7 Diagrama de conexin interno sensor QRE1113

De esta manera el circuito con los 4 sensores QRE1113, (sensores de lnea) quedan de la marera lineal en una placa en la parte delantera del robot como muestra la figura 8

Fig. 8 esquema de placa de circuitos de sensores VI. NIVEL DE CONTROL El circuito de control es el que proporciona las seales hacia los actuadores dependiendo de las seales obtenidas en los sensores. Est conformado bsicamente por las etapas visualizadas en la figura 9 a continuacin.

Fig. 9 etapas del circuito de control.

Donde en se dispone de un solo circuito lgico programable que realiza la tarea de comparar o procesar la informacin adquirida por la etapa sensorial, para luego ordenar a los motores el movimiento respectivo; esta orden es enviada al circuito de potencia el cual es en nuestro caso el circuito integrado L298N ms comnmente llamado puente H que luego enviar la tensin necesaria a los motores dependiendo de la direccin que se requiera.

Fig. 9 Arduino Uno. Arduino Uno, ser el cerebro del robot, arduino uno, es un entorno de Desarrollo de Arduino (del ingls IDE - Integrated Development Environment) es una herramienta que funciona en diferentes plataformas (Windows, Macintosh, Linux) dedicada a la edicin y descarga de programas en la placa Arduino. El cdigo que se ejecuta en las placas est basado en las libreras de aplicacin Wiring API y en las de desarrollo de los integrados AVR. El chip Atmega de Arduino, como muchos microcontroladores, no puede generar una salida analgica, por lo que tiene que utilizar la tcnica PWM (Pulse Width Modulation), de esta manera podremos controlar la velocidad de los motores para distintas instancias que requiera de distintas velocidades, no que solo tenga un nivel alto y uno bajo. Dicho de otra forma, PWM consiste en simular mediante una salida digital una salida analgica.

Tres caractersticas de las seales PWM:

Fig. 10 Caractersticas de las seales PWM Altura (heigth) Anchura (width) Periodo (period)

La modulacin por ancho de pulso, PWM, es una tcnica para obtener resultados anlogos con medios digitales. El control digital se utiliza para crear una onda cuadrada, una seal de conmutacin entre encendido y apagado. Este patrn de encendido-apagado puede simular voltajes en entre completa de (5 voltios) y desactivacin (0 Volts) cambiando la porcin del tiempo de la seal pasa en frente al tiempo que la seal pasa fuera. La duracin de "a tiempo" se llama el ancho de pulso. Para obtener diferentes valores analgicos, cambiar o modular, que el ancho de pulso. Si se repite este patrn de encendido-apagado lo suficientemente rpido con un LED por ejemplo, el resultado es como si la seal es una tensin constante entre 0 y 5V controlar el brillo del LED. En el siguiente grfico, las lneas verdes representan un perodo de tiempo regular. Esta duracin o periodo es la inversa de la frecuencia PWM. En otras palabras, con frecuencia PWM del Arduino a aproximadamente 500 Hz, las lneas verdes medira 2 milisegundos cada uno. Una llamada a analogWrite () es en una escala de 0 a 255, de tal manera que analogWrite (255) solicita a un ciclo de trabajo del 100% (siempre), y analogWrite (127) es un ciclo de trabajo del 50% (en la mitad del tiempo) para los ejemplo.

10

Una vez que se ejecuta este ejemplo, coge tu arduino y agitar un lado a otro. Lo que estamos haciendo aqu es esencialmente el tiempo a travs de la asignacin de espacio. A nuestros ojos, el movimiento desdibuja cada parpadeo del LED en una lnea. A medida que se desvanece el LED de entrada y salida, esas pequeas lneas que crecen y decrecen en longitud. Ahora estamos viendo el ancho de pulso.

Notas y problemas conocidos El PWM productos generados en los pines 5 y 6 tendr mayor a lo esperado ciclos de trabajo. Esto es debido a las interacciones con el millis () y las funciones de retardo (), que comparten el mismo temporizador interno que se utiliza para generar las salidas de PWM. Esto se notar principalmente en bajos valores de ciclo de servicio (por ejemplo, 010) y puede resultar en un valor de 0 no completamente desactivar la salida en los pines 5 y 6.

11

VII. COMANDOS. Arduino dispone de varios pines para generar salidas PWM, a travs algunos de los pines digitales. Dependiendo del modelo de la placa y sobre todo del chip Atmega de que disponga la placa tendremos 3 o 6 salidas PWM, que estn marcadas en la placa: Arduino serie, Arduino NG (chip Atmega8): 3 pines digitales para PWM: 9, 10 y 11. Arduino NG (chip Atmega168), Arduino Decimilla: 6 pines digitales paraPWM: 3, 5, 6, 9, 10 y 11. A diferencia de las entradas analgicas, en las que el conversor analgico digital nos daba un valor entre 0 y 1023, para generar una salida digital el rango es de 0 a 255. Donde 0 equivale a 0V y 255 a 5V. Los pines analgicos, al contrario que los pines digitales, no necesitan ser declarados como modo INPUT(entrada) o OUTPUT (salida).

Lectura de sensores: analogRead ( ) Descripcin Lee el valor del pin analgico especificado. La placa Arduino contiene un canal 6 (8 canales en el Mini y Nano, 16 en el Mega), 10-bit convertidor de analgico a digital. Esto significa que va a asignar voltajes de entrada entre 0 y 5 voltios en cualquier nmero entero entre 0 y 1023. Esto produce una resolucin entre las lecturas de: 5 voltios / unidades o 1024, .0049 voltios (4,9 mV) por unidad. El rango de entrada y la resolucin se puede cambiar con analogReference (). Se tarda aproximadamente 100 microsegundos (0,0001 s) para leer una entrada analgica, por lo que la velocidad de lectura mxima es aproximadamente 10.000 veces por segundo. Sintaxis analogRead (pin) Parmetros pin: el nmero de la patilla de entrada analgica para leer a partir de (0 a 5 en la mayora de las placas, de 0 a 7 en el Mini y Nano, de 0 a 15 en el Mega) Devoluciones int (0 a 1023)
12

Nota Si el pin de entrada analgica no est conectado a nada, el valor devuelto por analogRead () fluctuar basado en una serie de factores (por ejemplo, los valores de las entradas analgicas, otros lo cerca que tu mano es a la junta, etc.)

Por otra parte, debido a que estamos utilizando dos clases de sensores (QRE 1113 A y QRE113 D) si bien ambos tienen similitud, el QRE 1113D es digital, por lo que en su entrada digital se le debe de hacer un acondicionamiento para que pueda leer de manera correcta los 1 y 0 lgicos, pues si bien los lee, la distancia a la que lo hace varia demasiado, provocando errores en los comandos para los motores. Acondicionamiento para QRE 1113D
int readQRE1113D(){ long time = micros(); pinMode( SensorQRE1113D, OUTPUT ); digitalWrite( SensorQRE1113D, HIGH ); delayMicroseconds(10); pinMode( SensorQRE1113D, INPUT ); while (digitalRead(SensorQRE1113D) == HIGH && micros() - time < 3000); int QRE1113D = micros() - time; return QRE1113D; } Para fines prcticos y de igualdad, los QRE1113A (Analgicos) fueron utilizados en los pines digitales tal que no hubiera diferencias de lecturas entre los digitales y analgicos, dndole al mismo tiempo el mismo tipo de acondicionamiento.

Actuadores: analogWrite () Descripcin Escribe un valor analgico ( PWM de onda ) a un pin. Se puede utilizar para encender un LED en diferentes brillos o conducir un motor a varias velocidades. Despus de llamar a analogWrite () , el pin generar una onda cuadrada estable del ciclo de trabajo especificado

13

hasta la siguiente llamada a analogWrite () (o una llamada a digitalRead () o digitalWrite () en el mismo pin). La frecuencia de la seal PWM es de aproximadamente 490 Hz. En la mayora de las placas Arduino (aquellas con el ATmega168 o ATmega328 ), esta funcin se puede utilizar en los pines 3, 5, 6, 9, 10 y 11. En el Arduino Mega, funciona en los pines 2 al 13. Mayores placas Arduino con un ATmega8 analogWrite nico apoyo () en los pines 9, 10 y 11. El Arduino Debido apoya analogWrite () en los pines 2 a 13, ms los pins DAC0 y DAC1 . A diferencia de los pines PWM, DAC0 y DAC1 son convertidores de digital a analgico, y actan como verdaderas salidas analgicas. No es necesario llamar a pinMode () para configurar el pin como salida antes de llamar analogWrite (). El analogWrite funcin no tiene nada que ver con los pines analgicos o el analogRead funcin. Sintaxis analogWrite (pin, valor) Parmetros pin: el pin a escribir. valor: el ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido). Devoluciones Nada. Notas y problemas conocidos El PWM productos generados en los pines 5 y 6 tendr mayor a lo esperado ciclos de trabajo. Esto es debido a las interacciones con el millis () y las funciones de retardo (), que comparten el mismo temporizador interno que se utiliza para generar las salidas de PWM. Esto se notar principalmente en bajos valores de ciclo de servicio (por ejemplo, 0-10) y puede resultar en un valor de 0 no completamente desactivar la salida en los pines 5 y 6.

14

Ejemplo: Ajusta la salida al LED proporcional al valor ledo del potencimetro.


int ledPin = 9 ; / / LED conectado al pin digital 9 int analogPin = 3 ; / / potencimetro conectado al pin analgico 3 int val = 0 ; / / variable para almacenar el valor ledo void setup ( ) { pinMode ( ledPin , SALIDA ) ; / / establece el pin como salida } void loop ( ) { val = analogRead ( analogPin ) ; / / leer el pin de entrada analogWrite ( ledPin , val / 4 ) ; / / analogRead valores van de 0 a 1023, los valores de 0 analogWrite a 255 }

Algoritmo de seguimiento Aqu se relacionan las seales de los dos sensores principales con las seales de control sobre los motores.
S1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 S2 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 S3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 S4 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 MA1 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 MA2 0 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 MR1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 MR2 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Decisin Detener Girar rpido derecha Girar derecha Girar izquierda Girar izquierda Girar Izquierda Avanzar Girar Izquierda Girar rpido izquierda Detener Girar derecha Girar rpido derecha Girar derecha Girar rpido izquierda Girar derecha Avanzar

15

Donde, Sx = 0, indica que el sensor no est sobre la lnea. Y Sx=1, indica que el sensor se encuentra sobre la lnea.

Avance: En este estado, ambos motores darn marcha a cierta velocidad, y a medida en que pasa el tiempo, su velocidad aumentar gradualmente hasta una velocidad tope dada por la programacin (mximo 255 PWM).

Girar Izquierda: En este caso el mvil se ha desviado levemente hacia el lado izquierdo respecto a la lnea, en tal caso, ambos motores seguirn en marcha adelante, pero el motor 1(MA1) ir ms rpido que el motor 2 (MA2) y a medida en que pasa el tiempo MA1 ir cada vez ms rpido, pero MA2 cada vez ms lento. Girar Derecha: en este caso, al igual que Girar Izquierda ambos motores estarn activados, pero ahora MA2 ir cada vez ms rpido y MA1 ms lento.

Girar Rpido Izquierda: En tal caso MA1(motor 1) girar hacia adelante, pero el motor 2 girar en sentido contrario (MR2) para lograr un giro ms brusco de lo habitual hacia la derecha.

Girar Rpido Derecha: El motor 2 girara hacia adelante (MA2) y el motor q hacia atrs (MR1) dando un giro mas brusco hacia la derecha.

Detener: Solamente suceder si se levantase el auto de la pista, detectara una lnea gruesa y larga indicando el final de la pista o si va lento tan solo una lnea cruzada, de energizando totalmente ambos motores.

Todos estos comandos son pensados para dar un mayor flujo de movimiento al seguidor de lineal, tratando de que sea lo menos brusco posible en sus movimientos. VIII. MANEJO DE LA POTENCIA PARA MOTORES DC, PUENTE H IC L298N

16

El circuito integrado L298N (ver fig. 11) una buena opcin en cuanto al control de motores de corriente directa con un consumo menor a 2A y el manejo de voltajes no mayores a 46V, muy superior a nuestro requerimientos, en comparativa con el integrado L293D que es para slo corrientes de 600mA por canal, el cual fue nuestra primera opcin, pero muy cercanos valores a los requeridos entre 450mA a 700mA, por esto la mejor opcin es con el integrado L298N.

Fig. 11 circuito integrado L298N

Se diseo un Puente H en base al circuito L298N con la capacidad de controlar los dos motores de corriente directa simultneamente, (izquierdo-derecho) el cual cuenta con un bloque de alimentacin (V alimentacin, V control y tierra), dos bloque de seales de control y dos bloques para la conexin de los motores. Nota: el voltaje control es una referencia que utiliza el circuito integrado, es necesario conectarlo directamente al voltaje del dispositivo que emite las seales de control.

Caractersticas y Funciones

Amperaje mximo 2A Voltaje de operacin de 4.5V a 46V Seales de control de de 4.5 a 7V Control bidireccional del giro Control de velocidad (Mediante tcnica PWM) Control de dos motores simultneamente
17

Donde es un puente doble, esto quiere decir que podemos controlar ambos motores en las dos direcciones en sentido de las manecillas de reloj y en contra, como podemos observar en la figura 11 el diagrama de conexiones.

Fig. 11 diagrama de conexiones de puente H L298N

Fig. 12 Bidireccional DC control motor Siendo la placa que controla la alimentacin tanto para aduino como para la etapa de potencia en el diagrama de la figura 14.

18

Fig. 13 diagrama placa puente y control energa

IX. MONTAJE Y SOLDADURA DE COMPONENTES

La correcta instalacin y soldadura de un componente electrnico en el circuito impreso es un factor determinante, tanto para el buen funcionamiento del proyecto, como para la calidad y buena presentacin del mismo. Para el ensamble de un circuito impreso se requieren bsicamente tres herramientas muy simples y fciles de conseguir que son: un cautn para soldar, una pinza de punta pequea y cortantes. Se realizaron dos placas, en la cual una de ellas consta de los sensores (ver figura 14) y una segunda y principal placa, la cual se control las seales provenientes de la etapa sensorial y son llevadas a arduino, (ver diagrama de conexiones en figura 13) y es donde est tambin la etapa de potencia con el circuito integrado L298N en la cual se realiz circuito impreso, como muestra la figura 15.

19

Fig. 14 Impreso Placa Sensores Robot N.A.

Fig. 15 Impreso Placa Principal Robot N.A.S

20

IMGENES DE ETAPA DE CONSTRUCCIN

21

Pruebas y correcciones Se debe probar que cada uno de los sensores conmute entre dos voltajes cuando pase de la superficie blanca a la lnea negra. Se mediante el MONITOR SERIAL se analiza si las seales de cada sensor est siendo leda correctamente por arduino. Se realiza placa puente H y se prueba mediante cdigo bsico para accionar los motores alternadamente para verificar el correcto funcionamiento de placa de control de potencia con el integrado L293D el cual tiene un funcionamiento al limite que su potencia lo permite <600mA. Con lo que se decide cambiar y disear placa para el integrado L298N con el que se permite manejar corrientes de 2A teniendo como pick 3.5A. Se realiza prueba con los sensores y motores para ver el correcto funcionamiento del robot.
22

X. BATERIAS

La alimentacin de los circuitos del robot es mediante una batera recargable pues esta proporciona mayores corrientes que las bateras no recargables. Se puede utilizar un arreglo de bateras recargables en formato AA ya que tambin presentan una buena capacidad en tamao reducido y adems se consiguen en le mercado fcilmente, pero la mejor opcin es hacer uso de bateras recargables (ver fig. 12) que se utilizan en diferentes artculos electrnicos que proporcionan las cantidades de corriente (1000mAH) y voltaje (6V 12V) necesarias, siendo esta de 7.4V tensin y corriente necesaria para tener un optimo funcionamiento del robot seguidor de lneas.

Fig. 12 Batera de Litio Polimero 7.4V 1000mah 20C

Especificaciones: Configuracion: 2S 7.4V Descarga constante: 20C Descarga maxima: 30C (10seg) Peso neto: 55g Tamao: 75 x 35 x 12mm Conector de carga: JST-XH

23

XI PROGRAMACIN
int SensorD1 = 8, SensorA1= 7, SensorA2=4, SensorD2=2; // int vel=30; int motor2A = 3; // Motor Izquierdo int motor2R = 5; int motor1A = 6; // Motor Derecho int motor1R = 9; int i=0, d=0, rd=0, ri=0; int An1=1500, An2=1500, Dig1=1500, Dig2=1500; void setup(){ Serial.begin(9600); pinMode(motor1A,OUTPUT); pinMode(motor2A,OUTPUT); pinMode(motor1R,OUTPUT); pinMode(motor2R,OUTPUT); analogWrite(motor1A,0); analogWrite(motor1R,0); analogWrite(motor2A,0); analogWrite(motor2R,0); delay(1000); } void loop(){ int ValueD1 = readD1(); int ValueD2 = readD2(); int ValueA1 = readA1(); int ValueA2 = readA2(); Serial.print(ValueD1); Serial.print(" "); Serial.print(ValueA1); Serial.print(" "); Serial.print(ValueA2); Serial.print(" "); Serial.print(ValueD2); //Se mueve hacia Adelante if(ValueD1<Dig1 && ValueD2<Dig2 && ((ValueA1<An1 && ValueA2<An2) || ValueA1>An1 && ValueA2>An2)) { if(vel>70) { vel=70; } vel=vel+5; d=0; i=0; ri=50; rd=50; Serial.print(" "); Serial.print("Avanzar"); Serial.print(" vel=");

24

Serial.print(vel); digitalWrite(motor1R, LOW); digitalWrite(motor2R, LOW); analogWrite(motor1A, vel); analogWrite(motor2A, vel); } //Se mueve a la derecha else if(ValueD2<Dig2 && ((ValueD1 < Dig1 && ValueA1 < An1 && ValueA2 >An2 ) || (ValueD1 > Dig1 && ValueA1 > An1 && ValueA2 <An2))) { i=0; ri=50; rd=50; if(vel<5) { vel=5; } if(d<=80) { vel=vel-5; d=d+10; } else if(d>80) { d=80; } Serial.print(" "); Serial.print("Derecha"); Serial.print(" vel="); Serial.print(vel); Serial.print(" d="); Serial.print(d); digitalWrite(motor1R, LOW); digitalWrite(motor2R, LOW); analogWrite(motor1A, vel + d); analogWrite(motor2A, vel); } //Se mueve a la izquierda else if(ValueD1<Dig1 && (ValueA1<An1 && ValueA2 >An2 && ValueD2 > Dig2) || (ValueA1 > An1 && ValueA2 < An2 && ValueD2 < Dig2)) { d=0; ri=50; rd=50; if(vel<5) { vel=5; } if(i<=80) {

25

vel=vel-5; i=i+10; } else if(i>80) { i=80; } Serial.print(" "); Serial.print("Izquierda"); Serial.print(" vel="); Serial.print(vel); Serial.print(" i="); Serial.print(i); digitalWrite(motor1R, LOW); digitalWrite(motor2R, LOW); analogWrite(motor2A, vel + i); analogWrite(motor1A,vel); } //Se mueve de manera mas brusca a la derecha else if((ValueD1>Dig1 && ValueA2>An2 && ((ValueA1<An1 && ValueD2>Dig2) || (ValueA1 > An1 && ValueD2 < Dig2))) || (ValueD1 < Dig1 && ValueA2 < An2 && ValueD2 > Dig2)) { d=0; i=0; ri=50; while(ValueA1<An1) { ValueA1 = readA1(); if(vel<1) { vel=1; } if(rd<=80) { vel=vel-1; rd=rd +5; } else if(rd>80) { rd=80; } Serial.print(" "); Serial.print("Rapido derecha"); Serial.print(" vel="); Serial.print(vel); Serial.print(" rd="); Serial.print(rd); Serial.println(""); digitalWrite(motor1R, LOW); digitalWrite(motor2A, LOW); analogWrite(motor1A, vel);

26

analogWrite(motor2R, rd); } } //Se mueve de manera mas brusca a la izquierda else if((ValueD2>Dig2 && ValueA1>An1 && ((ValueA2<An2 && ValueD1>Dig1) || (ValueA2 > An2 && ValueD1 < Dig1))) || (ValueD1 > Dig1 && ValueA1 < An1 && ValueD2 < Dig2)) { d=0; i=0; rd=50; while(ValueA2<An2) { ValueA2 = readA2(); if(vel<1) { vel=1; } if(ri<=80) { vel=vel-1; ri=ri +5; } else if(ri>80) { ri=80; } Serial.print(" "); Serial.print(ValueA2); Serial.print(" "); Serial.print("Rapido izquierda"); Serial.print(" vel="); Serial.print(vel); Serial.print(" ri="); Serial.print(ri); Serial.println(""); digitalWrite(motor1A, LOW); digitalWrite(motor2R, LOW); analogWrite(motor1R, ri); analogWrite(motor2A, vel); } } // Se detiene else if(ValueD1>Dig1 && ValueD2>Dig2 && ((ValueA1<An1 && ValueA2<An2) || ValueA1>An1 && ValueA2>An2)) { d=0; i=0; ri=50; rd=50; Serial.print(" "); Serial.print("Detener"); Serial.print(" vel="); Serial.print(vel); digitalWrite(motor1A,LOW);

27

digitalWrite(motor2A,LOW); digitalWrite(motor1R,LOW); digitalWrite(motor2R,LOW); } Serial.println(""); } int readD1(){ long timeD1 = micros(); pinMode( SensorD1, OUTPUT ); digitalWrite( SensorD1, HIGH ); delayMicroseconds(10); pinMode( SensorD1, INPUT ); while (digitalRead(SensorD1) == HIGH && micros() - timeD1 < 3000); int D1 = micros() - timeD1; return D1; } int readD2(){ long timeD2 = micros(); pinMode( SensorD2, OUTPUT ); digitalWrite( SensorD2, HIGH ); delayMicroseconds(10); pinMode( SensorD2, INPUT ); while (digitalRead(SensorD2) == HIGH && micros() - timeD2 < 3000); int D2 = micros() - timeD2; return D2; } int readA1(){ long timeA1 = micros(); pinMode( SensorA1, OUTPUT ); digitalWrite( SensorA1, HIGH ); delayMicroseconds(10); pinMode( SensorA1, INPUT ); while (digitalRead(SensorA1) == HIGH && micros() - timeA1 < 3000); int A1 = micros() - timeA1; return A1; } int readA2(){ long timeA2 = micros(); pinMode( SensorA2, OUTPUT ); digitalWrite( SensorA2, HIGH ); delayMicroseconds(10); pinMode( SensorA2, INPUT ); while (digitalRead(SensorA2) == HIGH && micros() - timeA2 < 3000); int A2 = micros() - timeA2; return A2; }

28

Explicacin de la programacin
Siguiendo la tabla de verdad mostrada con anterioridad, los motores avanzarn hasta un mximo de 70 PWM, pues al aumentar demasiado el control del robot no era optimo, luego los giros suaves provocados al mover ambos motores(uno ms rpido que otro) provocaba mayor eficiencia de giros y estabilidad, si se salida demasiado de la pista los cuarto sensores(esquinas) mediante el ciclo while se estabilizaba hasta llegar a lineanizarse nuevamente al centro por medio de giros en direcciones contrarias por los motores y por ltimo el frenado, muy importante si se deseaba estar probando y al levantarlo detener los motores, o por una lnea cruzada tambin detenerlo.

XII. CONCLUSIONES Y COMENTARIOS

A la hora del montaje encontramos dificultades especialmente a la hora de calibrar nuestros motores an utilizando los componentes ms idneos para el caso. Esta dificultad nos llev al desarrollo y diseo de tres placas para control de los motores con diferentes puentes h. - Los sensores tambin fueron de alguna dificultad, aunque al final se lograron calibrar teniendo en cuenta los parmetros exactamente y con la mayor precisin posible. - Nos queda con marcado inters la conclusin casi obvia de tener en cuenta los imprevistos a la hora de realizar cualquier montaje pues, aunque la electrnica digital es en s bastante precisa al contrario de la analgica, siempre hay inconvenientes y retrasos, generalmente debidos al factor humano. - Tambin como en estos proyectos se combinan factores analgicos, mecnicos y digitales, esta confluencia hace an ms crtico el tiempo de preparacin de los proyectos.

Referencias

http://www.arduino.cc/en/Tutorial/PWM http://robots-argentina.com.ar http://arduino.cc/en/Reference/AnalogRead http://www.x-robotics.com/ http://bildr.org/2011/06/qre1113-arduino/ http://garagelab.com/profiles/blogs/tutorial-line-sensor-with-arduino

29

Das könnte Ihnen auch gefallen