Rilevare "stallo" con mpu-6050

Ciao a tutti,

sto sviluppando un robot controllato da Arduino, a bordo ho 2 BTS7960, 3 sensori ad ultrasuoni e un
modulo MPU 6050.

Attraverso il MPU6050 riesco a determinare l'angolazione del robot per decidere dove mandarlo e fin qui tutto bene.

Quello che ora voglio fare è capire se il robot si è bloccato (ad esempio è in panne o si è impantanato), pensavo di farlo sempre attraverso lo stesso MPU 6050.

Dall'accelerazione però non riesco a distinguere il caso in cui l'accelerazione sia costante perché il robot è fermo o perchè il robot sta andando a velocità uniforme.

Qualche idea? Secondo voi posso risolvere il mio problema con MPU 6050 o meglio se cambio tipo di sensore?

Grazie per i consigli :slight_smile:

Ciao, che robot è? come e in che ambiente si muove? fuori o dentro casa?

doppiozero:
Ciao, che robot è? come e in che ambiente si muove? fuori o dentro casa?

Ciao, è un robot per tagliare l'erba si muove all'esterno, erba quindi.

Lo sto tenendo open source e documento qua GitHub - lucabiasotto/OttoMower.

Volendo usare l'accelerometro potresti distinguere tra vibrazioni da mezzo in movimento ad assenza di vibrazioni (o diminuzione) a mezzo fermo, oppure assenza di rotazioni usando il giroscopio. Altre cose con MPU6050 non mi vengono in mente

Oppure:

-GPS visto che sei all'esterno
-encoder sulle ruote
-sensore ottico tipo quello sotto i mouse per leggere lo spostamento rispetto al terreno (non ho idea di cosa esista in commercio modelli/performance/costi)

Con MPU 6050 puoi fare di tutto ma potresti vedere anche come si comporta quando è fermo....
Parti da qui, con questi valori, e solo quando sarai in questa area di valori saprai che è fermo.
E questo perché quando è in movimento non potrai mai avere gli stessi valori di quando è fermo (non ti stai muovendo in assenza di gravità nello spazio profondo).
Come dice doppiozero hai sicuramente delle vibrazioni che alla fine sono microaccelerazioni, e siccome non ti muovi su un piano perfettamente liscio avrai delle letture del giroscopio che invece non avrai quando sei fermo...

doppiozero:
Volendo usare l'accelerometro potresti distinguere tra vibrazioni da mezzo in movimento ad assenza di vibrazioni (o diminuzione) a mezzo fermo, oppure assenza di rotazioni usando il giroscopio. Altre cose con MPU6050 non mi vengono in mente

steve-cr:
Con MPU 6050 puoi fare di tutto ma potresti vedere anche come si comporta quando è fermo....
Parti da qui, con questi valori, e solo quando sarai in questa area di valori saprai che è fermo.
E questo perché quando è in movimento non potrai mai avere gli stessi valori di quando è fermo (non ti stai muovendo in assenza di gravità nello spazio profondo).
Come dice doppiozero hai sicuramente delle vibrazioni che alla fine sono microaccelerazioni, e siccome non ti muovi su un piano perfettamente liscio avrai delle letture del giroscopio che invece non avrai quando sei fermo...

Grazie per le risposte doppiozero e steve-cr la vostra soluzione mi piace ed è quello a cui stavo lavorando!
L'unica cosa che sbagliavo, e che ho corretto grazie alla vostre risposte, è che usavo i dati dell'accelerometro per determinare se il robot era fermo, in realtà devo usare il giroscopio.
L'accelerometro ha dentro i dati della accelerazione terrestre e non sapevo come usarlo!

Ho già fatto una prova in giardino e usando il giroscopio funziona tutto!

Devo solo trovare la giusta soglia sotto la quale considerare il robot fermo!

Grazie mille, mi avete salvato :slight_smile:

Il giroscopio serve a poco se ti muovi su un piano perfettamente livellato.....
Ma sto parlando di una lastra di vetro perfettamente pulita e le ruote del robot devono essere perfettamente tonde e non devi avere vento laterale :smiley:

Quindi vai sicuramente di giroscopio