Analisi esplorativa dei dati dei sensori MEMS

Analisi dati sensori MEMS

Lettura, raccolta e analisi dei dati dal sensore MPU6050

I sensori MEMS (Micro-electromechanical Systems) sono ampiamente utilizzati in diverse applicazioni, dai controller di gioco agli smartphone fino ad arrivare ai veicoli aerei senza pilota. In questo articolo, mostrerò come collegare un sensore giroscopio e accelerometro, che tipo di dati è possibile ottenere da esso e come questi dati possono essere elaborati e visualizzati.

Iniziamo.

Hardware

L’MPU-6050 è un sensore a 6 assi che combina un giroscopio a 3 assi, un accelerometro a 3 assi e l’interfaccia I2C. Come scritto nel datasheet, è ampiamente utilizzato per tablet e smartphone. Quando il nostro smartphone o smartwatch calcola i passi e le calorie durante l’allenamento, vengono effettivamente utilizzati i dati dai sensori MEMS. Ma sensori come questo possono essere utilizzati per altro oltre allo sport. Ho deciso di posizionare il sensore nel mio appartamento per diversi giorni ed individuare se sarei stato in grado di rilevare ed analizzare diverse vibrazioni nell’edificio in cui vivo.

Se vogliamo raccogliere dati per diversi giorni, il Raspberry Pi è una buona soluzione per questo. Il Raspberry Pi è un computer economico (30-50$) a scheda singola; ha un basso consumo energetico e molti pin per collegare diversi tipi di hardware. Una scheda di prototipazione MPU-6050 può essere ordinata su Amazon per 3-5$. Il sensore stesso utilizza il bus I2C per il trasferimento dati e può essere collegato a un Raspberry Pi utilizzando solo 4 fili:

Diagramma di connessione, Immagine dell'autore

Prima di utilizzare il sensore, il bus I2C deve essere abilitato su Raspbian OS (ci sono abbastanza tutorial su come collegare l’MPU6050 al Raspberry Pi, quindi salterò i dettagli sull'”hardware” qui). Dopo aver collegato il sensore, ho creato una semplice applicazione Python che legge i dati dal sensore e li scrive “così come sono” in file di log:

from datetime import datetimeimport smbusimport mathimport time# Registri MPU6050PWR_MGMT_1   = 0x6BSMPLRT_DIV   = 0x19CONFIG       = 0x1AGYRO_CONFIG  = 0x1BINT_ENABLE   = 0x38ACCEL_XOUT_H = 0x3BACCEL_YOUT_H = 0x3DACCEL_ZOUT_H = 0x3FGYRO_XOUT_H  = 0x43GYRO_YOUT_H  = 0x45GYRO_ZOUT_H  = 0x47bus = smbus.SMBus(1)address = 0x68def device_init():    """ Inizializza l'MPU-6050 """    bus.write_byte_data(address, SMPLRT_DIV, 0x4)...