Robot, anomalie da alimentazione insufficiente?

Salve a tutti,
scrivo per chiedere suggerimenti in merito alle anomalie riscontrate nel robot che sto costruendo.

Di cosa si tratta?

Il robot è basato sul magician chassis e gestito da Arduino UNO: http://www.homotix.it/catalogo/robotica-e-accessori-438/kit-robot-versione-base

Per info:
Motori -> http://www.homotix.it/catalogo/robotica-e-accessori-438/magician-chassis
Sensore IR -> http://www.homotix.it/catalogo/infrarossi/sensore-di-prossimita-infrarossi
Driver motori -> http://www.homotix.it/catalogo/moduli-di-controllo/motor-driver-1a-dual-tb6612fng

Per prima cosa ho costruito il robot e l'ho programmato in modo da fermarsi davanti agli ostacoli per poi girare sempre dalla stessa parte.

Ieri ho deciso di migliorarlo rendendo il sensore IR mobile tramite micro-servo, così da fargli scegliere la direzione con più spazio disponibile.

Il micro-servo in uso è il GOTECK GS-9018 con le seguenti specifiche:

*Model.:GS-9018
*Weight:9g
*Size: 23.0 x 12.5x 30.0mm
*Operating Speed : 0.10sec/60o
*Stall Torque : 1.5 kg/cm
*Operating Voltage:4.80-6 Volts

I problemi che mi si presentano quando è in funzione il servo sono due.

Il primo è che gira una sola ruota. Ho già provato a lasciare lo stesso codice togliendo ciò che riguarda il servo e funziona bene. Non appena inserisco la funzione servo.attach() uno dei motori smette di girare.

Il secondo problema riguarda il servo che, quando l'unico motore che funziona gira, invece di restare nella posizione centrale stabilita da codice si sposta verso un'estremità, in particolare quella di angolo 0.

Va precisato che nel momento in cui, da codice, il robot si ferma per permettere al sensore di rilevare le distanza il microservo si comporta perfettamente. Prima di tutto si mette in posizione centrale, dove ddovrebbe stare anche durante il moto, poi si sposta dell'angolo scelto sia a destra che a sinistra per decidere dove ruotare il robot, il problema è che appena il motore ricomincia a girare il servo si sposta ad un'estremità invece di tornare dove deve stare.

L'alimentazione è fornita da 4 pile stilo AA.
Il driver motori prende corrente da Vin
Il sensore dai 3.3v di Arduino
Il servo dai 5v di Arduino

Ho pensato che il problema sia legato ad una insufficiente alimentazione, ma preferisco che qualcuno con più esperienza di me mi dia conferma o smentita.

Chiedo poi consigli, qualunque sia il problema, su come correggere queste anomalie.

Vi ringrazio dell'attenzione.

Dovresti fornire gli ampere, sommando quelli usati dal tuo circuito scegli l'alimentazione adatta!
I motori ho visto che consumano 190mA a testa, il servo tra i 200 ed i 300 (http://goteckrc.com/Download/GS-9018.pdf).. somma il tutto e controllalo con l'intensità del tuo pacco batterie, ammesso che il problema sia quello!

Mi pare che quando attivi un servo con la funzione servo.attach() non puoi avere PWM sui pin 9 e 10 , se hai collegato i motori su uno di questi due pin il motore non funziona. Su quali pin li hai collegati tu?

sciorty:
Dovresti fornire gli ampere, sommando quelli usati dal tuo circuito scegli l'alimentazione adatta!
I motori ho visto che consumano 190mA a testa, il servo tra i 200 ed i 300 (http://goteckrc.com/Download/GS-9018.pdf).. somma il tutto e controllalo con l'intensità del tuo pacco batterie, ammesso che il problema sia quello!

Questo è il datasheet del tipo di pile che sto utilizzando: http://data.energizer.com/PDFs/E91.pdf, ma non riesco a trovare info chiare sull'intensità erogata :~

tonid:
Mi pare che quando attivi un servo con la funzione servo.attach() non puoi avere PWM sui pin 9 e 10 , se hai collegato i motori su uno di questi due pin il motore non funziona. Su quali pin li hai collegati tu?

Ho provato sia quei pin che altri, ma non ho notato cambiamenti :frowning:

Ancora non ho risolto. Comunque grazie ad entrambi e a chiunque volesse darmi una mano :wink:

Sarebbe meglio se scrivi il codice per vedere se è li il problema. :grin:

Comunque le batterie che usi hai detto che sono 4 stilo,sono da 1,5v che messe in serie ti danno 6v a vuoto. Quando colleghi un carico come nel tuo caso motori (2),servo,arduino ecc. sicuramente scenderai sotto i 6v. Per avere una tensione stabile all'arduino dovresti alzare l'alimentazione almeno a 7-8 volt altrimenti rischi che il regolatore di tensione che c'è sulla scheda non riesce a lavorare. Prova a misurare con il tester sull'arduino dove ti da i +5 mentre è sotto carico e vedi che tensione leggi.

Prova ad aggiungere una pila. Dovresti andare a 7,5 come valore nominale.

Prova ad aggiungere una pila. Dovresti andare a 7,5 come valore nominale.

Torna utile anche se penso sia meglio un piccolo alimentatore,più che altro per la corrente a disposizione,due motori più un servo sd il resto danno poca autonomia.

tonid:

Prova ad aggiungere una pila. Dovresti andare a 7,5 come valore nominale.

Torna utile anche se penso sia meglio un piccolo alimentatore,più che altro per la corrente a disposizione,due motori più un servo sd il resto danno poca autonomia.

E' un robot su ruote. Attaccarlo con un alimentatore alla rete non mi sembra conveniente.

E' un robot su ruote. Attaccarlo con un alimentatore alla rete non mi sembra conveniente.

Hai ragione ,era solo per vedere se si risolveva la situazione e poi si modificava il pacco pile.
:grin: ahaha ,non pensavo ad una proluuunga :grin:
Ciao.

Grazie ragazzi. Le varie prove fatte a livello software ancora non mi hanno dato risultati positivi.
Proverò ad aumentare l'alimentazione e vi farò sapere.

Per la parte software ti vanno in conflitto i PWM, li usa sia il driver dei motori che la libreria servo.
Prova a vedere se è possibile impostare le librerie su timer diversi.

PaoloP:
Per la parte software ti vanno in conflitto i PWM, li usa sia il driver dei motori che la libreria servo.
Prova a vedere se è possibile impostare le librerie su timer diversi.

Perdona l'ignoranza. Che si intende per impostarli su timer diversi? Come posso farlo?

Ogni timer controlla 2 pin PWN:
Al timer0 sono collegati i pin 5 e 6.
Al timer1 i Pin 9 e 10 e al timer2 il pin 11 e 3.
Adesso non so' che libreria usi per il driver dei motori, ma devi controllare che timer usa in modo da spostare i servi sugli altri cambiando i pin dove sono attaccati.

Come ha detto PaoloP io mi concentrerei sul software sembra essere li il problema principale. In genere disturbi sull'alimentazione resettano il micro, e questo nel tuo caso non accade, per cui occupati del software e poi in un secondo momento di aggiungere una pila, perchè è sicuro che il regolatore di arduino non lavora per niente bene. Comunque misura la tensione della pila carica al massimo, questa dovrebbe essere superiore al valore nominale di poco.

Ciao.

Ancora non ho potuto provare a modificare la questione dei timer, però se ho ben capito devo semplicemente fare in modo che servo e driver non utilizzino PWM con medesimo timer.

La cosa così su due piedi mi fa venire in mente che il servo l'avevo attaccato al pin 10, mentre al 9 ( che da quanto appreso è regolato sullo stesso timer) è collegato proprio PWM relativo al motore che rimane fermo.

Tutto ciò comincia ad avere senso anche per me.

Vi farò sapere se gestendo quesa cosa dei timer risolvo.

Grazie della dritta.

Ok ragazzi. È stato sufficiente appoggiare driver e servo su timer diversi perché Arduino riuscisse a gestire tutto.
Problema risolto :wink: