View
217
Download
0
Category
Preview:
Citation preview
1
Proyecto Final
Robot
Docentes: Collovati Susana
Lasarte Matias
Correa Diego
Integrante: Jesús Olguera
2
Introducción:
En el siguiente informe se expone la construcción de un robot capaz de seguir líneas. A través de un control inteligente programado en un microcontrolador, para ser capaz de seguir una línea de forma autónoma.
Parte Constitutiva:
En la confección del robot. Se tiene en cuenta las características físicas de sus partes. Por lo cual creamos una estructura que servirá de guía para el correcto orden de los elementos que la componen.
En el caso de este robot, su estructura está construida de acrílico. Material sumamente fácil 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 miniaturización del componente, sino por dar una respuesta muy adecuada a los contrastes de reflexión.
3
“CNY70
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.”
(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 señal se quiere introducir a un microcontrolador es muy conveniente hacer pasar las salidas a través de un circuito schmitt trigger que conforme las señales.
Para eso, el siguiente paso…
Schmitt trigger:
Este proyecto utiliza el integrado HCF40106BE para lograr pasar las señales schmitt trigger en simultaneo.
4
Una característica que hay que tener en cuenta a la hora de programar es que, además de lograr el schmitt trigger, también 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 posición 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 varía entre 1,5 a 2 milisegundos girara hacia la derecha.
El periodo entre pulso y pulso debe rondar entre los 15 milisegundos, aunque también es aceptable una espera entre 10 y 30 milisegundos dependiendo el motor.
Si se sobrepasara el valor máximo el servo pasaría a estar dormido entre pulso y pulso, y si el intervalo es inferior puede crear una interferencia con la temporización interna del servo.
5
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 utilizarían un driver manejado por señales que le entrega el Microcontrolador, pero en este caso no será necesaria, ya que el PIC es muy capaz de manejar las señales que se utilizan para manejar los motores con la adecuada programación.
Por obviedad no se introducirá la señal directa del PIC al motor, sino que pasara por un circuito al que llamaremos Circuito de control.
6
El circuito solo polariza los transistores cuando este en alto la salida del PIC, para separar al microcontrolador de los motores.
Ruedas:
Son artesanales. Están hechas de dos materiales. Orring y grilones.
Para definir el tamaño de la rueda primero se consigue el Orring. Pues este determina el diámetro máximo de la rueda.
El grilón se consigue en tornerías y se torna dependiendo el Orring escogido.
Programa
Programa Principal
7
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 líneas que corresponde a cada caso de estado de los sensores.
La siguiente tabla explica como:
Sigue líneas blancas Sigue lineas negras:
Decimal Binario Comando
0 0000 Adelante
1 0001 Derecha
2 0010 Derecha
3 0011 DerechaE
4 0100 Izquierda
5 0101 Quieto
6 0110 Adelante
7 0111 DerechaE
8 1000 Izquierda
9 1001 Quieto
10 1010 Quieto
11 1011 Quieto
12 1100 IzquierdaE
13 1101 Quieto
14 1110 IzquierdaE
15 1111 Adelante
Decimal Binario Comando
0 0000 Adelante
1 0001 DerechaE
2 0010 Quieto
3 0011 DerechaE
4 0100 Quieto
5 0101 Quieto
6 0110 Quieto
7 0111 Derecha
8 1000 IzquierdaE
9 1001 Adelante
10 1010 Quieto
11 1011 Derecha
12 1100 IzquiedaE
13 1101 Izquierda
14 1110 Izquierda
15 1111 Izquierda
8
Subrutinas:
Siguiendo la misma estructura de subrutina para Adelante, Atrás y Quieto se escriben las subrutinas de Derecha, Izquierda, Derecha de Emergencia, Izquierda de Emergencia.
10
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 EQU 0X085 ;**Habilita los puertos**
TRISB EQU 0X086
PORTA EQU 0X05 ;**Se activan los puertos***
PORTB EQU 0X06
INTCON EQU 0X0B
CMCOM EQU 0X1F ;**Deshabilita los comparadores**
OPTION_REG EQU 0X81
;***REGISTROS DEL PROGRAMA*****
REG1 EQU 0X20 ;Reistro para la base de tiempo
REG2 EQU 0X21 ;Registro para contar 2MS
REG3 EQU 0X22 ;Registro para contar 17MS
FLAG EQU 0X23
SALIDA EQU 0X24
LINEA EQU 0X25
;***BITS DEL PROGRAMA**********
RP0 EQU 0X05 ;Bit del registro status
FLAG1 EQU 0X00 ;Bit de bandera auxiliar
PSEG EQU 0X01
REGMIC EQU 0X07 ;Bit que indica que ya pasaron 250 Microsegundos
LED1 EQU 0X00 ;Bit que controla el estado del led
MQUIETO EQU 0X00
MATRAS EQU 0X01
MADELANTE EQU 0X02
MIZQUIERDA EQU 0X03
MDERECHA EQU 0X04
MIZQUIERDAE EQU 0X05
MDERECHAE EQU 0X06
MI EQU 0X00
MD EQU 0X02
;****************VECTOR DE RESET****************
ORG 0X00 ;Acá viene cuando el micro se resetea
GOTO INICIO
ORG 0x05 ; Vector de Interrupción
GOTO ISR
;*************************************************
TABLA MOVF LINEA,0
ADDWF PCL,1
GOTO ADELANTE
GOTO DERECHA
GOTO DERECHA
GOTO DERECHAE
GOTO IZQUIERDA
GOTO QUIETO
GOTO ADELANTE
GOTO DERECHAE
GOTO IZQUIERDA
GOTO ADELANTE
GOTO ADELANTE
GOTO QUIETO
GOTO IZQUIERDAE
GOTO QUIETO
GOTO IZQUIERDAE
GOTO IZQUIERDA
;****************CONFIGURACION DE PUERTOS*****
INICIO
BSF STATUS,RP0 ;Nos movemos al banco uno
MOVLW B'11111111'
MOVWF TRISA ;Declaro a todo el trisA como entrada
MOVLW B'00000000'
MOVWF TRISB ;Declaro a todo el trisB como salida
CLRF OPTION_REG
BCF STATUS,RP0
MOVLW D'7' ;Desabilita los comparadores y habilita las
MOVWF CMCON ;entradas y salidas digitales.
;*****************CONFIGURACION DE LA INTERRUPCIÓN***
11
;MOVLW B'11100000' ;Habilita las interrupciones globales y la
MOVWF INTCON ;interrupcion por TMR0
;*****************INICIACION DE PUERTOS Y REGISTROS******
BCF PORTB,LED1 ;Apago las salidas del puertoB.
CLRF FLAG ;Declaro como cero el registro Flag para estar seguro de que es cero.
MOVLW B'10100000' ;LINEA DE PRUEBA
MOVWF INTCON ;**Activo la interrupción por TMR0**
MOVLW D'2'
MOVWF REG1
MOVLW D'2'
MOVWF REG2 ;Registros según
MOVLW D'8'
MOVWF REG3 ;Lo necesite el programa
;*********************PROGRAMA PRINCIPAL*****************
PPAL
MOVF PORTA,0 ;Mover el valor del PortA a W
MOVWF LINEA ;Mover el valor al registro Linea
COMF LINEA,0 ;Complementar el registro Linea
ANDLW B'00001111' ;Limpiar los bits que no usamos,
MOVWF LINEA ;y asi estamos seguros de que no halla basura.
GOTO TABLA
GOTO PPAL
ATRAS
BCF PORTB,MI ;Enciendo el motor Izquierdo
BSF PORTB,MD ;Me aseguro que el motor derecho
CALL DOSMS
BCF PORTB,MD ;Enciendo el motor derecho
BSF PORTB,MI ;Apago el motor Izquierdo
CALL UNMS
BCF PORTB,MD ;Apagar el motor derecho
BCF PORTB,MI ;Apagar el motor Izquierdo
CALL ESPERA
GOTO PPAL
ADELANTE
BSF PORTB,MI
BCF PORTB,MD
CALL DOSMS
BSF PORTB,MD
BCF PORTB,MI
CALL UNMS
BCF PORTB,MD
BCF PORTB,MI
CALL ESPERA
GOTO PPAL
QUIETO
BCF PORTB,MD
BCF PORTB,MI
GOTO PPAL
DERECHA
BCF PORTB,MI
BSF PORTB,MD
CALL DOSMS
BCF PORTB,MD
BCF PORTB,MI
CALL ESPERA
GOTO PPAL
IZQUIERDA
BCF PORTB,MD
BSF PORTB,MI
CALL UNMS
BCF PORTB,MD
BCF PORTB,MI
CALL ESPERA
GOTO PPAL
DERECHAE
BSF PORTB,MD
BSF PORTB,MI
CALL DOSMS
BCF PORTB,MI
BCF PORTB,MD
CALL ESPERA
GOTO PPAL
IZQUIERDAE
BSF PORTB,MI
BSF PORTB,MD
CALL UNMS
BCF PORTB,MI
BCF PORTB,MD
12
CALL ESPERA
GOTO PPAL
UNMS BCF FLAG, FLAG1 ;Esta subrutina la usamos para preguntar
ACA1 BTFSS FLAG, FLAG1 ;si ya levanto la bandera la interrupcion por TMR0
GOTO ACA1 ;por ende, espera a que halla pasado 1 milisegundos
BCF FLAG,FLAG1
RETURN
DOSMS BCF FLAG, FLAG1 ;Esta subrutina
ACA2 BTFSS FLAG, FLAG1 ;decrementa el registro REG2
GOTO ACA2 ;por cada vez que interrumpa por TMR0
DECFSZ REG2 ;por ende, cuando hallan pasado
GOTO DOSMS ;dos milisegundos
MOVLW D'2'
MOVWF REG2
BCF FLAG, FLAG1
RETURN
ESPERA BCF FLAG, FLAG1 ;Esta subrutina
ACA3 BTFSS FLAG, FLAG1 ;decrementa el registro REG3
GOTO ACA3 ;por cada vez que halla interrumpido TMR0
DECFSZ REG3 ;como el registro se decrementara 8 veces
GOTO ESPERA ;saldra de la subrutina cuando halla pasado
MOVLW D'8' ;8 milisegundos
MOVWF REG3
BCF FLAG, FLAG1
RETURN
;***********Vector de Interrupción************
ISR ;Cuando desborda TMR0 se activa esta interrupción**
CLRF INTCON ;Desactivo interrupción por TMR0**
DECFSZ REG1
GOTO SALIR
BSF FLAG, FLAG1 ;Levanto la bandera que FLAG1 para decir que paso un milisegundos
MOVLW D'2'
MOVWF REG1
SALIR MOVLW B'10100000' ;Habilita las interrupciones globales y la
MOVWF INTCON ;interrupcion por RP0
RETURN
END
Para el seguidor de líneas negras aplicar los siguientes cambios: ;*************************************************
TABLA MOVF LINEA,0
ADDWF PCL,1
GOTO ADELANTE
GOTO DERECHAE
GOTO QUIETO
GOTO DERECHAE
GOTO QUIETO
GOTO QUIETO
GOTO QUIETO
GOTO DERECHA
GOTO IZQUIERDAE
GOTO ADELANTE
GOTO QUIETO
GOTO DERECHA
GOTO IZQUIERDAE
GOTO IZQUIERDA
GOTO IZQUIERDA
GOTO IZQUIERDA
;*********************PROGRAMA PRINCIPAL*****************
PPAL
MOVF PORTA,0
ANDLW B'00001111'
MOVWF LINEA
GOTO TABLA
GOTO PPAL
13
Circuitos Utilizados
Plaqueta de montaje
de los Sensores
Placa para el HCF40106BE y para conectar
los sensores como indican los números.
Esta es la placa del
microcontrolador.
Y esta es la plaqueta
de control de motores.
14
Conclusiones.
El proyecto no es tan complejo y los
materiales no son tan difíciles de
conseguir.
Fabricar la estructura de acrílico y las
ruedas fueron una de las cosas que
ocuparon más tiempo.
Se procuro que el programa del PIC
sea lo más corto posible, para que el
seguidor de líneas pueda ser una
subrutina.
De todas maneras las subrutinas de
Atrás, 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 línea.
Hay que procurar que los sensores no estén tan separados porque esto haría que tarde en corregir su
camino.
La alimentación 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.
Recommended