Projekt 29 IR-Fernbedienung

1. Beschreibung

Die IR-Fernbedienung verwendet IR-Signale zur Steuerung einer LED, was den Prozess der LED-Steuerung erheblich vereinfacht.

2. Funktionsprinzip

In diesem Projekt verwenden wir häufig einen Träger mit etwa 38K zur Modulation.

Das IR-Fernbediensystem umfasst Modulation, Aussendung und Empfang. Es sendet Daten durch Modulation, was die Übertragungseffizienz verbessert und den Stromverbrauch reduziert.

Im Allgemeinen liegt die Frequenz der Trägermodulation im Bereich von 30kHz bis 60kHz (meist 38kHz). Das Tastverhältnis der Rechteckwelle beträgt 1/3, wie unten gezeigt, und wird durch den 455kHz Quarzoszillator auf der Senderseite bestimmt.

Eine ganzzahlige Frequenzteilung ist für den Quarzoszillator an dieser Stelle unerlässlich, und der Frequenzfaktor beträgt üblicherweise 12. Daher gilt: 455kHz ÷ 12 ≈ 37,9kHz ≈ 38kHz.

38kHz Träger (vollständig) Aussendediagramm:

Trägerfrequenz: 38kHz

Wellenlänge: 940nm

Empfangswinkel: 90°

Steuerabstand: 6M

Schaltplan der Fernbedienungstasten:

3. Anschlussdiagramm

4. Testcode

/*
  keyestudio ESP32 Inventor Learning Kit  
  Project 29.1 IR Remote Control
  http://www.keyestudio.com
*/
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

const uint16_t recvPin = 19;  // Infrarot-Empfangspin
IRrecv irrecv(recvPin);  // Erstellen eines Klassenobjekts zum Empfang
decode_results results;   // Erstellen eines Objekts für Dekodierungsergebnisse
long ir_rec;

void setup()
{
  Serial.begin(9600); // Initialisiert die serielle Schnittstelle und setzt die Baudrate auf 9600
  irrecv.enableIRIn(); // Startet den Empfang von Signalen
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    ir_rec = results.value; // Weist das Signal der Variablen ir_rec zu
    if(ir_rec != 0)
    {		// Verhindert, dass der Code bei gedrückter Taste mehrfach ausgeführt wird
        Serial.print(ir_rec, HEX); // Gibt die Variable ir_rec im Hexadezimalformat aus
        Serial.println();// Zeilenumbruch
    }
    irrecv.resume(); // Gibt die IR-Fernbedienung frei und empfängt den nächsten Wert.
  }
} 

5. Testergebnis

Nach dem Anschluss der Verkabelung und Hochladen des Codes öffnen Sie den seriellen Monitor und stellen die Baudrate auf 9600 ein.

Drücken Sie eine Taste auf der Fernbedienung, und Sie sehen den Wert im Hexadezimalformat.

6. Wissensvertiefung

Als Nächstes verwenden wir eine IR-Fernbedienung, um die LED zu steuern. Drücken Sie OK, um die LED einzuschalten, und drücken Sie erneut, um sie auszuschalten.

Anschlussdiagramm:

Code:

/*
  keyestudio ESP32 Inventor Learning Kit 
  Project 29.2 IR Remote Control
  http://www.keyestudio.com
*/
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

int led = 25;
int led_val = 0;
const uint16_t recvPin = 19;  // Infrarot-Empfangspin
IRrecv irrecv(recvPin);       // Erstellen eines Klassenobjekts zum Empfang
decode_results results;       // Erstellen eines Objekts für Dekodierungsergebnisse
long ir_rec;

void setup() 
{
  Serial.begin(9600);   // Initialisiert die serielle Schnittstelle und setzt die Baudrate auf 9600
  irrecv.enableIRIn();  // Startet den Empfang von Signalen
  pinMode(led, OUTPUT);
}

void loop() 
{
  if (irrecv.decode(&results)) 
  {
    ir_rec = results.value;      // Weist das Signal der Variablen ir_rec zu
    if (ir_rec != 0) 
    {           // Verhindert, dass der Code bei gedrückter Taste mehrfach ausgeführt wird
      if (ir_rec == 0xFF02FD) // Prüft, ob das empfangene IR-Signal von der OK-Taste stammt
      {  
        led_val = !led_val;      // Kehrt die Variable um. Wenn der Anfangswert 0 ist, wird er nach der Umkehrung 1
        digitalWrite(led, led_val);
      }
    }
    irrecv.resume();  // Gibt die IR-Fernbedienung frei und empfängt den nächsten Wert.
  }
}

Testergebnis:

Drücken Sie OK, um die LED einzuschalten, und drücken Sie erneut, um sie auszuschalten.