Inclinometro con Arduino e accelerometro a 3 assi

In questo articolo vedremo come, utilizzando un comune ed economico accelerometro a 3 assi, un display LCD per visualizzare gli output, e la nostra fidata e collaudata piattaforma di sviluppo e prototipazione Arduino, sia possibile realizzare un inclinometro molto sensibile e compatto. Più precisamente, il dispositivo permetterà di misurare con accuratezza l'inclinazione sugli assi X e Y (roll e pitch), con molteplici applicazioni quali: livella su due assi, inclinometro per applicazioni industriali, macchine utensili, edilizia, fuoristrada, oppure, per chi utilizza spesso la bicicletta o la moto, per misurare l'angolo di incidenza di una salita (o discesa), oppure l'entità di una "piega" in curva, oltre ad altre innumerevoli applicazioni che soltanto la fantasia o le esigenze pratiche del momento possono suggerire. Vediamo insieme come realizzare passo-passo il progetto.

Introduzione

Dal punto di vista hardware, l'inclinometro è composto fondamentalmente da tre elementi:

  1. accelerometro: si tratta del sensore principale dell'applicazione, un dispositivo in grado di fornire il valore di accelerazione sui tre assi X, Y, e Z. Per questa applicazione abbiamo utilizzato l'accelerometro ADXL345 prodotto da Analog Devices, un accelerometro digitale molto preciso e sensibile, facilmente reperibile già installato su un modulino pronto per essere interfacciato con un microcontrollore. Il modulo accelerometro è completamente configurabile via software tramite una comoda interfaccia I2C;
  2. display LCD: in questo caso la scelta è ricaduta su un display LCD monocromatico a basso assorbimento, con le stesse caratteristiche di quello originariamente montato sui cellulari Nokia 5110/3110. Trattasi anche in questo caso di un display facilmente reperibile, con dimensione dello schermo pari a 1,5 pollici, e risoluzione di 84 x 48 punti. Indipendentemente da quale sia il loro produttore, questi display presentano tutti la caratteristica di utilizzare il controllore PCD8544 di Philips, che andrà opportunamente programmato durante la fase di inizializzazione dell'applicazione. Il display verrà utilizzato per monitorare in tempo reale i valori correnti di pitch e roll, ma potrebbe essere utilizzato per fornire altre informazioni, quali ad esempio una bitmap che rappresenta il valore corrente di inclinazione su uno dei due assi. Il modulo LCD, dotato anche di apposito circuito di retroilluminazione a led blu oppure bianchi (a seconda del modello), si interfaccerà con il microcontrollore tramite porta SPI;
  3. microcontrollore: come già anticipato in precedenza, ci servireremo della consolidata piattaforma Arduino, sia per la sua larghissima diffusione che per la semplicità (relativa in questo caso) di programmazione. In questo caso particolare, un vantaggio enorme deriva dalla disponibilità di librerie già pronte all'uso per quanto riguarda sia la comunicazione su bus I2C che su SPI. Potremo quindi concentrarci sull'applicazione vera e propria, senza dover riscrivere codice per implementare le interfacce hardware di comunicazione.

Dal punto di vista software, l'applicazione sarà invece composta da un unico sketch in grado di svolgere tutte le funzioni richieste dall'applicazione, le quali possono essere così sintetizzate:

  • inizializzazione dell'accelerometro ADXL345 tramite opportuna configurazione dei registri interni del componente;
  • inizializzazione del display LCD, tramite opportuna configurazione dei registri del controllore PCD8544;
  • ciclo continuo con:
    • acquisizione dei valori grezzi di accelerazione sui tre assi;
    • conversione dei valori grezzi di accelerazione in componenti di accelerazione di gravità (numeri espressi in "g");
    • calcolo degli angoli di inclinazione sugli assi X e Y (pitch e roll) tramite opportune trasformazioni trigonometriche;
    • visualizzazione degli angoli di inclinazione sia su display LCD che su interfaccia seriale di debug.
  • calibrazione (eseguita solo su richiesta dell'utente durante la fase di start-up): vengono in questo caso calcolati gli offset di accelerazione sui tre assi X, Y, e Z da inserire negli opportuni registri dell'accelerometro in modo tale da fornire, in condizioni di piano livellato, i valori di accelerazione attesi (Accx=0, Accy=0, Accz=1g).

Per ragioni di semplicità, si è preferito non implementare delle librerie specifiche per l'ADXL345 e per il display LCD. Lo sketch conterrà quindi tutte e sole le funzioni necessarie per implementare i requisiti dell'applicazione. Vedremo più in dettaglio queste funzioni successivamente, quando verrà esaminato il codice sorgente.

ADXL345

L'ADXL345 (il cui schema a blocchi è riportato nell'immagine seguente) è un accelerometro a 3 assi compatto e sottile, con assorbimento ultra-ridotto, elevata risoluzione (fino a 13 bit), e possibilità di misurare accelerazioni fino a ±16 g. I valori di accelerazione sono forniti in uscita su parole  a 16-bit in complemento a 2 (due registri a 8-bit per ciascun asse). Il componente dispone di interfacciamento digitale con un microcontrollore esterno sia tramite I2C (il tipo di interfaccia che utilizzeremo nella nostra applicazione), che SPI.

inclinometro_01

La caratteristica rimarchevole di questo componente è la capacità di misurare le componenti di accelerazione sui 3 assi non solo in modo statico, ma anche dinamico. La prima caratteristica, misurando le componenti dell'accelerazione di gravità sui tre assi, permette di realizzare la funzionalità di tilt, particolarmente utile sui dispositivi mobile (smartphone e tablet) per determinare l'orientamento dello schermo ed eseguire, se abilitata, la rotazione dello stesso. [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3037 parole ed è riservato agli abbonati PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici PREMIUM e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA con PAYPAL è semplice e sicuro.

Abbonati alle riviste di elettronica

15 Commenti

  1. Maurizio Di Paolo Emilio Maurizio 3 dicembre 2015
  2. Stefano Lovati slovati 3 dicembre 2015
  3. Emanuele Bonanni Emanuele 3 dicembre 2015
  4. Daniele Facchin 3 dicembre 2015
  5. Giovanni Carrera Giovanni Carrera 10 dicembre 2015
  6. picluigi 5 febbraio 2016
  7. Daniele Facchin 5 febbraio 2016
  8. picluigi 5 febbraio 2016
  9. Giovanni Carrera Giovanni Carrera 6 febbraio 2016
    • picluigi 7 febbraio 2016
      • Giovanni Carrera Giovanni Carrera 7 febbraio 2016
        • picluigi 7 febbraio 2016
          • Daniele Facchin 8 febbraio 2016
  10. Giovanni Carrera Giovanni Carrera 8 febbraio 2016
  11. picluigi 27 marzo 2016

Scrivi un commento