Come inviare dati da accelerometro e giroscopio via WiFi con Arduino


Ciao a tutti!
Siamo due studenti magistrali di ingegneria informatica presso l'Università degli Studi di Firenze e approfittiamo di questo spazio per presentarvi l'elaborato che abbiamo sviluppato per il corso di Human Computer Interaction tenuto dal Professor Andrew Bagdanov.

Oggi vedremo quindi come costruire un semplice dispositivo portatile in grado di inviare dati provenienti da un giroscopio e da un accelerometro tramite una connessione WiFi utilizzando una scheda programmabile chiamata NodeMCU. NodeMCU non è altro che un Arduino con integrata una scheda ESP8266 che permette di avere una connessione WiFi.

I dati provenienti dai sensori potranno essere elaborati nei modi più disparati come ad esempio per la creazione di un dispositivo che simula una livella, un rilevatore di movimento, un mouse interattivo ecc.
Noi nello specifico abbiamo realizzato il WicRoller, una manopola in grado di connettersi tramite la rete WiFi al computer per gestire l'audio di un sistema Linux attraverso diverse modalità.
Non vogliamo anticiparvi altro. Per il momento ci limiteremo ad introdurre alcune componenti e vedere il loro funzionamento. In un prossimo articolo vedremo come creare la periferica 🙂

Componenti Hardware

Tornando al nostro rilevatore di dati ecco di cosa abbiamo bisogno dal punto di vista hardware:

  • ESP8266 (NodeMCU 1.0)
  • MPU6050
  • Batteria da 9V
Il NodeMCU è una piattaforma di sviluppo basata sull'ESP8266, un modulo WiFi a basso costo con stack TCP/IP e programmabile con Arduino IDE. Una cosa molto importante da dire è che per poterlo alimentare con una batteria da 9V è necessario utilizzare la versione 1.0 e non la 0.9.
Il sensore MPU6050 è composto da giroscopio, accelerometro e termometro. La trasmissione dei dati può avvenire tramite bus I2C.

Prendendo ora tutti i componenti, li possiamo assemblare come mostrato in figura qua sotto.

Componenti Software

Per quanto riguarda il lato software abbiamo una parte di codice Arduino e un script in python.

Codice microcontrollore

Per motivi di lunghezza del codice, non lo riporteremo direttamente qua in questo articolo ma è reperibile su Github all'indirizzo
https://github.com/ilvitto/SensorDataTransmission/blob/master/server.ino

Guardiamo velocemente le parti principiali. Nella funzione setup() viene inizializzata la connessione WiFi impostando SSID e password di una rete esterna. Nella funzione loop() il dispositivo, che opera come server TCP, controlla periodicamente la presenza di un client connesso ed eventualmente gli invia i dati.

La comunicazione I2C è gestita con la libreria di Arduino Wire.h. Il controller ESP8266 ad ogni interazione, quando un client è connesso, legge in 12 registri (ogni misura è rappresentata con 2 byte) i dati forniti dai sensori e li invia attraverso il bus I2C.

Codice client (Python)

Per ricevere e gestire i dati in ingresso abbiamo utilizzato Python (ovviamente il client può essere implementato in qualsiasi altro linguaggio di programmazione) utilizzando il modulo Socket.

Questo richiede solo di specificare l'indirizzo IP e la porta del server (il dispositivo) per iniziare la connessione. A questo punto ad ogni iterazione di un ciclo infinito, viene ricevuto il buffer di dati costruito ed inviato dall'ESP. Con questa procedura abbiamo osservato che in media vengono ricevuti 16 campioni al secondo. Abbiamo inoltre realizzato alcune classi Python per l'interpretazione e la gestione dei dati in ingresso.

Il codice di base lato client è reperibile su GitHub all'interno della cartella "client" all'indirizzo
https://github.com/ilvitto/SensorDataTransmission/tree/master/client

Per adesso è tutto! A questo punto dovreste essere in grado di replicare il nostro lavoro e ricevere dati attraverso una rete WiFi di accelerometro e giroscopio per utilizzarli a vostro piacimento. Stay tuned per la seconda parte!

Si è laureato in Ingegneria Informatica magistrale con 110 e lode presso l’Università degli Studi di Firenze

Come inviare dati da accelerometro e giroscopio via WiFi con Arduino ultima modifica: 2017-06-26T18:59:42+01:00 da Fabio Vittorini


Advertisment ad adsense adlogger