Dirigir un robot móvil

Anuncio
[2ª Práctica]
Introducción a la Placa Pic Bot
 Alumnos: Leonardo Lanchas Rolando y Laia
Pérez Ríos
 Asignatura: DSBM
 Curso Académico: 2008/2009
 Universidad: ULPGC- Facultad de Ingeniería
Informática
Índice
1. Objetivos ………………………………………pág. 2
2. Planteamiento de la práctica…………pág. 3
3. Procedimiento …………………………….. pág. 4
4. Resultados y Problemas ………………. pág. 6
5. Conclusiones ………………………………. pág. 8
6. Anexo ………………………………………… pág. 9
Leonardo Lanchas Rolando y Laia Pérez Ríos 1
1.Objetivos
Esta segunda práctica de la asignatura Diseño de Sistemas Basados en
Microprocesador tiene como objetivo que el alumnado se familiarice con
el uso de la placa Pic Bot (Controladora MSX84), de manera que sea capaz
de programarla y se adquieran los conocimientos básicos de la misma.
Asimismo el alumno adquirirá las destrezas necesarias para manejar los
sensores CNY70, que son capaces de reflejar distintas longitudes de onda.
Y finalmente, también se pretende que el alumno aprenda a manejar los
Motores DC, ya que sus aplicaciones son bastante útiles para lo que esta
práctica pretende llevar a cabo.
Leonardo Lanchas Rolando y Laia Pérez Ríos 2
2. Planteamiento de la práctica
Tal y como se ha comentado en el apartado anterior en esta práctica se va
a hacer uso de la placa Pic Bot.
Análogamente a la práctica anterior, se seguirá programando el Pic pero
esta vez, añadiendo las peculiaridades de la controladora MSX84.
El cometido de la práctica es montar un robot con capacidad para
desplazarse a lo largo de una línea blanca. De esta manera, el robot
deberá recorrer el camino propuesto sin problema alguno, tanto en
tramos rectos como curvos.
Leonardo Lanchas Rolando y Laia Pérez Ríos 3
3. Realización de la práctica
En primer lugar se procedió a estudiar el manual de la placa Pic Bot, para
adquirir los conocimientos básicos sobre la misma y poder llevar a cabo la
realización de la práctica de una forma óptima.
De esta manera, se estudiaron las características generales de la placa así
como su funcionamiento básico. Por otro lado, se llevó a cabo el estudio
de los sensores de luz, ya que serán los encargados de seguir la línea que
marcará el circuito que deberá seguir el robot.
Una vez estudiados los sensores, se procedió a analizar el funcionamiento
de los motores ya que son los encargados de habilitar el movimiento del
robot. Se llevó a cabo un estudio exhaustivo de las combinaciones de bits
necesarias para determinar los movimientos correspondientes. La tabla
siguiente muestra la codificación de bits del puerto B y el movimiento
correspondiente.
Parada
Adelante
izq_adelante ( giro a la derecha )
der_adelante ( giro a la izquierda )
00000000
00001101
00001111
00001100
A continuación se procedió a manejar los sensores de luz. El
comportamiento es bastante simple –para más información ver el manual
de la placa indicado en la bibliografía-. De esta manera, se programó el pic
para que el robot fuera capaz de seguir la línea blanca. Se trata de una
línea blanca debido a que el color del suelo del laboratorio es negro, y de
esta manera es más sencillo que detecte la línea.
Leonardo Lanchas Rolando y Laia Pérez Ríos 4
Al disponer de dos sensores de luz la tarea de programación del PIC
resultó más fácil de implementar.
Una vez hecho, se comenzó a realizar una serie de pruebas para
comprobar la validez del código escrito. Dichas pruebas, se detallan en el
apartado siguiente de esta memoria así como los problemas surgidos y sus
soluciones.
Leonardo Lanchas Rolando y Laia Pérez Ríos 5
4. Resultados y Problemas
Tal y como se comentó en el apartado anterior, se estudió el manual de la
placa así como las características de los motores DC, obteniendo así los
códigos que el puerto B del Pic debía tener para un correcto
funcionamiento de los motores así como para realizar los movimientos
deseados.
Para poder probar el funcionamiento de los motores, fue preciso colocar
el switch en la posición correcta para que pudiera recibir corriente de una
fuente de alimentación externa. Una vez puesto en marcha, se comprobó
que los movimientos que realizaba no eran los debidos, produciéndose
incongruencias entre el manual de la placa y el sentido de giro de las
ruedas del robot. Esto era debido a que una rueda estaba colocada en un
sentido y la otra en sentido contrario. Como consecuencia, en el código
implementado, se tuvo que cambiar los valores del puerto de B teniendo
en cuenta este detalle. Una vez modificados, el robot realizaba los
movimientos descritos correctamente, siendo capaz de ir hacia adelante,
hacia atrás, a la izquierda y a la derecha.
Cuando ya se tenía el código completo del robot, se procedió a verificar
que efectivamente funcionaba. En primer lugar esto no ocurría así, ya que
había ocasiones en las que no detectaba bien la línea y realizaba un
movimiento erróneo. Asimismo, otro inconveniente que imposibilitaba al
robot a realizar un trazado correcto del circuito, era el ancho de la cinta
que describía el circuito. Debido a ello, se optó por cambiar el ancho y
poner una línea más estrecha.
Con esta nueva anchura de la cinta, se procedió a cambiar el código de
manera que se tuviera en cuenta que la línea se encontraba en medio de
ambos sensores.
En esta ocasión, el robot realizaba un trazado correcto en los tramos
rectos, presentado comportamientos distintos en los tramos curvos. Tras
una serie de pruebas se comprobó que era debido a que los sensores se
encontraban muy próximos entre sí y muy cercanos al suelo. De esta
manera, se cambió la disposición de los mismos, alejándolos un poco y
elevándolos un poco con respecto al suelo. Una vez realizada dicha
modificación, el robot se vio capaz de recorrer el circuito, tanto en los
tramos rectos como en los curvos y en ambos sentidos.
Leonardo Lanchas Rolando y Laia Pérez Ríos 6
Leonardo Lanchas Rolando y Laia Pérez Ríos 7
5. Conclusiones
En primer lugar, cabe destacar que antes de proceder a realizar cualquier
práctica es conveniente documentarse adecuadamente sobre el material
del que se dispone, con el objetivo de adquirir los conocimientos
necesarios para llevar la práctica a cabo.
Por otro lado, el uso de sensores no es muy complejo pero adquieren un
comportamiento distinto es función de la posición que presenten y la
distancia con respecto al suelo, ya que según ésta reflejan distintas
longitudes de onda y las interpreta de maneras diferentes, pudiendo
incluso no realizar su cometido.
Por lo que a los motores respecta, cabe decir que su comportamiento es
bastante sencillo y no presenta ninguna implicación, salvo tener en cuenta
la posición y sentido en el que están dispuestos con el fin de codificar el
movimiento correctamente.
Cabe destacar que hay que tener presente que se está programando a
bajo nivel y por tanto se debe hacer un uso adecuado y aprovechar al
máximo los recursos de los que se dispone.
Por último, cabe destacar las facilidades que presenta el PIC para
interactuar con la placa Pic Bot, ya que el comportamiento es el mismo y
no presenta ninguna diferencia en cuanto a términos de programación.
Leonardo Lanchas Rolando y Laia Pérez Ríos 8
6.Anexo
;Código sin librería
; programa inicio
List p=16F84A
include "P16f84A.INC"
ORG 00
goto Inicio
ORG 05
Inicio
;
GLOBAL Configuracion
clrf PORTA
bsf
STATUS,RP0
clrf PORTA
; Desactiva latch de salida de PORTA
; Selecciona página 1
; Puerto B como salida
movlw 0xFF
movwf PORTB
bcf
STATUS,RP0
; Puerto B como entrada
; Selecciona pÁgina 0
btfss PORTB, 0
goto der_adelante
; si me desvío a la izq,
; vamos a la dcha
btfss PORTB, 1
goto izq_adelante
; si me desvío a la dcha
; vamos a la izq
Bucle
adelante
movlw b'00001101'
movwf PORTA
goto Bucle
izq_adelante
movlw b'00001111'
movwf PORTA
goto Bucle
; giro a la dcha
der_adelante
movlw b'00001100'
movwf PORTA
goto Bucle
END
; giro a la dcha
;Código con librería
;Archivo principal que hace uso de la librería
; programa inicio
List p=16F84A
include <P16f84A.INC>
include "coche.INC";
; Tipo de procesador
; Definiciones de registros internos
principal CODE 00h
GOTO Comienzo
Leonardo Lanchas Rolando y Laia Pérez Ríos 9
MAIN CODE
Comienzo
call
Inicio
Bucle
call SENSOR_IZQ
btfsc sensorIzq, 0
goto derecha
; si me desvío a la izq,
; vamos a la dcha
call SENSOR_DER
btfsc sensorDer, 0
goto izquierda
; si me desvío a la dcha
; vamos a la izq
Adelante
movfw
adelante
movwf
movimiento
call MOVER
goto Bucle
izquierda
movfw
movwf
call
goto
derecha
movfw
movwf
call
goto
END
; giro a la dcha
izq_adelante
movimiento
MOVER
Bucle
; giro a la dcha
der_adelante
movimiento
MOVER
Bucle
; Código de la librería
List p=16F84A
include "P16f84A.INC"
; Tipo de procesador
; Definiciones de registros internos
UDATA
parada
adelante
RES 1
GLOBAL parada
RES 1
GLOBAL adelante
izq_adelante
RES 1
GLOBAL izq_adelante
der_adelante
RES 1
GLOBAL der_adelante
movimiento
RES 1
GLOBAL movimiento
sensorIzq
RES 1
GLOBAL sensorIzq
Leonardo Lanchas Rolando y Laia Pérez Ríos 10
sensorDer
RES 1
GLOBAL sensorDer
LiberiaCoche
CODE
Inicio
GLOBAL
Inicio
clrf PORTA
bsf
STATUS,RP0
clrf PORTA
; Desactiva latch de salida de PORTA
; Selecciona página 1
; Puerto A como salida
movlw
0xFF
movwf
PORTB
bcf
STATUS,RP0
; Puerto B como entrada
; Selecciona pÁgina 0
;Inicializacion de las variables
clrf parada
clrf movimiento
; por defecto está parado
movlw
b'00001101'
movwf adelante
movlw
b'00001111'
movwf izq_adelante
movlw b'00001100'
movwf der_adelante
return
SENSOR_IZQ
GLOBAL
SENSOR_IZQ
btfss PORTB, 0
goto uno
; blanco
goto cero
; negro
uno
movlw 1
; blanc0
goto izq
cero
movlw 0
izq
; negro
movwf sensorIzq
return
SENSOR_DER
GLOBAL SENSOR_DER
btfss PORTB, 1
goto uno1
goto cero1
; si esta a Uno es negro
uno1
movlw 1
goto der
; blanc0
movlw 0
; negro
cero1
der
movwf sensorDer
Leonardo Lanchas Rolando y Laia Pérez Ríos 11
return
MOVER
GLOBAL MOVER
movfw movimiento
movwf PORTA
return
END
;Manual de librería y definiciones necesarias
;
; * Inicio : Rutina empleada para configurar el puerto A ( para mover
los motores ) como salida y el B como entrada ( lectura de los
sensores ). También inicializa los movimientos de los motores:
parada( motor parado ), adelante( avance ), izq_adelante ( giro hacia
la derecha ), der_adelante( giro hacia la izq. ) DEBE SER LA PRIMERA
RUTINA QUE SE EJECUTE
;
; * MOVER : rutina que mueve el coche.
;
; * movimiento : variable donde se carga el movimiento que se desea
efectuar ( parada, adelante, izq_adelante o der_adelante ). A
continuación de cargar el movimiento que se quiere ejecutar, se
llama a la rutina MOVER.
; * SENSOR_IZQ : Evalúa los datos procesados por el sensor izquierdo y
devuelve 0 si el color de lo que "ve" es negro y 1 en caso contrario.
; * sensorIzq : varible donde SENSOR_IZQ devuelve el resultado : 1, o,
0
;
;
; * SENSOR_DER : funciona de la misma manera que SENSOR_IZQ, con la
única diferencia de que evalúa el sensor derecho.
; * sensorDer
o, 0.
: varible donde SENSOR_IZQ devuelve el resultado : 1,
;inicializacion
EXTERN
Inicio
; moviemientos
EXTERN parada
EXTERN
adelante
EXTERN
izq_adelante
EXTERN
der_adelante
; valores de los sensores
EXTERN
sensorIzq
EXTERN
sensorDer
EXTERN
movimiento
; funciones
EXTERN
MOVER
EXTERN
SENSOR_IZQ
EXTERN
SENSOR_DER
Leonardo Lanchas Rolando y Laia Pérez Ríos 12
Descargar