Rover con arduino

Un saluto a tutti, sono entrato da poco nel mondo di arduino e devo dire che le possibilità sono quasi infinite, anche se purtroppo ho scarse conoscenze di elettronica. Ho costruito un rover a 3 ruote (la terza solo di appoggio) con telaio in legno, due servi a rotazione continua della parallax alimentati separatamente tramite quattro batterie stilo ricaricabili (ovviamente i due cavi bianchi dei servi li ho collegati a due pin pwm di arduino), ed ovviamente il nostro arduino come scheda di controllo, alimentato tramite una batteria da 9 volt, come potete vedere dalla foto.

Ma ho due terribili dubbi che mi assillano.... :roll_eyes:
Il primo dubbio è che per far procedere in linea retta il rover (ovvero per far girare entrambe le ruote alla stessa velocità) ho dovuto sblilanciare molto più il servo di destra rispetto a quello di sinistra, vi riporto la parte di codice interessata:
servosx.write(99);
servodx.write(65);
considerando che a 90 sono entrambi fermi, è normale che il servo di destra abbia una differenza di 16 punti rispetto a quello di sinistra ?
Il secondo dubbio consiste nel fatto che ho letto in giro che utilizzando due tipologie di alimentazione (4 stilo per i servi e una transistor 9Volt per arduino) avrei dovuto collegare le due masse dei servi in comune ad una massa di arduino, pena il mancato funzionamento dei servi... be ragazzi posso dirvi che non l'ho fatto, non ho collegato le masse in comune eppure i servi funzionano.... anche se come dicevo prima in maniera a mio avviso un poco sbilanciata. I due problemi possono essere collegati ? ovvero il mancato collegamento delle masse in comune può causare l'inconveninte che un servo gira molto più lento dell'altro a parità di comando impartito ? Un grazie mille anticipato per chi decide di perdere tempo con la mia domanda....

Rover72.jpg

Ciao,

eh ci ho sbattuto la testa anch'io un po' di tempo fa...

E' normale che due motori identici non ruotino esattamente alla stessa velocità.
L'unico modo (almeno, l'unico che io conosca...) per far andare dritto il tuo rover è utilizzare un encoder per ruota e un algoritmo come ad esempio PID.

Prova a documentarti un attimo su encoder e PID.
Ad esempio puoi partire da qui: Controllo PID - Wikipedia
ed anche qui: PID
E qui c'è un po' di roba che può tornarti utile: http://www.gioblu.com/tutorials/robotica
Poi... Gooooooogle :wink:

Non so che basi tu abbia. Non è banalissimo, ma non è neanche impossibile.

Se hai dubbi, chiedi :slight_smile:

Grazie Kernak della risposta, stavo appunto guardando che per aumentare la precisione del movimento è necessario avere un feedback sul ciclo, quindi un'encoder o forse ancora più semplicemente aprire il servo e stagnare 2 fili sui contatti del motore, dopodiché tramite due pin digitali di arduino comparare le due tensioni provenienti dai motori e scrivere un codice che varia la velocità dei servi in base alla differenza appunto di tensione letta tra il primo e il secondo servo.
Tornando invece al discorso delle masse devo collegarle in comune o dal momento che funziona posso lasciarle così ?

o forse ancora più semplicemente aprire il servo e stagnare 2 fili sui contatti del motore, dopodiché tramite due pin digitali di arduino comparare le due tensioni provenienti dai motori e scrivere un codice che varia la velocità dei servi in base alla differenza appunto di tensione letta tra il primo e il secondo servo

giusto, avevo visto una cosa simile sul sito di gioblu.
Probabilmente meno preciso degli encoder+PID, ma di certo più semplice. Per un roverino può essere sufficiente.

Tornando invece al discorso delle masse devo collegarle in comune o dal momento che funziona posso lasciarle così ?

per questo forse è meglio se aspetti la risposta di qualcuno che ne sa più di me...

uhmm non credo che il sistema tensione usata significhi qualcosa, sopratutto su un terreno che ha attrito variabile (sabbia, tappeti, intercapedini tra piatrelle, ostacoli)

l'unica è usare un encoder. Per esempio un contatto strascicante, o un lettore ottico o simili. Ma anche così hai errore quando la ruota gira a vuoto.

la soluzione che trovo definitiva è il sensore del mouse ottico, che fondamentalmente è nato per questo scopo. potresti aver problemi su alcune superfici, ma non credo che si possa trovare di meglio a costo quasi 0