You are on page 1of 14

Proyecto Final Robot

Docentes:

Integrante:

Collovati Susana Lasarte Matias Correa Diego

Jesús Olguera

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.

para el correcto orden de los elementos que la componen. En el caso de este robot,

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.

CNY70

“ CNY70 Sensor óptico reflexivo que tiene una construcción compacta dónde el emisor de luz y

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)

consiste en un fototransistor.” (Nota de la Hoja de datos) Una de las formas de configurar

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.

al ser un transistor la respuesta pueden ser las siguientes. A) Entrega a la salida un

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:

señales. Para eso, el siguiente paso… Schmitt trigger: Este proyecto utiliza el integrado HCF40106BE para lograr

Este proyecto utiliza el integrado HCF40106BE para lograr pasar las señales schmitt trigger en simultaneo.

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)

como salida las 4 patas del HCF40106BE (Pata 2,4,6,8) Servo-Motores: Los motores que se utilizaron son
como salida las 4 patas del HCF40106BE (Pata 2,4,6,8) Servo-Motores: Los motores que se utilizaron son

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.

motor tradicional solo tiene una movilidad de 180° Grados. Los cuales para funcionar necesitan un tren
motor tradicional solo tiene una movilidad de 180° Grados. Los cuales para funcionar necesitan un tren

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.

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.

que conseguir otro, así nos ahorramos tiempo y dinero. El robot utiliza como entrada las patas

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.

introducirá la señal directa del PIC al motor, sino que pasara por un circuito al que

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

Ruedas:

para separar al microcontrolador de los motores. Ruedas: Son artesanales. Están hechas de dos materiales. Orring

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

de la rueda. El grilón se consigue en tornerías y se torna dependiendo el Orring escogido.

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

Decimal

Binario

Comando

0

0000

Adelante

0

0000

Adelante

1

0001

DerechaE

1

0001

Derecha

2

0010

Quieto

2

0010

Derecha

3

0011

DerechaE

3

0011

DerechaE

4

0100

Quieto

4

0100

Izquierda

5

0101

Quieto

5

0101

Quieto

6

0110

Quieto

6

0110

Adelante

7

0111

Derecha

7

0111

DerechaE

8

1000

IzquierdaE

8

1000

Izquierda

9

1001

Adelante

9

1001

Quieto

10

1010

Quieto

10

1010

Quieto

11

1011

Derecha

11

1011

Quieto

12

1100

IzquiedaE

12

1100

IzquierdaE

13

1101

Izquierda

13

1101

Quieto

14

1110

Izquierda

14

1110

IzquierdaE

15

1111

Izquierda

15

1111

Adelante

Subrutinas:

Subrutinas: Siguiendo la misma estructura de subrutina para Adelante, Atrás y Quieto se escriben las subrutinas
Subrutinas: Siguiendo la misma estructura de subrutina para Adelante, Atrás y Quieto se escriben las subrutinas
Subrutinas: Siguiendo la misma estructura de subrutina para Adelante, Atrás y Quieto se escriben las 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
9
9
9
9

Programa Documentado:

;********SEGUIDOR DE LINEAS BLANCAS************* ;****************MAPA DE MEMORIA**************** LIST P=16F628

CONFIG

#include<p16f628A.INC>

_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***

;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

BCF

DOSMS PORTB,MD ;Enciendo el motor derecho

BSF

PORTB,MI ;Apago el motor Izquierdo

CALL

BCF

UNMS PORTB,MD ;Apagar el motor derecho

BCF

PORTB,MI ;Apagar el motor Izquierdo

CALL

GOTO

ESPERA 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

 

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

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

MOVF

LINEA,0

;*********************PROGRAMA PRINCIPAL***************** PPAL

MOVF

PORTA,0

ANDLW

B'00001111'

MOVWF

LINEA

GOTO

TABLA

GOTO

PPAL

Circuitos Utilizados

Plaqueta de montaje de los Sensores

Circuitos Utilizados Plaqueta de montaje de los Sensores Placa para el HCF40106BE y para conectar los
Circuitos Utilizados Plaqueta de montaje de los Sensores Placa para el HCF40106BE y para conectar los

Placa para el HCF40106BE y para conectar los sensores como indican los números.

y para conectar los sensores como indican los números. Esta es la placa del microcontrolador. Y

Esta es la placa del microcontrolador.

Y esta es la plaqueta de control de motores.

13
13
Conclusiones. El proyecto no es tan complejo y los materiales no son tan difíciles de

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.

robot pueda tener otro fin mas que el de seguir una línea. Hay que procurar que

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.