Pages: [1] 2   Go Down
Author Topic: Problema gestione dei motori di un robot  (Read 1181 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve  tutti.
Mi scuso in anticipo se ho sbagliato sezione, ma sono nuovo del forum e del mondo arduino.
Scrivo perchè da poco ho iniziato un progetto  che riguarda la modifica di un piccolo ragno giocattolo, il quale utilizza due motorini elettrici, uno per muovere le zampe di destra e uno per quelle di sinistra,ogni motore era alimentato da una pila a 1.5Vla mia idea  era quella di utialzare un sensore  di prossimità per fare cambiare direzione al robot quando incontra un ostacolo tutto controllato con arduino.
Per questo ho utilizzato un sensore Sharp 2D120XF e un L293D per la gestione dei motori.
Il problema è che ora i due motori alimentati attraverso il L293D non riesco più ad avere la forza necessaria per muovere le zampe del robot (cosa a mio avviso strana inquanto prima erano alimentati a 1.5v mentre adesso sono alimentati a 5v) allego le foto del modello del giocattolo e i miei collegamenti per essere più preciso . Mi potreste gentilmente dire dove ho sbagliato ho che allora soluzione potrei adottare grazie in anticipo.


* CAMBLAGGIO RAGNO DI PLASTICA_bb.jpg (1095.8 KB, 2997x2121 - viewed 56 times.)

* 445685246_219.jpg (48.51 KB, 800x600 - viewed 32 times.)

* hjkl.jpg (56.12 KB, 600x600 - viewed 32 times.)
« Last Edit: July 10, 2013, 04:12:24 pm by leo72 » Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ad occhio I tuoi motorini assorbono circa 100mA ciascuno ed in fase di spunto almeno due volte tanto.

Ma tutto questo con una tensione di 1.5V: triplicandola hai anche triplicato questo assorbimento.

Arduino può erogare al massimo 500mA @ 5V e 50mA @ 3.3V

Ti conviene usare un regolatore di tensione switching tarato a 1.5V anche per evitare che i motori si brucino.

Ricordati anche di inserire i diodi di protezione!

Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in sostanza devi fornire un'alimentazione esterna ai motori e potresti anche farlo sfruttando in questo modo il pacco di batterie del robot stesso
Logged

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

grazie per le vostre risposte.
volevo anche chiedere perche se collego i motori direttamnte ai 5V (non utilizzando il L293D ) questi funzionano alla perfezzione ??
sciorty mi potresti disegnare i collegamenti che devo fare per alimentare esternamente tutti e due i motori(con ogni motore alimentato da una singola pila a 1.5V) e quali sono le uscite per il rispettivo controllo di entrambi i motori ?
perché non riesco proprio a capire come funziona la logica del L293D smiley-sad

« Last Edit: July 11, 2013, 09:54:25 am by sempre93 » Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'293D è un doppio ponte h, il che significa che al suo interno dispone di due circuiti che saranno più o meno così. Lo si usa perchè non puoi collegare i motori direttamente ai pin di arduino per varie ragioni (troppo assorbimento, induttanze e robe varie..), quindi c'è la necessità di alimentare i motori da un altra fonte e di usare l'arduino per aprire e chiudere questa fonte e quindi anche direzionare le polarità per i sensi di rotazione. Quello che deve fare l'arduino quindi non è altro che dare un segnale che apra o chiuda i transistor. Se sono tutti accesi o tutti spenti non ci sarà differenza di potenziale ai capi del motore e risulterà quindi spento.

L'integrato si aspetta l'ingresso dell'alimentazione esterna sul piedino 8. Capirai quindi che l'alimentazione che l'integrato in questione fornisce ai due motori è la stessa, considerandoli collegati in parallelo (correggetemi se sbaglio)
Logged

Selvazzano Dentro - Padova
Offline Offline
God Member
*****
Karma: 28
Posts: 931
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Piccola correzione a quanto detto precedentemente.

La differenza sostanziale tra 293 e 293D è che nel secondo sono già presenti i diodi di clamp il che semplifica notevolmente il cablaggio: se stai usando questo ultimo integrato, i diodi che ti ho raccomandato non sono necessari.

La seconda differenza è la piedinatura: nel primo ci sono 4 (2 per parte) piedini di ground, mentre le secondo i pin sono 6 (3 per parte).

Non sono solamente riferimenti elettrici, ma servono anche a dissipare il calore collegati ad una aletta di raffreddamento oppure allo stesso piano di massa del PCB.
Logged

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

Sto facendo delle prove per cercare di capire megli ma sopratutto per cercare di farlo funzionare,Ho provato a fare i  collegamenti per alimentare i motori esternamente attraverso le due stilo come si vede nello schema di sciorty ma anche in questo modo l'unico motore collegato per la prova non da segno di volersi muovere.
Arrivato a  questo punto mi viene da pensare che forse sbaglio anche il programma. Ho scritto un minuscolo programma giusto per vedere se il motore era in grado di ruotare ma niente potreste gentilmente dare un occhio anche a quello che ho scritto ??
Code:
int M2o=4;
 int M2a=2;
 int M=9;
 
 void setup() {
 pinMode(M2o,OUTPUT);
 pinMode(M2a,OUTPUT);
 pinMode(M,OUTPUT);
 }
 
 void loop() {
   digitalWrite(M,HIGH);
    digitalWrite(M2a,LOW);
    digitalWrite(M2o,HIGH);
 }

tornando ai componenti il motor drive di cui dispongo è questo http://www.robot-italy.net/downloads/ST-L293D.pdf.


* CAMBLAGGIO RAGNO DI PLASTICA_bb.jpg (656.1 KB, 2337x1320 - viewed 29 times.)
« Last Edit: July 11, 2013, 02:13:00 pm by sempre93 » Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se hai fatto come nello schema, a parte 5v e massa assieme nella pista in alto, dovrebbe funzionare.. ammesso che il motore funzioni e che la tensione che gli dai sia sufficiente.
Hai provato giusto per curiosità a collegare motore ed il pacco di batterie che usi per vedere cosa succede?
Logged

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

Si,si collegando i motori direttamente al pacco batterie o direttamente ad Arduino funziona perfettamente.
Non so più cosa fare mi esistono magari altre soluzioni per gestire il funzionamento e il senso do rotazione di due motori contemporaneamente???
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Magari avrai semplicemente bruciato il driver, se ne hai la possibilità provane un altro!
Logged

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

Oggi se riesco Ne compro uno nuovo. Cosa non devo assolutamente fare per bruciate un nuovo driver??
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sicuramente non collegarci motori che assorbano più della corrente nominale.. poi fare attenzione alle polarità dell'alimentazione!
Logged

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

Se il motor driver fosse bruciato non andrebbe proprio verro?
Perché  quando faccio i collegamenti come nell'immagine del primo post che ho pubblicato i motori girano ma non hanno la forza di spostare niente.
A parte la poca forza dei motori sto provando a scrivere il programma. Ho un altro dubbio riguardo all’ utilizzo del sensore di prossimità  http://www.sparkfun.com/datasheets/Sensors/Infrared/GP2D120XJ00F_SS.pdf  questo è il programma che sto scrivendo
 
Code:
int M1a=11; // motore di sinistra movimento zampe  avanti
 int M1i=10; // motore di sinistra movimento zampe indietro
 int M2a=5; // motore di sinistra movimento zampe  avanti
 int M2i=6; // motore di sinistra movimento zampe indietro
 int distanza  =0;
 
 void setup() {
 pinMode(M1i,OUTPUT);
 pinMode(M1a,OUTPUT);
 pinMode(M2i,OUTPUT);
 pinMode(M2a,OUTPUT);
}

 void loop() {
 distanza= analogRead(A0);
 digitalWrite(M1i,LOW);
 digitalWrite(M2i,LOW);
 digitalWrite(M1a,HIGH); // avanzamento del robot
 digitalWrite(M2a,HIGH); 
 if( distanza  >=900){
 digitalWrite(M1i,LOW);
 digitalWrite(M2a,LOW);
 digitalWrite(M2i,HIGH);
 digitalWrite(M1a,HIGH); //rotazione di 90°
 delay(2000);
 distanza= analogRead(A0); }
 }
il mio problema è che il programma entra nel ciclo if quando il sensore arriva a 5cm da un oggetto mentre a me servirebbe che entrasse nel ciclo if quando si trova ad una distanza di 10cm ho provato ha modificare il valore della condizione del if ma l'unica condizione che funzione è 900(già abbastanza strana ) per qualsiasi altro numero che scrivo entra nel ciclo if indipendentemente dalla distanza del sensore dall'oggetto. Cosa sbaglio??

« Last Edit: July 12, 2013, 12:24:29 pm by sempre93 » Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 723
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se il motor driver fosse bruciato non andrebbe proprio verro?
Perché  quando faccio i collegamenti come nell'immagine del primo post che ho pubblicato i motori girano ma non hanno la forza di spostare niente.

Questo è strano! Allora il problema sta nella tua alimentazione esterna.. Se hai le specifiche dei motori, almeno Vmax, puoi provare con un'altro pacco di batterie, magari la stessa con cui alimenti arduino.

Comunque per misurare la distanza in cm non basta un semplice analogRead, quindi spiega meglio come proporzioni il dato "crudo" dell'analogRead alla distanza in cm smiley
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

come dice sciorty, non basta un semplice analogread.

se guardi il datasheet vedrai che il segnale di uscita non e' lineare
dai un'occhiata a questo link
http://www.gioblu.com/tutorials/sensori/122-il-sensore-sharp-gp2d12-per-la-misura-della-distanza
Logged

Pages: [1] 2   Go Up
Jump to: