proyecto final robot · pdf filede luz y el receptor se colocan en la misma dirección...

14
1 Proyecto Final Robot Docentes: Collovati Susana Lasarte Matias Correa Diego Integrante: Jesús Olguera

Upload: dangdat

Post on 01-Feb-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

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.

9

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.