Altimetro GPS: come costruire un altimetro basato sul GPS

Altimetro GPS Lancio di un razzo

Come costruire un altimetro basato sul GPS. Lanciare dei modelli di razzo è di sicuro una esperienza piacevole, ma molto spesso è difficile stabilire quanto alto sia volato il razzo e quale sia stata la sua velocità, fattori entrambi essenziali quando bisogna tirare le somme e fare le considerazioni sull’ultimo volo.

Tra le varie proposte online, c’è quella di Chris, che ha di recente costruito un altimetro basato sul GPS per la USC Rocket Propulsion Lab, in modo che essa possa tracciare le prestazioni del loro ultimo progetto. Il circuito si basa su un Picaxe 18x ed utilizza un modulo GPS per ottenere i dati NMEA sull’altitudine. Una volta che i dati sono stati acquisiti, vengono memorizzati su di una memoria EEPROM esterna, per essere poi controllati dopo che il razzo è stato recuperato.

Come costruire un altimetro basato sul GPS

Sfortunatamente Chirs non ha fornito alcuna immagine relativa alla scheda che ha costruito, ma ha realizzato questo diagramma del circuito e ha reso disponibile il codice sorgente: carne al fuoco dunque ce ne è. Chris ha anche fatto sapere che il logger del GPS ha funzionato in modo perfetto a parte per un piccolo lasso di tempo in cui il modulo GPS ha perso temporaneamente il contatto con il satellite. Ecco una schema completo del lavoro:

Come funziona un altimetro basato sul GPS

Questo dispositivo è stato creato, a detta di Chris, in modo piuttosto frettoloso (per questo non è presente l’immagine della scheda) per l’USC Rocket Propulsion Lab, un dipartimento universitario di ricerca sui satelliti di alta quota. Quindi, come abbiamo accennato, è stato utilizzato un microcontrollore Picaxe 18x e il dispositivo accetta il flusso di dati GPS NMEA a 4800 baud (su questo l’autore del progetto non ha la certezza al 100%). Esso inoltre registra l’altitudine e la trasmette ad una memoria esterna EEPROM 24LC512 e poi la rilegge una volta che la sessione si è conclusa. Nella dimostrazione di Chris, è possibile vedere dove il modulo GPS ha perso il contatto con il lock del satellite durante il ritorno a terra. Il razzo ha raggiunto una altitudine massima di oltre 6000 metri (18000 piedi).

Come creare un altimetro basato sul GPS: il codice sorgente

Come annunciato in precedenza, ecco il codice sorgente fornito dall’autore del progetto.

'
sertxd("online",13,10)
i2cslave %10100000, i2cfast, i2cword
high 5
w1=0
if input0=0 then readback

main:
'if b7 = 'V' then no signal, if 'A' then signal

serin 2, N4800,("$GPRMC,"),b0,b0,b0,b4,b5,b6,b0,b7
if b7 = "V" then goto nosig

'altitude
'serin 2,N4800,("$GPGGA,"),b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,
b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b9,b0,b0,b0,
b0,b0,b0,b0,b0,b1,b2,b3,b4,b5,b6,b7,b8

'serin 2, N4800, ("$GPGGA,"), b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,
b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,
b0,b0,b0,b0,b1,b2,b0,b4
'Sertxd(13,10,"Ele=",b1,b2,".",b4) 'show it on LCD
'pause 100

'48 characters to skip first
serin 2,N4800,("$GPGGA,"),b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,
b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,
b0,b0,b0,b0,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13

'sertxd(13,10,"KPH=",b1,b2,".",b3) 'show it on LCD

if b7="," then case1
if b8="," then case2
if b9="," then case3
if b10="," then case4
if b11="," then case5
if b12="," then case6
	
sendalt:
if b5="," then lockbuterror
low 5
pause 100
high 5
sertxd(13,10,"Alt=",b5,b6,b7,b8,b9,b10,b11,b12,13,10,"w1:",#w1) 'show it on LCD
writei2c w1,(b5,b6,b7,b8,b9,b10,b11,b12)
pause 200
'readi2c address,(b5,b6,b7,b8,b9,b10,b11,b12)
'sertxd(13,10,"Alt2=",b5,b6,b7,b8,b9,b10,b11,b12) 'show it on LCD

w1=w1+8

goto main

nosig:
sertxd("No signal!",13,10)
low 5
pause 50
high 5
pause 50
low 5
pause 50
high 5

goto main

case1:

b7=0
case2:
b8=0
case3:
b9=0
case4:
b10=0
case5:
b11=0
case6:
b12=0

goto sendalt

readback:
	
	readi2c w1,(b5,b6,b7,b8,b9,b10,b11,b12)
	if b5=0 then done
	sertxd(b5,b6,b7,b8,b9,b10,b11,b12)
	w1=w1+8
	low 5
	pause 200
	high 5 
	pause 50
	low 5
	pause 50
	high 5
	goto readback	
done:
	low 5
	end		

lockbuterror:
low 5
goto main

5 Comments

  1. FlyTeo 22 aprile 2011
  2. linus 22 aprile 2011
  3. Edi82 22 aprile 2011
  4. linus 22 aprile 2011
  5. Fabrizio87 23 aprile 2011

Leave a Reply