Skip to Content

Controlla un motore passo-passo con un telecomando IR

Controlla un motore passo-passo con un telecomando IR

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

Dupont wire set

Set di fili Dupont

Half_breadboard56a

Breadboard

USB Data Sync cable Arduino

Cavo USB per Arduino UNO

Infrared (IR) receiver module

Modulo Ricevitore IR

Kit Ricevitore IR

ULN2003 28BYJ-48 4-Phase Stepper Motor

Motore Passo-Passo

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.

Wiring of the IR sensor, stepper motor, driver and Arduino

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.

Wiring stepper motor and driver

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

Wiring driver and 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).

Power supply driver

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:

Additional power supply

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.

Wiring IR sensor

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.

Power supply IR sensor

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: