Problema con accelerometro MMA8542

Salve a tutti! Ho acquistato questa board con accelerometro , e l'ho collegata alla mia Arduino UNO come suggerito da un tutorial di SparkFun che però monta l'accelerometro su una board leggermente diversa da quella che ho acquistato io.

Nel mio caso ho collegato:
GND board - GND Arduino
3.3V board - 3.3V Arduino
SDA board - R(330Ohm) - A4 Arduino
SCL board - R(330Ohm) - A5 Arduino

Quando cerco di leggere i valori, utilizzando la libreria (https://github.com/sparkfun/MMA8452_Accelerometer/tree/master, sempre proposta da SparkFun) e l'esempio Basic, il loop() si blocca alla riga 2, quando chiama accel.available().

Io credo sia un problema di Hardware, dato dalle differenze tra la mia scheda e quella utilizzata nel tutorial. In particolare non so se e come collegare i pin VCC-In e SA0 dell'accelerometro. Ho bisogno di una mano, sono ad un punto morto :frowning:

Ecco l'immagine dei pin del mio accelerometro:

Buon pomeriggio,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Provvedo :slight_smile:

Se qualcuno però avesse una risposta alla domanda iniziale :grinning:

Probabilmente è su un address diverso

MMA8452Q(byte addr = 0x1D); // Constructor

leggi qua

Grazie intanto per la risposta...

Ho provato a cambiare i collegamenti, utilizzando i 5V di alimentazione da Arduino verso il pin VCC-IN della scheda, come descritto nel link ma non cambia nulla: utilizzando l'esempio della libreria Adafruit, la porta seriale mi da l'errore 'Couldn't start'. Ho provato entrambi gli indirizzi 0x1C e 0x1D ma invano.

Hai controllato che indirizzo è ?

https://playground.arduino.cc/Main/I2cScanner

Ho caricato lo sketch i2c scanner sulla scheda e mi trova l'accelerometro con indirizzo 0x1C. Ora riprovando con l'esempio della libreria Adafruit e con quello della libreria iniziale (Sparkfun) continua a darmi errore sulla porta seriale ('Coudn't start' ad esempio) al momento dell'iniziazione del sensore (accel.init()).

Però ho notato che spesso l'IDE Arduino mi da errore sulla porta COM3 busy, quando cerco di aprirla. Poi al secondo click la apre.

:frowning:

continua a darmi errore sulla porta seriale ('Coudn't start' ad esempio) al momento dell'iniziazione del sensore (accel.init()).

Perchè non ti vede il sensore
Ma hai modificato l'indirizzo nella libreria ?
Oppure puoi mettere il pin SA0 al +3.3V, cosi' ti diventa 0X1D

caprabianca:
Però ho notato che spesso l'IDE Arduino mi da errore sulla porta COM3 busy, quando cerco di aprirla. Poi al secondo click la apre.

Strano. Che versione di IDE hai?

Anche io ho un accelerometro simile, ma posta anche la foto del lato componenti della tua board, così capiamo meglio di quale si tratta e vediamo.

Si si ho cambiato il #define come letto nell'articolo che hai linkato.

Ho la versione 1.6.8, in effetti è un pò retrograda, ora aggiorno e riprovo.

Ecco la foto, se ti serve nel primo post c'è il link al prodotto su amazon

Ok, vediamo quello che posso provare a dirti.
Intanto l'IDE: si, aggiornalo perché forse era una di quelle versioni con i problemi sulla seriale. Ma il "couldn't start" di cui parli cosa è? Se è un errore durante l'upload è un conto, ma tu da come lo descrivi pare che sia un errore di runtime. Per l'indirizzo, se non hai collegato SA0 dovrebbe essere quello di default, 0x1C, come anche lo scanner ti ha detto, quindi a me sembra più un problema del tuo IDE, aggiornalo all'ultima versione (anzi, disinstallalo ed installa ex novo l'ultima) e riprova. Verifica anche che le librerie che usi siano aggiornate.
E facci sapere.

Okay riparto:

Step 1 : reinstallo Arduino IDE, ultima versione.
Step 2: carico lo sketch esempio Blink sulla mia scheda collegata alla porta COM3
Step 3: modifico lo sketch inserendo due linee per un print in seriale all’accensione del led, la porta seriale funziona.
Step 3: Collego il sensore alla scheda, riprovo Blink + Seriale → funziona
Step 4: Carico lo sketch i2c scanner sull’Arduino, mi da questo errore:

Arduino:1.8.5 (Windows 10), Scheda:"Arduino/Genuino Uno"

........

Lo sketch usa 3608 byte (11%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
Le variabili globali usano 484 byte (23%) di memoria dinamica, lasciando altri 1564 byte liberi per le variabili locali. Il massimo è 2048 byte.
avrdude: ser_drain(): read error: Il dispositivo non riconosce il comando.


avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_drain(): read error: Il dispositivo non riconosce il comando.


avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_drain(): read error: Il dispositivo non riconosce il comando.


avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
La porta seriale selezionata 
 non esiste o la scheda non è connessa
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.


avrdude: stk500_recv(): programmer is not responding
processing.app.SerialException: Errore nell'apertura della porta seriale "COM3"
 at processing.app.Serial.<init>(Serial.java:147)
 at processing.app.Serial.<init>(Serial.java:82)
 at processing.app.SerialMonitor$4.<init>(SerialMonitor.java:101)
 at processing.app.SerialMonitor.open(SerialMonitor.java:101)
 at processing.app.AbstractMonitor.resume(AbstractMonitor.java:104)
 at processing.app.Editor.resumeOrCloseSerialMonitor(Editor.java:2218)
 at processing.app.Editor.access$2200(Editor.java:79)
 at processing.app.Editor$DefaultExportHandler.run(Editor.java:2196)
 at java.lang.Thread.run(Thread.java:748)
Caused by: jssc.SerialPortException: Port name - COM3; Method name - openPort(); Exception type - Port not found.
 at jssc.SerialPort.openPort(SerialPort.java:167)
 at processing.app.Serial.<init>(Serial.java:136)
 ... 8 more
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xe0
avrdude: ser_send(): write error: sorry no info avail
avrdude: ser_recv(): read error: Il dispositivo non riconosce il comando.

Errore nell'apertura della porta seriale "COM3"

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xe0
avrdude: ser_drain(): read error: Il dispositivo non riconosce il comando.

Edit: Ho riprovato il tutto e funziona anche i2c_scanner, trovandomi l’indirizzo 0x1C (non ho capito perchè prima mi desse errore. Ora procedo con gli step successivi

Step 5: Seguo il tutorial a questo link: Arduino Code | Adafruit MMA8451 Accelerometer Breakout | Adafruit Learning System

Scarico la libreria MMA8541, quella Adafruit.Sensor, correggo l’indirizzo sull’header e imposto 0x1C, carico lo sketch MMA8541demo esempio: Sul monitor seriale leggo “Adafruit test!” e pochi secondi dopo “Couldn’t start”, cioè non riesce a compilare mma.begin().

E’ possibile che sia un problema della libreria? Come posso provare il dispositivo senza l’utilizzo della libreria? (cioè in modo grezzo richiedendo e leggendo i dati).

EDIT2: Hooray! Ho riprovato con un’altra libreria (della SparkFun) e funziona! Grazie per l’attenzione e il supporto :smiley:

Ma hai reinstallato/aggiornato anche i driver della porta COM di Arduino?

EDIT: ho visto il tuo edit, ok. Ma non mi spiego comunque neanche io perché prima avevi quell’errore ed ora che hai riprovato funziona tutto. Forse la reinstallazione richiedeva un riavvio della macchina o del driver seriale? Boh…