Sniffer și Transmitator de Coduri IR
Introducere
Proiectul “IR Sniffer cu Transmitere” este un dispozitiv construit în jurul plăcii ESP32, capabil să intercepteze semnale IR provenite de la telecomenzi, să le afişeze pe un ecran LCD și să le stocheze pentru utilizări ulterioare. Utilizatorul poate naviga între codurile salvate folosind butoane și le poate retransmite folosind un LED infraroșu. Dispozitivul este portabil, fiind alimentat din baterii, și oferă un exemplu solid de integrare a funcțiilor de captare semnal, afișare, memorie persistentă și acțiune controlată manual. Proiectul acoperă utilizarea întreruperilor, comunicației I2C, scrierea în flash și procesarea semnalelor.
Descriere generală
Sistemul se bazează pe placa ESP32, care gestionează captarea semnalelor IR, memorarea acestora în flash și transmiterea lor ulterioară. Informațiile sunt afișate pe un LCD 1602 cu interfață I2C. Trei butoane sunt utilizate pentru salvarea unui cod nou, schimbarea codului selectat și transmiterea codului selectat. LED-ul IR este folosit pentru transmitere, iar senzorul CHQ1838 pentru recepție. Alimentarea se face fie prin USB, fie prin 4 baterii AA, conectate pe pinul de 5V.
Hardware Design
🔹 Componente utilizate:
ESP32 DevKit
LCD 1602 cu interfață I2C (0x27)
Receptor IR CHQ1838
LED IR 5mm, 940nm
Rezistor 220Ω (pentru LED)
3 butoane tactile 6x6mm (pentru DELETE, SCROLL, SEND)
Rezistori 4.7kΩ pentru pull-down
Breadboard HQ (400 puncte)
Fire jumper Mamă-Mamă și Mamă-Tată
Suport 4xR6 (AA)
🔹 Conexiuni:
GPIO 35 → Receptor IR
GPIO 32 → LED IR prin rezistor
GPIO 34 → Buton SEND
GPIO 33 → Buton SCROLL
GPIO 25 → Buton DELETE
GPIO 21, 22 → LCD I2C (SDA, SCL)
Software Design
🔹 Mediu de dezvoltare:
🔹 Biblioteci utilizate:
IRremoteESP8266 – pentru recepție și transmitere coduri IR
LiquidCrystal_I2C – pentru afișajul LCD
Preferences – pentru stocare coduri (opțional)
🔹 Funcționalități implementate:
Recepție cod IR și afișare protocol + cod HEX pe LCD
Verificare cod duplicat înainte de salvare
Navigare între coduri prin scroll
Retransmitere coduri salvate
Ștergere totală coduri
Afișare stare și index curent pe LCD
Exemplu logică afișare cod:
- Protocol: NEC
- Cod HEX: e01fbf40
- Pe LCD: `NEC e01fbf40` (rând 1), `Cod 5/5` (rând 2)
Fragment de cod
Următorul exemplu de cod evidențiază funcțiile principale ale dispozitivului: captarea codului IR, afișarea pe LCD, salvarea în memorie, navigarea între coduri și retransmiterea acestora. Butoanele conectate la GPIO permit interacțiunea directă cu utilizatorul.
#include <Arduino.h>
#include <IRremote.hpp>
#include <LiquidCrystal_I2C.h>
#define IR_RECEIVE_PIN 35
#define IR_SEND_PIN 32
#define BUTTON_SEND_PIN 34
#define BUTTON_SCROLL_PIN 33
#define BUTTON_DELETE_PIN 25
LiquidCrystal_I2C lcd(0x27, 16, 2);
struct CodIR {
uint32_t cod;
String protocol;
};
CodIR coduri[20];
int nrCoduri = 0;
int indexAfisat = -1;
unsigned long ultimaInregistrare = 0;
bool tocmaiAmSalvat = false;
void afiseazaPeLCD(String protocol, String codHex, String stare) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(protocol + " " + codHex);
lcd.setCursor(0, 1);
if (nrCoduri > 0)
lcd.print("Cod " + String(indexAfisat + 1) + "/" + String(nrCoduri));
else
lcd.print(stare);
}
void setup() {
Serial.begin(115200);
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
IrSender.begin(IR_SEND_PIN);
IrSender.enableIROut(38);
pinMode(BUTTON_SEND_PIN, INPUT);
pinMode(BUTTON_SCROLL_PIN, INPUT);
pinMode(BUTTON_DELETE_PIN, INPUT);
lcd.init();
lcd.backlight();
lcd.print("IR sistem gata");
delay(1000);
lcd.clear();
}
📌 Codul complet este disponibil în fișierul `ir_sniffer.ino` inclus în arhiva proiectului.
Rezultate obținute
Dispozitivul a interceptat cu succes semnale IR de la diverse telecomenzi (TV, aer condiționat), afișând codurile corect pe LCD. Navigarea între coduri a funcționat stabil, iar transmiterea a fost realizată cu succes prin LED-ul IR. Codurile salvate nu s-au pierdut în timpul rulării și au fost vizibile corect. Sistemul a funcționat stabil atât pe USB cât și pe alimentare cu baterii AA. Interfața a fost clară și intuitivă.
Download
Fişierele proiectului includ:
Cod sursă (`ir_sniffer.ino`)
Schema conexiuni (PNG și Fritzing)
README explicativ
Set coduri test IR (dacă este cazul)
Namespace recomandat pentru fişiere: :pm:prj2025:ac:galeseanu_razvan
Jurnal
🗓 10.05.2025 – Testare receptor CHQ1838 cu diverse telecomenzi
🗓 11.05.2025 – Implementare scroll și trimitere coduri
🗓 12.05.2025 – Integrare funcție ștergere + test general
🗓 13.05.2025 – Finalizare proiect și validare funcționalități
Bibliografie / Resurse