Pages: [1]   Go Down
Author Topic: come sterzare con due motori gm9  (Read 677 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-small
Logged

pergi.eu ( il mio blog su arduino)

Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Quote
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
Quote
void avanti(){
    posD=0;
    posS=180;
    servoD.write(posD);
    servoS.write(posS); }
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20166
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Bologna
Offline Offline
God Member
*****
Karma: 5
Posts: 501
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Rieccomi smiley-razz 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 5*pigreco: 3.142*5=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?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20166
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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/(m*r)
accelerazione è uguale a velocità al quadrato fratto il raggio quindi:
(v*v)/r=c/(m*r)
v*v=(c*r)/(m*r)
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?  smiley-roll-sweat
« Last Edit: December 07, 2012, 01:52:22 am by leonardopergola » Logged

pergi.eu ( il mio blog su arduino)

Offline Offline
Newbie
*
Karma: 0
Posts: 27
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

pergi.eu ( il mio blog su arduino)

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10099
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non ho controllato la formula ma direi che sei entrato nello spirito giusto smiley
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.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: