20
Control de direccionamiento y navegación de vehículo a radiocontrol Integrantes: Cassola Maximiliano Serritella Sebastián PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

Proyecto Final Taller de Microcontroladores 2010

Embed Size (px)

Citation preview

Page 1: Proyecto Final Taller de Microcontroladores 2010

1

Control de direccionamiento y navegación de vehículo a radiocontrol

Integrantes: Cassola Maximiliano Serritella Sebastián

PROYECTO FINAL TALLER DE

MICROCONTROLADORES 2010

Page 2: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

2

Introducción a los Microcontroladores

Recibe el nombre de controlador el dispositivo que se emplea para la administración de uno o

varios procesos. Por ejemplo, el controlador que regula el funcionamiento de un horno dispone de

un sensor que mide constantemente su temperatura interna y, cuando traspasa los límites

prefijados, genera las señales adecuadas que accionan los efectores que intentan llevar el valor de

la temperatura dentro del rango estipulado.

Aunque el concepto de controlador ha permanecido invariable a través del tiempo, su

implementación física ha variado frecuentemente. Hace tres décadas, los controladores se

construían exclusivamente con componentes de lógica discreta, posteriormente se emplearon los

microprocesadores, que se rodeaban con chips de memoria y E/S sobre una tarjeta de circuito

impreso. En la actualidad, todos los elementos del controlador se han podido incluirse en un chip,

el cual recibe el nombre de microcontrolador.

Hoy en día están conquistando el mundo y están presentes en nuestra vida, en general. Se pueden

encontrar controlando el funcionamiento de diversos dispositivos como teclados de

computadoras, teléfonos, hornos microondas , televisores, entre otros.

Un microcontrolador es un circuito integrado de alta escala de integración que incorpora la mayor parte de los elementos que configuran un controlador.

Dispone normalmente de los siguientes componentes:

Procesador o UCP (Unidad Central de Proceso).

Memoria RAM para Contener los datos.

Memoria para el programa tipo ROM/PROM/EPROM.

Líneas de E/S para comunicarse con el exterior.

Diversos módulos para el control de periféricos (temporizadores, Puertas Serie y Paralelo, CAD: Conversores Analógico/Digital, CDA: Conversores Digital/Analógico, etc.).

Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.

Page 3: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

3

Introducción al Proyecto

El proyecto que se presenta a continuación está relacionado a la Materia Optativa Taller de Microcontroladores del año 2010 de la facultad de Cs. Exactas de la UNICEN. Y como se introduce en la sección anterior, va a ser programando sobre microcontroladores. El trabajo consiste en controlar el direccionamiento y navegación de un vehículo a radiocontrol con el objetivo de que pueda marchar dado un mapa precargado, desde un punto origen a uno destino, teniendo la capacidad de poder esquivar obstáculos. La idea de ser aplicado a vehículos a radiocontrol viene dado a las limitaciones que presentan actualmente los microcontroladores, principalmente las relacionadas a la potencia de cálculo de los mismos. Se programó este trabajo sobre un microcontrolador PIC modelo 18F4550. El cual pertenece a los

microcontroladores PIC18 de gama alta. Posee una arquitectura RISC (reduced instruction set

computer) de 16 bits longitud de instrucciones y 8 bits de datos. El modelo fue elegido teniendo

en cuenta las características específicas del dispositivo como Módulos PWM, Conversores

Analógico-Digital, USART, además por sus tipos de memorias, periféricos incluidos, ancho de

palabras, etc., necesarias para el funcionamiento del proyecto.

Para esto, se programó sobre un microcontrolador, diferentes funcionalidades para controlar el direccionamiento y navegación de un vehículo a radiocontrol. Entre las principales funcionalidades implementadas se encuentran:

Calcular ángulo y sentido: dadas dos sentencias NMEAS el programa es capaz de determinar el ángulo y el sentido próximo a doblar del vehículo.

Chequear sensores de proximidad: el programa puede chequear, si existen, los sensores de proximidad del vehículo y de ser necesario toma la decisión de cambiar el ángulo a doblar por la presencia de obstáculos. Esta información es pasada a los servos.

Controlar movimiento de servos: permite controlar los diferentes servos del vehículo para moverlos según el Angulo resultante a doblar.

Para navegar, se le debe cargar al proyecto una ruta o camino de puntos (sentencias NMEAS) la cual indica el recorrido que se quiere realizar. Además el proyecto utiliza un dispositivo GPS para tomar sentencias NMEAS para determinar la posición actual del móvil y realizar los cálculos correspondientes para su movilidad y navegación. Este tipo de proyecto podría servir para (que hace y para que sirve o serviría y si hay algún proyecto como este en la web

Page 4: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

4

desventajas del MIcrocontrolador, direccionan poca memoris, son demasiado sansibles ala electrostatica, aun con una memoria externa limitan su actividad a algo basico asi como su set de instrucciones seerte y espero que esto te sirva de algo

Una idea general de que es lo que hace el vehículo-dirigido es tratar de seguir una camino de puntos GPS cargada previamente y sin chocarse con obstáculos. Para el direccionamiento se realizaron cálculos matemáticos en el que intervienen la ubicación actual y la ubicación a la que desea dirigirse. Y para esquivar los obstáculos se utilizaron varios sensores de proximidad ubicados en lugares claves del vehículo. La realización de este proyecto podría servir para distintas aplicaciones dentro de la variedad de vehículos no tripulados, en el que su utilización puede otorgar a la inteligencia militar el reconocimiento de campo enemigo tanto para vehículos terrestres como aéreos. También en un futuro se podría utilizar para transporte de personas o de objetos ya que su alto desarrollo de ir por el camino correcto y además la forma de esquivar obstáculos podría proporcionar una gran ayuda para el hombre y algo que hoy en día se valoriza mucho es la reducción de costos, por lo que se podría ahorrar en un conductor. Sería algo así como un “Piloto automático” constante. Algunos links semejantes al proyecto: http://www.buenastareas.com/ensayos/Navegador-Gps-Microcontrolado/1457467.html http://conexionelectronica.net/index.php?option=com_content&task=view&id=16&Itemid=2 http://issuu.com/todomicrostamp/docs/gps

Funcionamiento del proyecto

En un principio, se debe cargar en el PIC la ruta formada por checkpoint, por medio del RS232,

configurado con los pines xmit=PIN_C6y rcv=PIN_C7, y con el pulsador de checkpoints PIN_E0

encendido, indicando que los datos que entran por serie se almacenan como checkpoint. La

capacidad de almacenamiento máxima permitida es de 32 checkpoints, es decir, 32 valores de

latitud y 32 valores de longitud diferentes.

Page 5: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

5

Una vez que se cargan los puntos de checkpoints, se conecta un dispositivo GPS en los pines

correspondientes al RS232 (PIN_C6 y PIN_C7) para que el mismo tome los datos NMEA actuales

del vehículo. Se debe desactivar el pulsador de checkpoint PIN_E0 para indicar que el dato que se

recibe por serie es proveniente del GPS.

Los datos que se cargan por los pines PIN_C6 y PIN_C7 para cualquiera de los dos casos (ruta de

checkpoint o dispositivo GPS) son sentencias NMEA, de las cuales se interpretan como válidas las

de encabezado $GPRMC. El programa se encarga de tomar estos datos provenientes del puerto

serie, con una especie de autómata y guardarlos en forma de cadena de caracteres para que luego

se seleccionen los campos necesarios (latitud, longitud y sentido).

Una vez que se lee un dato del puerto serie proveniente del dispositivo GPS, se calcula el ángulo

entre el punto al que se debe llegar (checkpoint) y el punto obtenido recientemente por el

dispositivo GPS. Con el ángulo obtenido, se analizan los sensores del vehículo por si es necesario

cambiar el ángulo a doblar, en caso de que se detecten obstáculos. Una vez calculado esto se

procede a mover los servos. El proceso comienza nuevamente recibiendo una nueva sentencia

NMEA por el dispositivo GPS y se repite hasta que se alcanzan todos los puntos de checkpoint

guardados.

Pseudocodigo del funcionamiento del Proyecto

Page 6: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

6

Estructuras Utilizadas

Para el desarrollo de este proyecto se decidió dividir y utilizar las siguientes clases como se

muestra a continuación:

Main.c: principal, se encarga del manejo entero del proyecto.

Automata.c: máquina de estados que toma los datos NMEA del rs232 y los guarda en

forma de cadena de caracteres.

Automata.h: almacena las estructuras y variables necesarias que utiliza la clase

autómata.c.

Gps.c: encargada de interpretar, leer y devolver los datos NMEA que guarda el autómata.

Gps.h: almacena las estructuras y variables necesarias que utiliza la clase Gps.c.

Page 7: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

7

Inter.c: se encarga del manejo de interrupciones.

Lcd.c: maneja las funciones relacionadas al display.

18F4550.c: manejo del microcontrolador.

Servo.c: controla el movimiento de los servos.

Servo.h: almacena las estructuras y variables necesarias que utiliza la clase Servo.c.

Checkpoint.c: carga y verifica los puntos de checkpoints.

Checkpoint.h: almacena las estructuras y variables necesarias que utiliza la clase

Checkpointc.

Sensores.c: se encarga del manejo de movimientos de los sensores.

Sensores.h: almacena las estructuras y variables necesarias que utiliza la clase Sensores.c.

Ángulos

Referencia a la función calcular del pseudocódigo del funcionamiento del proyecto. Calcula el

ángulo a doblar entre los datos NMEA.

IMPORTANTE: Las sentencias NMEAS probadas y aceptadas tienen el

formato de latitud y longitud de la siguiente manera: GGGG.MMM.

El ángulo a doblar entre los datos de las sentencias NMEAS tomadas por el dispositivo GPS y los

tomados por el punto de checkpoint al que debemos llegar lo calculamos de la siguiente manera:

Si la latitud resultante de la diferencia entre las latitud proveniente del checkpoint y del

dispositivo GPS es positiva entonces:

Si la latitud resultante de la diferencia entre las latitud proveniente del checkpoint y del

dispositivo GPS es negativa entonces:

Page 8: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

8

Es decir que le sumamos un giro completo.

Sensores

Referencia a la función leer sensores del pseudocódigo del funcionamiento del proyecto. Dado el

ángulo a doblar y el valor de los sensores retorna el ángulo que se deben mover los servos.

El sensor de proximidad infrarrojos que simulamos en el Proteus es el sensor GP2D12. Este en

particular indica mediante una salida analógica la distancia medida. Esta salida es no lineal y

atiende a la curva siguiente:

Page 9: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

9

Si observamos detenidamente la gráfica, vemos que el sensor es eficaz en el intervalo de distancias de 10 hasta 80 cm ya que a distancias menores la curva no es homogénea y para distancias mayores el intervalo de voltaje de salida del sensor es muy pequeño. Es por ello necesario limitar el sensor a este intervalo ya sea por software o hardware.

El sensor tiene como salida un voltaje entre 0 y 3 voltios dependiendo de la distancia del obstáculo, pero este dato no es suficiente para saber a qué distancia está el objeto. Para ello hemos recogido los siguientes puntos tomados de dicho sensor:

Salida (V) Distancia (cm)

2.6 8.5

2.5 10

2.2 11.5

2 13

1.75 15

Page 10: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

10

1.4 20

1.12 25

0.96 30

0.85 35

0.75 40

0.68 45

0.62 50

0.58 55

0.52 60

0.5 65

0.47 70

0.44 75

0.41 80

Estos datos son precargados en el proyecto sobre un arreglo, por lo tanto cuando se produce la

lectura de los sensores de proximidad se determina la distancia a un objeto si existe.

En este proyecto consideramos 3 sensores de proximidad delanteros y 1 trasero, como se muestra

en la siguiente imagen:

Aunque el sensor detecte un objeto hasta en 80 cm. de distancia de proximidad, nosotros

consideramos tratarlos a partir de los 40 cm. (0.75V), es decir que desde este valor hacia menores

alertamos un objeto y se modifica el ángulo a doblar de ser necesario para esquivar el objeto.

Consideramos más apropiada la distancia de 40 cm. para alertar por un objeto ya que es una

distancia suficientemente grande para que el vehículo pueda doblar, igualmente este valor está

almacenado en una CTE y puede ser restaurado en cualquier momento de ser necesario.

Page 11: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

11

NOTA: el sensor trasero no lo utilizamos en el proyecto, pero igualmente lo agregamos en la

resolución del mismo como alternativa a una posible mejora a la movilización del vehículo.

Las técnicas que utilizamos para redireccionar el ángulo a doblar son las siguientes:

Si un objeto está a una distancia menor a 40cm. (detecta el objeto) del sensor izquierdo

(SI) o del sensor derecho (SD) y el sensor del centro(SC) no detecta objeto (mayor a 40cm.

de distancia), entonces si el ángulo a doblar es para la izquierda (de 0° a 90°) y el SI avisa

que hay un objeto, entonces se hace un cálculo para llevar el vehículo hacia la derecha (de

90° a 180°). Lo mismo pasa para el lado derecho, y se intenta llevar el auto hacia la

izquierda. En los casos cruzados, es decir, cuando el ángulo a doblar es para la izquierda y

el sensor que se activa esta sobre la derecha, y viceversa, entonces el ángulo a doblar es el

mismo que se había calculado en las funciones de ángulos.

Ahora si se detecta un objeto en el SI o en el SD, y si el SC también detecta un objeto,

entonces si el ángulo a doblar es para la izquierda (de 0° a 90°) y el SI avisa que hay un

objeto, entonces se lleva el vehículo a 135°, es decir, lo forzamos a doblar hacia la

derecha para evitar el obstáculo. Lo mismo pasa para el lado derecho, y se intenta llevar el

auto a 45° forzándolo a ir hacia la izquierda. En los casos cruzados, es decir, cuando el

ángulo a doblar es para la izquierda y el sensor que se activa esta sobre la derecha, o

viceversa, entonces el ángulo a doblar es el mismo que se había calculado en las funciones

de ángulos.

Servos

Referencia a la función mover servos del pseudocódigo del funcionamiento del proyecto. Dado el

ángulo a doblar proveniente de las funciones de los sensores, hace mover a los mismos este

ángulo.

Page 12: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

12

Los servos que simulamos tienen un radio de giro de 180°. Están conectamos directamente al PIC

en los puertos B. El control de posición de los servos lo hacemos por PWM utilizando el timer0,

soportamos hasta 8 servos, se puede ajustar a los que se necesiten.

Señal de Control

Señal PWM de 50 Hz.

El ancho de pulso varía entre 0.5ms y 2.5ms.

Cada anchura se corresponde con una posición angular del eje de salida del servo.

Trabajamos con ángulos comprendidos entre 0° (90° a IZQ) y 180° (90° a DER).

PWM y Timer0

Dividimos los 20 ms en 8 ventanas temporales de 2.5ms.

Utilizamos 75 ticks por cada ventana de 2.5ms. con divisor del Timer0 de 32.

Conversión entre grados y tiempos en ticks

El ángulo de cada servo lo expresamos en grados en el rango [0,180].

La anchura en pulso está comprendida entre 0.5 ms y 2.5ms.

La anchura en ticks (con divisor de 32) está comprendida entre 15 y 75 ticks.

Page 13: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

13

Establecemos una relación lineal entre el ángulo y la anchura (Ton).

Una vez obtenido el tick, se calcula, con una regla de 3, el valor para que el Timer0 retarde el

tiempo correspondiente a dicho valor del tick.

Moviendo 8 servos con el Timer0

En cada ventana de 2.5 ms actuamos sobre un servo.

Al terminar con la ventana 8 comenzamos nuevamente en la 1.

En cada instante hay como mucho un servo activo.

Ventajas y Desventajas

Presentamos las ventajas y desventajas de programar este tipo de proyecto en

microcontroladores,

Page 14: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

14

Ejemplo Funcionamiento

A continuación detallamos en un ejemplo los diferentes pasos y el resultado obtenido de simular

el proyecto sobre Proteus.

En el ejemplo aparecen 4 servos (de los cuales dos de arriba están conectados), un osciloscopio,

un display, 4 sensores (de los cuales el de abajo esta desconectado), el PIC y una UART con el fin

de facilitar y testear la simulación.

Suponiendo que tenemos las siguientes sentencias NMEAS:

$GPRMC,195155.00,A,3719.183,S,5411.733,W,0.660,200.0,300809,,,A*5B

$GPRMC,195155.00,A,3719.190,S,5411.760,W,0.660,200.0,300809,,,A*5B

$GPRMC,195155.00,A,3719.184,S,5411.734,W,0.660,200.0,300809,,,A*5B

Page 15: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

15

Donde vamos a utilizar la primera como punto de checkpoint y las otras 2 como provenientes del

dispositivo GPS. El campo marcado en rojo es la latitud, en verde la longitud y el azul el sentido,

notar que el sentido que se necesitan son los provenientes del dispositivo GPS.

En un principio cargamos el primer NMEA por rs232, recordar que el botón correspondiente al

pulsador de checkpoint debe estar activo para indicar que el dato que se carga en un punto de

checkpoint.

Luego desactivamos el botón correspondiente al pulsador de checkpoint para indicar que el dato

que entra por UART es de un dispositivo GPS y cargamos la segunda sentencia NMEA.

Page 16: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

16

Se puede observar que en el display aparece un grado G, que es el ángulo que sale de hacer la

función correspondiente a ángulos entre dos sentencias NMEAS, y A que corresponde al valor que

sale luego de revisar los sensores y es el ángulo que deben doblar los servos. Como se observa los

sensores están en cero, por lo tanto no tienen ningún objeto cerca y por ende el valor de A es igual

al valor de G. Se puede notar también que los servos que están funcionando (los dos de arriba) se

movieron el grado correspondiente a A. El valor que sale de 85 grados, hace referencia que el

vehiculo se mueve 5° a la izquierda.

Ahora vemos que pasa si se activa el sensor izquierdo. Recordar que para activarlo le tenemos

que poner un valor de voltaje mayor a 0.75v, es decir, le estamos indicando que se encuentra a

una distancia menor a 40 cm. Para esto cargamos nuevamente la segunda sentencia NMEA por la

UART.

Page 17: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

17

Como se observa por el display el grado G, sigue siendo igual ya que el ángulo que se calcula es

sobre las mismas sentencias NMEAS. Al cambiar el valor del sensor izquierdo, se puede ver que el

valor de A también cambió e intenta llevar al vehículo para el lado derecho. Este cambio también

se observa sobre los servos los cuales siempre van a doblar el grado correspondiente a A.

Ahora observemos que pasa si también se activa el servo de la parte frontal del vehículo.

Nuevamente cargamos la misma sentencia NMEA para ver el resultado:

Page 18: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

18

Como era de esperar, el valor de A cambió a 135° tal como habíamos detallado anteriormente en

la parte de los sensores. Y por ende los servos tomaron este valor.

Algo importante de aclarar es que la sentencia NMEA que hace referencia a que se carga por un

dispositivo GPS (todas las que aparecen en la UART menos la primera) no llega a un radio próximo

a la sentencia que hace referencia al checkpoint (la primera) y por lo tanto no se puede avanzar al

siguiente checkpoint o marcar que se llegó a destino.

La tercer sentencia NMEA que aparece en el principio del ejemplo, si cumple con esta condición de

checkpoint comparándola con el mismo punto de check, es decir que se encuentra en un radio

próximo, esto se puede observar mirando latitud y longitud de ambas sentencias.

Entonces ahora vamos a cargar dicha sentencia para que se vea que cumple el checkpoint y se

pasa al siguiente check, en nuestro caso debe finalizar ya que cargamos únicamente un punto de

check para el ejemplo.

Page 19: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

19

En el display se ve, como habíamos mencionado, que se cumple la condición de check y se intenta

pasar al siguiente check, pero como no hay más se llega al final del recorrido. Los valores de los

servos no se modificaron, están marcando los del ejemplo anterior, ya que la verificación de

checkpoint se comprueba antes de empezar a calcular el nuevo ángulo a doblar.

Si se quiere se puede seguir probando combinaciones de sentencias NMEA y ver cómo van

variando los servos, pero se muestran algunas para que se entienda principalmente su

funcionamiento.

El proyecto fue testeado con varios puntos de checkpoint y varios provenientes de GPS y anduvo a

la perfección. Se debe tener en cuenta para su buen funcionamiento que se deben cargar por

rs232 las sentencias NMEAS de a una por una para no obstruirlo.

Page 20: Proyecto Final Taller de Microcontroladores 2010

PROYECTO FINAL TALLER DE MICROCONTROLADORES 2010

20

Conclusión

conclusión contando que es lo que se propusieron, que problemas o que sorpresas les dio al

realizarlo y que problemas se presentarían al pasarlo a un autito real.