Inhaltsverzeichnis:

Universal-TV-Fernbedienung - Ardiuino, Infrarot - Gunook
Universal-TV-Fernbedienung - Ardiuino, Infrarot - Gunook

Video: Universal-TV-Fernbedienung - Ardiuino, Infrarot - Gunook

Video: Universal-TV-Fernbedienung - Ardiuino, Infrarot - Gunook
Video: How to use Arduino as TV Remote Controller with Infrared 2024, Juli
Anonim
Universal-TV-Fernbedienung - Ardiuino, Infrarot
Universal-TV-Fernbedienung - Ardiuino, Infrarot

Hallo! In diesem anweisbaren zeige ich Ihnen, wie Sie Ihre eigene Universalfernbedienung bauen und programmieren, die mit den meisten Dingen funktioniert, die eine Infrarot-Fernbedienung verwenden, und die auch ein Infrarotsignal "hören" und dekodieren, das von verschiedenen anderen Fernbedienungen gesendet wird.

Ein wenig Hintergrundwissen darüber, was mich dazu inspiriert hat, diese Fernbedienung zu bauen - ich verliere, wie die meisten von Ihnen, ständig meine Fernbedienungen, und diese Katastrophe ist ziemlich frustrierend, also denke ich, lasst es uns lösen! Ich habe diese Fernbedienung gebaut und diskret in meinen maßgefertigten Bettrahmen eingebettet (ich bin auch Holzarbeiter) - ich kann die Fernbedienung nicht verlieren, wenn sie Teil meines Bettrahmens ist!

Lieferungen

Dinge, die Sie benötigen: - Arduino UNO oder Nano - Laufleistung kann mit anderen Boards variieren

-Lötloses Steckbrett (oder lötbares Stripboard, wenn Sie es dauerhafter machen möchten)

-Jumperwires in verschiedenen Farben und Längen

-Kurzzeitdrucktasten (5) (Sie können weitere Tasten hinzufügen, müssen jedoch digitale Pins verwenden, da alle bis auf einen der analogen Pins verwendet werden - Sie müssen sicherstellen, dass Sie die Pull-Up-Widerstände richtig verwenden, oder Widerstände herunterziehen und die Druckknöpfe entprellen)

-10K Ohm Widerstand (5) (wenn Sie mehr Druckknöpfe möchten, benötigen Sie mehr davon)

-470 Ohm Widerstand (2)

-Infrarot-LED

-Rote LED

-Infrarotsensor (ich habe die Teilenummer VS1838B verwendet, Sie könnten einen anderen verwenden, überprüfen Sie einfach die Pinbelegung)

(Optional) Lötkolben, Lötzinn, Lötflussmittel.

Schritt 1: Aufbau der Schaltung:

Aufbau der Schaltung
Aufbau der Schaltung

1). Ich beginne immer gerne mit dem Auslegen meiner Komponenten, da dies immer das Layout auf dem Steckbrett steuert.

-Drück Knöpfe

-LEDS: Die rote LED und die IR-LED sind parallel verdrahtet, sodass Sie sehen können, was die IR-LED macht.

-Sensor

2). Widerstände

- Die fünf 10K-Widerstände, die wir an den Drucktasten angebracht haben, werden als "Pull-Down"-Widerstände bezeichnet. Pull-Down-Widerstände stellen sicher, dass der entsprechende Arduino-Pin 0 Volt (oder zumindest nahe daran) erhält, wenn kein Druckknopf gedrückt wird. Weitere Informationen zu Pulldown- (oder Pullup-) Widerständen finden Sie hier in einer ausführlichen Anleitung:

www.electronics-tutorials.ws/logic/pull-up…

Diese Widerstände sind möglicherweise nicht vollständig erforderlich, aber wenn Sie "Geister" -Stöße erhalten, wird dies höchstwahrscheinlich durch kapazitive Kopplung verursacht und Pull-Down-Widerstände verhindern dies.

3). Stromkreisdrähte

4). 5V und Erdungskabel

Verwenden Sie das bereitgestellte Bild als Referenz! Haben Sie jedoch keine Angst, es für Ihre Bedürfnisse zu ändern!

Schritt 2: Code:

#include const int RECV_PIN = 7; // IR-Sensor-Lesestift Int Button1 = A4; // Am weitesten links int Button2 = A3; // 2. von links int Button3 = A2; // Mittlerer int Button4 = A1; // 2. nach rechts int Button5 = A0; // Am weitesten rechts int LED = 3; // IR-LED und rote LED int val = 0; // Wert ändern IRsend irsend; IRrecv irrecv(RECV_PIN); decode_results-Ergebnisse;

Void setup () {pinMode (Button1, INPUT); pinMode (Button2, INPUT); pinMode (Button3, INPUT); pinMode (Button4, INPUT); pinMode (Button5, INPUT); PinMode (LED, AUSGANG); Serial.begin (9600); irrecv.enableIRIn(); irrecv.blink13(true);} void loop() {{{if (analogRead(Button1)>900)irsend.sendNEC(0xFF02FD, 32); // Verwenden von analogem Lesen anstelle von digitalem Lesen, um Probleme mit der Captive-Kapazität zu vermeiden. hilft auch, die Tasten zu entprellen. // Das analoge Lesen bei 900 ermöglicht einen gewissen Spielraum in den Werten, was bedeutet, dass das Infrarotsignal gesendet wird, auch wenn keine vollen 5 V an den Pin angelegt werden. // aber 900 ist hoch genug, um aufgrund der kapazitiven Kopplungsverzögerung (100);} // RGB-Streifen On&Off {if (analogRead (Button5)> 900) {für (int i = 0; i < 3; i++) // Das Ändern des Wertes in "i < 3" ändert die Anzahl der Male, die das Signal sofort wiederholt. also "i < 2" wird das Signal zweimal wiederholen. // Möglicherweise müssen Sie mit dieser Zahl herumspielen, wenn Ihr Fernseher nicht reagiert. Im Allgemeinen funktionieren 1 oder 3 am besten, wenn dies nicht der Fall ist, versuchen Sie es mit ungeraden Zahlen. // Möglicherweise müssen Sie auch mit den Timing-Werten der Intra-Signalverzögerung spielen, zum Beispiel für mein TV 10 funktioniert, aber 30 nicht. {irsend.sendSony (0xa90, 12); // Sony TV-Stromcode, für mein Fernsehgerät muss der Code 3x3 gesendet werden, also 3 Impulse, dreimal Verzögerung (10); // "Intra-Signalverzögerung" für (int i = 0; i < 3; i++) {irsend.sendSony (0xa90, 12); // "12" ist die Bitnummer, verschiedene Protokolle verlangen unterschiedliche Bitnummern. NEC ist 32, Sony ist 12, Sie können die anderen Verzögerungen (10) nachschlagen; für (int i = 0; i 900) {für (int i = 0; i 900) {für (int i = 0; i 900) {für (int i = 0; i < 3; i++) {irsend.sendSony (0xc90, 12); // Sony TV Power Volume Down delay(100);}}} delay(100);} if (irrecv.decode(&results)) // Der folgende Teil des Codes ermöglicht es Ihnen, Infrarotsignale von verschiedenen Fernbedienungen zu interpretieren. { Serial.println (results.value, HEX); // es wird die Prozedur "NEC, Sony, Etc.." und ein TV-Code "c90, a90, FF02FD" generiert. Sie müssen 0x vor dem TV-Code-Schalter hinzufügen (results.decode_type) {case DENON: Serial.println("DENON"); brechen; Fall NEC: Serial.println("NEC"); brechen; Fall PANASONIC: Serial.println ("PANASONIC"); brechen; Fall SONY: Serial.println ("SONY"); brechen; Fall RC5: Serial.println("RC5"); brechen; Fall JVC: Serial.println("JVC"); brechen; Fall SANYO: Serial.println("SANYO"); brechen; Fall MITSUBISHI: Serial.println ("MITSUBISHI"); brechen; Fall SAMSUNG: Serial.println("SAMSUNG"); brechen; Fall LG: Serial.println("LG"); brechen; Fall RC6: Serial.println("RC6"); brechen; Fall DISH: Serial.println ("DISH"); brechen; Fall SHARP: Serial.println("SHARP"); brechen; Fall WARUM: Serial.println ("WHYNTER"); brechen; Fall AIWA_RC_T501: Serial.println("AIWA_RC_T501"); brechen; Standard: Groß-/Kleinschreibung UNBEKANNT: Serial.println("UNBEKANNT"); Pause;} irrecv.resume();}}

Schritt 3: Code in der Tiefe: Senden von IR-Signalen

Ich beziehe mich auf Codezeilen anhand ihrer Zeilennummer - um mitzumachen, verwenden Sie diesen Link:

pastebin.com/AQr0fBLg

Zuerst müssen wir die IR Remote Library von z3t0 einbinden.

Hier ein Link zur Bibliothek:

github.com/z3t0/Arduino-IRremote

Wenn Sie eine Anleitung benötigen, wie Sie eine Bibliothek richtig herunterladen und in der IDE installieren:

www.arduino.cc/en/guide/libraries

Zeile 1 enthält die Bibliothek.

Als nächstes müssen wir einige Variablen deklarieren, die Zeilen 2-12 tun dies.

Wir verwenden " cost int ", um Variablen zu definieren, die sich nicht ändern, alle bis auf eine fallen in diese Kategorie.

Wir verwenden "int", um Variablen zu definieren, die sich ändern.

Wir müssen einen Pin mit Puls mit Modulation (PWM) für unseren LED-Pin verwenden - jeder Pin, der "~" daneben hat, reicht in meinem Code aus - wir verwenden den digitalen Pin 3.

Als nächstes müssen wir einige Einstellungen vornehmen - dieser Code wird nur einmal ausgeführt, wenn das Arduino eingeschaltet oder zurückgesetzt wird.

Beachten Sie, dass wir unsere Ein- und Ausgänge (15-20) definieren, den seriellen Monitor (21) aktivieren, den IR-Sensor (22) aktivieren und den Arduino anweisen, die Onboard-LED jedes Mal zu blinken, wenn wir ein Signal im Sensor erhalten (23).

Als Nächstes bauen wir unsere Schleife auf - dieser Code wird wiederholt ausgeführt und geht einige Male pro Sekunde von oben nach unten.

In Zeile 25 verwenden wir eine if-Anweisung, die dem Arduino sagt: "Suchen Sie nach diesem bestimmten Kriterium, wenn dieses Kriterium erfüllt ist, tun Sie dieses bestimmte Ding". In diesem Fall ist das Kriterium analogRead(Button1)>900, oder mit anderen Worten - "Arduino, Schauen Sie sich button1 an, den wir zuvor als Pin A4 definiert haben. Wenn das empfangene analoge Signal größer als 900 ist, fahren Sie bitte mit unseren nächsten Anweisungen fort, wenn nicht, bitte weiter". Hier gibt es ein bisschen zu entpacken, also lasst uns eintauchen: Ein analoges Signal auf dem Arduino ist ein Wert gleich oder kleiner als 5 V, wobei 5 V gleich 1023 und 0 V gleich 0 sind. Jede gegebene Spannung zwischen 0 und 5 V kann definiert werden durch eine Zahl, und mit ein bisschen Mathematik können wir diese Zahl herausfinden oder umgekehrt eine Spannung. Dividieren Sie 1024 (wir schließen 0 als Einheit ein) durch 5, das ergibt 204,8. Zum Beispiel verwenden wir die Zahl 900, um das in Spannung zu übersetzen, wir teilen einfach 900 durch 204,8, was uns ~4,4 V ergibt. Wir sagen dem Arduino, dass er nach einer Spannung von mehr als ~ 4,4 Volt suchen soll, und wenn dies der Fall ist, führen Sie unsere nächste Anweisung aus.

Apropos nächste Anweisungen (Zeile 25), wir sehen irsend.sendNEC(0xFF02FD, 32). Dies sagt "Arduino, sende einen modulierten Impuls, der dem NEC-Protokoll folgt, insbesondere dem FF02FD-Signal, und stelle sicher, dass es 32 Bit lang ist". Dadurch flackert unsere IR-LED so, dass andere Geräte es verstehen können. Stellen Sie es sich ein bisschen wie Morsecode vor, aber nur mit unsichtbarem Licht! Es gibt viele verschiedene Protokolle, jedes mit Hunderten, wenn nicht Tausenden von Einzelsignalen und jedes mit seiner spezifischen Bitnummer - unser Gerät wird eine große Menge dieser Signale erkennen können, aber darauf werden wir später eingehen!

In Zeile 28 haben wir unsere erste Verzögerung - dies dient dazu, unbeabsichtigte Wiederholungssignale zu verhindern. Sobald die Taste gedrückt und das IR-Signal gesendet wurde, haben wir 100 Millisekunden Zeit, um unseren Finger von der Taste zu lösen. das klingt nicht nach viel Zeit, aber in der Praxis scheint es gut zu funktionieren. Die Verzögerungsfunktion teilt dem Arduino mit, "X Millisekunden lang nichts zu tun" und als Referenz sind es 1000 Millisekunden in einer Sekunde.

Weiter zu unserer nächsten Taste in Zeile 29, button5 (ich hatte ursprünglich 4 Tasten auf dieser Fernbedienung, fügte eine fünfte hinzu, deshalb sind wir außer Betrieb). Dies ist im Grunde dasselbe wie Schaltfläche 1, jedoch mit einigen wichtigen Unterschieden. Der erste Unterschied, den Sie sehen werden, ist eine for-Anweisung – dies ist im Wesentlichen eine weitere Schleife – eine Schleife mit einer anderen größeren Schleife, Loopception. Konkret haben wir " for (int i = 0; i < 3; i++) ", lesen Sie dies als "Arduino, fangen wir bei 0 an, wiederholen Sie die folgenden Anweisungen, bis wir zu 3 Mal kommen". Die for-Funktion wird verwendet, weil viele Geräte so programmiert sind, dass sie nach einem wiederholten Signal suchen, und in unserem Fall hier dreimal. Sie können die Nummer 3 einfach in eine andere Nummer ändern, wenn Ihr Gerät einen anderen Wiederholungsplan anfordert. Ein weiterer wichtiger Unterschied zu button5 besteht darin, dass es dreimal oder 3x3 wiederholt wird. Mit anderen Worten, wir senden das Signal dreimal, warten 10 Millisekunden, senden es dreimal, warten weitere 10 Millisekunden und senden es dann erneut dreimal. Diese Art der Kommunikation ist üblich, um Geräte ein- und auszuschalten und könnte genau das sein, was Ihr Fernseher oder Gerät erfordert - der Schlüssel dazu ist, mit allen Variablen herumzuspielen, bis Sie das gewünschte Ergebnis erhalten. Ändern Sie den kurzen Verzögerungswert, ändern Sie den für Wiederholungswert, senden Sie 6 Stapel statt 3 usw. Geräte sind absichtlich mit willkürlichen Signalregeln programmiert. Stellen Sie sich vor, Ihre TV-Fernbedienung sendet das gleiche Signal wie Ihre Soundbar; Jedes Mal, wenn Sie den Kanal Ihres Fernsehers wechseln, schaltet sich Ihre Soundbar aus - deshalb gibt es andere Signalregeln.

Die nächsten drei Tasten sind zumindest teilweise mit den gleichen Prinzipien wie oben beschrieben programmiert - wir können also bis zu Zeile 55 springen.

Schritt 4: Code in der Tiefe: Empfangen von IR-Signalen

Code im Detail: Empfangen von IR-Signalen
Code im Detail: Empfangen von IR-Signalen

In Zeile 55 beginnen wir mit der Programmierung des Arduino, um von anderen Fernbedienungen gesendete IR-Signale zu interpretieren - dies ist notwendig, damit Sie die Protokolle und Signale herausfinden können, die Ihre Fernbedienungen verwenden. Die erste Codezeile in Zeile 55 ist if (irrecv.decode(&results) lese dies als "Arduino, suche nach einem IR-Code, wenn du einen findest, gib einen wahren Wert zurück, wenn nichts gefunden, gib false zurück. Wenn wahr, aufzeichnen die Informationen in "Ergebnisse"".

In Zeile 56 haben wir Serial.println (results.value, HEX) mit der Aufschrift "Ardunio, drucke die Ergebnisse im seriellen Monitor in einem HEX-Format aus". Hex, was hexadezimal bedeutet, ist eine Möglichkeit, eine binäre Zeichenfolge (nur 0 und 1) in etwas einfacher einzugebendes Zeichen zu verkürzen. Zum Beispiel ist 101010010000 "a90", der Code zum Aus- und Einschalten meines Fernsehers, und 111111110000001011111101 ist 0xFF02FD, der meinen RGB-Streifen steuert. Sie können das obige Diagramm verwenden, um Binär in Hex zu konvertieren und umgekehrt, oder Sie können den folgenden Link verwenden:

www.rapidtables.com/convert/number/hex-to-…

Bis Zeile 57 haben wir eine neue Funktion, die als Schalterfall bezeichnet wird.

Im Wesentlichen ermöglicht uns ein Switch-Case, verschiedene Anweisungen basierend auf den Ergebnissen einer gegebenen Variablen (Case) zu spezifizieren. Der Break beendet die switch-Anweisung und wird am Ende jeder Anweisung verwendet.

Wir verwenden hier das Schaltergehäuse, um zu ändern, wie wir im seriellen Monitor drucken, basierend auf den Protokollen, die unser Arduino von den verschiedenen Fernbedienungen erkennt.

Schritt 5: Fazit

Wenn Sie eine Frage haben - kontaktieren Sie mich gerne hier! Ich freue mich, Ihnen so gut wie möglich zu helfen.

Ich hoffe, Sie haben etwas gelernt, mit dem Sie Ihr Leben ein bisschen besser machen können!

-RB

Empfohlen: