Pilotare un motorino in continua con Arduino

Vorrei pilotare un piccolo motorino in continua con Arduino, non ho le caratteristiche tecniche, comunque sono quelli che si usano per i modelli RC e che funzionano con le pile stilo.

Dato le basse caratteristiche del motorino, pensavo che collegando un polo a GND e l'altro ad una delle uscite digitali di Arduino sarei riuscito a farlo funzionare, invece, con mio stupore, il motorino non si muove.

Se lo collego a 3.3V ed a GND, ovviamente va, ma non riesco a farlo partire via software settando a HIGH una delle uscite digitali.

Ad esempio, questo stupid sketch, non me lo fa azionare:

//Dc motor example code//
int motorpin1 = 12;                  //define digital output pin no.

void setup ()
{
  pinMode(motorpin1,OUTPUT);        //set pin 3 as output
 
}
void loop ()
{
  digitalWrite(motorpin1,HIGH);
 
}

Devo per forza utilizzare un driver apposito oppure è perchè Arduino non ha abbastanza corrente?
Non riesco a capire..

Per fargli cambiare direzione, avevo pensato di fare così:

//Dc motor example code//
int motorpin1 = 3;                  //define digital output pin no.
int motorpin2 = 4;                  //define digital output pin no.
void setup ()
{
  pinMode(motorpin1,OUTPUT);        //set pin 3 as output
  pinMode(motorpin2,OUTPUT);        // set pin 4 as output
}
void loop ()
{
  digitalWrite(motorpin1,LOW);
  digitalWrite(motorpin2,HIGH);
}[code]
switchando poi tra HIGH e LOW a seconda della necessità.
Solo che comunque non mi funziona.

[/code]

Ciao

sì devi usare un driver per motori DC, con i pochi mA che Arduino ha a disposizione sulle uscite digitali riesci a muovere veramente solo piccolissimi motori...

Ciao..si hai pensato bene..le porte di uscita del microprocessore non supporta correnti se non sbaglio sopra i 100 milliampere mentre l'uscita 3.3v è direttamente in uscita dal regolatore di tensione quindi supporta correnti un po' più elevate...nel primo caso non gira perché non ha neanche la corrente di spunto per partire...se tu dovessi farlo girare in un solo senso potresti usare un transistorino senno devi valutae di comprare un motor shield...

Però il servo che uso riesco a pilotarlo tranquillamente tramite l'uscita pwm e la libreria per i servi.

Il motorino, invece, non ne vuole proprio sapere.

Quindi, insomma, le soluzioni sono due: o prendo un motor shield, oppure utilizzo un transistore per pilotare il motorino direttamente con l'uscita 5V e GND di arduino dando il segnale al transistore tramite un pin della scheda.

non c'è bisogno di un motor shield per forza...se il motore è un semplice brushless( o uno stepper) puoi usare un driver tipo l293d...
http://scuola.arduino.cc/it/content/controlla-motore-dc-ponte-h-l293d qui c'è una guida su come usarlo
:wink: puoi pilotare due brushless o uno stepper usando una tensione di riferimento esterna.

ciao
igor

EDIT: il servo non usa la corrente dei pin digitali ma di quella del regolatore interno infatti la massa e il +5volt sono collegati ai pin d'alimentazione di arduino....col pin digitale controlli solo il movimento

Il motorino è questo qui: http://www.robot-italy.com/product_info.php?cPath=88&products_id=1013

credo abbia le spazzole.

Posso pilotarlo ugualmente con quell'integrato?

tu al servo dai solo il segnale di controllo tramite arduino, l'alimentazione è su un altro PIN immagino direttamente connesso a 5V.

si è un brushless....lo puoi tranquillamente controllare con quell'integrato...leggiti la guida che è molto semplice :wink:

lucadentella:
tu al servo dai solo il segnale di controllo tramite arduino, l'alimentazione è su un altro PIN immagino direttamente connesso a 5V.

Si, si è vero.

Niente allora, non avevo calcolato che il motore assorbisse più corrente di quanta riesce ad erogarne Arduino.

Secondo voi, con l'integrato L239d riesco a pilotare il motorino del link precedente anche se è (come penso) con le spazzole?

igor97:

[quote author=marcus barnet link=topic=94718.msg711418#msg711418 date=1330718122]
Il motorino è questo qui: http://www.robot-italy.com/product_info.php?cPath=88&products_id=1013

credo abbia le spazzole.

Posso pilotarlo ugualmente con quell'integrato?

si è un brushless....lo puoi tranquillamente controllare con quell'integrato...leggiti la guida che è molto semplice :wink:
[/quote]

Ma non ha le spazzole il motorino del link?

La guida l'avevo letto ed è molto ma molto semplice, domani vedo se riesco a recuperare quell'integrato! Spero sia un integrato così comune da poterlo trovare da un qualsiasi rivenditore..

Ma non ha le spazzole il motorino del link?

La guida l'avevo letto ed è molto ma molto semplice, domani vedo se riesco a recuperare quell'integrato! Spero sia un integrato così comune da poterlo trovare da un qualsiasi rivenditore..
[/quote]

innanzitutto ad occhio vedendo solo 2 pin capisci che è un brushless( o spazzole come dici tu) e comunque l'integrato lo trovi da molti rivenditori :wink: potresti anche optare per l293b che è uguale

Sono ignorante in materia.

Io credevo che brushless significasse senza spazzole, ma se smonto il motorino vedo che i due contatti terminano su due lamierini che mi sembrano delle spazzole e che strisciano sull'albero motore.

Per questo motivo stavo insistendo.. ma se è come dici sto più tranquillo! :slight_smile:

Giusto per correttezza, "brushless" significa "senza spazzole"...il motorino in questione è un semplice motore a spazzole(brushed). L'293 è un'integrato comunissimo, in alternativa puoi usare l' SN754410.

Davide311:
Giusto per correttezza, “brushless” significa “senza spazzole”…il motorino in questione è un semplice motore a spazzole(brushed). L’293 è un’integrato comunissimo, in alternativa puoi usare l’ SN754410.

L’integrato va bene anche per un brushed, quindi?

Sisi, va benissimo, su internet trovi una valanga di schemi e codici per arduino (tra cui quello che ha messo igor, fatto bene). Non va bene invece per i brushless, che hanno 3 pin...penso che igor97 si sia confuso :wink:

:open_mouth: madoooo ma sono stato fregato allora...ti chiedo scusa ma quando imparai qualcosa sui motori su un sito c'era scritto che il brushless era quello con le spazzole.....ora mi sentono xD
cmq con quel driver puoi pilotare tutti i tipi di motori..poi ovviamente ogni l293 ha una propria corrente max in usicta

Il motore non è un brushless, è un normalissimo motore a spazzole, lo puoi pilotare con un integrato come il 293 oppure se non hai necessità di controllare la direzione di rotazione puoi benissimo usare un transistor con il quale puoi controllare la velocità di rotazione usando un uscita pwm di arduino.

Bisogna vedere quanto assorbe in termini di corrente per capire che transistor usare, se non supera i 500mA va benissimo un 2n2222, accompagnato da un condensatore ceramico da 0,1uF e un diodo come 1n4007.

Più tardi ti posto uno schema.

Ciao

Purtroppo mi servirebbe controllare la direzione e mi sa che con il solo transistore non posso.

MA non posso prendere due uscite di arduino e settarle LOW ed HIGH e poi invertirle da software per fargli cambiare direzione utilizzando due transistori?

ma non puoi con solo 2 transistor..al limite due per porta...il driverr che ti ho detto fa proprio questo.se tu mandi LOW e HIGH allora il motore gira in una direzione se mandi HIGH e LOW al contrario quindi, il motore va al contrario
e comunque con questo integrato ho scoperto che agendo sui pin enable si può variare anche la velocità :smiley:

Se hai preso esattamente quel motore da robot-italy, si capisce solo che consuma più di 700mA in stallo. Non so se si riesce a pilotare a transistor, con l'293 sì di sicuro.

Per cambiare direzione, con l'integrato puoi fare come hai detto te, con i transistor non lo so :cold_sweat: