Carrito Evasor de Obstaculos

44
REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS” UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboración: Martes, 16 de Enero de 2007. - 1 - UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA DIVISIÓN DE CIENCIAS BÁSICA E INGENIERÍA INGENIERÍA EN ELECTRONICA Proyecto Final de Ingeniería en electrónica “CARRITO EVASOR DE OBSTACULOS” Asesor: Mauricio López Villaseñor Elaboraron: Pablo Arturo Barragán Chávez Ricardo Flores Hernández Cesar David Salazar García ______________________ Visto bueno por asesor

Transcript of Carrito Evasor de Obstaculos

Page 1: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 1 -

UNIVERSIDAD AUTÓNOMA METROPOLITANA IZTAPALAPA

DIVISIÓN DE CIENCIAS BÁSICA E INGENIERÍA

INGENIERÍA EN ELECTRONICA

Proyecto Final de Ingeniería en electrónica

“CARRITO EVASOR DE OBSTACULOS”

Asesor: Mauricio López Villaseñor

Elaboraron: ♣ Pablo Arturo Barragán Chávez ♣ Ricardo Flores Hernández ♣ Cesar David Salazar García

______________________

Visto bueno por asesor

Page 2: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 2 -

INDICE

Introducción………………………………………………………………………………………………….3

Planteamiento del proyecto .…………………………………………………………………………….…4

Descripción general de la solución del problema y construcción

del “carrito evasor de obstáculos” ………………………………………………………………………...5

Solución del problema por “Hardware” …………………………………………………………………10

Solución del problema por “Software” ………………………………………………………………… .16

Conclusiones ……………………………………………………………………………………………….42

Bibliografía ……………………………………………………………………………………………… …44

Page 3: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 3 -

INTRODUCCIÓN Desde la invención del circuito integrado, el desarrollo constante de la electrónica digital ha dado lugar a dispositivos cada vez más complejos. Entre ellos los microprocesadores y los microcontroladores, los cuales son básicos en las carreras de ingeniería electrónica. Los microcontroladores se utilizan en circuitos electrónicos comerciales desde hace unos años de forma masiva, debido a que permiten reducir el tamaño y el precio de los equipos. Un ejemplo de éstos son los teléfonos móviles, las cámaras de video, la televisión digital, la transmisión por satélite y los hornos de microondas. Pero hasta hace poco tiempo, para el aficionado a la electrónica resultaba poco menos que imposible incluirlos en sus montajes por diversas razones: alto precio, complejidad de los montajes y, principalmente, por la escasez y el alto precio de las herramientas de software. El los últimos años se ha facilitado enormemente el trabajo con los microcontroladores al bajar los precios, aumentar las prestaciones y simplificar los montajes, de manera que en muchas ocasiones merece la pena utilizarlos en aplicaciones donde antes se utilizaba lógica discreta. Diversos fabricantes ofrecen amplias gamas de microcontroladores para todas las necesidades. Pero sin duda, hoy en día los microcontroladores más aceptados para diseños profesionales son los microcontroladores PIC fabricados por Microchip Technology Inc, que recientemente se anunciaba como el mayor fabricante del mundo de microcontroladores de 8 bits. En este auge ha influido decisivamente la política de Microchip al ofrecer la documentación y todo el software necesario de manera gratuita en su pagina Web www.microchip.com Esto, junto con otras cuestiones técnicas, han hecho que hoy en día resulte muy fácil incluir los microcontroladores PIC no solo en los diseños de los aficionados a la electrónica, sino también en complejos sistemas digitales. Muchas de estas aplicaciones son sobre el control de servomecanismos tales como brazos mecánicos y robots en general. En este proyecto se implementa un “carrito evasor de obstáculos” usando estos microcontroladores PIC. Además, en este reporte se intenta que el lector logre entender de manera sencilla los pasos en la implementación del carrito evasor de obstáculos y obtenga un panorama de la programación utilizada en estos dispositivos electrónicos Se pretende explicar de manera concreta el funcionamiento de algunos microcontroladores, en nuestro caso utilizamos los microcontroladores Pic16F84 y Pic16F877, aunque cabe mencionar que si se comprende a fondo un microcontrolador en particular, los demás pueden aprenderse con facilidad partiendo de la estructura de los mencionados. La forma en la que se estructuran los temas en este reporte es de tal manera que el lector entienda con claridad los procedimientos que se llevaron a cabo para implementar el “carrito evasor de obstáculos”, usando como microcontrolador los PIC´s, mostrando los detalles electrónicos de la circuiteria y la programación, para mejoras y modificaciones futuras que el lector quisiese implementar.

Page 4: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 4 -

PLANTEAMIENTO DEL PROYECTO Se desea desarrollar un “carrito” que sea controlado por un microcontrolador PIC, mediante el uso de diferentes dispositivos electrónicos, tales como sensores, motores de corriente directa, etc. El objetivo principal del “carrito” es evadir obstáculos que se encuentren enfrente de su trayectoria de movimiento. Para ello, el microcontrolador que controla el carrito, utilizará un sensor de donde obtendrá lecturas, no solo de la trayectoria de movimiento, sino que también de otros ángulos para tener opciones para decidir el cambio de la trayectoria para evadir el obstáculo. La solución a la problemática planteada en los párrafos anteriores se puede dividir en “hardware” y en “software”, cada una de estas soluciones se menciona en los siguientes apartados, pero antes se menciona una descripción general del proceso de solución y construcción del “carrito”.

Page 5: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 5 -

DESCRIPCIÓN GENERAL DEL PROCESO DE SOLUCIÓN Y CONSTRUCCIÓN DEL CARRITO En el planteamiento de la construcción de este robot se consideraron los siguientes puntos:

• Nivel físico: comprende la estructura física, las unidades motoras, y las etapas de potencia. • Nivel de reacción: esta formado por el conjunto de sensores y los sistemas básicos para su

manejo. • Nivel de inteligencia: abarca la planificación a largo plazo.

Para llegar al modelo final del robot se paso por un proceso de experimentación, ya que se probaron diferentes carrocerías y diferentes tipos de motores. La primer prueba que se hizo como parte del proceso de experimentación fue hacer un “seguidor de línea” en el que se utilizó el PIC 16F84, el cual controlaba las señales emitidas por dos sensores de infrarrojos modelo CNY-70 (figura 3), los cuales emiten luz infrarroja que es absorbida por el color negro, esto considerado como un “0” binario, y la luz infrarroja en el color blanco es reflejada a la base del fototransistor de los sensores que es considerado como “1” binario. Este seguidor de línea tiene un funcionamiento sencillo, el cual consiste en que si sobre una superficie blanca dibujamos un circuito negro con curvas y rectas, éste seguidor de línea deberá de seguir el camino sin desviarse de la línea negra. La elección de los colores es obvia, el blanco y el negro tienen unas características especiales a la hora de reflejar luz que no la tienen otros colores.

La construcción del seguidor de línea nos dejo un primer acercamiento tanto en la programación del PIC, como la utilización de motores de DC. Este conocimiento adquirido fue de gran utilidad para llegar al objetivo final, o sea obtener un robot evasor de obstáculos.

Debido a que el objetivo de este reporte es explicar el software y el hardware del robot evasor de obstáculos, se omiten tanto el programa que se grabo en el PIC 16F84 como el procedimiento para la construcción física del seguidor de línea. Después de contar con la experiencia obtenida en la realización del seguidor de línea pasamos a la elaboración del robot. La primera carrocería del robot fue la de un carrito de control remoto. Lo único que usamos de él fue su chasis y sus motores, pues se desactivo el circuito de control remoto. Este carrito tenía dos motores de DC. El motor posterior controlaba la tracción en tanto que el motor frontal se encargaba de hacer girar las llantas delanteras de izquierda a derecha y viceversa para poder girar. El control de este carrito fue relativamente sencillo ya que para hacerlo avanzar solo sé tenia que activar el motor de tracción. Sin embargo para controlar sus giros se diseño un algoritmo que consistía en una secuencia de 5 pasos. Esta secuencia es como sigue: primero se activa el motor frontal para hacer girar las llantas delanteras hasta un extremo, luego se activaba el motor de tracción para que el carro retroceda una distancia determinada, a continuación las llantas delanteras se hacen girar hasta el otro extremo y después el carro debe avanzar cierta distancia, y por ultimo se manda la instrucción de que por medio de un cierto tiempo de activación del motor frontal se centren las llantas. Es importante mencionar que al término de esta secuencia el carro gira aproximadamente 20°. De esta forma, dependiendo del número de grados que se quería que el carro girara se repetía esta secuencia el número de veces necesario. Como se pretendía tener un carro evasor de obstáculos se pensó en colocar varios sensores que indicaran si el carro podía seguir avanzando o no. Después se llego a la conclusión de que solo sé necesitaría un solo sensor, pues si se montaba en un motor entonces sé podía hacer un barrido de 180° para determinar si el carro tenia una posible salida. Pero si no encontraba una salida

Page 6: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 6 -

entonces se le indicaría al motor que moviera el sensor hacia atrás y de esta forma poder medir la distancia trasera y saber cuanto podía retroceder el carro, o en su defecto si no había distancia suficiente no se movería hacia atrás. El primer resultado que se obtuvo fue relativamente satisfactorio. El inconveniente que se presento fue que el carro pesaba mucho y que su consumo de corriente era elevado. Además como para poner las llantas delanteras al centro se le indicaba al motor frontal que girara un cierto tiempo, entonces al irse descargando las baterías que alimentaban al circuito las llantas ya no quedaban centradas. Esto sucedía por que a menor corriente el motor giraba más despacio y entonces se necesitaba más tiempo para que las llantas quedaran centradas. Un factor que determino el elevado consumo de corriente fue el peso del carro. Además de que el carro no hacia 100% lo solicitado, otro factor para decidir cambiar de carro fue el consumo de energía, pues como ya se menciono el gran peso del carro hacia que se acabaran mas rápido las pilas. Esto por supuesto no es rentable. Para solucionar este problema se resolvió cambiar de carrocería y de motores. Ahora la carrocería tenía que ser menos pesada y de tamaño lo más pequeño posible. En cuanto a los motores se pensó en aquellos que están montados en un mecanismo de engranes y que hace que tengan un mejor torque. Además los motores debían consumir poca corriente. Así pues, después de una búsqueda algo tediosa se pudo conseguir el material requerido. Los motores adquiridos fueron tres motoreductores de poco consumo de corriente y de relativamente buen torque. Sin embargo la velocidad de éstos no es buena, ya que dos de ellos tienen a penas 42 RPM y el otro 30 RPM. El precio de este tipo de motores es bajo si los comparamos con los servomotores. La nueva estructura del robot fue de triciclo, o sea de tres llantas. Dos llantas se pusieron al frente y una atrás. Cada llanta delantera tiene un motor. La llanta trasera es loca y se usa para que el robot tenga un movimiento libre, es decir cuando los dos motores se ponen en marcha al mismo tiempo el carro se debe ir en línea recta y cuando se quiera que gire, la llantita trasera debe seguir el movimiento. En la figura 1D se ve el robot.

Fig. 1D Robot evasor de obstáculos.

El inconveniente que sé pensó que podía presentarse fue tener motores con una marcada diferencia en sus revoluciones, lo cual provocaría que el robot no avanzara en línea recta. Sin

Page 7: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 7 -

embargo los motores que se consiguieron tienen casi el mismo número de revoluciones y con un adecuado torque. La primera base del carro fue de plástico delgado, pero al colocar los motores y el circuito la base se pandeo. Por lo que se opto por cambiar la plataforma. El nuevo material de ésta fue de madera delgada, obteniendo una mayor estabilidad y una mejor facilidad para trabajar con ella, pues si se requiere hacer una perforación o poner algún aditamento especial es más cómodo. Al montar todo en su sitio y hacer las pruebas correspondientes se presento el problema de que la llanta loca no giraba correctamente provocando que el robot no se desplazara en línea recta, esto debido al tipo de superficie en la cual se realizaron las pruebas. Para resolver este inconveniente se consiguió una llanta loca con diferentes características, entre las que destacan un menor tamaño, menor peso y mejor juego. El mecanismo para mover el sensor analógico fue el mismo que se utilizo en el primer robot, es decir, el sensor se acoplo en un motor de DC. La figura 2D muestra al sensor montado en el motor. de DC.

Fig. 2D Sensor analógico montado en motor de DC.

Comparando a nivel software los dos carritos básicamente tienen el mismo programa, lo único que cambia es la parte donde se manda que el robot busque la salida, pues como ya se menciono el primer carro utiliza una secuencia de 5 pasos para poder girar, en tanto que el segundo gira al hacer funcionar un motor en un sentido y el otro en sentido opuesto. El programa que se grabo en el PIC 16F877 es el encargado de que el robot no choque, evada obstáculos y tome la mejor decisión para evadirlos. El PIC 16F877 se encarga de recibir información del exterior y procesarla, sin embargo la forma en como se procesa esta información depende de la lógica del diseño del programa. Para resolver un problema mediante la programación existen distintas formas o modos de solucionarlo. Sin embargo el programa que se realizo cumple con lo siguiente:

Page 8: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 8 -

• Fácilmente comprensible para quien pretenda leerlo. • Obtiene resultados de forma rápida. • Ocupar la menor memoria posible. • El programa esta subdividido en programas más elementales, es decir el programa es

modular.

De esta forma el programa tiene la estructura de un programa principal y de subrutinas. El programa principal utiliza subrutinas, que a su vez realizan tareas específicas y dan resultados rápidos. Cada subrutina puede usar o no otras subrutinas. Por ejemplo, las subrutinas de retardo son muy usadas por otras subrutinas que realizan ciertas tareas. De manera general el programa realiza lo siguiente: Como primer movimiento el sensor analógico GP2Y0A21YK, que esta montado en un motor de DC, gira a la derecha. Este primer movimiento es importante ya que sirve como un punto de referencia, pues si por algún motivo en cualquier instante el robot se queda sin energía o se resetea, no importará donde quede posicionado el sensor por que al reiniciarse la secuencia el sensor primero busca su punto de referencia. Este párrafo explica el mecanismo y la lógica que se uso para montar el sensor en el motor. Como ya se menciono el sensor busca cuatro puntos: derecha, centro, izquierda y atrás. Para lograr esto se fabrico una placa pequeña, en la cual hay dispuestos cuatro conductores de cobre, uno en cada lado de la placa. Esta primer placa esta sujeta al bastidor del motor B02 1:280. Una segunda placa se monto en el eje del motor; de esta forma cuando el motor gira también lo hace la placa. La placa que esta montada en el eje dispone de un pequeño arco metálico que esta orientado hacia abajo. Este arco esta polarizado con un voltaje de 5v. De esta forma cuando se hace girar el motor van haciendo contacto el arco metálico con los conductores de cobre. Esta situación provoca que se cierre un circuito y que se polarice cada uno de los conductores, que a su vez están conectados al PIC 16F877. Tomando como referencia el frente del carrito se tiene lo siguiente: los conductores derecho, centro, izquierdo y trasero están conectados a los bits RC4, RC5, RC6 Y RC7 respectivamente. De esta forma cuando el PIC recibe un voltaje alto (5v) en estos bits se realiza una tarea determinada. En la figura 3D se muestra el mecanismo que hace girar al sensor.

Fig. 3D Mecanismo para mover sensor analógico

La figura 4D muestra un esquema de conexión de los conductores de cobre con los bits correspondientes en el PIC.

Page 9: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 9 -

Centro

RC5 Izquierda Derecha RC6 RC4 RC7 Atrás

Fig. 4D Placa con cuatro conductores de cobre

Después se debe posicionar el sensor analógico al centro, es decir en la posición que mida hacia el frente del carrito. Si la distancia que el sensor mide es mayor a 20cm el carrito empieza a moverse. La velocidad con la que se mueve aumenta cuando el sensor mide que hay espacio libre mayor a 80cm. De esta forma el robot continua avanzando hasta que el sensor detecta que hay un obstáculo a una distancia aproximada de 80cm. Cuando esto pasa el carrito disminuye su velocidad y se aproxima al obstáculo hasta que se detiene a una distancia de más o menos 20cm. Cundo el carrito esta frente al obstáculo, el sensor empieza un barrido de 180° empezando desde la derecha y finalizando en la izquierda. Este barrido es muy importante ya que es cuando se hacen las lecturas de las distancias. Cada lectura se da cada medio segundo. Al finalizar este barrido se lee el registro de salidas para saber si hay o no una salida. Si existe una salida el carrito gira hasta encontrarla. Después se vuelve a repetir la secuencia desde el principio, esto es, el sensor busca su punto de referencia luego el centro, etc. En caso de que no exista una salida al frente, el sensor se mueve hacia atrás para medir si hay distancia libre para que el robot retroceda. Si el robot puede retroceder, se mueve aproximadamente 20cm hacia a tras, luego el sensor nuevamente empieza el barrido para saber si hay o no salida al frente o a los lados. En caso de que el carro no pueda retroceder se quedara parado, por que no hay salida ni enfrente ni atrás. En esta situación, para que el robot se mueva uno de los obstáculos debe quitarse. Es importante aclarar que el robot no esta capacitado para trabajar en un contorno de laberinto. Un punto importante que debe resaltarse es que cuando el robot encuentra un obstáculo debe decidir cual es la mejor trayectoria de movimiento. Es decir, si el carrito queda mas a la derecha del obstáculo y a pesar de que a al izquierda de éste también haya salida, debe girar a la derecha porque es la trayectoria de movimiento más corta. La figura 5D ejemplifica esta situación.

Page 10: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 10 -

Mejor trayectoria de movimiento Trayectorias de movimiento 30°

Fig. 5D Situación en la que el robot debe decidir la mejor trayectoria de movimiento En esta figura se aprecia que cada 30° se hace una lectura. De esta forma se realizan un total de siete lecturas. A demás se muestra que a pesar de que también hay salidas a la derecha y a la izquierda, la más conveniente es la que se encuentra más cercana al obstáculo, por que el robot no tiene que girar mucho para evadir el objeto. SOLUCIÓN POR “HARDWARE” Para solucionar el problema de Hardware (mencionados anteriormente) se tuvo que elegir minuciosamente el material (componentes electrónicos y motores) de acuerdo a las necesidades del “carrito evasor de obstáculos”, basándonos en sus características técnicas. Los materiales utilizados se mencionan a continuación: Material utilizado:

- 1 PIC 16F84 - 1 PIC 16F877 - 2 Sensores infrarrojos CNY- 70. - 2 motoreductores modelo B02 1:280 - 1 motorreductor modelo B01 1:200 - 1 sensor analógico Sharp modelo GP2Y0A21YK - 2 Driver´s L293D - 3 Reguladores de voltaje LM7805 - 1 Cristal a 4Mhz con dos capacitores de 22pF

Robot

Obstáculo

Page 11: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 11 -

Especificaciones del material: PIC16F84 PIC16F87 Memoria programa 1k X 14 8 Kbytes Memoria de datos EEPROM 64 bytes 256 bytes

Memoria de datos Ram 68 bytes 368 bytes Instrucciones 35 35 Interrupciones 4 14

Entradas / Salidas 13 33 Terminales 18 40

Frecuencia maxima 10 Mhz 20 Mhz Timer / Contador 8 bits 3 Timers 2 de 8 bits 1 de 16 bits Convertidos A/D No Si Canales PWM No 2

Figura 2. Diagrama del PIC16F877. Figura 1. Diagrama del PIC16F84. Sensor infrarrojo CNY- 70. El CNY70, que se muestra en la figura 3, es un sensor óptico reflexivo que tiene una construcción compacta dónde el emisor de luz y el receptor se colocan en la misma dirección para detectar la presencia de un objeto utilizando la reflexión del infrarrojo sobre el objeto. La longitud de onda de trabajo es 950nm. El detector consiste en un fototransistor. Características: La construcción compacta con distancia de centro-a-centro de 0.1 ' (pulgadas) No necesita ningún ambiente especial. Señal de salida alta. El coeficiente de temperatura bajo. Detector provista de filtro óptico. El ratio de corriente de transferencia (CTR) típico es del 5%.

Page 12: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 12 -

Figura 3. Sensores infrarrojos CNY-70.

Motoreductor B02 1:280. Características a 5Vdc: - Torque 4.6 KgF*cm (cantidad de fuerza aplicada) - Velocidad 30 RPM. - Consumo de corriente sin carga (sin peso): 80 mA. - Consumo de corriente máxima: 600mA. Cuenta con una salida con eje de 5mm de diámetro y orificios para facilitar su montaje con tornillos. Medidas: 55mm X 47 mm X 22mm. Peso: 32gr. Este motoreductor, que se muestra en la figura 4, se utilizó para mover el sensor analógico modelo GP2Y0A21YK que se muestra en la figura 6.

Figura 4. Motoreductor B02 1:280.

Motoreductor B01 1:200 Descripción: Motoreductor B01 1:200. Características a 5Vdc: - Torque 3.4 KgF*cm (cantidad de fuerza aplicada) - Velocidad 42 RPM. - Consumo de corriente sin carga: 80 mA. - Consumo de corriente atrancado: 600mA. Cuenta con una salida con eje de 5mm de diámetro y orificios para facilitar su montaje con tornillos. Medidas: 65mm X 22 mm X 18.5mm. Peso: 32gr.

Page 13: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 13 -

Este motoreductor, que se muestra en la figura 5, se utilizó para mover las llantas de Cintra modelo RS65AM7 con orificio de 5mm, estas llantas se muestran en la figura 5(a).

Figura 5. Motoreductor B01 1:200.

Figura 5(a). Par de Ruedas de Cintra amarillo modelo RS65AM7.

Sensor GP2Y0A21YK. Sensor de distancia analógico SHARP. Sustituto del GP2D12. Este sensor, que se muestra en la figura 6, puede determinar la distancia a la que se encuentra un objeto en un intervalo de 10 a 80 cm. Tiene un conector de tres pines: 1. Salida. Esta varía su voltaje con respecto a tierra dependiendo de la distancia a la que se encuentre el objeto o pared del sensor. 2. Tierra. 3. Vcc. El voltaje de operación debe de ser de 4.5 v. a 5.5 vdc.

Page 14: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 14 -

Figura 6. Sensor analógico GP2Y0A21YK.

El L293D, que se muestra en la figura 7, es un circuito integrado o chip, que puede ser utilizado para controlar simultáneamente la velocidad y dirección de dos motores de corriente continua (contine dos puentes H). Contiene 4 terminales digitales (2,7,10, 15) para controlar la dirección de los motores. Los pines "enable" (1,9) admiten como entrada una señal PWM, y se utiliza para controlar la velocidad de los motores con la técnica de modulación de ancho de pulso. Los motores van conectados entre uno de los pines 3, 6, 11, o 14. La tensión Vss es la que alimentará y dará potencia al motor. A continuación se explica brevemente lo que significa PWM o Pulse Width Modulation. La modulación de la anchura de pulsos es usada en diferentes aplicaciones, siendo las más comunes el control de servomotores y como sistema de comunicación. En el caso de control de servomotores el funcionamiento es como sigue; la velocidad de rotación del motor será función de la anchura del pulso. Dado que la velocidad de rotación depende del valor medio de la tensión suministrada, cuanto más ancho sea el pulso mayor será el valor medio de la tensión aplicada al motor y por ende mayor velocidad de rotación. En caso de querer disminuir la velocidad de este, solo se debe aplicar pulsos más estrechos, los cuales darán como resultado un valor medio neto de tensión aplicada al motor menor que en el caso anterior. Para lograr estos pulsos se uso el PIC 16F877. En el programa que se grabo en el PIC se usan los registros Ciclos_ON y Ciclos_OFF para controlar la velocidad de los motores. En el registro Ciclos_ON se almacena el tiempo que el motor estará energizado, y en el registro Ciclos_OFF se guarda el tiempo que el motor estará desconectado. La salida del PIC se conecta al L293D para que se aumente la corriente y hacer que los motores funcionen. La salida del PIC se conecta al L293D para que se aumente la corriente y hacer que los motores funcionen. En la gráfica 1 se ve que a mayor tiempo de activación del voltaje alto aumenta el ciclo de trabajo; y a menor tiempo de activación del voltaje alto el ciclo de trabajo es menor. Cuando este tipo de modulación se aplica a un motor de DC se logra controlar su velocidad.

Grafica 1. Modulación PWM

Page 15: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 15 -

Los dos motoreductorres B01 1:200. que hacen girar las llantas frontales están conectados como lo muestra la siguiente figura.

RB2

RB0 RB3

Motor llanta Motor llanta Izquierda derecha

RB1 RB4 RB5

Figura 7. L293D. Para hacer funcionar el motoreductor B02 1:280, que hace girar el sensor se usa otro L293D. Básicamente se conecta igual que en la figura anterior, excepto que los bits de control cambian. El bit de habilitación es el RC2 y los bits de control son RC0 y RC1. Cabe mencionar que de este segundo L293D solo se usa un canal. Reguladores de voltaje LM7805: En la mayoría de las aplicaciones se requiere una tensión fija y estable de un determinado valor. La línea de reguladores ideales para este tipo de necesidades es la conocida como LM78XX. Las primera letras y dos número corresponden a la denominación, mientras que las dos últimas XX deben ser reemplazados por la tensión de salida requerida, que en nuestro caso es de 5V. Cada uno de estos dispositivos posee sólo tres terminales, la terminal 1 (I) corresponde a la entrada de tensión no regulada, la Terminal 2 (C ) es tierra y la terminal 3 (O) es la salida regulada. En la figura 8 se muestra en diagrama del LM7805.

Figura 8. Regulador de voltaje LM7805.

Page 16: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 16 -

Cristal 4Mhz: Se llama oscilador de cristal a aquel oscilador que incluye en su realimentación un resonador piezoeléctrico. El oscilador de cristal, que se muestra en la figura 9, se caracteriza por su estabilidad de frecuencia y pureza de fase, dada por el resonador. La frecuencia es estable frente a variaciones de la tensión de alimentación. La dependencia con la temperatura depende del resonador, pero un valor típico para cristales de cuarzo es de 0' 005% del valor a 25ºC, en el margen de 0 a 70ºC. Estos osciladores admiten un pequeño ajuste de frecuencia, con un condensador en serie con el resonador, que aproxima la frecuencia de este, de la resonancia serie a la paralela. Este ajuste se puede utilizar en los VCO para modular su salida. El VCO (Oscilador Controlado por Voltaje) es un oscilador electrónico diseñado específicamente para ser controlado en frecuencia de la oscilación por una entrada de voltaje. La frecuencia de la oscilación varía con el voltaje de corriente continua que se aplica, mientras que las señales de modulación se pueden alimentar en el VCO para generar la modulación en frecuencia (FM), la modulación en fase (PM) y la modulación pulse – width (PWM).

Figura 9. Cristal.

SOLUCION POR “SOFTWARE” La solución por Software no fue un gran problema ya que se hizo modular (como se mencionó anteriormente), haciendo subrutinas que son llamadas por el programa principal. A continuación se describen tanto el programa principal como sus subrutinas. Esta descripción consta de dos partes: una explicación de lo que hace cada rutina y su diagrama de flujo correspondiente.

Page 17: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 17 -

Programa Principal Este programa contiene las subrutinas que hacen que el carrito funcione. El orden en el cual están dispuestas las subrutinas es muy importante, ya que si se altera el resultado será un programa que no haga lo que debe hacer. A continuación se menciona de manera general el funcionamiento de cada subrutina. Cuando el robot encuentra un obstáculo, este se detiene y su sensor comienza a realizar un barrido de 180° para determinar las posibles direcciones de trayectoria de movimiento; como se estableció la lectura del sensor se realiza cada 30°, permitiéndose un total de 7 lecturas. Sin embargo, para lograr esta rotación de 30°, en la implantación del programa en el PIC, se estableció un periodo de tiempo para permitir la rotación del motor que controla el movimiento del sensor; en la práctica se observa que es de 500ms. Este periodo de tiempo se obtiene utilizando interrupciones, con la ayuda del TIMER0, del Preescalar y de un registro llamado AumentoPreescalar. Recuerde que el máximo tiempo logrado con el TIMER0 y el preescalar es de aproximadamente 65.5ms (máximo tiempo antes del desbordamiento del TIMER0). Pero el inconveniente de usar esta interrupcion, es que ésta ocurre cada cierto tiempo, no importando que actividad este realizando el robot; si el robot avanza una distancia considerable, es obvio que se cumplirá el tiempo necesario para que se de la interrupción, pero en este caso no se necesita que el sensor empiece a barrer, por que el carrito esta avanzando y no a encontrado un obstáculo. Considerando que la interrupción se da cada cierto tiempo sin importar que esté haciendo el robot y que sólo se requiere ejecutar la parte del algoritmo de la interrupción que hace rotar el motor del sensor cuando el sensor esté en el proceso de barrido, se usa una bandera para indicar cuando, propiamente dicho, se debe atender a ésta interrupción, es decir, a pesar de que se de la interrupción no siempre se procede a ejecutar todo el algoritmo de la rutina de interrupción y solo cuando se habilita la bandera, esta bandera se implementa con el bit 0 del registro AutorizaInterrupción. El programa empieza de la siguiente forma: El bit 0 del registro AutorizarInterrupcion se pone a cero. Esto se hace para que al momento de que suceda la interrupción no se entre a la parte importante de la subrutina que atiende la interrupción, sino que solo se vuelva habilitar la interrupción y continuar el proceso hasta que se llega a la parte donde empieza el barrido del sensor. La llamada de la subrutina derecha hace que el motor que controla el sensor gire a la derecha. Esto es importante porque es un punto de referencia que hace que el programa no se pierda. Cuando el motor empieza a girar se detiene cuando el conductor de cobre que se conecta al bit RC4 se polariza. Como ya se explico anteriormente esta polarización ocurre cundo el arco metálico que esta montado en la placa que esta sujeta al eje del motor hace contacto con el conductor correspondiente. Ya se menciono que existe una placa que esta sujeta al chasis del motor que hace girar el sensor, esta placa tiene en cada uno de sus lados un conductor (ver fig.3D) y por tanto hay cuatro conductores conectados en los bits correspondientes del PIC. La llamada de la subrutina centro hace que el motor que controla el sensor gire al centro. El motor se detiene cuando el conductor conectado al bit RC5 es polarizado. El sensor debe estar ubicado al centro para que empiece a medir si hay o no espacio libre para que el carrito avance. La subrutina avanza se encarga de que el carrito se mueva, hasta encontrar un obstáculo. El registro RegistroSalidas debe limpiarse antes de que sea utilizado. Este registro almacena las posiciones donde hay una salida.

Page 18: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 18 -

La llamada limpia_Mascara hace que el registro Mascara tome el valor de b’00000001’. Se empieza con este valor pues es la posición de la primera lectura. Para la siguiente lectura la mascara deberá tener el valor b’00000010’, y la siguiente el valor b’00000100’, etc. Es decir se va rotando el registro mascara en cada nueva lectura. Siguiendo el orden del Programa Principal, nuevamente a parece la llamada de subrutina derecha para que se pueda empezar el barrido de 180° a partir de la derecha. El bit 0 del registro PrimeraLectura se pone a uno para hacer la primer lectura. Se debe hacer esto por que cuando el sensor esta a la derecha es cuando se autoriza la interrupción y entonces se necesita que pasen 500ms para hacer la primer lectura, es decir no se estaría tomando lectura del extremo derecho. Pero cuando se activa el registro PrimeraLectura se garantiza que se haga una lectura en el extremo derecho. Una vez que el sensor esta colocado a la derecha se debe poner el bit 0 del registro AutorizarInterrupcion en uno para que cuando entre la interrupción se pueda acceder a la parte del algoritmo en la cual se empieza la lectura, a intervalos de 500ms, de la distancia que hay del carrito a su alrededor y llevandose a cavo la correspondiente conversión A/D. La subrutina izquierda hace que el sensor gire hasta que llegue a la izquierda. El sensor gira hasta que el conductor conectado al bit RC6 se polariza. Hay que recordar que el sensor estaba ubicado en la derecha. De esta forma cuando el sensor llegue a la izquierda habrá girado 180°. En el transcurso de este barrido es cuando la interrupción queda habilitada y por tanto se hacen las lecturas. Después hay que volver a poner el bit 0 del registro AutorizarInterrupcion a cero para unicamente limpiar la bandera de desbordamiento de TIMER0 al entrar a la rutina de interrupción. La subrutina LeeSalidas se encarga de preguntar si hay o no una trayectoria de movimiento. Es decir, como resultado del barrido de 180° se puede tener o no una trayectoria de movimiento. Si hay una trayectoria de movimiento se ejecuta la subrutina GiraSalida la cual permite identificar un movimiento del carrito hacia la derecha o la izquierda. Si no hay trayectoria el carro debe retroceder, este movimiento se logra con la subrutina retrocede. En la figura 10 se muestra el diagrama de flujo del programa principal.

Page 19: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 19 -

Principal+3

Principal+4 Si No

Fig. 10 Diagrama de flujo del Programa Principal.

Principallll

Call derecha

AutorizarInterrupcion bo 0

Call centro

Call avanza

Limpia_Mascara

Call derecha

PrimeraLectura b0 1

AutorizarInterrupcion b0 1

Call izquierda

AutorizarInterrupcion b0 0

Call LeeSalidas

HaySalida = 0

GiraSalida

Retrocede CentroPorIzq

RegistroSalidas b’00000000’

Page 20: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 20 -

Subrutina: derecha Esta subrutina se encarga de mover el sensor analógico (fig. 4D), que esta montado en un motor de DC de 5v (fig. 3D), hacia la derecha. Su funcionamiento es como sigue: por medio de la subrutina Velocidad se hace girar el motor. Este motor gira hasta que encuentra un sensor (conductor de cobre). Lo que hace este sensor es mandar un voltaje alto. Entonces cuando el bit 4 del puerto C recibe un voltaje alto el motor se detiene. Se detiene por que la subrutina Velocidad se manda llamar reiterativamente siempre y cuando el bit 4 del puerto C no tenga un voltaje alto. En el Programa Principal es necesario hacer una primera llamada de esta subrutina porque la posición del sensor no es única. Es decir, en el momento en el cual se decida apagar el carrito la posición del sensor puede ser cualquiera. Entonces al volver a encender el carrito se debe contar con un punto de referencia, el cual sirva para ubicar el sensor y a partir de esa posición empezar los de más movimientos. En el diagrama de flujo se repite el bucle de la macro Velocidad que corresponde a poner en marcha el motor que hace girar el sensor, se rompe cuando por el puerto PORTC en su bit 4 se detecta un voltaje alto. La figura 11 muestra el diagrama de flujo de esta subrutina.

No

Si

Fig. 11 Diagrama de flujo de subrutina derecha

Derecha

PORTC b4 =1

RETURN

Macro Velocidad Ciclos_ON=9 Ciclos OFF=1

Sentido

Page 21: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 21 -

Subrutina: centro Esta subrutina sirve para mover el sensor analógico hacia el centro (fig. 4D). Su funcionamiento es igual que el de la subrutina Derecha, excepto que el motor se para cuando el bit 5 del puerto C recibe un voltaje alto. La figura 12 muestra su diagrama de flujo. En el Programa Principal se usa esta subrutina para posicionar el sensor analógico al centro y de esta forma poder medir si hay o no un obstáculo que evite la trayectoria de movimiento hacia delante del carrito. Si no se hiciera esta llamada de subrutina el sensor tendría cualquier posición y entonces el carro no seria capaz de determinar si tiene camino libre o no. No

No Si

Si

Fig. 12 Diagrama de flujo de subrutina centro

Centro

PORTC b5 =1

RETURN

Macro Velocidad Ciclos_ON=9 Ciclos OFF=1

Sentido

Page 22: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 22 -

Subrutina: avanza La subrutina Avanza sirve para mover el carrito hacia delante. Sin embargo se encarga además no solo de mover el carro sino también de saber cual es la distancia que hay del obstáculo al carro y dependiendo de esta distancia aumentar o disminuir la velocidad. También realiza la función de que una vez detectado un estorbo, el carro debe acercarse a él a no menos de 20cm, y una vez estando a esa distancia indicar al carro que se detenga. La justificación de la conversión A/D que se uso en el programa fue a la derecha. La máxima velocidad se obtiene cuando no hay ningún objeto a una distancia no menor de 80cm aproximadamente. En cambio si a esta distancia se encuentra el objeto, entonces disminuye la velocidad. Hay que recordar que el sensor analógico tiene un intervalo de medición comprendido entre 10 y 80 cm. Lo que significa que dependiendo de la distancia que censé su salida tendrá un voltaje proporcional. Para que el PIC pueda trabajar con este valor es necesario pasar este voltaje por el convertidor A/D incluido en el PIC. Como el PIC utiliza 10 bits para la conversión hay dos registros (ADRESH y ADRESL) donde se almacena el resultado. También hay que decidir hacia donde se quiere que se haga la justificación del almacenamiento del resultado de la conversión. Es decir como el PIC usa 10 bits y como los registros son de 8 bits, entonces un registro almacenara 8 bits en tanto que el otro solo guardara 2 bits. Cuando se selecciona justificación a la derecha el registro ADRESL guardara los 8 bits menos significativos de la conversión, mientras que el registro ADRESH tendrá los 2 bits más significativos. Si la justificación es a la izquierda el registro ADRESH almacenara los 8 bits más significativos y el ADRESL los 2 bits menos significativos. Como el objetivo es que el carro no choque, entonces conforme avanza se debe ir censando el camino. Para lograr esto se hace una llamada a la subrutina ConversionA_D, la cual toma una lectura de la distancia que esta midiendo el sensor analógico y después hace su conversión. Como ya se menciono el resultado de esta conversión se almacena en los registro ADRESH y ADRESL. Pero por razones prácticas en el programa se vacía el contenido de estos registros en los registros ParteAlta y ParteBaja, respectivamente. Una vez que se tiene el resultado de la conversión se analiza el contenido de los registro ParteAlta y ParteBaja. Es importante aclarar que los voltajes de referencia del convertidor A/D se seleccionaron de 5v y tierra, entonces si se cuenta con 10 bits esto implica 102 niveles de voltaje para la conversión A/D. Cada nivel tiene un valor de 102

5 V, o sea 4.88 mV. Por otra parte para distancias menores a 20cm el sensor tiene voltaje de salida mayor a 1.25V, entonces 8 bits no serian suficientes para hacer la conversión A/D de estas distancias. Esto es así porque con 8 bits se tienen 256 niveles de voltaje y como cada nivel tiene un valor de 4.88mV, entonces el máximo voltaje que se podría convertir sería 256*4.88mV que es igual a 1.25V. Para distancias mayores a 20cm se necesita solo un registro (ADRESL) ya que el sensor da voltajes de salida menores a 1.25V. De manera que para identificar si la distancia que hay entre el carrito y el obstáculo es menor de 20cm, es suficiente con verificar el estado del registro ParteAlta, es decir, si este ultimo registro esta en cero se detiene el carrito.

Page 23: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 23 -

Como para distancias mayores a 20cm solo se necesitan 8 bits se pasa al análisis del registro ParteBaja. Como se esta interesado en que el carro tenga su mayor velocidad cuando tiene espacio libre mayor a 80cm y su menor velocidad a distancias menores de 40cm, se impone una condicione para obtener estos resultados. Si el registro ParteBaja tiene un valor menor a 150 se asigna la máxima velocidad, en caso contrario se asigna la menor velocidad. Se aclara que solo hay dos velocidades. Es importante señalar que bastaría analizar el registro ParteBaja, por que con un solo registro se pueden medir distancias mayores a 20cm, sin embargo se contempla la posibilidad de que en algún momento dado el carro este a distancias menores de 20cm. Esto puede pasar cuando el carro se coloca frente a un obstáculo a una distancia menor de 20cm, o cuando el carro esta avanzando y se coloca un objeto frente a el a una distancia menor de 20cm Con el registro ParteBaja es posible medir hasta distancias mayores a 15 cm, pero para distancias menores a esta se necesitaría del registro ParteAlta. Entonces para distancia menores a 20cm y mayores a 15 cm solo hay que revisar el registro ParteBaja (el registro ParteAlta estaría en ceros), pero para distancias menores a15 cm se tiene que revisar el registro ParteAlta. La figura 13 muestra el diagrama de flujo de esta subrutina. Si

No Si

No Si

No

Fig. 13 Diagrama de flujo de subrutina avanza

Avanza

Call ConversionA_D

ParteAlta >0

ParteBaja >250

ParteBaja >150

detener

RETURN

Macro Velocidad Ciclos_ON=9 Ciclos OFF=1

Sentido

Macro Velocidad Ciclos_ON=9 Ciclos OFF=1

Sentido

Page 24: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 24 -

Subrutina: retrocede Se encarga de mover el carro hacia atrás. Primero llama la subrutina atrás para que el sensor apunte para atrás. Luego manda llamar la subrutina mide_Distancia_tracera, la cual se encarga de medir si hay o no espacio suficiente para que el carro se haga hacia atrás. Sin embargo existe un contador llamado Distancia_de_reversa, el cual indica que a pesar de que haya libre camino de reversa la máxima distancia que puede retroceder es de 20cm. De esta forma, esta rutina termina ya sea por que no hay espacio suficiente para retroceder o por que el carrito ya retrocedió lo suficiente (20cm). Cualquiera que sea el motivo por el que termina la subrutina el regreso lleva a la parte del Programa Principal con etiqueta sensar. La figura 14 muestra el diagrama de flujo de este procedimiento libre No Si Si No

Fig. 14 Diagrama de flujo de subrutina retrocede

retrocede

Distancia_de_reversa d’250’

atras

HaySalida b0 =1

Decrementa Distancia_de_reversa

Distancia_de_reversa =0

mide_Distancia_tracera

Goto sensar

Macro Velocidad Ciclos_ON=9 Ciclos OFF=1

Sentido

Page 25: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 25 -

Subrutina: GiraSalida Hace que el carro gire hacia donde se encuentra la salida más próxima (fig. 5D). Analiza el registro RegistroSalidas para saber de que lado se encuentra la salida. Por medio de la rutina velocidad el carrito se mueve. Este movimiento continúa hasta que se detecta la salida. La figura 15 muestra el diagrama de flujo de esta rutina. No

Si

No

Si

Si

No

Si

No

Fig. 15 Diagrama de flujo de subrutina GiraSalida

GiraSalida

RegistroSalidas b3=0

centro_por_Izq

¿La salida esta a la derecha?

RevisaSalida

GiraDerecha

GiraIzquierda

ParteAlta >0

ParteBaja > 90

Detener carro Goto Principal+3

Page 26: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 26 -

Subrutina: interrupción Esta subrutina es la rutina de interrupción. Como ya se menciono anteriormente solo se trabaja con la interrupción por desbordamiento del TIMER0. Cuando el sensor esta a la derecha es cuando se debe autorizar la interrupción y empezar a medir las distancias del carro al obstáculo. Cuando el bit 0 del registro AutorizarInterrupcion y el del registro PrimeraLectura están en uno se hace la primer lectura de distancia, que corresponde a la distancia que hay del carro a su derecha, luego se empieza a decrementar el registro AumentoPrescaler, cuando llega a cero se da la segunda lectura de distancia. Se inicializa el registro AumentoPrescaler (se usa este registro para conseguir el periodo de tiempo de 500ms, ya que con el taimer y el prescaler no es suficiente) y nuevamente se empieza a decrementar hasta que llegue a cero y así hacer la tercera lectura de distancia. Este proceso continua hasta que el bit 0 del registro AutorizarInterrupcion se pone a cero. La subrutina se divide en dos partes. Una para atender la interrupción pero sin entrar al algoritmo que hace las lecturas de distancias y sus correspondientes conversiones A/D. Y otra que si entra a esta rutina. La figura 16 muestra el diagrama de flujo correspondiente. Si No No Si No Si

Fig. 16 Diagrama de flujo de subrutina GiraSalida

interrupcion

AutorizarInterrupcion b0 =0

PrimeraLectura b0 =0

decrementa AumentoPrescaler

AumentoPrescaler = 0

Call conversionA_D

Call guarda_conversionA_D

FinInterrupcion retfie

Page 27: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 27 -

Subrutina: conversionA_D Esta subrutina se encarga de hacer la conversión A/D de las distancias que mide el sensor analógico. Una vez hecha la conversión, el resultado se guarda en los registro ParteAlta y ParteBaja. Son necesarios dos registros porque la conversión usa diez bits. En general el procedimiento es el siguiente: se lee la señal analógica, se hace su conversión A/D y el resultado se vacía en los registros ParteAlta y ParteBaja. La figura 17 muestra su diagrama de flujo. No

Si

Fig. 17 Diagrama de flujo de subrutina conversionA_D

conversionA_D

Leer puerto analógico

conversión A/D

Ya termino conversion

Vacía resultado de conversión en registros ParteAlta y ParteBaja

RETURN

Page 28: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 28 -

Subrutina: guarda_conversionA_D Se encarga de guardar las posiciones de las distancias que son favorables. Como cada distancia se mide aproximadamente cada medio segundo y debido a que el sensor tarda aproximadamente tres y medio segundos en girar 180° esto implica que se podrán medir siete distancias. La posición de cada distancia esta representada por cada bit del registro RegistroSalidas. Se usa el registro Mascara para activar o no el bit correspondiente a la posición de cada distancia. El registro Mascara se va rotando a cada nueva lectura de distancia. En cuanto se verifica que la distancia es favorable se aplica la operación lógica OR entre los registros Mascara y RegistroSalidas. Esta operación hace que los bits del registro RegistroSalidas vayan indicando si hay o no una salida para el carrito. La figura 18 corresponde a su diagrama de flujo. Si

No Si

No

Fig. 18 Diagrama de flujo de subrutina guarda_conversionA_D

guarda_conversionA

ParteAlta > o

ParteBaja > 90

Activa posición

Mascara or RegistroSalidas

RETURN

Rota mascara

Page 29: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 29 -

Subrutina: mide_Distancia_tracera Esta rutina usa el sensor analógico para medir la distancia trasera del carrito. Su resultado indica si el carro tiene o no distancia suficiente para retroceder. Si hay distancia libre para que el carro se mueva hacia atrás el bit 0 del registro HaySalida se pone en uno, en caso contrario se pone a cero. La figura 19 muestra el diagrama de flujo correspondiente. Si

No

Si

No

Fig. 19 Diagrama de flujo de subrutina mide_Distancia_tracera

mide_Distancia_tracera

conversionA_D

HaySalida b0 0

ParteAlta > 0

ParteBaja >25 0

HaySalida b0 1

RETURN

Page 30: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 30 -

Macro: Velocidad Esta macro se encarga de mover los tres motores. Esta macro tiene tres parametro: Ciclos_ON, Ciclos_OFF y sentido. Ciclos_On y Ciclos_OFF sirven para controlar la velocidad del motor mediante la modulación PWM, y sentido sirve para indicar si el motor se moverá hacia la derecha o asía la izquierda. Como ya se menciono esta macro esta en función de los parámetros que reciba. Dependiendo de que motor se mueva el carro comenzara a dezplazarse hacia delante o hacia atrás; si el motor que se activa es el del sensor, entonces el sensor comienza a girar. A continuación, en la figura 20, se muestra el diagrama de flujo correspondiente a esta rutina.

Figura 20. Diagrama de flujo de subrutina velocidad.

Si

Macro Velocidad

Carga Ciclos_ON Carga Ciclos_OFF

Carga sentido

Mueve sentido al puerto

Ciclos_ON = 0

Call Retardo_500us

Ciclos_ON Ciclos_ON-1

Desactiva Puerto

Call Retardo_500us

Ciclos_OFF Ciclos_OFF-1

Ciclos_OFF = 0

Termina Macro Velocidad

No

No

Si

Page 31: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 31 -

;*********************************************************************

;PROGRAMA PARA MOVER UN CARRITO:

;EL CARRITO NO DEBE CHOCAR

;DEBE DISMINUIR O AUMENTAR SU VELOCIDA DEPENDIENDO SI HAY O NO UN OBSTACULO

;SI EN FRENTE NO HAY SALIDA DEBE RETROCEDER

;*********************************************************************

;*********************************************************************

LIST P=16F877A

include<p16f877A.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _WRT_OFF & _DEBUG_OFF & _XT_OSC

Radix Hex

;DECLARACION DE CONSTANTES O EQUIVALENCIAS

;-----------------------------------------

CBLOCK 0x20

DELAY_50us

DELAY_500us

Ciclos_ON

Ciclos_OFF

ParteBaja

ParteAlta

AutorizarInterrupcion

RegistroSalidas

Distancia_de_reversa

AumentoPrescaler

PrimeraLectura

HaySalida

Distancia

Mascara

MascaraAux

contador

SalidaNumero

ENDC

Page 32: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 32 -

;**********************************************************

;definicion de macro para velocidad

;**********************************************************

velocidad macro PORT,sentido,ciclos_on,ciclos_off

local Motor_ON

local Motor_OFF

movlw ciclos_on ;CARGA EL REGISTRO Ciclos_ON con el valor de la -

movwf Ciclos_ON ;constante ciclos_on

movlw ciclos_off ;CARGA EL REGISTRO Ciclos_OFF con el valor de la -

movwf Ciclos_OFF ;constante ciclos_off

Motor_ON

movlw sentido

movwf PORT ;HABILITA LOS DRIVER. MOTOR EN MARCHA.

call Retardo_500us

decfsz Ciclos_ON,F ;SI (Ciclos_ON)=0 salta a Motor_OFF.

goto Motor_ON+2

Motor_OFF

clrf PORT ; INHABILITA LOS DRIVRES. MOTOR PARADO.

call Retardo_500us

decfsz Ciclos_OFF,F ; SI (Ciclos_OFF)=0 TERMINA MACRO.

goto Motor_OFF+1

endm

;**********************************************************

;INICO DEL PROGRAMA

;**********************************************************

org 0

goto inicio

org 4

goto interrupcion

inicio

clrf PORTB

clrf PORTC

bsf STATUS,RP0 ;ACCEDER BANCO 1

bsf ADCON0,7 ;ADCON0=ADCON1, PRIMER BIT DE PUERTO -

movlw b'00000111' ;(A) QUEDA DECLARADO COMO ENTRADA ANALOGICA

movwf OPTION_REG ;PRESCALER DE 256 ASIGNADO AL TMRO

bsf PORTA,0 ;PRIMER BIT DE PUERTO(A) COMO ENTRADA

Page 33: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 33 -

clrf PORTB ;PUERTO(B) QUEDA DECLARADO SALIDA

movlw b'11110000'

movwf PORTC ;PUERTO(C) QUEDA DECLARADO COMO ENTRADA Y SALIDA

bcf STATUS,RP0 ;ACCEDER BANCO 0

movlw d'60'

movwf TMR0 ;CARGA EL TMRO PARA QUE CUENTE 195

movlw d'12'

movwf AumentoPrescaler ;CARGA EL REGISTRO AumentoPrescaler

movlw b'10100000' ;AUTORIZA LA INTERRUPCION TMRO Y LA GIE

movwf INTCON

;**********************************************************

;PROGRAMA PRINCIPAL

;**********************************************************

Principal

bcf AutorizarInterrupcion,0 ;NO SE AUTORIZA INTERRUPCION

call Derecha ;SENSOR GIRA A LA DERECHA

call Centro ;SENSOR GIRA A LA IZQUIERDA

call Avanza ;EL CARRO AVANZA

clrf RegistroSalidas ;SE PONEN A CERO TODAS LAS SALIDAS

call LimpiaMascara ;LA MASCARA SE CARGA

call Derecha ;SENSOR GIRA A LA DERECHA

bsf PrimeraLectura,0

bsf AutorizarInterrupcion,0 ;SE AUTORIZA LA INTERRUPCION

call Izquierda ;SENSORE GIRA A LA IZQUIERDA

bcf AutorizarInterrupcion,0 ;SE DETIENE INTERRUPCION

call LeeSalidas ;VERIFICA SI HAY SALIDAS

btfss HaySalida,0

goto Retrocede ;EL CARRO RETROCEDE

call CentroPorIzq

goto GiraSalida ;EL CARRO BUSCA LA SALIDA

Page 34: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 34 -

;**********************************************************

;SUBRUTINA PARA AVANZAR EL CARRO

;**********************************************************

Avanza

call conversionA_D ;SE LEE DATO EXTERNO Y SE CONVIERTE

movlw d'1'

subwf ParteAlta,W

btfss STATUS,C ;SE REVISA QUE EL CARRO NO CHOQUE

goto otra_Distancia

otra_Distancia

movlw d'250'

subwf ParteBaja,W ;PARA SABER SI EL VALOR DE LA CONVERSION A/D -

btfsc STATUS,C ;ES MENOR A 250

goto mayor_a_20cm ;EL CARRO TIENE ESPACIO LIBRE MAYOR A 20cm

mayor_a_20cm ;ESTE PROCEDIMIENTO ES PARA SABER

movlw d'150' ;QUE TANTA DISTANCIA LIBRE TIENE

subwf ParteBaja,W ;EL CARRO

btfsc STATUS,C

goto rapido

despacio ;EL CARRO AVANZA DESPACIO

velocidad PORTB,b'00110110',d'4',d'6'

goto Avanza

rapido ;EL CARRO AVANZA RAPIDO

velocidad PORTB,b'00110110',d'9',d'1'

goto Avanza

detener ;EL CARRO SE DETIENE

clrf PORTB

return

Page 35: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 35 -

;**********************************************************

;SUBRUTINA PARA RETROCEDER EL CARRO

;**********************************************************

Retrocede

movlw d'250'

movwf Duitancia_de_reversa

call atras ;MUEVE EL SENSOR HACIA ATRAZ

libre

call mide_Distancia_tracera ;RUTINA PARA QUE NO CHOQUE EL CARRO -

btfss HaySalida,0 ;CUANDO VA DE REVERSA

goto Principal+4 ;SI NO PUEDE RETROCEDER SE REPITE -

velocidad PORTB,b'00101101',d'9',d'1' ; PROCEDIMIENTO DE SENSAR AL FRENTE

decfsz Distancia_de_reversa,F ;DECREMENTO DE LA DISTANCIA TRACERA -

goto libre ;QUE EL CARRO DEBE RETROCEDER

goto Principal+4 ;SI EL CARRO RETROCEDE LA DISTANCIA -

; PREFIJADA, SE REPITE PROCEDIMIENTO -

; DE SENSAR AL FRENTE

;*********************************************************

;SUBRUTINA PARA QUE EL CARRO GIRE A SALIDA

;**********************************************************

GiraSalida

btfsc RegistroSalidas,3 ;SI LA SALIDA ESTA AL FRENTE -

goto Principal+3 ;EL CARRO EMPIZA DESDE EL PRINCIPIO

movlw b'00001000'

movwf Mascara ;SE CARGAN LAS MASCARAS CON EL MISMO

movlw b'00001000' ;VALOR PARA QUE EMPIECEN DESDE LA POSICION

movwf MascaraAux ;CENTRAL, Y A PARTIR DE AHÍ MOVERSE.

rota

rlf MascaraAux,F ;SE ROTA LA MASCARA A LA IZQUIERDA

movf MascaraAux,W ;EL VALOR SE GUARDA EN LA MISMA MASCARA

andwf RegistroSalidas,W ;SE PREGUNTA SI EL REGISTRO DE SALIDAS -

btfss STATUS,Z ;TIENE UNA SALIDA EN ESA POSICION

goto GiraIzquierda ;SI HAY SALIDA SE GIRA A LA IZQUIERDA

rrf Mascara,F ;SE ROTA LA MASCARA A LA DERECHA

movf Mascara,W ;EL VALOR SE GUARDA EN LA MISMA MASCARA

andwf RegistroSalidas,W ;SE PREGUNTA SI EL REGISTRO DE SALIDAS -

btfss STATUS,Z ;TIENE UNA SALIDA EN ESA POSICION

Page 36: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 36 -

goto GiraDerecha ;SI HAY SALIDA SE GIRA A LA DERECHA

incf SalidaNumero,F ;SE INCREMENTA EL REGISTRO QUE INDICA EN QUE

goto rota ;POSICION SE ENCONTRO LA SALIDA

GiraIzquierda

movlw d'110'

movwf contador

velocidad PORTB,b'00101110',d'5',d'5' ;EL CARRO GIRA A LA IZQUIERDA

decfsz contador,F

goto GiraIzquierda+2

decfsz SalidaNumero,F

goto GiraIzquierda

goto FinGiraSalida

GiraDerecha

movlw d'110'

movwf contador

velocidad PORTB,b'00110101',d'5',d'5' ;EL CARRO GIRA A LA DERECHA

decfsz contador,F

goto GiraDerecha+2

decfsz SalidaNumero,F

goto GiraDerecha

goto FinGiraSalida

FinGiraSalida

clrf PORTB

goto Principal+3

;*********************************************************

;SUBRUTINA PARA REVISAR SI EL CARRO YA ENCONTRO LA SALIDA

;**********************************************************

RevisaSalida

call conversionA_D ;LAS INSTRUCCIONES SIGUIENTES SON PARA -

movlw d'1' ;SABER SI EL CARRO SE MOVIO LO SUFICIENTE -

subwf ParteAlta,W ;COMO PARA QUE EL SENSOR MIDA QUE HAY ESPACIO -

btfss STATUS,C ;SUFICIENTE PARA QUE EL CARRO AVANCE HACIA DELANTE

goto MidePerteBaja

return

MidePerteBaja

movlw d'90'

subwf ParteBaja,W

Page 37: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 37 -

btfss STATUS,C

bsf HaySalida,0

return

;**********************************************************

;SUBRUTINA PARA ATENDER LA INTERRUPCION

;**********************************************************

interrupcion

btfss AutorizarInterrupcion,0 ;PREGUNTA SI PUEDE ENTRAR A LA INTERRUPCION

goto RegresoRapido

btfsc PrimeraLectura,0

goto Empieza

decfsz AumentoPrescaler,F ;HASTA QUE ESTE REGISTRO MARQUE CERO -

goto FinInterrupcion ;SE PODRA ENTRAR A LA INTERRUPCION

Empieza

call conversionA_D ;PARA HACER CONVERSION A/D DE LAS DISTANCIAS

call guarda_conversionA_D ;GUARDA LAS DISTANCIAS SATISFACTORIAS

RegresoRapido

movlw d'12'

movwf AumentoPrescaler ;RECARGA EL REGISTRO AumentoPrescaler

FinInterrupcion

movlw d'60'

movwf TMR0 ;RECARGA EL TMRO

bcf INTCON,T0IF ;REPONE FLAG DEL TMRO

bcf PrimeraLectura,0

retfie ;AUTORIZA INTERRUPCON POR TMRO

;**********************************************************

;SUBRUTINA PARA CONVERSION A/D

;**********************************************************

conversionA_D

bsf ADCON0,0 ;ACTIVAR REGISTRO ADCON0 PARA LEER PUERTO ANALOGICO

convertir

call Retardo_50us ;TIEMPO PARA OBTENER LECTURA ANALOGICA

bsf ADCON0,2 ;INICIAR CONVERSION A/D

espera

btfsc ADCON0,2 ;PREGUNTA SI YA TERMINO CONVERSION A/D

goto espera

bsf STATUS,RP0 ;ACCEDER BANCO 1 PARA OBTENER PARTE BAJA DE CONVERSION

movf ADRESH,W ;SE OBTIENE PARTE BAJA DE CONVERSION A/D

bcf STATUS,RP0 ;ACCEDER BANCO 0

Page 38: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 38 -

movwf ParteBaja ;GUARDAR PARTE BAJA EN REGISTRO

movf ADRESH,W ;OBTENER PARTE ALTA DE CONVERSION

movwf ParteAlta ;GUARDAR PARTE ALTA DE CONVERSION

return

;**********************************************************

;SUBRUTINA PARA GUARDAR LAS CONVERSIONES A/D UTILES

;**********************************************************

guarda_conversionA_D

movlw d'1'

subwf ParteAlta,W ;PARA SABER SI LA CONVERSION A/D SOLO -

btfss STATUS,C ;OCUPO EL REGISTRO ADRESL

goto Verifica

bcf STATUS,C ;PONE A CERO EL BIT C PARA QUE NO AFECTE

rlf Mascara,F ;ROTACION IZQUIERDA DEL REGISTRO MASCARA

return

Verifica

movlw d'90'

subwf ParteBaja,W ;PARA SABER SI LA CONVERSION A/D ES MENOR -

btfss STATUS,C ; A 90. ESTE NUMERO ESRA RELACIONADO CON LA

goto activa_posicion ;DISTANCIA MEDIDA

fin

bcf STATUS,C ;PONE A CERO EL BIT C PARA QUE NO AFECTE

rlf Mascara,F ;ROTACION IZQUIERDA DEL REGISTRO MASCARA

return

activa_posicion

movf Mascara,W ;CARGA LA MASCARA EL REGISTRO W

iorwf RegistroSalidas,F ; PARA VACIAR LA MASCARA EN EL REGISTRO -

goto fin ;DE SALIDAS

;**********************************************************

;SUBRUTINA PARA MEDIR DISTANCIA TRACERA

;**********************************************************

mide_Distancia_tracera

call conversionA_D

movlw d'1'

subwf ParteAlta,W ;PARA SABER SI LA CONVERSION A/D -

btfss STATUS,C ;OCUPO EL REGISTRO ADRESH

goto verifica

return

verifica

Page 39: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 39 -

movlw d'220'

subwf ParteBaja,W ;PARA SABER SI EL VALOR DE LA -

btfss STATUS,C ;CONVERSION A/D ES MENOR A 250 -

bsf HaySalida,0 ;ESTE NUMERO ESTA RELACIONADO CON -

return ;LA DISTANCIA MEDIDA

;**********************************************************

;SUBRUTINAS PARA UBICAR PUNTOS DE REFERENCIA

;**********************************************************

Derecha

velocidad PORTC,b'00000101',d'3',d'7'

btfss PORTC,4 ;CUANDO EL BIT 4 DEL PUERTO C ES UNO -

goto Derecha ;EL SENSOR SE DETIENE

return

;**********************************************************

Centro

velocidad PORTC,b'00000110',d'3',d'7'

btfss PORTC,5 ;CUANDO EL BIT 5 DEL PUERTO C ES UNO -

goto Centro ;EL SENSOR SE DETIENE

return

;**********************************************************

Izquierda

velocidad PORTC,b'00000110',d'3',d'7'

btfss PORTC,6 ;CUANDO EL BIT 6 DEL PUERTO C ES UNO -

goto Izquierda ;EL SENSOR SE DETIENE

return

;**********************************************************

atras

velocidad PORTC,b'00000110',d'3',d'7'

btfss PORTC,7 ;CUANDO EL BIT 7 DEL PUERTO C ES UNO -

goto atras ;EL SENSOR SE DETIENE

return

;**********************************************************

CentroPorIzq

velocidad PORTC,b'00000101',d'3',d'7'

btfss PORTC,5 ;CUANDO EL BIT 5 DEL PUERTO C ES UNO -

goto CentroPorIzq ;EL SENSOR SE DETIENE

return

Page 40: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 40 -

;**********************************************************

;SUBRUTINA PARA LEER REGISTRO DE SALIDAS

;**********************************************************

LeeSalidas

bcf HaySalida,0 ;INDICA QUE NO HAY SALIDA

movlw d'1'

subwf RegistroSalidas,W ;VERIFICA SI HAY SALIDA

btfsc STATUS,C

bsf HaySalida,0 ;INDICA QUE HAY SALIDA

return

;**********************************************************

;SUBRUTINA PARA LIMPIAR LA MASCARA

;**********************************************************

LimpiaMascara

movlw b'00000001'

movwf Mascara ;LA MASCARA QUEDA CARGADA CON EL -

return ;VALOR CONVENIENTE

;**********************************************************

;RETARDOS

;**********************************************************

;LAS SIGUIENTES SUBRUTINAS UTILIZAN UN CONTADOR, EL CUAL VAN DECRE -

;MENTANDO. ESTE PROCESO HACE QUE SE CONSUMA TIEMPO. DE ESTA FORMA -

;LAS SUBRUTINAS SIRVEN COMO TIEMPOS DE RETARDO

;**********************************************************

;RETARDO 20uSeg

;**********************************************************

Retardo_50us

movlw d'16'

movwf DELAY_50us

LOP_50us

decfsz DELAY_50us,F

goto LOP_50us

return

Page 41: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 41 -

;RETARDO 500uSeg

;**********************************************************

Retardo_500us

movlw d'166'

movwf DELAY_500us

LOP_500us

decfsz DELAY_500us,F

goto LOP_500us

nop

return

;RETARDO 100 mSeg

;**********************************************************

END

Page 42: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 42 -

CONCLUSIONES A pesar de que el robot no es muy competitivo, presenta características interesantes. Sin embargo tiene detalles desafortunados como es el alto consumo de corriente debido al sensor analógico que se utilizó, ya que es el que consume en la mayor parte del tiempo más corriente por que está tomando lecturas todo el tiempo en que el “carrito” esta en movimiento. Se propone para mejoras futuras hacer que este sensor solo este activado por intervalos cortos de tiempo para mejorar el rendimiento de energía. Por otra parte, el diseño, montaje y programación del robot, a sido una experiencia, aunque ardua (ya que requiere mucho tiempo), muy divertida. Este robot es una primera aproximación, que sin lugar a dudas puede ser mejorado. Las mejoras pueden darse desde la parte mecánica hasta la forma de energizar el circuito, como por ejemplo; pueden usarse brazos mecánicos, adaptar una cámara de video, se puede alimentar con celdas solares, entre otras mejoras. Sin embargo el resultado obtenido es aceptable.

Figura 12. Carrito Evasor de Obstáculos. La utilización de celdas solares puede ser utilizado para que el carrito utilice energía solar y energía de una batería, y que además estas celdas solares recarguen las baterías de alimentación del “carrito”, esto con el fin de que el carrito funcione en cualquier momento y no se tengan problemas de energía.

21.1:- Brazos mecánicos. 21.2.- Plataforma mecánica. 21.3.- Celdas solares.

Figura 21. Posibles avances del robot.

Page 43: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 43 -

Las experiencias que se obtuvieron al hacer el carrito fueron varias, entre ellas estan: 1.- La construcción del robot nos ayudó a comprender el uso y funcionamiento de los microcontroladores PIC´s. 2.- En la parte de hardware, aprendimos a optimizar el uso de la energía, ya que tuvimos que investigar las características de los dispositivos, pero en particular la de los motores por ser los que consumen más corriente. 3.- Al emprender cualquier proyecto es importante considerar desde el inicio los materiales y dispositivos que se van a utilizar, esto con el fin de disminuir tiempo y costos de búsqueda.

Page 44: Carrito Evasor de Obstaculos

REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II “CARRITO EVASOR DE OBSTACULOS”

UNIVERSIDAD AUTÓNOMA METROPOLITANA Unidad Iztapalapa

Fecha de elaboración: Martes, 16 de Enero de 2007. - 44 -

BIBLIOGRAFÍA: Palacios, Enrique; Remiro, Fernando y López, Lucas. Microcontrolador PIC16F84, desarrollo de proyectos, Segunda Edición. Editorial Alfo Omega – Rama. Página de Internet: http://www.microchip.com Página de Internet: http://www.robodacta.com