Skip to Content

Come Controllare un Servo con un Telecomando IR

Come Controllare un Servo con un Telecomando IR

In questo tutorial impareremo come controllare un servo motore usando un telecomando IR e un Arduino. I servo motori sono ampiamente utilizzati in vari progetti, inclusi robotica, automazione e veicoli radiocomandati. Integrando un sensore IR con una scheda Arduino, possiamo ricevere comandi da un telecomando IR e usarli per controllare la posizione o la velocità del servo motore.

Controllare un servo motore con un telecomando IR apre un mondo di possibilità. Puoi usarlo per costruire un braccio robotico radiocomandato, creare un meccanismo pan-tilt per una telecamera o persino realizzare un’auto radiocomandata. Le possibilità sono infinite!

Prima di entrare nei dettagli, diamo un’occhiata ai componenti necessari per questo progetto.

Componenti necessari

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Di seguito trovi i componenti richiesti 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 remoto IR

Collegamento dei componenti

In questa sezione collegheremo i componenti all’Arduino. L’immagine sottostante mostra il cablaggio completo. Iniziamo con l’alimentazione della breadboard.

Wiring of the components

Collegamento della breadboard

Per prima cosa, collega il pin contrassegnato Ground (GND) sull’Arduino con un filo nero o blu alla linea di massa della breadboard (contrassegnata con una linea blu). Poi collega il pin contrassegnato 5V (alimentazione) sull’Arduino con un filo rosso alla linea di alimentazione della breadboard (contrassegnata con una linea rossa).

Wiring of the power supply

Collegamento del sensore IR

Iniziamo con il filo del segnale per collegare il sensore IR. Trova il pin contrassegnato S o Signal sul modulo sensore IR e collegalo con un filo giallo al pin 8 sull’Arduino.

Successivamente colleghiamo l’alimentazione. Tipicamente, il polo positivo è il pin centrale sul modulo sensore IR. Usa un filo rosso per collegare quel pin alla linea di alimentazione positiva della breadboard. Infine, collega il terzo pin rimanente del modulo sensore IR alla linea di massa negativa della breadboard.

Wiring of the IR Sensor

Collegamento del servo motore

L’ultimo componente da collegare è il servo motore. Prima, collega il filo marrone del servo alla linea di massa negativa della breadboard con un filo marrone o nero. Poi collega il filo rosso del servo alla linea di alimentazione positiva; preferibilmente con un filo rosso.

Wiring of the Servo

Infine colleghiamo il filo arancione del segnale del servo al pin 9 sulla scheda Arduino.

Una volta terminato il cablaggio dei componenti, è meglio ricontrollare che tutto sia collegato correttamente. Presta particolare attenzione alle connessioni di alimentazione. Non vogliamo cortocircuiti.

Ora ti mostrerò il codice necessario.

Scrivere il codice Arduino

Di seguito trovi il codice completo per una panoramica. Ti permette di ruotare il servo a sinistra o a destra in passi di 10 gradi premendo il tasto NEXT o PREV sul telecomando. Spezziamo questo codice in parti e ne spieghiamo la funzione.

#include <IRremote.hpp>
#include <Servo.h>

#define IR_RECEIVE_PIN 8
#define SERVO_PIN 9

Servo servo;
const int range = 780;
const int mid = 1600;

int pos = 90;
int speed = 10;

void rotate(int angle) {
  angle = map(angle, 0, 180, mid - range, mid + range);
  servo.writeMicroseconds(angle);
}

void setup() {
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  servo.attach(SERVO_PIN);
  rotate(pos);
}

void loop() {
  if (IrReceiver.decode()) {
    uint16_t command = IrReceiver.decodedIRData.command;
    if (command == 8) {  // NEXT
      pos = min(pos + speed, 180);
    } else if (command == 2) {  // PREV
      pos = max(pos - speed, 10);
    }
    rotate(pos);
    IrReceiver.resume();
  }
}

Definizioni

Per prima cosa includiamo due librerie. La IRremote libreria, necessaria per interpretare i comandi inviati dal telecomando IR. E la Servo libreria, che ci aiuta a controllare il servo.

#include <IRremote.hpp>
#include <Servo.h>

Poi definiamo le costanti, IR_RECEIVE_PIN e SERVO_PIN che specificano quali pin sull’Arduino sono usati per leggere il segnale IR e per controllare il servo.

#define IR_RECEIVE_PIN 8
#define SERVO_PIN 9

Dopodiché definiamo l’oggetto servo e due costanti (range e mid), che regolano l’escursione del movimento del servo, e mid definisce la posizione centrale del servo. Inoltre, dichiariamo due variabili (pos, speed) che descrivono la posizione attuale del servo e la velocità (o passi angolari) con cui ruota.

Servo servo;
const int range = 780;
const int mid = 1600;

int pos = 90;
int speed = 10;

Rotazione del servo

Per ruotare il servo a un angolo specifico, definiamo una funzione speciale rotate(). Essa mappa essenzialmente l’angolo dato, che deve essere compreso tra 0 e 180 gradi, alla corrispondente durata dell’impulso necessaria per controllare il servo.

void rotate(int angle) {
  angle = map(angle, 0, 180, mid - range, mid + range);
  servo.writeMicroseconds(angle);
}

Per maggiori dettagli, consulta il nostro tutorial sulle differenze tra continuous and positional servos. Presta particolare attenzione alla sezione che spiega come regolare finemente il tuo servo.

Setup

Nella funzione setup(), informiamo semplicemente le librerie del ricevitore IR e del Servo quali pin sono usati per il ricevitore IR e per il controllo del servo. Inoltre, ruotiamo il servo alla posizione di 90 gradi. Nota che qui assumiamo un servo posizionale comune.

void setup() {
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
  servo.attach(SERVO_PIN);
  rotate(pos);
}

Loop principale

Infine, implementiamo la funzione loop() che gira continuamente.

void loop() {
  if (IrReceiver.decode()) {
    uint16_t command = IrReceiver.decodedIRData.command;
    if (command == 8) {         // NEXT
      pos = min(pos + speed, 180);
    } else if (command == 2) {  // PREV
      pos = max(pos - speed, 10);
    }
    rotate(pos);
    IrReceiver.resume();
  }
}

Iniziamo aspettando un segnale dal ricevitore IR chiamando IrReceiver.decode(). Se riceviamo un comando, lo decodifichiamo tramite IrReceiver.decodedIRData.command.

A seconda del valore del comando, aumentiamo la posizione, ma non oltre i 180 gradi, oppure la diminuiamo, ma non sotto gli 0 gradi. Questo è il compito delle funzioni min() e max() .

Quale valore di comando corrisponde a quale tasto sul telecomando IR dipenderà dal telecomando che stai usando. ! Consulta il nostro tutorial su How to use an IR receiver and remote with Arduino per imparare a identificare i codici comando del tuo telecomando. Nel mio caso, 8 corrisponde al tasto traccia successiva e 2 al tasto traccia precedente sul mio telecomando.

Infine ruotiamo il servo alla posizione usando rotate(pos) e informiamo il ricevitore IR di cercare un nuovo comando tramite IrReceiver.resume().

Consigli

Nota che puoi aumentare l’angolo di passo o la velocità con cui il servo si muove tra le posizioni aumentando o diminuendo il valore della variabile speed . Potresti anche farlo usando il telecomando aggiungendo due comandi in più a cui reagire, per esempio:

void loop() {
  if (IrReceiver.decode()) {
    uint16_t command = IrReceiver.decodedIRData.command;
    if (command == 31) {  // VOL+
      speed = min(speed + 1, 90);
    } else if (command == 23) {  // VOL-
      speed = max(speed - 1, 1);
    } else if (command == 8) { // NEXT
      pos = min(pos + speed, 180);
    } else if (command == 2) {  // PREV
      pos = max(pos - speed, 10);
    }
    rotate(pos);
    IrReceiver.resume();
  }
}

Qui uso i tasti del volume sul mio telecomando per controllare la velocità. Come prima, i codici comando per il tuo telecomando potrebbero essere diversi e dovrai adattare il codice di conseguenza.

Applicazioni

Braccio robotico

Usa il servo motore per controllare il movimento di un braccio robotico. Il braccio può essere programmato per svolgere varie attività come raccogliere oggetti, spostarli o persino giocare.

Controllo delle tapparelle

Automatizza l’apertura e la chiusura delle tapparelle usando il servo motore e il telecomando IR. Questo ti permette di controllare la quantità di luce solare che entra in una stanza con la semplice pressione di un pulsante.

Distributore automatico per animali

Crea un distributore automatico per animali che eroga cibo a orari specifici usando il servo motore. Usa il telecomando IR per attivare manualmente il processo di alimentazione se necessario.

Sistema di irrigazione per piante

Costruisci un sistema di irrigazione per piante che usa il servo motore per controllare il flusso d’acqua. Usa il telecomando IR per attivare il sistema e annaffiare le tue piante a distanza.

Serratura intelligente

Costruisci un sistema di serratura intelligente che usa il servo motore per bloccare e sbloccare la porta. Usa il telecomando IR per controllare la serratura a distanza o configura una tastiera per un accesso sicuro.

Illuminazione d’atmosfera

Crea un sistema di illuminazione d’atmosfera che usa il servo motore per regolare la luminosità o il colore delle luci. Usa il telecomando IR per cambiare le impostazioni di illuminazione e creare diverse atmosfere.

Tende automatizzate

Controlla l’apertura e la chiusura delle tende usando il servo motore e il telecomando IR. Questo ti permette di regolare facilmente la quantità di luce che entra in una stanza o creare privacy.

Pulitore robotico per acquari

Costruisci un pulitore robotico per acquari che usa il servo motore per muoversi e pulire la vasca. Usa il telecomando IR per controllarne i movimenti e i modelli di pulizia.

Installazione artistica interattiva

Crea un’installazione artistica interattiva che usa il servo motore per controllare parti mobili o sculture. Usa il telecomando IR per attivare diversi movimenti e coinvolgere gli spettatori.

Conclusioni

In questo tutorial abbiamo imparato come controllare un servo motore usando un telecomando IR. Seguendo i passaggi descritti in questa guida, puoi facilmente implementare questa funzionalità nei tuoi progetti.

Abbiamo iniziato raccogliendo i componenti necessari, inclusi un Arduino Uno, un set di fili Dupont, una breadboard, un modulo ricevitore IR, un kit ricevitore remoto IR e l’Arduino IDE. Questi componenti sono essenziali per costruire il circuito.

Successivamente abbiamo collegato i componenti tra loro. Abbiamo collegato la breadboard all’Arduino Uno, assicurandoci che tutte le connessioni fossero corrette. Poi abbiamo collegato il sensore IR alla breadboard e il servo motore all’Arduino Uno. Questi collegamenti permettono all’Arduino di ricevere segnali dal telecomando IR e controllare di conseguenza il servo motore.

Dopo aver completato l’hardware, siamo passati a scrivere il codice Arduino. Abbiamo definito le variabili e le librerie necessarie, quindi implementato il codice per ruotare il servo motore in base ai segnali ricevuti dal telecomando IR. Abbiamo anche impostato la posizione iniziale del servo nella funzione setup e controllato continuamente i segnali del telecomando nel loop principale.

Infine, abbiamo fornito alcuni consigli per migliorare il controllo del servo motore con un telecomando IR. Questi includono l’uso di diversi pulsanti del telecomando per attivare movimenti diversi del servo, la regolazione della velocità del servo e l’integrazione di altri sensori o moduli nel tuo progetto.

In conclusione, controllare un servo motore con un telecomando IR apre un’ampia gamma di possibilità per i tuoi progetti Arduino. Che tu voglia costruire un braccio robotico, un gimbal per telecamera o qualsiasi altro progetto che richieda un controllo preciso del motore, questo tutorial ti ha fornito le conoscenze necessarie per iniziare.

Se hai ulteriori domande o necessiti di chiarimenti su uno qualsiasi dei passaggi descritti in questo tutorial, consulta la sezione Domande Frequenti qui sotto. Buon divertimento con il making!

Domande Frequenti

Ecco alcune domande comuni relative al controllo di un servo motore con un telecomando IR:

D: Posso usare qualsiasi telecomando IR con questo progetto?

R: Sì, puoi usare qualsiasi telecomando IR purché sia compatibile con Arduino. La maggior parte dei telecomandi IR usa il protocollo NEC, supportato dalla libreria IR di Arduino. Tuttavia, se hai un tipo diverso di telecomando IR, potresti dover modificare il codice di conseguenza. Molto probabilmente dovrai adattare il codice ai codici comando del tuo telecomando. Per dettagli, vedi here.

D: Come faccio a trovare i codici dei pulsanti del mio telecomando IR?

R: Per trovare i codici dei pulsanti del tuo telecomando IR, puoi usare il IRrecvDumpV2 example sketch fornito dalla libreria IR di Arduino. In alternativa, segui il nostro tutorial.

Carica lo sketch sul tuo Arduino, apri il Monitor Seriale e premi i pulsanti sul telecomando. I codici verranno mostrati nel Monitor Seriale. Potrai quindi usare questi codici nel tuo codice Arduino per mappare i pulsanti a movimenti specifici del servo motore.

D: Posso controllare più servo motori con un solo telecomando IR?

R: Sì, puoi controllare più servo motori con un solo telecomando IR. Dovrai collegare ogni servo motore a un pin separato sull’Arduino e modificare il codice per controllare ogni servo indipendentemente. Puoi assegnare pulsanti diversi sul telecomando IR per controllare servo motori differenti.

D: Come posso regolare l’escursione del movimento del servo motore?

R: L’escursione del movimento del servo motore può essere regolata modificando i valori nelle funzioni servo.attach() e servo.write() nel codice Arduino. La funzione servo.attach() imposta l’escursione del movimento del servo motore, mentre la funzione servo.write() specifica l’angolo a cui il servo motore deve muoversi. Per metodi alternativi, dai un’occhiata al nostro tutorial su continuous and positional servos.

D: Posso usare un microcontrollore diverso da Arduino?

R: Sì, puoi usare un microcontrollore diverso da Arduino purché supporti le librerie necessarie e abbia abbastanza pin digitali per collegare il servo motore e il ricevitore IR. Il codice fornito in questo tutorial è specifico per Arduino, ma puoi adattarlo per funzionare con altri microcontrollori.

D: Posso usare un tipo di motore diverso da un servo motore?

R: No, questo progetto specifico è progettato per controllare servo motori. I servo motori hanno un controllo di posizione integrato, che li rende ideali per questa applicazione. Se vuoi controllare un tipo diverso di motore, avrai bisogno di un circuito e di un codice diversi.

D: Posso controllare la velocità del servo motore?

R: Dipende. Per servo continui o a 360 gradi puoi controllare la velocità e la direzione (ma non la posizione). Per i servo posizionali, usati in questo tutorial, non puoi controllare direttamente la velocità ma puoi cambiare i passi angolari, che in qualche modo modifica la velocità ma provoca un movimento a scatti.

D: Ci sono precauzioni di sicurezza da prendere quando si lavora con i servo motori?

R: Sì, quando lavori con i servo motori, assicurati di fornire abbastanza alimentazione ai servo e di non sovraccaricarli. Inoltre, fai attenzione alle parti in movimento ed evita di toccarle mentre il motore è in funzione.

Spero che queste domande frequenti abbiano chiarito eventuali dubbi. Se hai altre domande, sentiti libero di chiedere nella sezione commenti qui sotto.

Link

Infine, una selezione di link a materiale correlato che potresti trovare utile.