You are on page 1of 14

Proyecto Final Robot

Docentes: Collovati Susana Lasarte Matias Correa Diego Integrante: Jess Olguera
1

Introduccin:
En el siguiente informe se expone la construccin de un robot capaz de seguir lneas. A travs de un control inteligente programado en un microcontrolador, para ser capaz de seguir una lnea de forma autnoma.

Parte Constitutiva:
En la confeccin del robot. Se tiene en cuenta las caractersticas fsicas de sus partes. Por lo cual creamos una estructura que servir de gua para el correcto orden de los elementos que la componen.

En el caso de este robot, su estructura est construida de acrlico. Material sumamente fcil de trabajar, pero se quiebra y raya con frecuencia.

Principio de funcionamiento:
Sensor:
Para el proyecto, fue elegido el sensor CNY70 no solo por la miniaturizacin del componente, sino por dar una respuesta muy adecuada a los contrastes de reflexin.
2

CNY70 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. (Nota de la Hoja de datos)

Una de las formas de configurar el color o contraste a seguir (Preferentemente Negro o Blanco), es por circuito, al ser un transistor la respuesta pueden ser las siguientes.

A) Entrega a la salida un nivel bajo cuando no refleja el haz infrarrojo y un nivel alto cuando encuentra un material sobre el que refleja el haz. B) Entrega un nivel alto cuando el haz no refleja y un nivel bajo cuando se detecta un material reflectante.

Como la seal se quiere introducir a un microcontrolador es muy conveniente hacer pasar las salidas a travs de un circuito schmitt trigger que conforme las seales. Para eso, el siguiente paso

Schmitt trigger:
Este proyecto utiliza el integrado HCF40106BE para lograr pasar las seales schmitt trigger en simultaneo.

Una caracterstica que hay que tener en cuenta a la hora de programar es que, adems de lograr el schmitt trigger, tambin niega la salida.

De este dispositivo nosotros tomamos como salida las 4 patas del HCF40106BE (Pata 2,4,6,8)

Servo-Motores:
Los motores que se utilizaron son servo-motores paso a paso. Los cuales fueron modificados para girar libremente, ya que en motor tradicional solo tiene una movilidad de 180 Grados.

Los cuales para funcionar necesitan un tren de pulso que corresponden al movimiento a realizar. El ancho del pulso determina el ngulo de giro de motor. Un pulso de 1,5 milisegundos har que el motor retorne a la posicin neutral (No necesario en nuestro caso.) Si el pulso es desde 1 a 1,5 milisegundos el motor dar vueltas hacia la izquierda, y si vara entre 1,5 a 2 milisegundos girara hacia la derecha. El periodo entre pulso y pulso debe rondar entre los 15 milisegundos, aunque tambin es aceptable una espera entre 10 y 30 milisegundos dependiendo el motor. Si se sobrepasara el valor mximo el servo pasara a estar dormido entre pulso y pulso, y si el intervalo es inferior puede crear una interferencia con la temporizacin interna del servo.

Microcontrolador:
El microcontrolador utilizado en el proyecto es el PIC 16F628A no solo por haberlo utilizado en muchas oportunidades en el laboratorio, si no por poseerlo y por no tener que conseguir otro, as nos ahorramos tiempo y dinero.

El robot utiliza como entrada las patas 17, 18, 1 y 2. (RA0, RA1, RA2, RA3) y como salida las patas 6 y 8 (RB0, RB2)

Control:
Para el control de los motores muchos utilizaran un driver manejado por seales que le entrega el Microcontrolador, pero en este caso no ser necesaria, ya que el PIC es muy capaz de manejar las seales que se utilizan para manejar los motores con la adecuada programacin. Por obviedad no se introducir la seal directa del PIC al motor, sino que pasara por un circuito al que llamaremos Circuito de control.

El circuito solo polariza los transistores cuando este en alto la salida del PIC, para separar al microcontrolador de los motores.

Ruedas:

Son artesanales. Estn hechas de dos materiales. Orring y grilones. Para definir el tamao de la rueda primero se consigue el Orring. Pues este determina el dimetro mximo de la rueda. El griln se consigue en torneras y se torna dependiendo el Orring escogido.

Programa
Programa Principal

El programa desarrollado es muy simple. Solo toma el valor del puertoA (Los 4 sensores) Les aplica un AND para limpiar los bits que no usamos (RA4, RA5, RA6, RA7) Y esa resultante se le suma al contador del programa (PCL)

Asi el programa salta la cantidad de lneas que corresponde a cada caso de estado de los sensores.

La siguiente tabla explica como:

Sigue lneas blancas


Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Comando Adelante DerechaE Quieto DerechaE Quieto Quieto Quieto Derecha IzquierdaE Adelante Quieto Derecha IzquiedaE Izquierda Izquierda Izquierda

Sigue lineas negras:


Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Comando Adelante Derecha Derecha DerechaE Izquierda Quieto Adelante DerechaE Izquierda Quieto Quieto Quieto IzquierdaE Quieto IzquierdaE Adelante

Subrutinas:

Siguiendo la misma estructura de subrutina para Adelante, Atrs y Quieto se escriben las subrutinas de Derecha, Izquierda, Derecha de Emergencia, Izquierda de Emergencia.

Programa Documentado:
;********SEGUIDOR DE LINEAS BLANCAS************* ;****************MAPA DE MEMORIA**************** LIST P=16F628 #include<p16f628A.INC> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF & _MCLRE_OFF ;***REGISTROS DEL PIC*** STATUS EQU 0X03 RP0 EQU 0X05 TRISA TRISB PORTA PORTB INTCON CMCOM OPTION_REG EQU EQU EQU EQU EQU EQU EQU 0X085 0X086 0X05 0X06 0X0B 0X1F 0X81 ;**Habilita los puertos** ;**Se activan los puertos***

;**Deshabilita los comparadores**

;***REGISTROS DEL PROGRAMA***** REG1 EQU REG2 EQU REG3 EQU FLAG EQU SALIDA EQU LINEA EQU ;***BITS DEL PROGRAMA********** RP0 EQU FLAG1 EQU PSEG EQU REGMIC EQU LED1 MQUIETO MATRAS MADELANTE MIZQUIERDA MDERECHA MIZQUIERDAE MDERECHAE EQU EQU EQU EQU EQU EQU EQU EQU

0X20 0X21 0X22 0X23 0X24 0X25

;Reistro para la base de tiempo ;Registro para contar 2MS ;Registro para contar 17MS

0X05 0X00 0X01 0X07 0X00 0X00 0X01 0X02 0X03 0X04 0X05 0X06

;Bit del registro status ;Bit de bandera auxiliar ;Bit que indica que ya pasaron 250 Microsegundos ;Bit que controla el estado del led

MI EQU 0X00 MD EQU 0X02 ;****************VECTOR DE RESET**************** ORG 0X00 ;Ac viene cuando el micro se resetea GOTO INICIO ORG 0x05 ; Vector de Interrupcin GOTO ISR ;************************************************* TABLA MOVF ADDWF GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO LINEA,0 PCL,1 ADELANTE DERECHA DERECHA DERECHAE IZQUIERDA QUIETO ADELANTE DERECHAE IZQUIERDA ADELANTE ADELANTE QUIETO IZQUIERDAE QUIETO IZQUIERDAE IZQUIERDA

;****************CONFIGURACION DE PUERTOS***** INICIO BSF STATUS,RP0 MOVLW B'11111111' MOVWF TRISA MOVLW MOVWF CLRF BCF MOVLW MOVWF B'00000000' TRISB OPTION_REG STATUS,RP0 D'7' CMCON

;Nos movemos al banco uno ;Declaro a todo el trisA como entrada ;Declaro a todo el trisB como salida

;Desabilita los comparadores y habilita las ;entradas y salidas digitales.

;*****************CONFIGURACION DE LA INTERRUPCIN***

10

;MOVLW B'11100000' MOVWF INTCON ;*****************INICIACION DE PUERTOS Y REGISTROS****** BCF PORTB,LED1 CLRF FLAG MOVLW B'10100000' MOVWF INTCON MOVLW D'2' MOVWF MOVLW MOVWF MOVLW MOVWF REG1 D'2' REG2 D'8' REG3

;Habilita las interrupciones globales y la ;interrupcion por TMR0 ;Apago las salidas del puertoB. ;Declaro como cero el registro Flag para estar seguro de que es cero. ;LINEA DE PRUEBA ;**Activo la interrupcin por TMR0**

;Registros segn ;Lo necesite el programa

;*********************PROGRAMA PRINCIPAL***************** PPAL MOVF MOVWF COMF ANDLW MOVWF GOTO GOTO ATRAS BCF BSF CALL BCF BSF CALL BCF BCF CALL GOTO ADELANTE BSF BCF CALL BSF BCF CALL BCF BCF CALL GOTO QUIETO BCF BCF GOTO DERECHA BCF BSF CALL BCF BCF CALL GOTO IZQUIERDA BCF BSF CALL BCF BCF CALL GOTO DERECHAE BSF BSF CALL BCF BCF CALL GOTO IZQUIERDAE BSF BSF CALL BCF BCF PORTB,MI PORTB,MD UNMS PORTB,MI PORTB,MD PORTB,MD PORTB,MI DOSMS PORTB,MI PORTB,MD ESPERA PPAL PORTB,MD PORTB,MI UNMS PORTB,MD PORTB,MI ESPERA PPAL PORTB,MI PORTB,MD DOSMS PORTB,MD PORTB,MI ESPERA PPAL PORTB,MD PORTB,MI PPAL PORTB,MI PORTB,MD DOSMS PORTB,MD PORTB,MI UNMS PORTB,MD PORTB,MI ESPERA PPAL PORTB,MI PORTB,MD DOSMS PORTB,MD PORTB,MI UNMS PORTB,MD PORTB,MI ESPERA PPAL ;Enciendo el motor Izquierdo ;Me aseguro que el motor derecho ;Enciendo el motor derecho ;Apago el motor Izquierdo ;Apagar el motor derecho ;Apagar el motor Izquierdo PORTA,0 LINEA LINEA,0 B'00001111' LINEA TABLA PPAL ;Mover el valor del PortA a W ;Mover el valor al registro Linea ;Complementar el registro Linea ;Limpiar los bits que no usamos, ;y asi estamos seguros de que no halla basura.

11

CALL GOTO UNMS ACA1 BCF BTFSS GOTO BCF RETURN BCF BTFSS GOTO DECFSZ GOTO MOVLW MOVWF BCF RETURN ESPERA ACA3 BCF BTFSS GOTO DECFSZ GOTO

ESPERA PPAL

FLAG, FLAG1 ;Esta subrutina la usamos para preguntar FLAG, FLAG1 ;si ya levanto la bandera la interrupcion por TMR0 ACA1 ;por ende, espera a que halla pasado 1 milisegundos FLAG,FLAG1

DOSMS ACA2

FLAG, FLAG1 FLAG, FLAG1 ACA2 REG2 DOSMS D'2' REG2 FLAG, FLAG1

;Esta subrutina ;decrementa el registro REG2 ;por cada vez que interrumpa por TMR0 ;por ende, cuando hallan pasado ;dos milisegundos

FLAG, FLAG1 FLAG, FLAG1 ACA3 REG3 ESPERA

;Esta subrutina ;decrementa el registro REG3 ;por cada vez que halla interrumpido TMR0 ;como el registro se decrementara 8 veces ;saldra de la subrutina cuando halla pasado ;8 milisegundos

MOVLW D'8' MOVWF REG3 BCF FLAG, FLAG1 RETURN ;***********Vector de Interrupcin************ ISR CLRF INTCON DECFSZ GOTO BSF

;Cuando desborda TMR0 se activa esta interrupcin** ;Desactivo interrupcin por TMR0**

REG1 SALIR FLAG, FLAG1

;Levanto la bandera que FLAG1 para decir que paso un milisegundos

SALIR

MOVLW

MOVLW D'2' MOVWF REG1 B'10100000' MOVWF INTCON RETURN

;Habilita las interrupciones globales y la ;interrupcion por RP0

END

Para el seguidor de lneas negras aplicar los siguientes cambios:


;************************************************* TABLA ADDWF GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO GOTO PCL,1 ADELANTE DERECHAE QUIETO DERECHAE QUIETO QUIETO QUIETO DERECHA IZQUIERDAE ADELANTE QUIETO DERECHA IZQUIERDAE IZQUIERDA IZQUIERDA IZQUIERDA MOVF LINEA,0

;*********************PROGRAMA PRINCIPAL***************** PPAL MOVF PORTA,0 ANDLW B'00001111' MOVWF LINEA GOTO GOTO TABLA PPAL

12

Circuitos Utilizados
Plaqueta de montaje de los Sensores

Placa para el HCF40106BE y para conectar los sensores como indican los nmeros.

Esta es la placa del microcontrolador.

Y esta es la plaqueta de control de motores.


13

Conclusiones.
El proyecto no es tan complejo y los materiales no son tan difciles de conseguir. Fabricar la estructura de acrlico y las ruedas fueron una de las cosas que ocuparon ms tiempo. Se procuro que el programa del PIC sea lo ms corto posible, para que el seguidor de lneas pueda ser una subrutina. De todas maneras las subrutinas de Atrs, Adelante, Izquierda, Derecha, etc, se pueden utilizar en cualquier momento del programa. Y de esta manera el robot pueda tener otro fin mas que el de seguir una lnea.

Hay que procurar que los sensores no estn tan separados porque esto hara que tarde en corregir su camino. La alimentacin del PIC la separe a la de los motores, por dos razones. La primera para que no entre ruido del motor al PIC y este no pueda trabajar correctamente. Y la segunda porque los motores consumen mucha corriente, detalle a tener en cuenta. Todas las masas van juntas.

14