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

  1. Brugeren trykker på en knap.
  2. Fjernbetjeningens mikrocontroller vælger en kommando og en adresse.
  3. En IR-LED sender korte pulstog med en moduleret carrier, ofte omkring 38 kHz.
  4. Modtager-modulet filtrerer omgivelseslys og afleverer et digitalt pulssignal.
  5. 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

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.

Skematisk NEC-signal med 9 millisekunders markør i leaderen, 4,5 millisekunders space, kort space for nul, langt space for et og 38 kilohertz carrier under markøren
NEC sender et 0 sådan: markør i ca. 560 µs, derefter pause i ca. 560 µs. Et 1 sendes sådan: samme markør i ca. 560 µs, derefter pause i ca. 1.690 µs. Altså er markøren lige lang; det er pausens længde, der fortæller om bitværdien. Under markøren pulserer IR-lyset med ca. 38 kHz; i pausen er det slukket. Tegningen er skematisk og ikke i målestok.

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

Kilder