Piloto automático

Bien..., la idea es recojer los datos que envia el GPS por el protocolo NMEA y leerlos via serie desde un micro Basic Stamp2.

El protocolo NMEA, envia un montón de datos, la idea es esperar en un bucle a que llegue lo que nos interesa, en la sentencia encabezada como $GPRMC, Sacamos el Rumbo a WP y de $GPRMB el rumbo real.

Desde el micro, leer los datos de rumbo y el rumbo deseado, al restarlos sabemos los grados que hay que ganar o perder del rumbo actual para llegar al deseado.

La movida es añadirle un servo que controle el timón o un actuador para corregir mecanicamente el rumbo.


Gps, un Garmin III con un WP activado y el protocolo NMEA a 4800 baudios.
El Basic Stamp 2 en una placa de prototipo. El Gps está conectado via serie a la entrada de programación del BS2, para el micro, este puerto es el pin 16.

Para alimentar el GPS me he montado esta caja con la que monitorizar el envio y recepción de datos del GPS por RS-232C (leds+resistencia conectados a saco en TX y RX), con esto consigues ver si se están enviando / recibiendo datos.
Montaje general, los 2 leds de la placa, uno monitoriza la entrada de datos y el otro la entrada de corriente

Invento conectado y funcionando
Para el montaje del servo, esta vez sin trucarlo, es necesario un condensador de unos 3300Mf., pues al ponerlo en marcha su consumo puede hacer que se resetee el micro.
 

Este es el listado del código:

'***************************************************************************
'** DEBUG NMEA 2 - Muestra el desvio de rumbo en DEBUG -
'**
'** SOFT:
'** Sacamos la info de trac de la sentencia $GPRMC que envia el GPS
'** Sacamos la info de Rumbo a WP de la sentencia $GPRMB que envia el GPS
'** Configuramos la entrada, 16572 es N81 a 4800 baud
'**
'** HARD:
'** PIN 0 = LED (Con una Resistencia de 22K)
'** PIN 2 = LED (Con una Resistencia de 22K)
'** PIN 15 = TX del GPSIII (Con una Resistencia de 22K)
'** Vss = GND del GPSIII
'****************************************************************************

tr1 var word 'Rumbo actual
wp1 var word 'Rumbo hacia el WP destino
low 0 'ENCIENDO LED en 0
OUTPUT 2 'Led amarillo en P2, para monitorizar cuando se recibe el rumbo

DEBUG CR,"Ahi vamos!"

Bucle:
DEBUG CR

serin 152, 16572, [wait("GPRMC,"),wait(","),wait(","),wait(","),wait(","),wait(","), wait(","),wait(","),dec tr1]
serin 15, 16572, [wait("GPRMB,"),wait(","),wait(","),wait(","),wait(","),wait(","), wait(","),wait(","),wait(","),wait(","),wait(","), dec wp1]
DEBUG CR,"Rumbo = ",DEC tr1
DEBUG CR,"wp1 = ",DEC wp1

IF wp1 < tr1 THEN Derecha 'A la izquierda
DEBUG CR,"wp1 > tr1 "
DEBUG CR,"Derecha ",DEC tr1-wp1,"º"
goto Bucle

Derecha: 'A la Derecha
DEBUG CR,"wp1 < tr1 "
DEBUG CR,"Izquierda ",DEC tr1-wp1,"º"
goto Bucle

 


BIBLIOGRAFÍA:

- Página personal del autor: http://perso.wanadoo.es/e/torpedobruno/

 

Palabras claves: Piloto automático, GPS, NMEA, Garmin III, rumbo, timón

Comentarios de los lectores a este proyecto:
Nombre
   Email
Comentario
(máx. 200 caráct.)  
--> Introduce este número en la siguiente casilla   
Cualquier nombre de productos o marcas registradas que puedan aparecer en este sitio web, aparecen con fines de identificación y están registradas
por sus respectivas compañías. 'BASIC Stamp' es una marca registrada de Parallax, Inc. Aviso legal
Descarga en
PDF (190KB)
Autor/es:

Bruno Barangé
Datos contacto:
Más trabajos del autor/es: