Arduino/accelerometro adxl345: differenze tra le versioni

Da PNLUG.
(testo iniziale)
 
m (riordinamento pagina)
 
(8 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
 
<div style="text-align:justify">
 
<div style="text-align:justify">
L'ingresso usb mette in comunicazione arduino computer esterno ed è simulata, su linux, da una porta seriale.
+
L'accelerometro a tre assi [http://www.adafruit.com/blog/2013/01/25/new-product-adxl345-triple-axis-accelerometer-2g4g8g16g-w-i2cspi adxl345] è un oggetto di ''basso costo'' (circa 6€ su ebay), perfettamente ''compatibile'' con arduino.
  
==La documentazione ufficiale==
+
Ammette ''due modalità diverse'' di utilizzo, attraverso i protocolli '''I2C''' (più lento, ma molto più semplice, perché scambia dati attraverso due fili soltanto) e il protocollo '''SPI'''. Può anche essere pilotato attraverso due canali di interrupt per realizzare effetti particolari, come il doppio click.
L'utente è facilitato enormemente, nella gestione delle comunicazioni seriali, dal supporto nativo di una intera [http://arduino.cc/en/Reference/Serial libreria] di funzioni ben documentate, ma non manca comunque lo spazio per progettare e imparare un gran numero di cose nuove e interessanti.
+
<div style="text-align:center">
 +
<html5media height="450" width="800" autoplay loop>http://www.cloc3.net/pnlug/adxl345.mp4</html5media>
 +
</div>
 +
=L'uso didattico=
  
Possiamo cominciare ad esercitarci nell'uso della porta seriale partendo dalla lettura di due sketch di esempio, collocati nella documentazione ufficiale.<br />
+
Trasformare un accelerometro in uno '''strumento di rilevazione dei movimenti tellurici''' è un'applicazione didattica elementare, perché si esaurisce nella ''gestione dell'input output'' con il sensore.
Il [http://arduino.cc/en/Serial/Available| primo] insegna ad acquisire un singolo carattere dalla porta seriale e a restituirlo sull'ouput, facendo uso delle funzioni [http://arduino.cc/en/Serial/Available Serial.available()], [http://arduino.cc/en/Serial/print Serial.print("stringa")] e [http://arduino.cc/en/Serial/read Serial.read()]<br/>
+
Il [http://arduino.cc/en/Tutorial/SerialEvent secondo] offre un esempio completo di gestione di un evento sulla porta seriale, gestito da una chiamata a funzione indipendente.
+
  
==Progettazione di uno sketch per l'accelerometro adxl345==
+
Sono molte però le cose che '''si possono imparare''' anche con un obiettivo tanto limitato. Per esempio:
Sulla base di questi due esempi, poniamoci ora il seguente problema:
+
* Costruire uno sketch per arduino capace di richiedere la stampa di un numero finito di letture dell'accelerometro adxl345 e redirigerlo su web per costruire un'applicazione di monitoraggio.
+
  
Viene spontaneo scomporre questo progetto in una successione di obiettivi intermedi:
+
* Imparare a consultare la documentazione esistente su internet.
 +
* Imparare a scrivere alcuni programmi semplici per gestire la comunicazione tra il sensore e arduino.
 +
* Imparare a gestire la comunicazione tra arduino e il terminale di un computer esterno, attraverso la porta seriale.
 +
* Imparare a redirigere i dati su web e a raccoglierli con una applicazione per il browser.
  
* [[Arduino/leggere_una_stringa_numerica|Leggere una stringa numerica]]
+
=Altre pagine correlate=
* [[Arduino/acquisizione_con_accelerometro|Acquisire un dato dall'accelerometro adxl345]]
+
* [[Arduino| Torna alla pagina principale]].
* [[Arduino/bash_e_porta_seriale|Scambiare dati correttamente tra porta seriale e terminale remoto]]
+
* [[Arduino/input_seriale| Input ouput seriale]].
* [[Arduino/monitor_in_linea|Realizzare un'applicazione web per gestire il monitor dell'accelerometro]]
+
* [[Arduino/leggere_una_stringa_numerica]]
 +
* [[Arduino/bash_e_porta_seriale]]
 +
* [[Arduino/monitor_in_linea]]
 +
 
 +
=Alcune informazioni spicciole=
 +
 
 +
È infinita su internet la documentazione che ne descrive l'uso.<br/>
 +
Notevole, ad esempio, [http://codeyoung.blogspot.it/2009/11/adxl345-accelerometer-breakout-board.html questo] tutorial che insegna a programmare autonomamente le librerie dalla lettura diretta delle [http://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf specifiche].
 +
 
 +
Su [https://github.com/adafruit/Adafruit_ADXL345 github], il codice della adafruit consente un utilizzo pressochè immediato del dispositivo.
 +
 
 +
  cd ~/arduino/librerie
 +
  git clone git://github.com/adafruit/Adafruit_ADXL345
 +
 
 +
Il file '''Adafruit_ADXL345/examples/sensortest/sensortest.pde''' contiene uno script pronto per l'uso.
 +
 
 +
Una volta generato un flusso attraverso la porta seriale di arduino, possiamo porci il problema di trasferirlo via web.<br/>
 +
[http://www.deepspace6.net/projects/netcat6.html netcat] è uno strumento prezioso per realizzare la cosa in un fiato.
 +
 
 +
  sudo while true; do nc -l -p80 -q1</dev/arduino ;done &
 +
  wget localhost -O - 2>/dev/null
 +
 
 +
Se si desidera, è possibile di evitare il sudo liberando l'accesso in scrittura alla porta 80 ad un utente non privilegiato con l'uso di authbind.<br/>
 +
Riportiamo le istruzioni acquisite da [http://toshidex.org/2011/12/16/bind-di-un-programma-su-porte-basse questo howto]:
 +
 
 +
  cd /etc/authbind/byport
 +
  touch 80
 +
  chmod 500 80
 +
  chown utente_nc 80
 +
 
 +
L'utente dovrà creare il flusso in questo modo:
 +
 
 +
  while true; do authbind nc -l -p80 -q1</dev/arduino ;done
 
</div>
 
</div>

Versione attuale delle 13:31, 16 gen 2014

L'accelerometro a tre assi adxl345 è un oggetto di basso costo (circa 6€ su ebay), perfettamente compatibile con arduino.

Ammette due modalità diverse di utilizzo, attraverso i protocolli I2C (più lento, ma molto più semplice, perché scambia dati attraverso due fili soltanto) e il protocollo SPI. Può anche essere pilotato attraverso due canali di interrupt per realizzare effetti particolari, come il doppio click.

L'uso didattico

Trasformare un accelerometro in uno strumento di rilevazione dei movimenti tellurici è un'applicazione didattica elementare, perché si esaurisce nella gestione dell'input output con il sensore.

Sono molte però le cose che si possono imparare anche con un obiettivo tanto limitato. Per esempio:

  • Imparare a consultare la documentazione esistente su internet.
  • Imparare a scrivere alcuni programmi semplici per gestire la comunicazione tra il sensore e arduino.
  • Imparare a gestire la comunicazione tra arduino e il terminale di un computer esterno, attraverso la porta seriale.
  • Imparare a redirigere i dati su web e a raccoglierli con una applicazione per il browser.

Altre pagine correlate

Alcune informazioni spicciole

È infinita su internet la documentazione che ne descrive l'uso.
Notevole, ad esempio, questo tutorial che insegna a programmare autonomamente le librerie dalla lettura diretta delle specifiche.

Su github, il codice della adafruit consente un utilizzo pressochè immediato del dispositivo.

 cd ~/arduino/librerie
 git clone git://github.com/adafruit/Adafruit_ADXL345

Il file Adafruit_ADXL345/examples/sensortest/sensortest.pde contiene uno script pronto per l'uso.

Una volta generato un flusso attraverso la porta seriale di arduino, possiamo porci il problema di trasferirlo via web.
netcat è uno strumento prezioso per realizzare la cosa in un fiato.

 sudo while true; do nc -l -p80 -q1</dev/arduino ;done &
 wget localhost -O - 2>/dev/null

Se si desidera, è possibile di evitare il sudo liberando l'accesso in scrittura alla porta 80 ad un utente non privilegiato con l'uso di authbind.
Riportiamo le istruzioni acquisite da questo howto:

 cd /etc/authbind/byport
 touch 80
 chmod 500 80
 chown utente_nc 80

L'utente dovrà creare il flusso in questo modo:

 while true; do authbind nc -l -p80 -q1</dev/arduino ;done