L’Accelerometro MMA7361L della Freescale è un accelerometro a 3 assi con tre uscite analogiche separate con sensibilità regolabile a ±1.5g oppure a ±6g:
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:
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:
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:
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:
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
- 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
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:
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:
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 !!!
31 commenti
Vai al modulo dei commenti
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
Autore
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.
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
Autore
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.
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
Autore
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.
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.
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.
Autore
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.
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
Autore
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.
Ok, però scusi la mia ignoranza, come faccio a commutare questo pin dell’integrato da LOW ad HIGH?
Autore
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().
Ok, quindi al posto di collegare il pin a 3,3v lo attacco ai 5v?
Autore
Ciao Giacomo,
penso sia il caso che tu approfondisca meglio il significato dei termini HIGH e LOW in arduino ed in elettronica in particolare.
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.
Autore
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.
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
Autore
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.
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?
Autore
Ciao Giacomo,
se non ricordo male si, la sensibilità 1,5g dovrebbe avere un segnale di uscita di 800mV
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
Autore
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.
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
Autore
Ciao Sossio,
se 1.5g ti è sufficente ti consiglio di provare con questo modello.
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
Autore
Ciao Mirko,
si chiama deriva, su internet è largamente documentata, e va corretta via sw con degli algoritmi tipo filtri di Kalman o similari.
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
Autore
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°
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?
Autore
Ciao Fabio,
queste info penso tu possa prenderle dal datasheet del MMA7361L direttamente rilasciato dal produttore.