IOS a parte, non esiste una soluzione semplice per creare un pedometro accurata utilizzando solo l'uscita accelerometro; è solo rumoroso. L'utilizzo dell'output da un giroscopio (ove disponibile) per filtrare l'output aumenterebbe la precisione.
Ma un greggio qui è un approccio approssimativo al codice di cablaggio per un pedometro: - i passaggi vengono rilevati come una variazione dell'accelerazione rilevata sull'asse Z. A patto di saper l'accelerazione di default (l'impatto della gravità) ecco come si fa:
float g = (x * x + y * y + z * z)/(GRAVITY_VALUE * GRAVITY_VALUE)
tua soglia è g=1
(questo è quello che si vede quando si sta fermi). I picchi in questo valore rappresentano passi. Quindi tutto ciò che devi fare è contare le punte. Ricordati che un semplice g> 1 non lo farà, come per un passo, il valore g aumenterà per un certo periodo di tempo e poi tornerà indietro (se si traccia il valore nel tempo, dovrebbe apparire come un'onda sin quando c'è un passo - essenzialmente vuoi contare le onde sin)
Ricordati che questo è solo qualcosa per iniziare; dovrete aggiungere più complessità ad esso per aumentare la precisione. cose come: - isteresi per evitare il rilevamento del passo falso - filtrare l'uscita dell'accelerometro - calcolare gli intervalli di passo Non sono inclusi qui e dovrebbero essere sperimentati.
Grazie mille per la soluzione. in qualche modo ha funzionato con alcuni difetti in esso. Il tuo codice per qualche ragione sul caricamento iniziale arriva a 11 passi quindi solo io inizio a rilevare correttamente i passaggi. Ho giocato attorno a ACCEL_DETECTION_LIMIT ha avuto un caricamento iniziale migliore ma la precisione è disattivata. Ecco un'altra spiegazione. https://gist.github.com/anonymous/d8563c4c8fc8ba874ba6. Qualche idea qual è il problema? – Axil
@Axil ha corretto un bug, è sufficiente impostare 'private double accel' su -1 –