Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
ARDUINO UNO
Scheda Hardware & Software
2 – Motore in continua
Schede controller
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.
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
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. }
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.
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.
Velocità
(PWM) pin digitale 3 pin digitale 11
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.
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. }