come sterzare con due motori gm9

Sto costruendo un robottino che si muove tramite due motoriduttori GM9 ( http://www.robot-italy.com/it/gear-motor-9-143-1-90-degree-shaft.html ) alimentati a 3 volt tramite 2 batterie aaa.
ho letto su diversi siti che per far sterzare il robot devo far girare un motore lasciando fermo l' altro per un certo tempo, volevo sapere se qualcuno che avesse già usato questi motori mi saprebbe dire per quanto tempo devo tenere un motore spento per sterzare di 90° o con che formula mi posso ricavare questo dato. grazie in anticipo :.

visto che non devi fare competizioni o altro (in cui la precisione con diversi fattori che cambiano essenziale, come ad esempio il voltaggio delle pile leggermente diverso che ti fa girare un pò di più il motore) puoi accontentarti di fare un istruzione "ad occhio"

penso tu abbia un tri-bot quindi ti consiglio di far ruotare il robot sul posto (un motore in una direzione e l' altro nella direzione opposta)

ti faccio un esempio, però sappi che io ho utilizzato 2 servi (quindi 180° gira tutto da una parte-90°fermo-0° gira tutto dall' altra)

void ruota_sinistra(){
posD=0;
posS=0;
servoD.write(posD);
servoS.write(posS);
delay(1150);
posD=90;
posS=90;
servoD.write(posD);
servoS.write(posS); }

quindi quando mi serve chiamo questa procedura che mi fa girare il robot di 90° a sinistra... in pratica fa girare le ruote, e ho visto che ci mette circa un secondo a compiere i 90°, quindi dopo 1s lo blocco così si ferma...
spero di esserti stato utile...

PS:i servi sono tutti e 2 a 0° perchè ovviamente sono sfalsati, e per far girare uno da una parte e uno dall' altra devo dargli valori differenti... per farti capire meglio ti allego la procedura per far andare avanti il robot

void avanti(){
posD=0;
posS=180;
servoD.write(posD);
servoS.write(posS); }

Con motori gm9 non puoi sapere con certezza che curva fai. Dovresti misurare i giri delle ruote per saperlo.
Ciao Uwe

Rieccomi :stuck_out_tongue: Bè, non verrà una cosa precisissima ma puoi provare. Dal sito ho letto: 66RPM a 5V. La tu tensione è prossima ai 5 V (4.5) quindi saranno un po' meno: per semplificare i calcoli scegliamo 60 rpm, quindi un giro al secondo. Ora serve il diametro delle tue ruote, senza di quello non se pò fa niente. Prendiamo come esempio delle ruote da 5cm (come le mie). Sai che in un secondo fa un giro e quindi 5pigreco: 3.1425=15.71 cm
Ecco allora che in un secondo il tuo robot ha fatto 15 cm. Mancando il diametro delle tue ruote non si possono fare calcoli precisi, e dovresti anche vedere quante rotazioni fa col tuo voltaggio cronometro in mano (magari metti una facetta e ogni volta che la vedi passare tracci un riga) OK?

Pensa che i giri dati sono a vuoto. Con un carico possono essere minori.
Ciao Uwe

Con un pò della fisica che sto facendo al liceo sono arrivato a questa formula anche se è molto teorica (non considera l' attrito ) ditemi che ne pensate :
la formula della coppia è forza per braccio della leva ( il raggio )
quindi coppia=forza per raggio la forza è massa per accelerazione quindi
c (coppia)=m (massa) per a(accelerazione) per r (raggio)
quindi
a= c/(mr)
accelerazione è uguale a velocità al quadrato fratto il raggio quindi:
(v
v)/r=c/(mr)
v
v=(cr)/(mr)
v*v=(c)/m
V=radice di c/m
in questo modo otteniamo la velocità
ora possiamo calcolare quanto ci mette il nostro robot a fare 90 gradi (1/4 della circonferenza che ha come raggio la distanza tra le ruote)
che ne dite funzionerebbe? :cold_sweat:

V=radice di c/m
v=s/t t=vs t=?(c/m)((2r*?)/4)
potete provare questa formula con qualcuno dei vostri robot per vedere se funziona mi è venuta la curiosità

non ho controllato la formula ma direi che sei entrato nello spirito giusto :slight_smile:
Però ti stai complicando la vita: anzichè leggere la velocità reale di rotazione delle ruote stai facendo una stima di vari altri parametri, un sacco di calcoli (e ricorda che l'arduino ha solo i float, quindi numeri a virgola mobile che hano una precisione bassa, 9 decimali al massimo e comunque hai un minimo di errore anche in tutti i numeri non potenze di 2)

insamma con metodo approssimativi rilevi dei valori che poi calcoli in modo approssimativo per ottenere una velocità per ottenere il tempo necessario per una rotazione... In pratica la cosa funziona, ad occhio, ma se proverai a girare per un pò di volte vedrai che l'errore si accumula diventando molto evidente (senza contare l'errore di integrazione, se hai fatto gli integrali!)

anche misurando la velocità della ruota avrai questo errore, ma sarà più piccolo e quindi il sistema più stabile. o usi un sistema della lettura dell'inclinazione assoluto (come un magnetometro, ovvero una bussola) o usi un relativo che però dovrai cercare di rendere il più preciso possibile, quindi evitare il più possibile rigiri matematici/elettromeccanici.