Collegare un accelerometro MMA7361 ad Arduino

In questo tutorial vi mostrerò come collegare ed utilizzare un accelerometro MMA7361 con Arduino.




Questo sensore è stato comprato su ebay ad un prezzo di circa 6 euro, non sarà il più preciso del mercato, ma va benissimo per semplici esperimenti.





Nella realizzazione dello schema ho scelto di inserire anche un pulsante per permettere l'azzeramento della lettura dei 3 assi.
In questo modo, se vogliamo piazzare il sensore su un piano non in bolla, possiamo poi azzerare e vedere la variazione della lettura in modo più evidente.
Inoltre, per permettere una lettura più accurata, facciamo eseguire all'Arduino un campionamento di 10 valori, tra i quali prendere il valore medio.

Ecco un video che è meglio di mille parole:



Il collegamento da fare è il seguente:



Mentre questo è lo stesso collegamento ma schematizzato:



Ed infine caricate questo sketch ed aprite il monitor seriale.
Come al solito se avete qualcosa da chiedere non esitate!

  1. int ZPin = A2;
  2. int YPin = A1;
  3. int XPin = A0;
  4. int valz[10];
  5. int valy[10];
  6. int valx[10];
  7. int sommaz;
  8. int sommay;
  9. int sommax;
  10. int mediaz;
  11. int mediay;
  12. int mediax;
  13. int cal = 8;
  14. int calz;
  15. int caly;
  16. int calx;
  17. int z;
  18. int y;
  19. int x;
  20. void setup() {
  21.   Serial.begin(9600);
  22.   Serial.println("MMA 7361");
  23.   pinMode (cal, INPUT);
  24.   digitalWrite (8, HIGH);
  25.   calz = 0;
  26.   caly = 0;
  27.   calx = 0;
  28. }
  29. void loop() {
  30.   for (int i=0;i<10;i++)
  31.   {
  32.     valz[i] = analogRead(ZPin);
  33.     valy[i] = analogRead(YPin);
  34.     valx[i] = analogRead(XPin);
  35.     delay(40);
  36.   }
  37.   sommax = 0;
  38.   sommay = 0;
  39.   sommaz = 0;
  40.   for(int i=0; i<10; i++){
  41.     sommaz = sommaz + valz[i];
  42.     sommay = sommay + valy[i];
  43.     sommax = sommax + valx[i];
  44.   }
  45.   mediaz = sommaz / 10;
  46.   mediay = sommay / 10;
  47.   mediax = sommax / 10;
  48.   int buttonState = digitalRead(cal);
  49.   if (buttonState == LOW)
  50.   {
  51.     calz = mediaz;
  52.     caly = mediay;
  53.     calx = mediax;
  54.   }
  55.   z = mediaz-calz;
  56.   y = mediay-caly;
  57.   x = mediax-calx;
  58.   Serial.print("Z: ");
  59.   Serial.print(z);
  60.   Serial.print("  Y: ");
  61.   Serial.print(y);
  62.   Serial.print("  X: ");
  63.   Serial.println(x);
  64.   delay(500);
  65. }


Ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

25 commenti:

  1. I ԝas recommenɗed this web site through mmy cousin.
    I'm now not sure whether this post іs written through hhim as nobodsy else recognise such ϲertain about my proƅlem.
    You're amazinɡ! Thank you!

    My pаge ... Personal Loan

    RispondiElimina
  2. I do agree with all of the ideas you've offered to your post.

    They are really convincing and will certainly work. Nonetheless, the posts are too short for
    novices. May you please extend them a little from next time?
    Thank you for the post.

    my website ... Poker Ringspel Strategi

    RispondiElimina
    Risposte
    1. Sure, i'll try to add more information in my post,
      Thank you for your constructive comment!

      Elimina
  3. preavviso che davvero ne conosco poco, per ora, di Arduino e linguaggio in generale.
    Potresti spiegarmi l'utilizzo dell'array in questo sketch?

    RispondiElimina
    Risposte
    1. Ciao, l'ho usato per poter campionare 10 valori, che poi divido per 10, cosí facendo ottengo come valore finale il valore medio di 10 letture che è un valore con buona precisione.

      Elimina
  4. Ciao Daniele, ma questo accelerometro come mai rimane sull ultimo valore che legge ? non dobrebbe tornare a zero dopo aver letto l accelerazione ?

    RispondiElimina
    Risposte
    1. No perché l'accelerazione gravitazionale è sempre presente.

      Elimina
    2. ma non è che nel modulo è implementato un tilt sensing ? mi sembra strano che un accelerometro in se mantenga il valore.

      Elimina
  5. Ciao, stesso collegamento per Arduino mega2560? e sopratutto, posso togliere il pulsante (che presumo sia un semplice ON OFF) collegato nel DIGITAL8 e collegare questo pin direttamente sul GND di arduino?
    Grazie!

    RispondiElimina
    Risposte
    1. Se colleghi il pulsante a gnd resetterai la posizione di riferimento continuamente. Piuttosto non collegare affatto il pulsante.
      Per l'arduino mega penso non ci siano problemi, usa gli stessi pin.

      Elimina
    2. Innanzi tutto grazie della risposta!
      Ho disegnato questo schema, dici che possa andare? ho il terrore di provarlo :)

      http://forum.arduino.cc/index.php?action=dlattach;topic=282076.0;attach=104215;image

      Elimina
    3. L'ho guardato e mi sembra tutto a posto, prova..

      Elimina
    4. Grazie! e grazie anche per condividere i tuoi esperimenti!

      Elimina
  6. Salve, volevo collegare un accelerometro ad un trasmettitore radio, muovendolo dovrei avere una trasmissione, potete aiutarmi? a.stora@alice.it

    RispondiElimina
  7. Ciao, che tipo di trasmissione radio?

    RispondiElimina
  8. Ciao,possibile fare in modo che durante una scossa arduino emetta una nota acustica oppure una uscita per attivare un rele' ?

    RispondiElimina
    Risposte
    1. certo, devi aggiungere un "if" dove vai a vedere se il valore di un asse ("x" ad esempio) supera un certo valore, in questo caso attivi l'uscita.

      Fammi sapere, ciao!

      Elimina
  9. Io no sono pratico di arduino potresti aiutarci?,vorrei testare sul campo la possibilità di installare detti sensori in modo di inviare un allarme acustico locale e anche via radio.

    RispondiElimina
    Risposte
    1. Certo, inizia a realizzare il progetto di questo post (è la base per quello che vuoi fare), poi scrivimi nella sezione "chiedi e rispondi" e cercherò di darti una mano! Ciao

      Elimina
  10. Fenomenale Daniele. Grazie della condivisione. Voglio configurare l'accelerometro per un cronometro contaremate per canottaggio che senta la velocità pulsante della barca e visualizzare i dati su display. Credo che questo sia il dispositivo migliore.
    Saluti!

    RispondiElimina
    Risposte
    1. Grazie mille, se poi vorrai pubblicare il progetto scrivimi, ciao!

      Elimina
  11. Ciao, premetto che conosco poco Arduino ma sono appassionato di elettronica, vorrei tanto creare un inclinometro analogico da usare al posto di un normale potenziometro lineare da 10k, si può fare? Attualmente il potenziometro è collegato ad un joepad , la sua funzione è quella di piegare la moto durante il gioco, vorrei fare la stessa cosa ma con un accelerometro, mi puoi aiutare? Grazie

    RispondiElimina
  12. Salve, mi interessa molto il progetto, devo fare sia una bussola sia un inclinometro da apporre su un pan tilt su cui ho montato la parabola, in modo da poter vedere su un display sia l'inclinazione che la direzione, è una cosa possibile?

    RispondiElimina
  13. Salve, ho creato da un tutorial una livella elettronica e sto utilizzando un modulo MPU 6065 e devo utilizzare solo L'asse Y, ed escludere gli assi X e Z.....come posso fare? potresti aiutarmi? grazie mille!

    RispondiElimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post