Accelerometro MMA7361L 3-axis ±1.5g / ±6g

L’Accelerometro MMA7361L della Freescale è un accelerometro a 3 assi con tre uscite analogiche separate con sensibilità regolabile a ±1.5g oppure a ±6g:

accelerometro MMA7361L 3 assi

L’Accelerometro MMA7361L rileva l’accellerazione dei 3 assi X,Y e Z come riportato nel suo datasheet ufficiale.

La sensibilità è regolabile a ±1.5g oppure a ±6g semplicemente commutando a LOW o HIGH un pin dell’integrato, la Freescale rilascia la seguente tabella:

MMA7361L imposta sensibilità

quindi puoi impostare la sensibilità a ±1.5g impostando il pin g-select a LOW.

L’accelerometro MMA7361L è venduto dalla Freescale in contenitore 14 LEAD LGA CASE 1977-01:

accelerometro mma7361l case

che lo rende inutilizzabile con una breadboard per cui ti consiglio di acquistarne uno già corredato di breakout con i contatti a passo standard per breadboard:

mma7361l breadboard

in modo da poterlo utilizzare, io ho acquistato qui un accelerometro tipo MMA7361L già assemblato per una decina di euro.

Ogni breakout riporta il contatto g-Select in una posizione differente, come tutti gli altri contatti per cui controlla sul datasheet della tua scheda dove sono posizionati i differenti pin prima di collegarla ad arduino.

I pin dell’accelerometro MMA7361L

i pin dell’accelerometro sono sempre identici anche se la loro posizione sulla breakout:

mma7361l connessione

i pin principali sono cinque, i soli necessari a poter già utilizzare l’accelerometro MMA7361L e sono:

  • Vdd alimentazione a +3,3v
  • Vss terminale negativo o Gnd
  • Xout uscita analogica in mV relativa all’accelerazione dell’asse X
  • Yout uscita analogica in mV relativa all’accelerazione dell’asse Y
  • Zout  uscita analogica in mV relativa all’accelerazione dell’asse Z
Gli altri pin dell’accelerometro MMA7361L ti servono per
  • g-Select: impostare la sensibilità tra ±1.5g e ±6g
  • 0g-Detect: trovare quando l’MMA7361L è in posizione 0g
  • Sleep: in grado di mettere questo accellerometro in modalità Sleep riducendo a 3uA il consumo di corrente
  • Self-Test: per verificare che l’integrità meccanica dell’accelerometro anche dopo il suo montaggio

Range di accelerazione sui 3 assi

L’accelerazione puoi misurarla come variazione dei mV sui singoli pin di out il cui valore varia di 800mV ad ogni variazione 1g ( g = accelerazione di gravità ) con la sensibilità impostata a ±1.5g.
Se la sensibilità è impostata a ±6g la variazione ad ogni g è di soli 206mV, come puoi vedere nella Tabella 3 riportata nel datasheet.
mma7361l direzioni
Il datasheet dell’accelerometro MMA7361L indica la direzione di ogni asse rispetto all’integrato per aiutarti a comprendere ad ogni movimento l’asse corrispondente.
Inoltre la figura seguente indica i valori in mV nella posizione di 0 e nelle posizioni +1g e -1g:
mma7361l mV
in questo modo potrai fare dei test per verificare che i valori letti sul convertitore analogico digitale di arduino siano corretti ad ogni spostamento dell’accelerometro.

Collegamenti dell’accelerometro MMA7361L

Per utilizzare lo sketch dovrai eseguire i collegamenti come in tabella:

 

accelerometro MMA7361L Arduino
3,3v 3,3v
Gnd Gnd
Xout A0
Yout A1
Zout A2
g-Select Gnd
Sleep 3,3v
3.3v su AREF

Collega l’alimentazione ai +3,3v e Gnd arduino;

Collega i tre pin di output ai pin analogici arduino;

Collega il pin g-Select a Gnd, per impostare l’accelerazione a ±1.5g = 800mV ad ogni g;

Collega lo Sleep pin ai 3,3v;

Collega i 3,3v di arduino al pin AREF di arduino.

L’ultimo collegamento ti serve per poter impostare come tensione di riferimento il valore 3,3v in quanto le uscite X,Y e Z out dell’accelerometro sono 3,3v;

Ecco i collegamenti lato Arduino:

mma7361l connessioni

ed i collegamenti al sensore, nel mio caso la breakout possiede un regolatore di tensione integrato per cui ho alimentato l’accelerometro con +5v e ricavato dallo stesso i +3,3v portati sul pin Sleep.

Se il pin Sleep dell’accelerometro mma7361l non è collegato a +3,3v il dispositivo resta in modalità sleep ( dormiente o risparmio energetico ) e non ti invia alun valore sui pin di output:

mma7361l connessioni

Sketch dell’accelerometro MMA7361L

Il primo sketch di test che ti propongo serve a valutare i valori letti su ciascun ingresso analogico Arduino:

/**********************************************************
 * MMA7361L Arduino
 *
 * Data creazione 02 aprile 2013
 * Ultima modifica 03 aprile 2013
 *
 * autore: Mauro Alfieri
 * web:    mauroalfieri.it
 * tw:     @mauroalfieri
 *
/**********************************************************/

int XPin = A0; // X
int YPin = A1; // Y
int ZPin = A2; // Z

void setup() {
  Serial.begin(9600);
  analogReference(EXTERNAL);
  Serial.println("Setup MMA7361L"); 
} 

void loop() { 
  Serial.print("X: ");
  Serial.print( analogRead(XPin) );
  Serial.print(" Y: ");
  Serial.print( analogRead(YPin) );
  Serial.print(" Z: ");
  Serial.print( analogRead(ZPin) );
  Serial.print("\n");

  delay(500);
}

linea 19: imposta la tensione di riferimento di arduino a 3,3v mediante il collegamento AREF;

linee 24-30: leggi i valori analogici presenti sui pin A0,A1,A2 a cui hai collegato gli output dell’accelerometro MMA7361L e scrivi sul monitor seriale tali valori;

linea 32: attendi 500 millisecondi ( 1/2 secondo ) prima di ri-eseguire la lettura degli ingressi analogici e trasferirne il risultato sul monitor seriale.

Ciò che leggerai sul monitor seriale durante l’esecuzione dello sketch dovrebbe essere simile a questo:

Libreria per accelerometro MMA7361L

Ho trovato questa libreria che puoi utilizzare per controllare i valori letti sulle uscite X,Y e Z dell’accelerometro, nei prossimi articoli proverò gli esempi e come utilizzarla in un progetto pratico.

Buon divertimento !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/accelerometro-mma7361l-3-axis.html

31 comments

Skip to comment form

    • angelo rega on 19 ottobre 2014 at 16:01
    • Reply

    ciao e come sempre complimenti.
    ho comprato (http://cgi.ebay.it/ws/eBayISAPI.dll?ViewItem&item=171125492102) ho montato tutto come dal tuo post.
    ma non funziona. forse è un problema di libreria. insomma quando carico il programma mi dice (caricamento terminato ) e nella finestra inferiore esce una scritta in rosso come fosse un allarme.
    puoi aiutarmi?
    ciao

    1. Ciao Angelo,
      purtroppo il link che hai inviato fa riferimento ad un’inserzione scaduta e quindi non vedo cosa hai acquistato.
      In generale io preferisco acquistare solo da rivenditori autorizzati perché offrono prodotti testati, assistenza in caso di malfunzionamento e sopratutto la documentazione per utilizzare il prodotto.

      In merito alla scritta in rosso, se la leggi sicuramente capirai cosa non funziona.
      Se non riesci a comprendere il messaggio postalo in un commento e provo ad interpretarlo per te.

        • angelo rega on 20 ottobre 2014 at 23:49
        • Reply

        ciao
        ho trovato il problema (l’alimentazione).
        adesso funziona. solo che quando è immobile i valori della x y z variano e non sono mai stabile, è normale? .
        grazie

        1. Ciao Angelo,
          ottimo. Sui valori che cambiano potrebbe dipendere dai cavetti con cui è connesso o dalla necessità di una resistenza di pull-down o pull-up necessaria al componente, verifica sulla documentazione del produttore.

    • giacomo on 5 novembre 2014 at 11:38
    • Reply

    Ciao Mauro .. sto approfondendo il discorso accelerometri .. ti volevo chiedere una cosa un accelerometro nudo e crudo ti da la posizione in cui si trova ma poi dovrebbe ritornare a zero invece in questi digitali che sto vedendo su vari forum rimane sempre aggiornata la posizione .. è perchè hanno qualche sample and hold all’interno o cosa ? grazie mille mauro

    1. Ciao Giacomo,
      anche io mi aspettavo un comportamento come quello da te descritto, fino a quando l’ho provato ed ho verificato il comportamento descritto.
      Diciamo pure che questo tipo di accelerometri si comportano più come inclinometri che come accelerometri veri e propri nel senso canonico del termine.

        • Gabriele on 11 febbraio 2015 at 01:51
        • Reply

        In una certa maniera si, il punto è che se inclini l’accelerometro è normale che la gravita si scompone lungo almeno due direzioni, al massimo 3! qundi il fatto che ti stia inclinando e trovi variazione di accelerazione è normale che ti stia cambiando l’accelerometro.

    • Valentino on 6 gennaio 2015 at 18:11
    • Reply

    Salve,
    anticipo che sono nuovo della materia, praticamente del tutto ignorante.
    Avrei bisogno di acquistare un accelerometro che oltre a rilevare e a descrivere i valori rilevati, mi dia in uscita un segnale derivante dall’inclinazione stessa.
    Mi spiego meglio:
    mi serve qualcosa che, al momento del movimento rilevato, faccia partire un impulso verso altri componenti, per intenderci come se funzionasse da interruttore on/off.
    Sapete aiutarmi?
    Dove posso acquistarlo?
    e soprattutto come si chiama precisamente questo componente che devo acquistare?

    Grazie,
    Saluti.

    1. Ciao Valentino,
      non conosco un componente che faccia tutto insieme, potresti costruirtelo con un accelerometro ed un arduino.
      Se ti serve solo un interruttore on/off che cambi stato ad una inclinazione definita puoi provare con un tilt sensor ed installarlo in modo che la variazione di inclinazione ne vari lo stato.

    • Giacomo on 16 febbraio 2015 at 12:01
    • Reply

    Buongiorno, complimenti per la guida, vorrei chiederle però come settare l’accelerometro in modo tale che mi dia i valori più precisi possibili. Lei parla di +-1g e +-6g, cosa che non ho capito molto bene. Sono forse questi i parametri che determinano la precisione dei dati forniti dall’accelerometro? Se si, come faccio ad impostare questi +-1g o +-6g?
    Grazie

    1. Ciao Giacomo,
      la precisione dei valori letti puoi verificarla sul sito del produttore o cercando i datasheet del MEMS usato.
      Il cambio di impostazione puoi leggerlo subito dopo la prima foto dell’articolo, ricordavo di averlo scritto.

        • Giacomo on 17 febbraio 2015 at 17:14
        • Reply

        Ok, però scusi la mia ignoranza, come faccio a commutare questo pin dell’integrato da LOW ad HIGH?

        1. Ciao Giacomo,
          se devi farlo in modo permanente puoi collegarlo al +5v ( HIGH ) o a Gnd ( LOW ) se vuoi farlo con Arduino dovrai collegarlo ad un pin digitale e dare il comando digitalWrite().

            • Giacomo on 23 febbraio 2015 at 20:12

            Ok, quindi al posto di collegare il pin a 3,3v lo attacco ai 5v?

          1. Ciao Giacomo,
            penso sia il caso che tu approfondisca meglio il significato dei termini HIGH e LOW in arduino ed in elettronica in particolare.

            • Giacomo on 2 marzo 2015 at 15:47

            No, io conosco i concetti di HIGH e LOW (anche perché sono al quinto anno degli studi superiori di elettronica), il mio problema è che non capisco cosa devo fare, basta che collego al posto dei 3,3v i 5v? Oppure devo scrivere solo digitalWrite(HIGH) sul mio programma.

          2. Ciao Giacomo,
            i concetti di HIGH e LOW sono descritti in tutti gli sketch base che trovi sul blog o leggendo il corso on-line gratuito che ho pubblicato.
            Riassumendoli HIGH in arduino vuol dire 5v e LOW corrisponde a 0v o Gnd.
            Quindi devi decidere come e dove vuoi collegare il pin di risoluzione.

    • Giacomo on 13 marzo 2015 at 16:37
    • Reply

    Scusi ancora, ma io devo capire questa cosa. Per aumentare al massimo la sensibilità dell’accelerometro, cosa devo fare praticamente? Può dirmi gentilmente i vari passaggi?
    -Cosa devo aggiungere al mio sketch??
    -Per aumentare al massimo la sensibilità in modo permanente basta collegare i vari pin dell’accelerometro come ha mostrato lei nella sua guida?

    Potranno anche essere domande stupide per lei, ma io ho bisogno di capire questa cosa. Grazie

    1. Ciao Giacomo,
      io voglio che tu comprenda questa cosa almeno quanto te.
      Ma l’elettronica in 2 righe non è possibile sintetizzarla.

      Hai letto cosa significa segnale HIGH o LOW ? Avrai capito che HIGH vuol dire livello massimo di tensione, in questo componente +5v e LOW vuol dire 0v o Gnd per cui se colleghi il pin di sensibilità come ho scritto a HIGH = 5v ottieni la sensibilità di 6G se la colleghi a 0v ottieni 1,5g

      Se rileggi l’articolo scopri che c’era scritto tutto.

        • Giacomo on 25 marzo 2015 at 16:27
        • Reply

        Ok, grazie, adesso ho capito prima invece no, malgrado abbia riletto il testo più di una volta.
        Un ultima cosa, la sensibilità più alta la ottengo però con 1,5g giusto?

        1. Ciao Giacomo,
          se non ricordo male si, la sensibilità 1,5g dovrebbe avere un segnale di uscita di 800mV

    • Sossio on 1 febbraio 2016 at 11:47
    • Reply

    Avrei bisogno di un accelerometro low-g come questi: MMA1260D or MMA2260D. Vorrei fare una disgnostica vibrazionale dei cuscinetti. Se si osserva nei data sheets di questi due accelerometri c’è proprio questa possibilità di applicazione.

    Questo MMA7361L ha la capicità di percepire accelerazioni molto piccole?

    Grazie

    1. Ciao Sossio,
      non ricordo di aver letto caratteristiche compatibili con la tua richiesta nel datasheet di questo componente, tuttavia ti suggerisco di ricontrollare ed eventualmente acquistare l’altro componente che hai già individuato.

        • Sossio on 1 febbraio 2016 at 13:04
        • Reply

        Ciao Mauro. Ti ringrazio per la riposta. Purtroppo non trovo in giro quel tipo di accelerometri. Sapresti indicarmi qualcosa di simile? Ti spiego: vorrei un accelerometro molto sensibile capace di registrare accelerazioni molto piccole.

        Questo MMA7361L ha un settaggio anche 1.5g e questo in teoria lo dovrebbe rendere utile per quello che voglio fare io.

        Poi cosa mi consigli di usare un analogico oppure un digitale per avere una migliore soluzione?

        Grazie

        1. Ciao Sossio,
          se 1.5g ti è sufficente ti consiglio di provare con questo modello.

    • Mirko on 17 aprile 2016 at 23:59
    • Reply

    Ciao Mauro, ho comprato da poco un accelerometro MMA7361. I valori che visualizzo, lasciando fermo il sensore, continuano a diminuire senza riuscire a capire il perché. Sapresti aiutarmi?
    Grazie

    1. Ciao Mirko,
      si chiama deriva, su internet è largamente documentata, e va corretta via sw con degli algoritmi tipo filtri di Kalman o similari.

    • Angela on 9 settembre 2016 at 15:22
    • Reply

    Buongiorno,

    mi scuso in anticipo per l’ignoranza. Dovendo acquistare un accelerometro/inclinometro che verifichi in continuo la planarità di una piastra, in modo da collegare un allarme nel caso l’angolo tra questa e il pavimento sia superiore a 0,1°, verso che modello dovrei orientarmi?
    Su quali valori di Sensibilità e risoluzione dovrei cercare?

    Grazie

    1. Ciao Angela,
      se il tuo progetto è di tipo professionale più di un accelrrometro io ti consiglierei un encoder da 3600 passi giro da collegare alla piasta meccanicamente che ti garantirebbe una accuratezza di 360°/3600 = 0,1°

    • Fabio on 28 giugno 2017 at 10:41
    • Reply

    Mi scuso per il disturbo, ho realizzato un sismografo simile a quello creato da lei, utilizzando un applicativo di lab view per vedere anche i grafici degli assi. Solo che qualcosa non mi torna, ho letto vari tutorial di cablaggio per il freescale MMA7361, ma in nessuno si usano dei sample & hold per la frequenza dei segnali analogici. La mia domanda è questa: il sample & hold non serve perché la frequenza di campionamento di arduino è sufficiente?
    E se è così, quant’è la frequenza sui pin di uscita (X,Y,Z) dell’ MMA7361?

    1. Ciao Fabio,
      queste info penso tu possa prenderle dal datasheet del MMA7361L direttamente rilasciato dal produttore.

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.