Logo Studenta

UAMI13915

¡Este material tiene más páginas!

Vista previa del material en texto

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 
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 
 
 
 
 
 
 
 
 
 
 
 
 
 
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. 
 
 
 
 
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”. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 tantoen 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 
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 
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: 
 
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 programaprincipal 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. 
 
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. 
 
 
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 
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 1840 
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%. 
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. 
 
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. 
 
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 
 
 
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. 
 
 
REPORTEPROYECTO 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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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. 
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 banderade 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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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’ 
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 
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 
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 distanciasmayores 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. 
 
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 
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 
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 
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
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_DconversionA_D 
Leer puerto analógico 
 conversión A/D 
Ya termino 
conversion 
Vacía resultado de conversión en 
registros ParteAlta y ParteBaja 
RETURN 
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 
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 
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 
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 
 
 
 
 
 
 
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 
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 
 
 
 
 
 
 
 
 
 
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 
 
 
 
 
 
 
 
 
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 
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 
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 
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 SILA 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 
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 
 
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 
 
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 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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. 
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. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
REPORTE PROYECTO DE INGENIERÍA EN ELECTRÓNICA I y II 
“CARRITO

Continuar navegando