Pretraži kod

Lekcija 21/31: Korištenje infracrvenog daljinskog upravljača s Arduinom | SunFounder Robojax

Lekcija 21/31: Korištenje infracrvenog daljinskog upravljača s Arduinom | SunFounder Robojax

Uvod

U ovoj lekciji istražujemo fascinantan svijet infracrvene (IR) komunikacije gradeći projekat koji dekodira signale sa standardnog daljinskog upravljača koristeći Arduino. Ovaj projekat vam omogućava da detektujete koje je dugme pritisnuto na IR daljinskom upravljaču i pokrenete odgovarajuće akcije, poput uključivanja zujalice. Mogućnost povezivanja s IR daljinskim upravljačima otvara širok spektar praktičnih primjena, od jednostavne kućne automatizacije do prilagođenih kontrolnih sistema.

infrare_remote
IR_receiver_pins

Evo nekoliko inspirativnih ideja za ono što možete napraviti s ovom tehnologijom:

  • Zamjena univerzalnog daljinskog upravljača: Napravite prilagođeni daljinski za vaš TV, audio sistem ili druge IR-uređaje.
  • Kućna automatizacija: Kontrolišite svjetla, ventilatore ili druge uređaje pritiskom na dugme na standardnom daljinskom upravljaču.
  • Interaktivni projekti: Napravite sigurnosni sistem koji pokreće alarm kada se pritisne određeno dugme.
  • Kontrola robotike: Koristite IR daljinski za bežično upravljanje kretanjem i akcijama robota.
  • Pomoćna sredstva za pristupačnost: Razvijte jednostavan daljinski s velikim dugmadima za osobe s ograničenom pokretljivošću.

Hardver i komponente

Ovaj projekat je izgrađen oko nekoliko jednostavnih komponenti, koje su sve obično uključene u početne komplete poput SunFounder 3-u-1 kompleta. Trebat će vam:

  • Arduino ploča (npr. Uno)
  • IR prijemnik modul (npr. TSOP38238 ili sličan)
  • Standardni IR daljinski upravljač (s CR2025 baterijom)
  • Pasivna zujalica
  • Konektorske žice i breadboard

Vodič za povezivanje

ir_remote_control_wiring

Ovdje je jednostavan dijagram povezivanja za ovaj projekat. IR prijemnik je ključna komponenta. Kada pogledate zakrivljenu površinu prijemnika, raspored pinova je sljedeći:

  • Desni pin: Spojite na 5V pin na Arduinu.
  • Srednji pin: Spojite na GND pin na Arduinu.
  • Lijevi pin (Signal): Spojite na digitalni pin 11 na Arduinu.

Dodatno, za akcijski dio projekta, spojite pozitivnu (dužu) nogicu zujalice na digitalni pin 2, a drugu nogicu na GND.

Objašnjenje koda

Ovaj projekat se oslanja na IRremote biblioteku za rješavanje složenog zadatka dekodiranja infracrvenih signala. Kod je strukturiran tako da prvo nauči specifične kodove s vašeg daljinskog upravljača, a zatim ih koristi za pokretanje akcija. Hajde da raščlanimo dijelove koje korisnik može konfigurisati.

Prvo, definišemo pin na koji je spojena signalna žica IR prijemnika. Ovo je ključna konfiguracija koju morate uskladiti s vašim fizičkim povezivanjem.

const int IR_RECEIVE_PIN = 11;  // Definišite broj pina za IR senzor

U setup() funkciji, IR prijemnik se inicijalizuje koristeći pin koji smo upravo definirali. Ovo govori biblioteci da počne slušati signale na tom pinu.

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Pokrenite IR prijemnik

Srž logike za pokretanje akcija je u loop(). Kod provjerava da li je dugme pritisnuto i dekodira ga. Funkcija decodeKeyValue() je prilagođena funkcija koja prevodi sirovi heksadecimalni kod s daljinskog upravljača u čitljiv niz poput "POWER" ili "MUTE". Ovo je dio koji ćete modificirati kako biste ga uskladili s vašim specifičnim daljinskim upravljačem. Primjer koda definiše buzzerPin i uključuje ga samo kada je pritisnuto dugme "POWER".

const int buzzerPin = 2; // Definišite pin za zujalicu
// ... unutar loop()
if (decodedValue == "POWER") {
    digitalWrite(buzzerPin, HIGH); // Uključite zujalicu
} else {
    digitalWrite(buzzerPin, LOW); // Isključite zujalicu
}

Kako koristiti: Funkcija decodeKeyValue() je ključ za prilagođavanje ovog projekta. Da biste je koristili s vlastitim daljinskim upravljačem, prvo morate pokrenuti kod s otvorenim Serial Monitorom. Pritisnite svako dugme na vašem daljinskom i zabilježite heksadecimalnu vrijednost koja se ispisuje za svako. Zatim ažurirajte switch naredbu u funkciji decodeKeyValue() kako biste mapirali te vrijednosti na smislene nazive. Te nazive zatim možete koristiti u vašim if naredbama za pokretanje različitih akcija, baš kao što primjer radi za dugme "POWER".

Živi projekat i demonstracija

Nakon što je kod učitan, otvorite Serial Monitor s brzinom prijenosa od 9600. Usmjerite vaš daljinski prema IR prijemniku i pritisnite dugme. Serial Monitor će prikazati odgovarajući naziv tipke (npr. "POWER", "MUTE"). Da biste vidjeli akciju na djelu, pritisnite dugme "POWER". Čut ćete kako se zujalica uključuje. Pritisak na bilo koje drugo dugme, poput "MUTE", isključit će zujalicu. Ovo demonstrira jednostavan, ali moćan koncept: korištenje daljinskog upravljača za pokretanje digitalnih izlaza na vašem Arduinu.

Poglavlja

  • [00:00] Uvod u infracrveno daljinsko upravljanje s Arduinom
  • [01:25] Pregled IR prijemnika i odašiljača
  • [02:24] Razumijevanje IR prijemnog modula i povezivanja
  • [03:31] Instalacija IRremote biblioteke
  • [04:22] Otvaranje i objašnjenje koda za dekodiranje
  • [07:29] Učitavanje koda i testiranje tipki daljinskog upravljača
  • [08:41] Dodavanje akcije: upravljanje zujalicom
  • [10:37] Pregled nadolazećih IR projekata

Slike

IR_receiver_pins
IR_receiver_pins
infrare_remote
infrare_remote
ir_remote_control_wiring
ir_remote_control_wiring
904-Lesson 21/31: Arduino code fpor decoding Infrared from remote signal
Jezik: C++
/*
Lesson 21/31: Decoding Infrared from remote
Get this code and watch video Download and resource page https://robojax.com/RJT604
YouTube video https://www.youtube.com/watch?v=EAlqaVy8fYY

*/
#include <IRremote.h>

const int IR_RECEIVE_PIN = 11;  // Define the pin number for the IR Sensor
String lastDecodedValue = "";  // Variable to store the last decoded value

void setup() {
  Serial.begin(9600);                                     // Start serial communication at 9600 baud rate
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Start the IR receiver
}

void loop() {
  if (IrReceiver.decode()) {
    String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
    if (decodedValue != "ERROR") {
      Serial.println(decodedValue);
      delay(100);
    }
    IrReceiver.resume();  // Enable receiving of the next value
  }
}

String decodeKeyValue(long result)
{
  switch(result){
    case 0x16:
      return "0";
    case 0xC:
      return "1"; 
    case 0x18:
      return "2"; 
    case 0x5E:
      return "3"; 
    case 0x8:
      return "4"; 
    case 0x1C:
      return "5"; 
    case 0x5A:
      return "6"; 
    case 0x42:
      return "7"; 
    case 0x52:
      return "8"; 
    case 0x4A:
      return "9"; 
    case 0x9:
      return "+"; 
    case 0x15:
      return "-"; 
    case 0x7:
      return "EQ"; 
    case 0xD:
      return "U/SD";
    case 0x19:
      return "CYCLE";         
    case 0x44:
      return "PLAY/PAUSE";   
    case 0x43:
      return "FORWARD";   
    case 0x40:
      return "BACKWARD";   
    case 0x45:
      return "POWER";   
    case 0x47:
      return "MUTE";   
    case 0x46:
      return "MODE";       
    case 0x0:
      return "ERROR";   
    default :
      return "ERROR";
    }
}

Stvari koje bi vam mogle zatrebati

Resursi i reference

Još nema resursa.

Datoteke📁

Arduino biblioteke (zip)