Académique Documents
Professionnel Documents
Culture Documents
INGENIERA EN ELECTRONICA
Asesor: Mauricio Lpez Villaseor Elaboraron: Pablo Arturo Barragn Chvez Ricardo Flores Hernndez Cesar David Salazar Garca
Introduccin.3 Planteamiento del proyecto ..4 Descripcin general de la solucin del problema y construccin del carrito evasor de obstculos ...5 Solucin del problema por Hardware 10 Solucin del problema por Software .16 Conclusiones .42 Bibliografa 44
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -2-
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -3-
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -4-
Para llegar al modelo final del robot se paso por un proceso de experimentacin, ya que se probaron diferentes carroceras y diferentes tipos de motores. La primer prueba que se hizo como parte del proceso de experimentacin fue hacer un seguidor de lnea en el que se utiliz el PIC 16F84, el cual controlaba las seales 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 lnea 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 lnea deber de seguir el camino sin desviarse de la lnea negra. La eleccin de los colores es obvia, el blanco y el negro tienen unas caractersticas especiales a la hora de reflejar luz que no la tienen otros colores. La construccin del seguidor de lnea nos dejo un primer acercamiento tanto en la programacin del PIC, como la utilizacin de motores de DC. Este conocimiento adquirido fue de gran utilidad para llegar al objetivo final, o sea obtener un robot evasor de obstculos. Debido a que el objetivo de este reporte es explicar el software y el hardware del robot evasor de obstculos, se omiten tanto el programa que se grabo en el PIC 16F84 como el procedimiento para la construccin fsica del seguidor de lnea. Despus de contar con la experiencia obtenida en la realizacin del seguidor de lnea pasamos a la elaboracin del robot. La primera carrocera 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 tena dos motores de DC. El motor posterior controlaba la traccin 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 traccin. Sin embargo para controlar sus giros se diseo un algoritmo que consista 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 traccin para que el carro retroceda una distancia determinada, a continuacin las llantas delanteras se hacen girar hasta el otro extremo y despus el carro debe avanzar cierta distancia, y por ultimo se manda la instruccin de que por medio de un cierto tiempo de activacin del motor frontal se centren las llantas. Es importante mencionar que al trmino de esta secuencia el carro gira aproximadamente 20. De esta forma, dependiendo del nmero de grados que se quera que el carro girara se repeta esta secuencia el nmero de veces necesario. Como se pretenda tener un carro evasor de obstculos se pens en colocar varios sensores que indicaran si el carro poda seguir avanzando o no. Despus se llego a la conclusin de que solo s necesitara un solo sensor, pues si se montaba en un motor entonces s poda hacer un barrido de 180 para determinar si el carro tenia una posible salida. Pero si no encontraba una salida UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -5-
Fig. 1D Robot evasor de obstculos. El inconveniente que s pens que poda presentarse fue tener motores con una marcada diferencia en sus revoluciones, lo cual provocara que el robot no avanzara en lnea recta. Sin UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -6-
Fig. 2D Sensor analgico montado en motor de DC. Comparando a nivel software los dos carritos bsicamente 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 obstculos y tome la mejor decisin para evadirlos. El PIC 16F877 se encarga de recibir informacin del exterior y procesarla, sin embargo la forma en como se procesa esta informacin depende de la lgica del diseo del programa. Para resolver un problema mediante la programacin existen distintas formas o modos de solucionarlo. Sin embargo el programa que se realizo cumple con lo siguiente: UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -7-
Fcilmente comprensible para quien pretenda leerlo. Obtiene resultados de forma rpida. Ocupar la menor memoria posible. El programa esta subdividido en programas ms 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 especficas y dan resultados rpidos. 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 analgico 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 algn motivo en cualquier instante el robot se queda sin energa 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 prrafo explica el mecanismo y la lgica que se uso para montar el sensor en el motor. Como ya se menciono el sensor busca cuatro puntos: derecha, centro, izquierda y atrs. Para lograr esto se fabrico una placa pequea, 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 tambin lo hace la placa. La placa que esta montada en el eje dispone de un pequeo arco metlico 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 metlico con los conductores de cobre. Esta situacin provoca que se cierre un circuito y que se polarice cada uno de los conductores, que a su vez estn conectados al PIC 16F877. Tomando como referencia el frente del carrito se tiene lo siguiente: los conductores derecho, centro, izquierdo y trasero estn 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.
La figura 4D muestra un esquema de conexin de los conductores de cobre con los bits correspondientes en el PIC. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -8-
Centro RC5
Izquierda RC6
Derecha RC4
Despus se debe posicionar el sensor analgico al centro, es decir en la posicin 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 obstculo a una distancia aproximada de 80cm. Cuando esto pasa el carrito disminuye su velocidad y se aproxima al obstculo hasta que se detiene a una distancia de ms o menos 20cm. Cundo el carrito esta frente al obstculo, 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. Despus 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 atrs 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 atrs. En esta situacin, para que el robot se mueva uno de los obstculos 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 obstculo debe decidir cual es la mejor trayectoria de movimiento. Es decir, si el carrito queda mas a la derecha del obstculo y a pesar de que a al izquierda de ste tambin haya salida, debe girar a la derecha porque es la trayectoria de movimiento ms corta. La figura 5D ejemplifica esta situacin.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. -9-
Obstculo
Mejor trayectoria de movimiento Trayectorias de movimiento 30
Robot
En esta figura se aprecia que cada 30 se hace una lectura. De esta forma se realizan un total de siete lecturas. A dems se muestra que a pesar de que tambin hay salidas a la derecha y a la izquierda, la ms conveniente es la que se encuentra ms cercana al obstculo, por que el robot no tiene que girar mucho para evadir el objeto.
SOLUCIN POR HARDWARE Para solucionar el problema de Hardware (mencionados anteriormente) se tuvo que elegir minuciosamente el material (componentes electrnicos y motores) de acuerdo a las necesidades del carrito evasor de obstculos, basndonos en sus caractersticas tcnicas. Los materiales utilizados se mencionan a continuacin: 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 analgico Sharp modelo GP2Y0A21YK 2 Drivers L293D 3 Reguladores de voltaje LM7805 1 Cristal a 4Mhz con dos capacitores de 22pF
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 10 -
Memoria programa Memoria de datos EEPROM Memoria de datos Ram Instrucciones Interrupciones Entradas / Salidas Terminales Frecuencia maxima Timer / Contador Convertidos A/D Canales PWM
2 de 8 bits 1 de 16 bits
Sensor infrarrojo CNY- 70. El CNY70, que se muestra en la figura 3, es un sensor ptico reflexivo que tiene una construccin compacta dnde el emisor de luz y el receptor se colocan en la misma direccin para detectar la presencia de un objeto utilizando la reflexin del infrarrojo sobre el objeto. La longitud de onda de trabajo es 950nm. El detector consiste en un fototransistor. Caractersticas: La construccin compacta con distancia de centro-a-centro de 0.1 ' (pulgadas) No necesita ningn ambiente especial. Seal de salida alta. El coeficiente de temperatura bajo. Detector provista de filtro ptico. El ratio de corriente de transferencia (CTR) tpico es del 5%.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 11 -
Figura 3. Sensores infrarrojos CNY-70. Motoreductor B02 1:280. Caractersticas 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 mxima: 600mA. Cuenta con una salida con eje de 5mm de dimetro 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 analgico modelo GP2Y0A21YK que se muestra en la figura 6.
Motoreductor B01 1:200 Descripcin: Motoreductor B01 1:200. Caractersticas 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 dimetro y orificios para facilitar su montaje con tornillos. Medidas: 65mm X 22 mm X 18.5mm. Peso: 32gr. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 12 -
Sensor GP2Y0A21YK. Sensor de distancia analgico 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 vara 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 operacin debe de ser de 4.5 v. a 5.5 vdc.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 13 -
Figura 6. Sensor analgico GP2Y0A21YK. El L293D, que se muestra en la figura 7, es un circuito integrado o chip, que puede ser utilizado para controlar simultneamente la velocidad y direccin de dos motores de corriente continua (contine dos puentes H). Contiene 4 terminales digitales (2,7,10, 15) para controlar la direccin de los motores. Los pines "enable" (1,9) admiten como entrada una seal PWM, y se utiliza para controlar la velocidad de los motores con la tcnica de modulacin de ancho de pulso. Los motores van conectados entre uno de los pines 3, 6, 11, o 14. La tensin Vss es la que alimentar y dar potencia al motor. A continuacin se explica brevemente lo que significa PWM o Pulse Width Modulation. La modulacin de la anchura de pulsos es usada en diferentes aplicaciones, siendo las ms comunes el control de servomotores y como sistema de comunicacin. En el caso de control de servomotores el funcionamiento es como sigue; la velocidad de rotacin del motor ser funcin de la anchura del pulso. Dado que la velocidad de rotacin depende del valor medio de la tensin suministrada, cuanto ms ancho sea el pulso mayor ser el valor medio de la tensin aplicada al motor y por ende mayor velocidad de rotacin. En caso de querer disminuir la velocidad de este, solo se debe aplicar pulsos ms estrechos, los cuales darn como resultado un valor medio neto de tensin 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 grfica 1 se ve que a mayor tiempo de activacin del voltaje alto aumenta el ciclo de trabajo; y a menor tiempo de activacin del voltaje alto el ciclo de trabajo es menor. Cuando este tipo de modulacin se aplica a un motor de DC se logra controlar su velocidad.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 14 -
RB1
RB4 RB5
Figura 7. L293D.
Para hacer funcionar el motoreductor B02 1:280, que hace girar el sensor se usa otro L293D. Bsicamente se conecta igual que en la figura anterior, excepto que los bits de control cambian. El bit de habilitacin 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 mayora de las aplicaciones se requiere una tensin fija y estable de un determinado valor. La lnea de reguladores ideales para este tipo de necesidades es la conocida como LM78XX. Las primera letras y dos nmero corresponden a la denominacin, mientras que las dos ltimas XX deben ser reemplazados por la tensin de salida requerida, que en nuestro caso es de 5V. Cada uno de estos dispositivos posee slo tres terminales, la terminal 1 (I) corresponde a la entrada de tensin 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.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 15 -
Figura 9. Cristal.
SOLUCION POR SOFTWARE La solucin 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 continuacin se describen tanto el programa principal como sus subrutinas. Esta descripcin consta de dos partes: una explicacin de lo que hace cada rutina y su diagrama de flujo correspondiente.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 16 -
Programa Principal Este programa contiene las subrutinas que hacen que el carrito funcione. El orden en el cual estn dispuestas las subrutinas es muy importante, ya que si se altera el resultado ser un programa que no haga lo que debe hacer. A continuacin se menciona de manera general el funcionamiento de cada subrutina. Cuando el robot encuentra un obstculo, 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, permitindose un total de 7 lecturas. Sin embargo, para lograr esta rotacin de 30, en la implantacin del programa en el PIC, se estableci un periodo de tiempo para permitir la rotacin del motor que controla el movimiento del sensor; en la prctica 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 mximo tiempo logrado con el TIMER0 y el preescalar es de aproximadamente 65.5ms (mximo 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 interrupcin, pero en este caso no se necesita que el sensor empiece a barrer, por que el carrito esta avanzando y no a encontrado un obstculo. Considerando que la interrupcin se da cada cierto tiempo sin importar que est haciendo el robot y que slo se requiere ejecutar la parte del algoritmo de la interrupcin 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 interrupcin, es decir, a pesar de que se de la interrupcin no siempre se procede a ejecutar todo el algoritmo de la rutina de interrupcin y solo cuando se habilita la bandera, esta bandera se implementa con el bit 0 del registro AutorizaInterrupcin. 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 interrupcin no se entre a la parte importante de la subrutina que atiende la interrupcin, sino que solo se vuelva habilitar la interrupcin 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 polarizacin ocurre cundo el arco metlico 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 obstculo. El registro RegistroSalidas debe limpiarse antes de que sea utilizado. Este registro almacena las posiciones donde hay una salida. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 17 -
La llamada limpia_Mascara hace que el registro Mascara tome el valor de b00000001. Se empieza con este valor pues es la posicin de la primera lectura. Para la siguiente lectura la mascara deber tener el valor b00000010, y la siguiente el valor b00000100, 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 interrupcin y entonces se necesita que pasen 500ms para hacer la primer lectura, es decir no se estara 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 interrupcin 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 conversin 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 interrupcin queda habilitada y por tanto se hacen las lecturas. Despus 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 interrupcin. 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.
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 18 -
Principallll
AutorizarInterrupcion bo
Call derecha
Limpia_Mascara
Call derecha
PrimeraLectura b0
AutorizarInterrupcion b0
Call izquierda
AutorizarInterrupcion b0
Call LeeSalidas
GiraSalida
Si
CentroPorIzq
HaySalida = 0
No
Retrocede
Fig. 10 Diagrama de flujo del Programa Principal. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 19 -
Subrutina: derecha
Esta subrutina se encarga de mover el sensor analgico (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 posicin del sensor no es nica. Es decir, en el momento en el cual se decida apagar el carrito la posicin 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 posicin empezar los de ms 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.
Derecha
No PORTC b4 =1
Si
RETURN
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 20 -
Subrutina: centro Esta subrutina sirve para mover el sensor analgico 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 analgico al centro y de esta forma poder medir si hay o no un obstculo que evite la trayectoria de movimiento hacia delante del carrito. Si no se hiciera esta llamada de subrutina el sensor tendra cualquier posicin y entonces el carro no seria capaz de determinar si tiene camino libre o no.
Centro
No Si PORTC b5 =1
Si
RETURN
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 21 -
La subrutina Avanza sirve para mover el carrito hacia delante. Sin embargo se encarga adems no solo de mover el carro sino tambin de saber cual es la distancia que hay del obstculo al carro y dependiendo de esta distancia aumentar o disminuir la velocidad. Tambin realiza la funcin 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 justificacin de la conversin A/D que se uso en el programa fue a la derecha. La mxima velocidad se obtiene cuando no hay ningn 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 analgico tiene un intervalo de medicin 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 conversin hay dos registros (ADRESH y ADRESL) donde se almacena el resultado. Tambin hay que decidir hacia donde se quiere que se haga la justificacin del almacenamiento del resultado de la conversin. 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 justificacin a la derecha el registro ADRESL guardara los 8 bits menos significativos de la conversin, mientras que el registro ADRESH tendr los 2 bits ms significativos. Si la justificacin es a la izquierda el registro ADRESH almacenara los 8 bits ms 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 analgico y despus hace su conversin. Como ya se menciono el resultado de esta conversin se almacena en los registro ADRESH y ADRESL. Pero por razones prcticas en el programa se vaca el contenido de estos registros en los registros ParteAlta y ParteBaja, respectivamente. Una vez que se tiene el resultado de la conversin 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 2 niveles de voltaje para la conversin A/D. Cada nivel tiene un valor de 5 210 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 conversin 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 mximo voltaje que se podra convertir sera 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 obstculo 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.
10
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 22 -
Avanza
Call ConversionA_D
Si
ParteAlta >0
No Si
ParteBaja >250
No Si
ParteBaja >150
No
Macro Velocidad Ciclos_ON=9 Ciclos OFF=1 Sentido
RETURN
Subrutina: retrocede Se encarga de mover el carro hacia atrs. Primero llama la subrutina atrs para que el sensor apunte para atrs. 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 atrs. Sin embargo existe un contador llamado Distancia_de_reversa, el cual indica que a pesar de que haya libre camino de reversa la mxima 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
retrocede
Distancia_de_reversa
d250
atras
libre
mide_Distancia_tracera
No
HaySalida b0 =1
Si
Macro Velocidad Ciclos_ON=9 Ciclos OFF=1 Sentido
Decrementa Distancia_de_reversa
Si
Distancia_de_reversa =0 Goto sensar
No
Fig. 14 Diagrama de flujo de subrutina retrocede UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 24 -
Subrutina: GiraSalida
Hace que el carro gire hacia donde se encuentra la salida ms prxima (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 contina hasta que se detecta la salida. La figura 15 muestra el diagrama de flujo de esta rutina.
GiraSalida
No
RegistroSalidas b3=0
Si
centro_por_Izq
No
La salida esta a la derecha? GiraIzquierda
Si
GiraDerecha
RevisaSalida
Si
ParteAlta >0
No Si
ParteBaja > 90
No
Goto Principal+3
Detener carro
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 25 -
Subrutina: interrupcin Esta subrutina es la rutina de interrupcin. Como ya se menciono anteriormente solo se trabaja con la interrupcin por desbordamiento del TIMER0. Cuando el sensor esta a la derecha es cuando se debe autorizar la interrupcin y empezar a medir las distancias del carro al obstculo. Cuando el bit 0 del registro AutorizarInterrupcion y el del registro PrimeraLectura estn 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 interrupcin 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.
interrupcion
Si
AutorizarInterrupcion b0 =0
No
PrimeraLectura b0 =0
No Si
decrementa AumentoPrescaler
No
AumentoPrescaler = 0
Si
Call conversionA_D
Call guarda_conversionA_D
FinInterrupcion retfie
Fig. 16 Diagrama de flujo de subrutina GiraSalida UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 26 -
Subrutina: conversionA_D Esta subrutina se encarga de hacer la conversin A/D de las distancias que mide el sensor analgico. Una vez hecha la conversin, el resultado se guarda en los registro ParteAlta y ParteBaja. Son necesarios dos registros porque la conversin usa diez bits. En general el procedimiento es el siguiente: se lee la seal analgica, se hace su conversin A/D y el resultado se vaca en los registros ParteAlta y ParteBaja. La figura 17 muestra su diagrama de flujo.
conversionA_D
conversin A/D
No Si
Ya termino conversion
RETURN
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 27 -
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 podrn medir siete distancias. La posicin 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 posicin 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 operacin lgica OR entre los registros Mascara y RegistroSalidas. Esta operacin 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.
guarda_conversionA
Si
ParteAlta > o
No Si
ParteBaja > 90
No
Activa posicin Mascara or RegistroSalidas
Rota mascara
RETURN
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 28 -
Subrutina: mide_Distancia_tracera
Esta rutina usa el sensor analgico 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 atrs 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.
mide_Distancia_tracera
HaySalida b0
conversionA_D
Si
ParteAlta > 0
No Si
ParteBaja >25 0
No
HaySalida b0 1
RETURN
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 29 -
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 modulacin PWM, y sentido sirve para indicar si el motor se mover hacia la derecha o asa la izquierda. Como ya se menciono esta macro esta en funcin de los parmetros que reciba. Dependiendo de que motor se mueva el carro comenzara a dezplazarse hacia delante o hacia atrs; si el motor que se activa es el del sensor, entonces el sensor comienza a girar. A continuacin, en la figura 20, se muestra el diagrama de flujo correspondiente a esta rutina.
Macro Velocidad
Call Retardo_500us
Ciclos_ON
Ciclos_ON-1 No
Ciclos_ON = 0 Si
Desactiva Puerto
Call Retardo_500us
Ciclos_OFF
Ciclos_OFF-1 No
Ciclos_OFF = 0 Si
Figura 20. Diagrama de flujo de subrutina velocidad. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 30 -
;********************************************************************* ;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 & _XT_OSC Radix _CP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _WRT_OFF & _DEBUG_OFF 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
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 31 -
;********************************************************** ;definicion de macro para velocidad ;********************************************************** velocidad macro PORT,sentido,ciclos_on,ciclos_off local local movlw movwf movlw movwf Motor_ON movlw movwf call decfsz goto Motor_OFF clrf call decfsz goto endm PORT Retardo_500us Ciclos_OFF,F Motor_OFF+1 ; SI (Ciclos_OFF)=0 TERMINA MACRO. ; INHABILITA LOS DRIVRES. MOTOR PARADO. sentido PORT Retardo_500us Ciclos_ON,F Motor_ON+2 ;SI (Ciclos_ON)=0 salta a Motor_OFF. ;HABILITA LOS DRIVER. MOTOR EN MARCHA. Motor_ON Motor_OFF ciclos_on Ciclos_ON ciclos_off Ciclos_OFF ;CARGA EL REGISTRO Ciclos_ON con el valor de la ;constante ciclos_on ;CARGA EL REGISTRO Ciclos_OFF con el valor de la ;constante ciclos_off
;********************************************************** ;INICO DEL PROGRAMA ;********************************************************** org goto org goto 0 inicio 4 interrupcion
;ACCEDER BANCO 1 ;ADCON0=ADCON1, PRIMER BIT DE PUERTO ;(A) QUEDA DECLARADO COMO ENTRADA ANALOGICA ;PRESCALER DE 256 ASIGNADO AL TMRO ;PRIMER BIT DE PUERTO(A) COMO ENTRADA
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 32 -
d'60' TMR0 d'12' AumentoPrescaler b'10100000' INTCON ;CARGA EL REGISTRO AumentoPrescaler ;AUTORIZA LA INTERRUPCION TMRO Y LA GIE ;CARGA EL TMRO PARA QUE CUENTE 195
;********************************************************** ;PROGRAMA PRINCIPAL ;********************************************************** Principal bcf call call call clrf call call bsf bsf call bcf call btfss goto call goto AutorizarInterrupcion,0 Derecha Centro Avanza RegistroSalidas LimpiaMascara Derecha PrimeraLectura,0 AutorizarInterrupcion,0 Izquierda AutorizarInterrupcion,0 LeeSalidas HaySalida,0 Retrocede CentroPorIzq GiraSalida ;EL CARRO BUSCA LA SALIDA ;EL CARRO RETROCEDE ;SE AUTORIZA LA INTERRUPCION ;SENSORE GIRA A LA IZQUIERDA ;SE DETIENE INTERRUPCION ;VERIFICA SI HAY SALIDAS ;NO SE AUTORIZA INTERRUPCION ;SENSOR GIRA A LA DERECHA ;SENSOR GIRA A LA IZQUIERDA ;EL CARRO AVANZA ;SE PONEN A CERO TODAS LAS SALIDAS ;LA MASCARA SE CARGA ;SENSOR GIRA A LA DERECHA
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 33 -
;********************************************************** ;SUBRUTINA PARA AVANZAR EL CARRO ;********************************************************** Avanza call movlw subwf btfss goto conversionA_D d'1' ParteAlta,W STATUS,C otra_Distancia ;SE REVISA QUE EL CARRO NO CHOQUE ;SE LEE DATO EXTERNO Y SE CONVIERTE
otra_Distancia movlw subwf btfsc goto d'250' ParteBaja,W STATUS,C mayor_a_20cm ;PARA SABER SI EL VALOR DE LA CONVERSION A/D ;ES MENOR A 250 ;EL CARRO TIENE ESPACIO LIBRE MAYOR A 20cm
mayor_a_20cm movlw subwf btfsc goto despacio velocidad PORTB,b'00110110',d'4',d'6' goto rapido velocidad PORTB,b'00110110',d'9',d'1' goto detener clrf return PORTB Avanza Avanza d'150' ParteBaja,W STATUS,C rapido
;ESTE PROCEDIMIENTO ES PARA SABER ;QUE TANTA DISTANCIA LIBRE TIENE ;EL CARRO
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 34 -
;********************************************************** Retrocede movlw movwf call libre call btfss goto mide_Distancia_tracera HaySalida,0 Principal+4 ;RUTINA PARA QUE NO CHOQUE EL CARRO ;CUANDO VA DE REVERSA ;SI NO PUEDE RETROCEDER SE REPITE ; PROCEDIMIENTO DE SENSAR AL FRENTE ;DECREMENTO DE LA DISTANCIA TRACERA ;QUE EL CARRO DEBE RETROCEDER ;SI EL CARRO RETROCEDE LA DISTANCIA ; PREFIJADA, SE REPITE PROCEDIMIENTO ; DE SENSAR AL FRENTE ;********************************************************* ;SUBRUTINA PARA QUE EL CARRO GIRE A SALIDA ;********************************************************** GiraSalida btfsc goto movlw movwf movlw movwf rota rlf movf andwf btfss goto rrf movf andwf btfss MascaraAux,F MascaraAux,W RegistroSalidas,W STATUS,Z GiraIzquierda Mascara,F Mascara,W RegistroSalidas,W STATUS,Z ;SE ROTA LA MASCARA A LA IZQUIERDA ;EL VALOR SE GUARDA EN LA MISMA MASCARA ;SE PREGUNTA SI EL REGISTRO DE SALIDAS ;TIENE UNA SALIDA EN ESA POSICION ;SI HAY SALIDA SE GIRA A LA IZQUIERDA ;SE ROTA LA MASCARA A LA DERECHA ;EL VALOR SE GUARDA EN LA MISMA MASCARA ;SE PREGUNTA SI EL REGISTRO DE SALIDAS ;TIENE UNA SALIDA EN ESA POSICION RegistroSalidas,3 Principal+3 b'00001000' Mascara b'00001000' MascaraAux ;SE CARGAN LAS MASCARAS CON EL MISMO ;VALOR PARA QUE EMPIECEN DESDE LA POSICION ;CENTRAL, Y A PARTIR DE AH MOVERSE. ;SI LA SALIDA ESTA AL FRENTE ;EL CARRO EMPIZA DESDE EL PRINCIPIO d'250' Duitancia_de_reversa atras ;MUEVE EL SENSOR HACIA ATRAZ
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 35 -
velocidad PORTB,b'00101110',d'5',d'5' decfsz goto decfsz goto goto contador,F GiraIzquierda+2 SalidaNumero,F GiraIzquierda FinGiraSalida
velocidad PORTB,b'00110101',d'5',d'5' decfsz goto decfsz goto goto contador,F GiraDerecha+2 SalidaNumero,F GiraDerecha FinGiraSalida
;********************************************************* ;SUBRUTINA PARA REVISAR SI EL CARRO YA ENCONTRO LA SALIDA ;********************************************************** RevisaSalida call movlw subwf btfss DELANTE goto return MidePerteBaja movlw subwf d'90' ParteBaja,W conversionA_D d'1' ParteAlta,W STATUS,C MidePerteBaja ;LAS INSTRUCCIONES SIGUIENTES SON PARA ;SABER SI EL CARRO SE MOVIO LO SUFICIENTE ;COMO PARA QUE EL SENSOR MIDA QUE HAY ESPACIO ;SUFICIENTE PARA QUE EL CARRO AVANCE HACIA
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 36 -
;********************************************************** ;SUBRUTINA PARA CONVERSION A/D ;********************************************************** conversionA_D bsf ANALOGICO convertir call bsf espera btfsc goto bsf CONVERSION movf bcf ADCON0,2 espera STATUS,RP0 ADRESH,W STATUS,RP0 ;ACCEDER BANCO 1 PARA OBTENER PARTE BAJA DE ;SE OBTIENE PARTE BAJA DE CONVERSION A/D ;ACCEDER BANCO 0 ;PREGUNTA SI YA TERMINO CONVERSION A/D Retardo_50us ADCON0,2 ;TIEMPO PARA OBTENER LECTURA ANALOGICA ;INICIAR CONVERSION A/D ADCON0,0 ;ACTIVAR REGISTRO ADCON0 PARA LEER PUERTO
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 37 -
activa_posicion movf iorwf goto Mascara,W RegistroSalidas,F fin ;CARGA LA MASCARA EL REGISTRO W ; PARA VACIAR LA MASCARA EN EL REGISTRO ;DE SALIDAS
;********************************************************** ;SUBRUTINA PARA MEDIR DISTANCIA TRACERA ;********************************************************** mide_Distancia_tracera call movlw subwf btfss goto return verifica conversionA_D d'1' ParteAlta,W STATUS,C verifica ;PARA SABER SI LA CONVERSION A/D ;OCUPO EL REGISTRO ADRESH
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 38 -
;********************************************************** ;SUBRUTINAS PARA UBICAR PUNTOS DE REFERENCIA ;********************************************************** Derecha velocidad PORTC,b'00000101',d'3',d'7' btfss goto return ;********************************************************** Centro velocidad PORTC,b'00000110',d'3',d'7' btfss goto return ;********************************************************** Izquierda velocidad PORTC,b'00000110',d'3',d'7' btfss goto return ;********************************************************** atras velocidad PORTC,b'00000110',d'3',d'7' btfss goto return ;********************************************************** CentroPorIzq velocidad PORTC,b'00000101',d'3',d'7' btfss goto return PORTC,5 CentroPorIzq ;CUANDO EL BIT 5 DEL PUERTO C ES UNO ;EL SENSOR SE DETIENE PORTC,7 atras ;CUANDO EL BIT 7 DEL PUERTO C ES UNO ;EL SENSOR SE DETIENE PORTC,6 Izquierda ;CUANDO EL BIT 6 DEL PUERTO C ES UNO ;EL SENSOR SE DETIENE PORTC,5 Centro ;CUANDO EL BIT 5 DEL PUERTO C ES UNO ;EL SENSOR SE DETIENE PORTC,4 Derecha ;CUANDO EL BIT 4 DEL PUERTO C ES UNO ;EL SENSOR SE DETIENE
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 39 -
;********************************************************** ;SUBRUTINA PARA LEER REGISTRO DE SALIDAS ;********************************************************** LeeSalidas bcf movlw subwf d'1' RegistroSalidas,W ;VERIFICA SI HAY SALIDA HaySalida,0 ;INDICA QUE NO HAY SALIDA
;********************************************************** ;SUBRUTINA PARA LIMPIAR LA MASCARA ;********************************************************** LimpiaMascara movlw movwf return b'00000001' Mascara ;LA MASCARA QUEDA CARGADA CON EL ;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
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 40 -
END
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 41 -
Figura 12. Carrito Evasor de Obstculos. La utilizacin de celdas solares puede ser utilizado para que el carrito utilice energa solar y energa de una batera, y que adems estas celdas solares recarguen las bateras de alimentacin del carrito, esto con el fin de que el carrito funcione en cualquier momento y no se tengan problemas de energa.
Figura 21. Posibles avances del robot. UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 42 -
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 43 -
UNIVERSIDAD AUTNOMA METROPOLITANA Unidad Iztapalapa Fecha de elaboracin: Martes, 16 de Enero de 2007. - 44 -