giovedì 2 febbraio 2012

Magnetometro come misuratore di distanza

Ho provato ad usare il magnetometro contenuto nel telefono come sensore di distanza. Il sistema prevede l'impiego di una calamita, del telefono Android e dello script riportato di seguito
-----------------------------------------------------------------------------------------

import android, time
droid = android.Android()
droid.startSensingTimed(1, 250)
time.sleep(1)


f = open('/sdcard/magnete00.txt','w')


while True:
s5 = droid.sensorsReadMagnetometer().result
f.write(str(s5[0])+";"+str(s5[1])+";"+str(s5[2])+"\n")
print str(s5[0])+" "+str(s5[1])+" "+str(s5[2])
droid.stopSensing()
-----------------------------------------------------------------------------------------
Il sistema puo' avere impieghi piu' disparati dal realizzare un sistema di allarme (mettendo il magnete su uno stipite di una porta ed il sensore dall'altra) a misuratori di distanza a corto raggio.

La prova e' stata effettuando allontanando il magnete dal telefono e registrando il valore medio ad ogni distanza
Come si puo' vedere dal grafico sottostante
Misure magnetometro Distanza-Intensita'
il comportamento del sensore e' ottimale nonostante lo scarso campionamento del convertitore ADC con un errore pari a circa qualche punto percentuale. Con questo sistema e' quindi possibile sicuramente misurare spostamenti dell'ordine di 2mm ma credo sia possibile scendere anche a sensibilita' pari ad 1mm di spostamento

Da notare che le unita' di misura del magnetometro non sembrano essere unita' fisiche. A seguito di una calibrazione con la app Stato GPS i valori sono passati da circa 30 unita' a 15 unita'