Sei sulla pagina 1di 10

CORSO L2

ARDUINO UNO
Scheda Hardware & Software

2 – Motore in continua
Schede controller

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 1 Materiale didattico L2


Indice
 Panoramica sulle tipologie di motori elettrici
 Motore passo-passo (step motor)
 Motori DC brushless
 Motori DC per muovere un robot
 Specifiche tecniche del motore a due assi 6V DC Smart-Car
 Connessioni del motore con un Transistor (e prova con Arduino)
 Con transistor e regolazione di velocità
 Motore DC pilotato da un ponte H
 Shield Arduino Motor R3

Panoramica sulle tipologie di motori elettrici
I motori elettrici rappresentano uno dei più comuni ed usati attuatori anche nei progetti realizzati
con Arduino. I motori danno movimento a innumerevoli applicazioni in cui è necessario generare
un movimento rotatorio. Con semplici dispositivi meccanici è poi facile trasformare anche il
movimento rotatorio in altri tipi di movimento.
Di motori elettrici possiamo distinguere 2 principali categorie:
 Motori alimentati in corrente continua DC, che possono essere con o senza spazzole
(brushless), oppure passo-passo (chiamati anche stepper)
 Motori alimentati in corrente alternata AC, che possono essere sincroni o asincroni

Motore passo-passo
E’ un tipo di motore molto usato, è può essere
tranquillamente essere pilotato da Arduino.
Quando si pensa ad un progetto, resta più difficile
comprendere quando è il caso di preferire tale tipo di
motore, rispetto a quelli in corrente continua.
Il motore passo-passo spesso chiamato
anche step o stepper è un motore elettrico sincrono
in corrente continua senza spazzole che può suddividere la
propria rotazione in un grande numero di step. La posizione
del motore può essere controllata accuratamente senza dover ricorrere al controllo ad anello
chiuso (feedback) se la taglia ed il tipo di motore sono scelti in modo adeguato all’applicazione.
Trovano il loro miglior impiego nei progetti in cui hai bisogno di controllare in modo accurato la
posizione dell’albero. Alcuni esempi:
 stampanti 3D
 macchine a controllo numerico o Cnc
 robotica per controllo bracci
 dolly photo e photo lazy (in ambito di riprese cinematografiche)
In pratica si ricorre ad un motore passo-passo tutte le volte che in un progetto serve sapere la
posizione meccanica del pezzo senza l’utilizzo di altri sensori o sistemi di verifica.
In un motore passo passo le caratteristiche sono fornite dal costruttore: quale è il numero di passi
che il motore impiega a compiere 360°, di conseguenza si può ricavare l’angolo percorso ad ogni
passo ( 360°/passi ) per cui in un Dolly Photo in cui imposti il numero di passi da eseguire prima di
ogni scatto puoi lasciar lavorare la macchina fotografica e conoscere in qualsiasi momento quanti
scatti sono stati eseguiti semplicemente sapendo quanti passi ha già fatto.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 2 Materiale didattico L2


Motori DC brushless
I motori brushless sono i motori in continua senza spazzole.
La loro costituzione prevede che il campo magnetico sia
generato sul rotore mentre sullo statore viene fissata
l'armatura.
L'accoppiamento collettore-spazzole viene sostituito da un
commutatore elettronico che inverte la polarità della
alimentazione per ogni mezzo giro (180°) effettuato dal
rotore; l'eliminazione di questo sistema rende questo tipo di
motore meno rumoroso e di più semplice manutenzione
rispetto a quello ad eccitazione indipendente.
La posizione del rotore rispetto allo statore viene rilevata da
un sensore magnetico che comanda la tensione di alimentazione degli avvolgimenti dello statore
in funzione della posizione del campo generato dal rotore.
La tensione erogata dal sensore è massima quando le linee di flusso del campo sono
perpendicolari alla superficie del sensore; in tale circostanza, la polarità della tensione si inverte,
invertendo il campo. Come nel caso del motore ad eccitazione indipendente si ha una inversione
di corrente negli avvolgimenti di armatura ad ogni 180° di rotazione del rotore.
In figura è riportato uno schema bipolare dove vi è un unico avvolgimento statorico (unipolare)
che assume due polarità magnetiche opposte a secondo del verso di percorrenza della corrente
erogata dai due amplificatori di potenza (norton) che eseguono la commutazione (fra le loro due
tensioni di saturazione inferiore e superiore) comandati dal circuito di controllo, collegato al
sensore. Uno schema bipolare, non garantisce una coppia uniforme e viene realizzata solo per
piccoli motori a coppia costante, come le ventole dei computer o i motori-driver dei dischi.

Motori DC per muovere un robot


I motori a corrente continua (DC
dall'inglese direct current) sono alimentati
solo da una copia di fili (positivo e negativo).
All’interno è presente una parte che gira
detta rotore o armatura, e una parte fissa che
genera un campo magnetico (nell’esempio i
due magneti colorati) detta statore. Un
interruttore rotante detto commutatore o
collettore a spazzole inverte due volte ad ogni
giro la direzione della corrente elettrica che
percorre i due avvolgimenti generando un campo magnetico che entra ed esce dalle parti
arrotondate dell’armatura. Nascono forze di attrazione e repulsione con i magneti permanenti
fissi. Le spazzole comportano però una dissipazione di energia.
In ogni caso i motori – a prescindere dalla tipologia - assorbono una corrente che Arduino non è in
grado di erogare dai suoi pin: per questo si usano uno o più componenti di collegamento che
permettono di pilotare in modo opportuno il motore: può essere un transistor di potenza, oppure
un ponte H .

I motori alimentati in corrente continua sono particolarmente indicati nei progetti in cui occorre:
 la rotazione continua
 360° di movimento continuo
 elevata velocità o coppia ( motoriduttori )
 controllare la velocità di rotazione

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 3 Materiale didattico L2


In pratica con un motore in corrente continua si possono realizzare:
 le ruote di un robot;
 un azionamento meccanico mediante trasmissione a cinghia o ruote dentate;
 uno slider per telecamera;
 una avvolgi tenda o tapparella;

Specifiche tecniche del motore a due assi 6V DC Smart-Car


Adatto in modo particolare per giocattoli elettronici, robot e modellismo.
Può essere alimentato con una tensione variabile tra 3 e 6 V.
Naturalmente questo determina pure una variazione del numero di giri al
minuto dell’asse del motore.
Materiale: plastica gialla
Dimensioni: 7.1 x 2 x 2.1 cm
Tipologia: Motore a velocità variabile biassiale,
con protezione anti-interferenza
Tensione a vuoto senza carico velocità a vuoto
Alimentazione 6V  giri al minuto 200 ± 10% - corrente ≤ 200 mA
Alimentazione 3V  giri al minuto 90 ± 10% - corrente ≤ 150 mA
E’ evidente che con assorbimenti di corrente come quelli indicati Arduino non può pilotare
direttamente un motore. Serve un dispositivo di controllo che fornisca la potenza adeguata.

Connessioni del motore con un Transistor


Il modo più semplice per far girare un motore DC è
usare un transistor, se riesci a procurartene uno, usa
un transistor darlington TIP120, altrimenti va bene
un generico NPN.
Il transistor funge da interruttore elettronico:
applicando la tensione di 5V sulla base tramite un
pin digitale di Arduino, emettitore e collettore
vengono "connessi", cortocircuitati, permettendo
così il passaggio della corrente. Il motivo per cui è necessario un transistor che preleva la tensione
da un connettore esterno è che può sopportare correnti di centinaia di milliAmpere, a differenza di
un pin di Arduino che ne può erogare solamente alcune decine, insufficienti a far ruotare un
motore. Questo metodo è vantaggioso perché richiede un solo pin di Arduino, ma può far girare il
motore in una sola direzione.
Vediamo un primo circuito con un transistor e un pulsante: il programma manterrà il motore
acceso finché il pulsante è premuto.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 4 Materiale didattico L2


Analizziamo i collegamenti: la base del transistor è collegata al pin 9 attraverso una resistenza, che
nello schema vale 1kΩ; l'emettitore a massa; il collettore ad un piedino del motore; l'altro
terminale del motore va connesso ad un'alimentazione esterna, come una batteria. Ai due
terminali del motore è necessario inoltre collegare un diodo, con polarità contraria a quella della
corrente che lo alimenta: serve per evitare cortocircuiti mentre il motore rallenta o in caso venga
ruotato manualmente. Infine, colleghiamo un piedino del bottone al pin 2 di Arduino e l'altro
piedino a massa.

Questo è il listato di Arduino per il circuito sopra.

1. const int bottone = 2; // pin del bottone


2. const int motore = 9; // pin del motore
3.
4. void setup() {
5. // inizializza il bottone come input con pull-up
6. // e il motore come output
7. pinMode(motore, OUTPUT);
8. pinMode(bottone, INPUT_PULLUP);
9. }
10.
11. void loop(){
12. // Il motore ha lo stesso stato del bottore,
13. // ovvero se premi il bottone, il motore gira
14. digitalWrite(motore, digitalRead(bottone));
15. }

Con transistor e regolazione di velocità


Un secondo esempio, mostra come è possibile modulare la velocità del motore grazie
il PWM ruotando un potenziometro, collegato al pin analogico A0:

1. const int potenziometro = 0; // pin del potenziometro


2. const int motore = 9; // pin del motore
3.
4. void setup() {
5. // inizializza il motore come output
6. pinMode(motore, OUTPUT);
7. }
8.
9. void loop(){
10. // Riporta il valore analogico da 0-1023 a 0-255
11. byte valore = map(analogRead(potenziometro),0,1023,0,255);
12. // Il motore gira con velocità proporzionale alla rotazione del potenziometro
13. analogWrite(motore,valore);
14. }

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 5 Materiale didattico L2


Motore DC pilotato da un ponte H
Il ponte H è un chip che contiene un po' di transistor di potenza e diodi di sicurezza, e consente di
pilotare due motori DC (in entrambi i versi). In questo esempio si usa un L293D, ma il
funzionamento è analogo per il SN754410NE, adatto per motori che richiedono più corrente.

Anche se i collegamenti dovrebbero essere chiari, è bene soffermarci su alcuni dettagli


importanti: l'alimentazione dei motori (motor supply, pin 8) non dovrebbe essere connessa ai 5V
di Arduino perché, come spiegato prima, non eroga corrente a sufficienza. Va invece collegato al
pin VIN, oppure ad una batteria esterna;
I pin di enable (1 e 9) servono per attivare i due motori: si presuppone che questi siano sempre in
funzione, per cui potrebbero essere collegati direttamente ai 5V; Infine, se si usa solo un motore,
basta omettere i pin che riguardano il motore2 (9-10-11-14-15);
Gli input controllano lo stato dei relativi output: il motore gira applicando segnali opposti sulla
coppia di input, e negli altri casi il motore è fermo.

Input 1 Input 2 Motore


HIGH LOW Senso "orario"
LOW HIGH Senso "antiorario"
LOW LOW Stallo
HIGH HIGH Stallo

1. #define motorel 9
2. #define motorer 10
3.
4. void setup() {
5. // inizializza il bottone come input
6. // e il motore come output
7. pinMode(motorel, OUTPUT);
8. pinMode(motorer, OUTPUT);
9. pinMode(bottone, INPUT);
10. }
11.
12. void loop(){
13. // Tenendo premuto il bottone si inverte il senso di rotazione
14. digitalWrite(motorel, digitalRead(bottone));
15. digitalWrite(motorer, !digitalRead(bottone));
16. delay(50); // Una piccola pausa per evitare "rimbalzi di segnale"
17. }

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 6 Materiale didattico L2


Anche con il ponte H puoi utilizzare i piedini PWM per variare la velocità dei motori.

Shield Arduino Motor R3


Dopo aver esaminato le differenti realizzazioni di
driver specifici per motori in continua, prendiamo
ora in esame lo shield di Arduino che implementa il
ponte H senza dover obbligarci a costruire il circuito
elettronico precedente.
Si tratta dello Shield Arduino Motor3, o shield
equivalente non originale. E’ basato su L298, un
driver full bridge doppio progettato per il comando
di carichi induttivi come relè, solenoidi, motori DC e
a passo. Consente di comandare 2 motori DC con la
scheda Arduino, con un controllo indipendente di
velocità e direzione di ciascuno. È inoltre possibile
misurare l'assorbimento di corrente di ciascun motore, oltre a varie ulteriori funzioni. Lo shield è
compatibile TinkerKit, pertanto consente di creare rapidamente progetti montando moduli
TinkerKit sulla scheda.

Specifiche tecniche
 Tensione di funzionamento: 5V a 12V
 Controller motori: L298P, controllo di 2 motori DC o 1
motore passo-passo
 Corrente massima: 2A per canale o 4A massima (con
alimentazione esterna)
 Rilevamento di corrente: 1.65V / A

Con un’alimentazione esterna lo shield può fornire fino a 12V e 2A per canale motore o 4A su un
singolo canale. L’obiettivo è quello di realizzare il “kit di robotica di base” e per contenere i costi
farò uso, per questa prima versione, di comunissimi motorino DC, come quelli riportati
nell’immagine che segue che possono essere acquistati a costi molto contenuti su qualsiasi store
cinese on-line. Certamente non aspettatevi prestazioni elevate, ma sono sufficienti per
incominciare.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 7 Materiale didattico L2


Questi motorini hanno un
assorbimento massimo di non più di
100 mA e tensione di alimentazione
tra i 3 e i 6V.
Il collegamento dei motorini deve
essere effettuato per ciascun
motorino al canale A e B come
riportato nell’immagine che segue.
Come potete notare esistono i due
ingressi Vin e GND su cui potrete
collegare un’alimentazione dedicata
esclusivamente al funzionamento dei
motori, ma se desiderate potete
tranquillamente alimentare motori e
scheda con la sola fonte di tensione
con cui alimentate la scheda Arduino, però non è la soluzione che io preferisco, perché
l’alimentazione separata permette di evitare che le batterie si scarichino velocemente in quanto si
trovano costrette ad alimentare sia il controllo (Arduino), che la potenza (motori), inoltre evita che
Arduino si possa danneggiare in quanto la quantità di potenza che il regolatore di tensione
potrebbe sopportare rischierebbero di essere troppo elevate.
Per evitare quindi possibili danni alla scheda Arduino su cui è montato lo shield, vi consiglio di
usare un alimentatore esterno che fornisce una tensione compresa tra 7 e 12V. Per effettuare
questa operazione bisogna effettuare una piccola modifica alla scheda, prevista dalle specifiche di
Arduino, che consiste nel tagliare il jumper “Vin Connect” posto sul lato posteriore dello shield così
come riportato nell’immagine che segue. Il limite massimo per la Vin è di 18V.

Lo shield motori è dotato di pin che sono utilizzati esclusivamente da esso ed impiegati all’interno
dei vostri sketch per comandare direzione (polarità) e velocità dei motori (PWM) ed ovviamente
arrestare, avviare i motori e monitorare l’assorbimento di corrente su ogni canale.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 8 Materiale didattico L2


La tabella che segue specifica come usare la scheda per pilotare i motori:
Funzione Canale A Canale B

Direzione pin digitale 12 pin digitale 13

Velocità
(PWM) pin digitale 3 pin digitale 11

Freno pin digitale 9 pin digitale 8

Assorbimento
Corrente pin analogico A0 pin analogico A1

Dalla tabella si comprende quindi che il motore collegato al canale A sarà controllato dai pin 12, 3,
9 ed il il motore collegato al canale B sarà controllato dai pin 13, 11, 8.
I pin di “Direzione” impostano il senso di rotazione, un valore HIGH permetterà la rotazione in un
senso, mentre un valore LOW permetterà la rotazione in senso opposto.
I pin “Velocità (PWM) consentono l’impostazione della velocità del motore, un valore pari
a 0 ferma i motori, un valore pari a 255 permette la rotazione alla massima velocità. Trattandosi di
un pin di tipo PWM valori intermedi tra 0 e 255 vi permetteranno di impostare velocità
intermedie.
Sugli ingressi Analogici A0 e A1 sarà prese una tensione proporzionale alla corrente assorbita da
ogni motore pari a 1.65V per ogni Ampere che viene assorbito.
Esempi
Dopo aver inserito il Motor Shields su Arduino, collegate Arduino mediante la porta USB al
computer ed aprite l’IDE di programmazione.
Prima di incominciare è opportuno eseguire per ogni motore tre passi che permettono la mesa in
moto del motore:
 Predisposizione della direzione di rotazione del motore (polarità dell’alimentazione) HIGH o
LOW. Ricordo che i motorini in CC utilizzati non hanno un positivo e un negativo, invertendo la
polarità i motori potranno girare in senso opposto.
 Portare a LOW il pin di brake della shield motori. Dovete immaginare il pin di brake come al
freno a mano dell’automobile, per poter muovere l’auto bisogna disattivare il freno a mano,
nel nostro caso disattivare corrisponde a LOW.
 Mettere in moto il motore impostando la velocità del
motore mediante il PWM (comando analogWrite)
sull’apposito pin.

Collegamento di 1 solo motore


Sul motor shield inserire i collegamenti del motore
rispettivamente sul morsetto positivo (+) del canale A ed il
morsetto negativo (-) del canale A.
Come indicato all’inizio di questo post l’alimentazione per il
motorino, da collegarsi su Vin e GND, non è indispensabile,
ma se utilizzata aumenta le performance del motorino, quindi
il mio consiglio è quello di utilizzare una fonte di
alimentazione esterna aggiuntiva e collegare il positivo della
batteria su “Vin” ed il negativo su GND.

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 9 Materiale didattico L2


Esempio 1: controllo di 1 motore sul canale A

1. // -------------------------------------------------
2.
3. // Controllo di un motore mediante
4. // l'Arduino Motor Shields R3
5.
6. // Avanti alla massima velocità
7. // Indietro a velocità 1/2 della velocità massima
8. // -------------------------------------------------
9.
10. void setup() {
11. // Impostazione canale A
12. pinMode(12, OUTPUT); // Inizializzazione del pin direzione del motore canale A
13. pinMode(9, OUTPUT); // Inizializzazione del pin brake del motore canale A
14. }
15.
16. void loop() {
17.
18. // direzione in avanti alla massima velocità
19.
20. digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore canale A
21. digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
22. analogWrite(3, 255); // Massima velocità del motore collegato al canale A
23.
24. delay(3000); // tempo di rotazione in avanti
25.
26. digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
27.
28. delay(1000); // tempo di stop del motore
29.
30. // direzione indietro con velocità metà della velocità massima
31.
32. digitalWrite(12, LOW); // Impostazione della direzione “indietro” motore al canale A
33. digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
34. analogWrite(3, 127); // Metà della velocità massima del motore collegato al canale A

35.
36. delay(3000); // tempo di rotazione in avanti
37.
38. digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
39.
40. delay(1000); // tempo di stop del motore
41. }

IIS Aldini Valeriani Sirani - ROBOTS project Scheda 2 # 10 Materiale didattico L2

Potrebbero piacerti anche