Caută cod

Lecția 21/31: Utilizarea telecomenzii cu infraroșu cu Arduino | SunFounder Robojax

Lecția 21/31: Utilizarea telecomenzii cu infraroșu cu Arduino | SunFounder Robojax

Introducere

În această lecție, explorăm lumea fascinantă a comunicării în infraroșu (IR) prin construirea unui proiect care decodifică semnalele de la o telecomandă standard folosind un Arduino. Acest proiect îți permite să detectezi ce buton este apăsat pe o telecomandă IR și să declanșezi acțiuni corespunzătoare, cum ar fi activarea unui buzzer. Abilitatea de a interfața cu telecomenzi IR deschide o gamă largă de aplicații practice, de la automatizări simple pentru acasă până la sisteme de control personalizate.

infrare_remote
IR_receiver_pins

Iată câteva idei inspiratoare pentru ceea ce poți construi cu această tehnologie:

  • Înlocuirea telecomenzii universale: Creează o telecomandă personalizată pentru televizorul, sistemul audio sau alte dispozitive controlate prin IR.
  • Automatizarea casei: Controlează lumini, ventilatoare sau alte aparate apăsând un buton pe o telecomandă standard.
  • Proiecte interactive: Construiește un sistem de securitate care declanșează o alarmă atunci când este apăsat un buton specific.
  • Controlul roboticii: Folosește o telecomandă IR pentru a controla wireless mișcarea și acțiunile unui robot.
  • Ajutoare pentru accesibilitate: Dezvoltă o telecomandă simplă, cu butoane mari, pentru persoanele cu mobilitate redusă.

Hardware și componente

Acest proiect este construit în jurul câtorva componente simple, toate incluse de obicei în kiturile de pornire precum kitul SunFounder 3-în-1. Vei avea nevoie de:

  • O placă Arduino (de exemplu, Uno)
  • Un modul receptor IR (de exemplu, TSOP38238 sau similar)
  • O telecomandă IR standard (cu o baterie CR2025)
  • Un buzzer pasiv
  • Fire de legătură și o breadboard

Ghid de cablare

ir_remote_control_wiring

Iată diagrama simplă de cablare pentru acest proiect. Receptorul IR este componenta cheie. Când te uiți la suprafața curbată a receptorului, configurația pinilor este următoarea:

  • Pinul din dreapta: Conectează-l la pinul de 5V de pe Arduino.
  • Pinul din mijloc: Conectează-l la pinul GND de pe Arduino.
  • Pinul din stânga (semnal): Conectează-l la pinul digital 11 de pe Arduino.

În plus, pentru partea de acțiune a proiectului, conectează borna pozitivă (mai lungă) a buzzer-ului la pinul digital 2 și cealaltă bornă la GND.

Explicația codului

Acest proiect se bazează pe biblioteca IRremote pentru a gestiona sarcina complexă de decodificare a semnalelor infraroșii. Codul este structurat astfel încât să învețe mai întâi codurile specifice de la telecomanda ta și apoi să le folosească pentru a declanșa acțiuni. Să descompunem părțile configurabile de utilizator.

În primul rând, definim pinul la care este conectat firul de semnal al receptorului IR. Aceasta este o configurație crucială pe care trebuie să o potrivești cu cablarea ta fizică.

const int IR_RECEIVE_PIN = 11;  // Definește numărul pinului pentru senzorul IR

În funcția setup(), receptorul IR este inițializat folosind pinul pe care tocmai l-am definit. Aceasta spune bibliotecii să înceapă să asculte semnale pe acel pin.

IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // Pornește receptorul IR

Miezul logicii de acțiune se află în loop(). Codul verifică dacă o tastă a fost apăsată și o decodifică. Funcția decodeKeyValue() este o funcție personalizată care traduce codul hexazecimal brut de la telecomandă într-un șir lizibil precum "POWER" sau "MUTE". Aceasta este partea pe care o vei modifica pentru a se potrivi cu telecomanda ta specifică. Codul exemplu definește un buzzerPin și îl activează doar atunci când butonul "POWER" este apăsat.

const int buzzerPin = 2; // Definește pinul pentru buzzer
// ... în interiorul loop()
if (decodedValue == "POWER") {
    digitalWrite(buzzerPin, HIGH); // Activează buzzer-ul
} else {
    digitalWrite(buzzerPin, LOW); // Dezactivează buzzer-ul
}

Cum să folosești: Funcția decodeKeyValue() este cheia pentru personalizarea acestui proiect. Pentru a o folosi cu propria telecomandă, trebuie mai întâi să rulezi codul cu Monitorul Serial deschis. Apasă fiecare buton de pe telecomandă și notează valoarea hexazecimală afișată pentru fiecare. Apoi, actualizează instrucțiunea switch din funcția decodeKeyValue() pentru a mapa acele valori la nume semnificative. Poți folosi apoi aceste nume în instrucțiunile tale if pentru a declanșa diferite acțiuni, exact cum face exemplul pentru butonul "POWER".

Proiect live și demonstrație

Odată ce codul este încărcat, deschide Monitorul Serial la o rată de transmisie de 9600. Îndreaptă telecomanda către receptorul IR și apasă un buton. Monitorul Serial va afișa numele corespunzător al tastei (de exemplu, "POWER", "MUTE"). Pentru a vedea acțiunea în efect, apasă butonul "POWER". Vei auzi buzzer-ul activându-se. Apăsarea oricărui alt buton, cum ar fi "MUTE", va dezactiva buzzer-ul. Aceasta demonstrează un concept simplu dar puternic: folosirea unei telecomenzi pentru a declanșa ieșiri digitale pe Arduino-ul tău.

Capitole

  • [00:00] Introducere în controlul cu infraroșu (IR) folosind Arduino
  • [01:25] Prezentare generală a receptorului și emițătorului IR
  • [02:24] Înțelegerea modulului receptor IR și a conexiunilor
  • [03:31] Instalarea bibliotecii IRremote
  • [04:22] Deschiderea și explicarea codului de decodare
  • [07:29] Încărcarea codului și testarea tastelor telecomenzii
  • [08:41] Adăugarea unei acțiuni: controlul unui buzzer
  • [10:37] Previzualizare a viitoarelor proiecte IR

Imagini

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
Limba: 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";
    }
}

Lucruri de care ai putea avea nevoie

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Biblioteci Arduino (zip)