Piero87
Accelerometro ADXL 335 (e similari)
Tutorials -
Venerdì 10 Settembre 2010 13:33
Scritto da Piero87

Vi siete mai chiesti cosa ha dato tanto successo all'iphone?...oppure alla vostra tanto amata Wii?...la risposta la si può trovare proprio in un piccolo componente elettronico molte volte non più grande di una moneta da 5cent, fino a pochi anni fa gli accellerometri erano destinati solo ad un uso scientifico, militare, però oggi con l'evoluzione dell'elettronica e soprattuto del magico mondo dell'open source è possibile trovare questi componenti a costi inferiori e soprattuto è possibile trovare in giro per la rete documentazioni e spiegazioni sull'uso di questo non più "fantascientifico" componente. Questa guida prende in esame documentazioni trovate in giro per il web e alcune considerazione fatte per mio conto.

Innanzi tutto parliamo di dove poter trovare questo componente, sono sicuro che un giorno sarà possibile trovarlo anche su questo sito, che per ora ha veramente dei buoni prodotti per iniziare la progettazione verso il campo della robotica fai da te e piano piano sono sicuro che offrirà una vasta gamma di prodotti per tutte le idee :)...per ora GioBlu non mi voglia ma io ho trovato questo componente ad un prezzo accettabile su un sito inglese, per informazioni contattatemi in pvt, e il componente in questione è un ADXL 335, cè ne sono di tanti tipi e soprattutto di tanti prezzi ( anche molto più alti), io l'ho pagato intorno ai 20€ mi sembra, cmq il prezzo varia anche in base a quanti assi rilevano, alcuni rilevano solo x e y, altri x y e z come il modello sopra citato.

Fatta una piccola parentesi su dove poter trovare questo componente, iniziamo a spiegare come funziona questo piccolo ma utilissimo componente, questo strumento è in grado di rilevare/misurare l'accelerazione, in pratica si basa sulla rilevazione dell'inerzia di una massa quando viene sottoposta ad una accelerazione. La massa viene sospesa ad un elemento elastico, mentre un quakche tipo di sensore ne rileva lo spostamento rispetto alla struttura fissa del dispositivo. In presenza di un'accelerazione, la massa che ovviamente è dotata di una propria inerzia si sposta dalla propria posizione di risposo in modo proporzionale all'accelerazione rilevata. Il sensore trasforma questo spostamento in un senglae elettrico acquisibile dai moderni sistemi di misura ( nel nostro caso sarà il magico Arduino).

Vediamo ora come collegare questo componente all'arduino, dobbiamo precisare e sottolineare che il modello ADXL335 funziona solo con una tensione di 3.3V, una tensione maggiore potrebbe danneggiare il componente, e quindi avrete buttato via dei soldi per una svista, quindi fate molta attenzione, questa specifica è possibile vederla anche nel datasheet o cmq nella descrizione dove acquisterete il componente, nella mia c'era scritto questo:

  • Operating Voltage: 3v-3.6v
  • Accelerometer: Analog Devices ADXL335
  • Number of Axis: 3
  • Range: +/- 3G
  • Output Type: Analog

Bene, da qui possiamo vedere che opererà alla tensione sopra spiegata, che appunto avrà 3 assi quindi x y z, e che ovviamente l'output sarà di tipo analogico, quindi dovrà essere collegato alle porte analogiche del nostro arduino.

Inziamo a vedere come collegare questo componente all'arduino:

 

Come si vede è molto facile collegare l'accelerometro all'arduino, e il suo funzionamento è altrettanto semplice infatti se provate a scrivere queste poche righe di codice nel software di arduino:

int x, y, z; 

void setup()
{
  Serial.begin(9600);           // sets the serial port to 9600
}

void loop() 
{
  x = analogRead(0);       // read analog input pin 0
  y = analogRead(1);       // read analog input pin 1
  z = analogRead(2);       // read analog input pin 1
  Serial.print("acceleretations are x, y, z: ");
  Serial.print(x, DEC);    // print the acceleration in the X axis
  Serial.print(" ");       // prints a space between the numbers
  Serial.print(y, DEC);    // print the acceleration in the Y axis
  Serial.print(" ");       // prints a space between the numbers
  Serial.println(z, DEC);  // print the acceleration in the Z axis
  delay(100);              // wait 100ms for next reading
}

e poi fare l'upload nell'arduino ora se spingiamo il tasto Serial Monitor si aprirà una finestra dove verranno mostrati i valori che l'accelerometro passa all'arduino, vedremo che quando muoveremo l'accelerometro nello spazio i valori cambieranno:

Sul sito di arduino, sono riuscito a trovare questa tabella molto comodo che serve appunto per capire i gradi di cui si sposta il nostro accelerometro rispetto ai valori che ci vengono dati da esso:

Angle -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90
Acceleration 662 660 654 642 628 610 589 563 537 510 485 455 433 408 390 374 363 357

355

Questa tabella è veramente molto utile, però serve per un accelerometro leggermente più vecchio, quello che è stato provato per questa tabella è in questa gamma di accelerometri ADXL320, ADXL321, ADXL322, ADXL330, quello che invece ho provato io è una versione un po più recente, e se avete anche voi una versione come la mia noterete che i valori che vi restituirà l'accelerometro non si avvicineranno mai a 660, come si vede è il valore corrispondente a -90°, per fare ciò ossia per avere un riscontro con la tabella sopra mostrata bisogna effettuare una leggera modifica al circuito e al codice stesso che ho postato sopra. Siccome i componenti scritti usavano una tensione pari a 5V e noi invece ne usiamo una pari a 3.3V, i valori che noi andiamo a leggere sono diversi, quindi bisogna usare il pin AREF di arduino, per farlo è molto semplice innanzi tutto il circuito è da cambiare in questo modo: dovete solo fare un piccolo ponte con un filo tra il Pin 3.3V di arduino, e il Pin AREF di arduino, quindi avrete tre pin collegati insieme, PIN 3V del sensore --> PIN 3.3V Arduino --> PIN AREF Arduino.

Infine dovete solo aggiungere questa linea di codice "analogReference(EXTERNAL);" nella funzione Setup del codice così:

int x, y, z; 

void setup()
{
  Serial.begin(9600);           // sets the serial port to 9600  
analogReference(EXTERNAL);
} void loop() { x = analogRead(0); // read analog input pin 0 y = analogRead(1); // read analog input pin 1 z = analogRead(2); // read analog input pin 1 Serial.print("acceleretations are x, y, z: "); Serial.print(x, DEC); // print the acceleration in the X axis Serial.print(" "); // prints a space between the numbers Serial.print(y, DEC); // print the acceleration in the Y axis Serial.print(" "); // prints a space between the numbers Serial.println(z, DEC); // print the acceleration in the Z axis delay(100); // wait 100ms for next reading }

Ecco adesso potete riuppare il codice in arduino, e quando andrete a spingere il tasto serial monitor e spostere l'accelerometro nello spazio noterete che i valori saranno molto simili e confrontabili con la tabella che ho postato sopra, e comunque potrete fare una tabella tutta vostra e più precisa spostando l'accelorometro in una posizione e scrivendo in un foglio il valore che vi restiuisce e la posizione in cui si trova.

 

Spero che questo tutorial sia utile per chi come me era ai primi passi verso questo componente, è possibile veramente creare le cose più impensabili, e con l'arduino è tutto possibile!

Liberate la fantasia!

 

Se vi è piaciuto questo articolo lasciate un piccolo voto in basso:)

 

Ciao!

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com · Via Savona 123 20146 Milano MI · PI 06977550968 · Codice fiscale MTLGNN86S09F205F

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi