In questo tutorial imparerai come controllare un motore passo-passo usando un telecomando IR. I motori passo-passo sono ampiamente utilizzati in varie applicazioni, come robotica, macchine CNC e stampanti 3D, grazie al loro controllo preciso e alla capacità di muoversi in piccoli incrementi. Combinando il motore passo-passo con un telecomando IR, possiamo creare un sistema di controllo wireless per i nostri progetti.
Utilizzeremo il ULN2003 modulo driver per interfacciare il motore passo-passo con Arduino. L’ULN2003 è un chip driver popolare che semplifica il controllo dei motori passo-passo fornendo l’amplificazione di corrente necessaria e circuiti di protezione. Ci permette di controllare il motore passo-passo usando solo pochi pin digitali di Arduino.
Per il motore passo-passo, utilizziamo un 28byj-48 motore passo-passo. È molto economico, compatto e funziona a 5-12 Volt, il che lo rende facile da integrare con Arduino e progetti alimentati a batteria.
Alla fine di questo tutorial, avrai una chiara comprensione di come collegare i componenti, scrivere il codice Arduino e controllare il motore passo-passo usando un telecomando IR. In particolare, saremo in grado di controllare la velocità e la direzione del motore e avremo anche la funzionalità di pausa.
Allora, iniziamo!
Componenti Necessari
Di seguito trovi i componenti necessari per questo progetto. Se hai già un telecomando IR, non avrai bisogno del Kit Ricevitore IR, ma solo del Modulo Ricevitore IR. Tuttavia, non tutti i telecomandi IR sono adatti. D’altra parte, se acquisti o possiedi il Kit, non avrai bisogno del Modulo Ricevitore IR, poiché è incluso nel Kit.

Arduino Uno

Set di fili Dupont

Breadboard

Cavo USB per Arduino UNO

Modulo Ricevitore IR

Kit Ricevitore IR

Motore Passo-Passo

Arduino IDE
Collegamento dei Componenti
In questa sezione collegheremo i componenti ad Arduino. Dovrai collegare i pin di uscita di Arduino al modulo driver, che a sua volta è collegato al motore passo-passo. Poiché il motore passo-passo consuma più energia di quella che Arduino può fornire, aggiungiamo una breadboard con un’alimentazione aggiuntiva. La breadboard ospiterà anche il sensore IR, che deve essere collegato all’alimentazione e a un pin di ingresso di Arduino. L’immagine sottostante mostra il cablaggio completo.

Collegamento del Motore Passo-Passo e del Driver
Iniziamo collegando il motore passo-passo alla scheda driver.
Il motore passo-passo 28byj-48 solitamente viene fornito con un connettore che si inserisce direttamente nella presa sulla scheda driver. Basta collegarlo. Si inserirà solo in un verso.

Successivamente, colleghiamo i segnali di ingresso del driver del motore ai pin di uscita della scheda Arduino:

La tabella seguente elenca i pin corrispondenti:
| Arduino | Modulo driver |
|---|---|
| Pin 12 | IN1 |
| Pin 11 | IN2 |
| Pin 10 | IN3 |
| Pin 9 | IN4 |
Completiamo il cablaggio del driver collegando l’alimentazione della scheda driver alla breadboard. Assicurati che il filo rosso colleghi l’ingresso positivo della scheda driver alla linea di alimentazione positiva sulla breadboard (contrassegnata da una linea rossa). Il filo nero collega il lato negativo a terra (GND).

Collegamento dell’Alimentazione Aggiuntiva
Per alimentare un motore passo-passo di solito serve più potenza di quella che una scheda Arduino può fornire. Perciò colleghiamo un’alimentazione aggiuntiva (ad esempio una batteria da 9V) alla breadboard. Vedi il connettore sotto:

NON alimentare il motore passo-passo direttamente dall’uscita 5V di Arduino! Potresti danneggiare il regolatore di tensione della tua scheda.
Collegamento del Sensore IR
Ora, posizioniamo il sensore a infrarossi (IR) sulla breadboard e lo colleghiamo. Il pin negativo è contrassegnato con il segno (-). Usiamo un filo nero per collegare questo pin alla linea di terra della breadboard. Ciò significa che il sensore e la scheda driver condividono la stessa massa.

Il pin centrale del sensore è solitamente il positivo. Dobbiamo collegarlo all’uscita 5V di Arduino. Qui sotto vedi il filo rosso che va dal pin centrale del sensore IR all’uscita 5V della scheda Arduino.

NON collegare il pin centrale del sensore alla linea positiva della breadboard, poiché potrebbe essere a una tensione più alta! Inoltre, non collegare il 5V di Arduino alla linea positiva della breadboard. .
Tuttavia, dobbiamo assicurarci che il sensore e la scheda driver condividano la stessa massa. Perciò colleghiamo un filo nero dal pin GND di Arduino alla linea di alimentazione negativa della breadboard (contrassegnata da una linea blu. Vedi sopra).
Infine, colleghiamo il segnale di uscita del sensore IR, che è il pin contrassegnato con (S), al pin 8 di Arduino usando un filo bianco.
Le due cose più importanti da ricordare sono (1), non collegare l’alimentazione del motore passo-passo direttamente ad Arduino. Ma (2), collegare l’alimentazione del sensore IR ad Arduino. Ovviamente fai attenzione alla polarità corretta.
Scrivere il Codice Arduino
In questa sezione scriveremo il codice per controllare il motore passo-passo tramite un telecomando IR. In particolare, vogliamo poter controllare la velocità e la direzione del motore passo-passo. Inoltre, sarebbe utile poter fermare e avviare il motore con la pressione di un pulsante.
Il codice qui sotto fa tutto questo. Lo suddivideremo in parti e ne spiegheremo i dettagli nelle sezioni successive.
#include <IRremote.hpp>
#include <AccelStepper.h>
#define IR_RECEIVE_PIN 8
#define IN1_PIN 12
#define IN2_PIN 11
#define IN3_PIN 10
#define IN4_PIN 9
#define TYPE AccelStepper::HALF4WIRE
#define MAXSPEED 1000
#define MINSPEED 100
int currspeed = 500;
int prevspeed = 500;
int inc = 100;
int dir = +1;
// Note the pin order 1,3,2,4!
auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
stepper.setMaxSpeed(MAXSPEED);
}
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
prevspeed = currspeed;
currspeed = min(currspeed + inc, MAXSPEED);
} else if (command == 23) { // VOL-
prevspeed = currspeed;
currspeed = max(currspeed - inc, MINSPEED);
} else if (command == 21) { // MODE
dir = -dir;
delay(200);
} else if (command == 7) { // PLAY or PAUSE
currspeed = currspeed > 0 ? 0 : prevspeed;
delay(200);
}
IrReceiver.resume();
}
stepper.setSpeed(dir * currspeed);
stepper.runSpeed();
}
Installazione delle Librerie
Per prima cosa, ci servono due librerie. IRremote, che serve a leggere e interpretare i segnali inviati dal telecomando IR. E AccelStepper, che ci faciliterà il controllo del motore passo-passo. Se non hai già installato queste due librerie, dovrai installarle.
#include <IRremote.hpp> #include <AccelStepper.h>
Definizione delle Costanti
Successivamente definiamo le costanti che useremo nel resto del codice. Prima definiamo i pin per il sensore IR (PIN 8) e i quattro pin di uscita sulla scheda Arduino collegati ai pin di ingresso del driver del motore passo-passo (IN1_PIN, …, IN4_PIN)
#define IR_RECEIVE_PIN 8 #define IN1_PIN 12 #define IN2_PIN 11 #define IN3_PIN 10 #define IN4_PIN 9
Inoltre, dobbiamo indicare alla libreria stepper il tipo di motore passo-passo collegato (HALF4WIRE). Vogliamo anche specificare una velocità massima e minima (1000…100). Per maggiori dettagli vedi il nostro tutorial 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino.
#define TYPE AccelStepper::HALF4WIRE #define MAXSPEED 1000 #define MINSPEED 100
Definizione delle Variabili
Poiché vogliamo poter controllare la velocità del motore passo-passo, ci servono alcune variabili oltre alle costanti sopra. In particolare, servono la velocità attuale (currspeed), la velocità precedente del motore (lastspeed) e l’incremento (inc) per accelerare o rallentare il motore. Abbiamo anche una variabile dir, che può essere +1 o -1 e determina la direzione di rotazione.
int currspeed = 500; int prevspeed = 500; int inc = 100; int dir = +1;
Suggerimento: se vuoi cambiare la velocità del motore più velocemente o più lentamente, la variabile inc è quella da modificare.
Infine, creiamo l’oggetto motore passo-passo (stepper), che useremo per inviare comandi al motore.
auto stepper = AccelStepper(TYPE, IN1_PIN, IN3_PIN, IN2_PIN, IN4_PIN);
Nota che gli ingressi non sono IN ordine sequenziale ma nell’ordine 1, 3, 2, 4. È voluto!
La Funzione Setup
La funzione setup, dove inizializziamo la scheda, è molto semplice. Comunichiamo alla libreria del sensore quali pin sono usati per il sensore IR e impostiamo la velocità iniziale del motore passo-passo a MAXSPEED.
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
stepper.setMaxSpeed(MAXSPEED);
}
La Funzione Loop
Tutta l’azione avviene nel loop principale. Qui, aspettiamo il ricevitore IR. Se riceve un segnale da decodificare, lo decodifichiamo ed estraiamo il comando specifico inviato dal telecomando IR. A seconda del valore della variabile command , acceleriamo, rallentiamo, cambiamo direzione o alterniamo tra pausa e avvio.
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
prevspeed = currspeed;
currspeed = min(currspeed + inc, MAXSPEED);
} else if (command == 23) { // VOL-
prevspeed = currspeed;
currspeed = max(currspeed - inc, MINSPEED);
} else if (command == 21) { // MODE
dir = -dir;
delay(200);
} else if (command == 7) { // PLAY or PAUSE
currspeed = currspeed > 0 ? 0 : prevspeed;
delay(200);
}
IrReceiver.resume();
}
stepper.setSpeed(dir * currspeed);
stepper.runSpeed();
}
I codici comando sono associati a tasti specifici (Vol+->31, Vol–>23, Mode->21, Play/Pause->7) sul telecomando IR. Questa mappatura dipende dal telecomando IR che stai usando! Per scoprire quali tasti corrispondono a quali codici comando per il tuo telecomando, dai un’occhiata al nostro tutorial su How to use an IR receiver and remote with Arduino.
Ci sono alcuni dettagli interessanti nel codice. Innanzitutto, se acceleriamo, dobbiamo evitare di superare MAXSPEED. La funzione min() assicura questo. Analogamente, quando rallentiamo, usiamo la funzione max() per assicurarci di non scendere sotto MINSPEED.
Il cambio di direzione è semplice: ogni volta che premo MODE sul telecomando, il ricevitore IR legge il codice comando 21 e semplicemente cambiamo il segno della variabile dir . Nota che la variabile dir viene usata più avanti nel codice quando la velocità viene impostata tramite stepper.setSpeed(dir*currspeed), e determina la direzione di rotazione (+1 = orario, -1 = antiorario).
L’ultimo comando serve a alternare tra avvio e stop usando il tasto PLAY/PAUSE del telecomando. Qui usiamo un ternary condition (c ? a : b) per verificare se la velocità attuale è maggiore di zero. Se è così, significa che il motore è in funzione e impostiamo la velocità attuale a zero per fermarlo. Altrimenti, se il motore è fermo (velocità zero), impostiamo la velocità all’ultima velocità nota (prevspeed).
Applicazioni
Ci sono molte cose che puoi fare con un motore passo-passo controllato via IR. Ecco alcune idee divertenti e possibili applicazioni:
Tende o Persiane Automatiche
Usa il motore passo-passo per controllare l’apertura e la chiusura di tende o persiane in risposta ai comandi del telecomando IR. Può essere un’aggiunta comoda ai sistemi di domotica.
Braccio Robotico
Costruisci un piccolo braccio robotico controllabile con il telecomando IR. Il motore passo-passo può controllare il movimento del braccio, permettendogli di afferrare e manipolare oggetti.
Dispenser Automatico per Animali
Crea un dispenser automatico per animali che eroga cibo a orari specifici o in risposta ai comandi del telecomando IR. Il motore passo-passo può controllare il meccanismo di rilascio.
Sistema di Irrigazione per Piante
Costruisci un sistema che annaffia le piante automaticamente basandosi su un programma o su comandi del telecomando IR. Il motore passo-passo può controllare il flusso d’acqua o il movimento di un braccio irrigatore.
Apriporta per Garage
Usa il motore passo-passo per controllare l’apertura e la chiusura di una porta del garage in risposta ai comandi del telecomando IR. Può essere un’aggiunta utile a un sistema di domotica.
Aspirapolvere Robotico
Crea un piccolo aspirapolvere robotico controllabile con il telecomando IR. Il motore passo-passo può controllare il movimento dell’aspirapolvere, permettendogli di muoversi in una stanza.
Dispenser Automatico per Pesci
Costruisci un dispenser automatico per pesci che eroga cibo a orari specifici o in risposta ai comandi del telecomando IR. Il motore passo-passo può controllare il meccanismo di rilascio.
Serratura Intelligente
Usa il motore passo-passo per controllare la chiusura e l’apertura di una porta in risposta ai comandi del telecomando IR. Può essere un’aggiunta comoda a un sistema di domotica.
Apri Finestre Automatico
Crea un sistema che apre e chiude automaticamente le finestre in base alla temperatura o ai comandi del telecomando IR. Il motore passo-passo può controllare il movimento della finestra.
Barista Robotico
Costruisci un barista robotico che può mescolare e servire bevande in base ai comandi del telecomando IR. Il motore passo-passo può controllare il movimento del meccanismo di erogazione delle bevande.
Conclusioni
In questo tutorial abbiamo imparato come controllare un motore passo-passo 28byj-48 usando un telecomando IR e un driver ULN2003 con l’aiuto di una scheda Arduino. Seguendo i passaggi descritti in questa guida, ora dovresti essere in grado di integrare questi componenti nei tuoi progetti e creare movimenti precisi del motore.
Abbiamo iniziato raccogliendo le parti necessarie, inclusi il motore passo-passo 28byj-48, un telecomando IR, un driver ULN2003 e una scheda Arduino. Poi abbiamo collegato questi componenti insieme, assicurandoci che il cablaggio fosse corretto e sicuro.
Successivamente abbiamo scritto il codice Arduino per ricevere i segnali del telecomando IR e tradurli in movimenti specifici del motore. Utilizzando la libreria IRremote, siamo riusciti a catturare e interpretare facilmente i segnali inviati dal telecomando. Poi abbiamo usato il driver ULN2003 per controllare il motore passo-passo, fornendo la potenza e i segnali necessari per far muovere il motore nella direzione e velocità desiderate.
In conclusione, controllare un motore passo-passo 28byj-48 con un telecomando IR usando un driver ULN2003 è un progetto divertente e pratico che apre un mondo di possibilità per automazione e robotica. Che tu stia costruendo uno slider per fotocamera, un braccio robotico o qualsiasi altro progetto che richieda un controllo preciso del motore, questo tutorial ti ha fornito le conoscenze e le competenze necessarie per iniziare.
Speriamo che questo tutorial ti sia stato utile e che ti abbia ispirato a esplorare ulteriori possibilità con motori passo-passo e Arduino. Sentiti libero di consultare la sezione Link per risorse aggiuntive e progetti correlati al controllo dei motori passo-passo. Buon divertimento con il making!
Domande Frequenti
Ecco alcune domande frequenti sul controllo di un motore passo-passo 28byj-48 con un telecomando IR usando un driver ULN2003:
D: Posso usare un motore passo-passo diverso con questa configurazione?
R: Sì, puoi usare un motore passo-passo diverso purché abbia specifiche compatibili. Assicurati di controllare la tensione, la corrente e i passi per rivoluzione del motore per garantire la compatibilità con il driver ULN2003. Vedi i nostri tutorial su alternative driver boards and stepper motors.
D: Posso usare un driver diverso dall’ULN2003?
R: Sì, puoi usare un driver diverso come il A4988 o il DRV8825. Tuttavia, dovrai modificare il codice di conseguenza per adattarlo alle configurazioni dei pin e ai segnali di controllo del nuovo driver.
D: Posso controllare più motori passo-passo con questa configurazione?
R: Sì, puoi controllare più motori passo-passo collegando ogni motore a un driver ULN2003 separato e usando pin diversi su Arduino per ogni driver. Dovrai modificare il codice per controllare ogni motore individualmente.
D: Posso usare un microcontrollore diverso da Arduino?
R: Sì, puoi usare un microcontrollore diverso come ESP32 o Raspberry Pi. Tuttavia, dovrai adattare il codice per corrispondere al linguaggio di programmazione e alle configurazioni dei pin del microcontrollore scelto.
D: Come posso alimentare il motore passo-passo?
R: Il motore passo-passo può essere alimentato usando un’alimentazione esterna. Assicurati di collegare il terminale positivo dell’alimentazione al pin VCC del driver ULN2003 e il terminale negativo al pin GND. La tensione dell’alimentazione deve corrispondere alla tensione nominale del motore (5-12V).
D: Posso controllare il motore passo-passo senza fili?
R: Sì, puoi controllare il motore passo-passo senza fili usando un modulo di comunicazione wireless come Bluetooth o Wi-Fi. Dovrai integrare il protocollo di comunicazione appropriato nel tuo codice e stabilire una connessione tra il microcontrollore e il modulo wireless.
Se hai altre domande o dubbi, sentiti libero di chiedere nella sezione commenti qui sotto o consulta i link forniti per ulteriori informazioni.
Link
Ecco alcuni link a tutorial correlati:
- 28BYJ-48 Stepper Motor with ULN2003 + Arduino
- Stepper Motor with DRV8825 and Arduino Tutorial
- TB6600 Stepper Motor Driver with Arduino Tutorial
- ESP32 And IR Remote Interface – A Complete Tutorial
- Stepper Motor with L298N and Arduino Tutorial
- TB6560 Stepper Motor Driver with Arduino Tutorial
- Stepper with Arduino Motor Shield Rev3 Tutorial
- IR Remote and Receiver with Arduino Tutorial
- Servo Motor Control with Remote
- Controlling a Servo with IR
- Controlling Servo Motor Using IR Remote Control
- Controlling Servo Motor With Ir Remote Using Arduino
- IR remote controlled DC servo motor using Arduino
- Controlling Servo Motor with IR Remote
- Control Servo motor using any Infrared Remote with Arduino

