IR-protokoller
En almindelig IR-fjernbetjening sender data med infrarødt lys. “IR” beskriver den fysiske transport, men fjernbetjeningen bruger også et signalformat eller en protokol til at kode knappernes betydning.
Fra knap til bit
- Brugeren trykker på en knap.
- Fjernbetjeningens mikrocontroller vælger en kommando og en adresse.
- En IR-LED sender korte pulstog med en moduleret carrier, ofte omkring 38 kHz.
- Modtager-modulet filtrerer omgivelseslys og afleverer et digitalt pulssignal.
- Et bibliotek måler pulslængderne og forsøger at genkende protokollen.
Carrier og modulation
IR-modtageren reagerer normalt ikke på konstant infrarødt lys. Senderen tænder og slukker IR-lyset i pulstog omkring en carrier-frekvens. Det gør det lettere at skelne fjernbetjeningens signal fra sollys og lamper.
Det modtagne signal er derfor ikke en direkte kopi af en tekst eller byte. Det er en tidssekvens af mark/space-intervaller, som en protokol fortolker.
Protokoller
- NEC – bruger typisk en leader med adresse, kommando og inverterede kontrolbytes. Bitværdier kendes blandt andet på forskellige space-længder.
- RC-5 – bruger Manchester-kodning, hvor bitinformationen ligger i skift omkring midten af bitperioden.
- Sony SIRC – en familie af Sony-formater med pulslængder og bitrækkefølge, der adskiller sig fra NEC og RC-5.
- Andre formater – mange producenter bruger egne varianter, og nogle fjernbetjeninger sender gentagelsesrammer ved langt tastetryk.
Eksempel fra ELEGOO Uno R4 WiFi-kittet
ELEGOO Lesson 13-sketchens fjernbetjeningskoder matcher NEC's 32-bit format. For eksempel er POWER-koden i sketchen 0xBA45FF00; IRremote viser rådata LSB-first, mens NEC-koden normalt skrives 0x00FFA25D. Det er samme bitfølge vist i forskellig rækkefølge. Den nyere R4-eksempelside udskriver kun rådata, så den viser ikke protokolnavnet direkte.
Konklusionen gælder fjernbetjeningens kodeformat. Hvis en anden fjernbetjening bruges, så verificér protokollen med dekoderens protokolresultat; IRremote understøtter mange protokoller.
En NEC-ramme indeholder normalt adresse, inverteret adresse, kommando og inverteret kommando (8 bit hver), sendt LSB-first. Ved langt tryk kan fjernbetjeningen sende en særskilt kort repeat-ramme.
Vis protokolnavnet i Arduino-eksemplet
Udskriv hele det dekodede resultat i stedet for kun hex-rådata. IRremote viser da bl.a. Protocol=NEC, adresse og kommando:
if (IrReceiver.decode()) {
IrReceiver.printIRResultShort(&Serial);
IrReceiver.resume();
}
Hastighed i byte
IR-fjernbetjeninger har ikke én fælles byte-rate. Som størrelsesorden kan en NEC-fjernbetjening sende en 4-byte ramme på omkring 68 ms, svarende til ca. 60 byte/s mens rammen sendes. Pausen mellem gentagne rammer sænker gennemsnittet yderligere.
Carrier-frekvensen, ofte 38 kHz, beskriver hvor hurtigt IR-LED'en pulserer inde i hvert mark. Den er ikke datahastigheden. Det er protokollens mark/space-tider, der bestemmer hvor hurtigt knapdata kommer frem.
IR-modtager kontra rå fotodiode
Et færdigt 3-benet IR-modul indeholder typisk fotodetektor, forstærkning, filter og demodulation. Dets output er derfor et digitalt signal, som kan læses med en GPIO-pin. En rå fotodiode giver derimod et analogt signal og kræver en anden elektrisk og softwaremæssig behandling.
Arduino-eksempel
Et bibliotek som Arduino-IRremote kan måle og afkode mange almindelige protokoller. Den konkrete protokol, modtagerens pin og biblioteksversion skal kontrolleres i projektets dokumentation.
#include <IRremote.hpp>
const byte receiverPin = 2;
void setup() {
Serial.begin(9600);
IrReceiver.begin(receiverPin, ENABLE_LED_FEEDBACK);
}
void loop() {
if (IrReceiver.decode()) {
Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
IrReceiver.printIRResultShort(&Serial);
IrReceiver.resume();
}
}
Praktiske forbehold
- Modtageren skal have korrekt forsyning og signalniveau.
- IR-LED og modtager skal have fri optisk vej, men ikke nødvendigvis direkte synslinje ved refleksioner.
- Et hex-tal fra en fjernbetjening er ikke nødvendigvis en universel knapværdi; det afhænger af protokol og fjernbetjening.
- Gentagelse ved holdt knap skal behandles særskilt fra et nyt tryk.
Kilder
- Arduino-IRremote dokumentation – understøttede protokoller, NEC-kodning og udskrivning af dekoderesultat.
- SB-Projects: Infra Red Remote Control – protokol- og timingoversigt.