Arduino, IR Fernbedienung dekodieren 9.10.2015 Im Zuge meiner weiteren Arduino Studien bin ich auf die Frage gestoßen, wie kann man Befehle in den Arduino transportieren? Aus einem Youtube Beitrag über Robotersteuerung mit Arduino entnahm ich, daß eine IR Fernbedienung (Audio Standard) sich als Befehls-Eingabemedium gut eignet. Die Aufgabe war, die seriell mit einer IR Fernbedienung gesendeten Befehle in den Arduino einzulesen, dort zu dekodieren und sie an Digitalausgänge einzeln auszugeben. Die Fernbedienung und das aus einem Fernseher ausgeschlachtete IR Epfängermodul: Also gings an die Arbeit: 1 Die Hardware dazu: Als erstes mußten die aus dem IR Empfängermodul kommenden Signale hardwaremäßig für den Arduino aufbereitet werden, dies geschieht auf dem unteren Steckbrett. In der Mitte mein Arduino Nachbau, oben die Ausgabe auf 16 digitale Ausgänge (LEDs): 2 Das Schaltbild (hergestellt mit Abacom sPlan) zeigt oben die Signalaufbereitung und unten die Ausgabe auf die LED Arrays, 16 Tasten der Fernbedienung sind jetzt jeweils einem Ausgang des Arduino zugeordnet: Aus der Schaltung entstand dann die Platine hergestellt mit Abacom Sprint Layout: 3 Das ist der Bestückungsplan der Platine: Der Entwurf des Platinenaufdrucks: 4 Jetzt wird die fertige Platine ausprobiert: Das Empfangsteil und die Signalaufbereitung auf der linken Seite: 5 Die Platine in Gesamtansicht: Das ist die Arduino Platine mit dem Adapter, auf dem das IR Dekoder Shield platziert wird: 6 Zusammengesteckt sieht das so aus: Detaillansicht: 7 Jetzt gehts ans Programmieren: Die Arduino Software: 8 Die Zuordnung der Fernbedienungstasten zu den Arduino Ausgängen: Fernbedienung Ausgang Arduino Text Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED LED Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste Taste 0 9 8 7 6 5 4 3 2 1 auf ab links rechts ein LS an an an an an an an an an an an an an an an an Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin Pin 2 3 4 5 6 7 8 9 10 11 A0 A1 A2 A3 A4 A5 0 9 8 7 6 5 4 3 2 1 auf ab links rechts Ein LS Der Programmcode, erste Versuche, und es funktioniert: /* Arduino IR Shield Philips Fernbedienung SRP1 101/10, programmiert auf Loewe digi code 1660. */ #include <IRremote.h> int RECV_PIN = 13; int state; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); pinMode (2, OUTPUT); pinMode (3, OUTPUT); pinMode (4, OUTPUT); pinMode (5, OUTPUT); pinMode (6, OUTPUT); pinMode (7, OUTPUT); pinMode (8, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, INPUT); //einbinden Unterprogramm //Eingangspin fuer neg. Infrarot-Signal //serial //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin //an Pin Monitor einschalten 2 wird LED2 angeschlossen. 3 wird LED3 angeschlossen. 4 wird LED4 angeschlossen. 5 wird LED5 angeschlossen. 6 wird LED6 angeschlossen. 7 wird LED7 angeschlossen. 8 wird LED8 angeschlossen. 9 wird LED9 angeschlossen. 10 wird LED10 angeschlossen. 11 wird LED11 angeschlossen. 12 wird LED12 angeschlossen. pinMode pinMode pinMode pinMode pinMode pinMode //an //an //an //an //an //an A0 A1 A2 A3 A4 A5 (A0, (A1, (A2, (A3, (A4, (A5, OUTPUT); OUTPUT); OUTPUT); OUTPUT); OUTPUT); OUTPUT); irrecv.enableIRIn(); } void loop() { if (digitalRead(12)==LOW) { digitalWrite (2, LOW); digitalWrite (3, LOW); digitalWrite (4, LOW); digitalWrite (5, LOW); digitalWrite (6, LOW); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, LOW); digitalWrite (A0, LOW); digitalWrite (A1, LOW); digitalWrite (A2, LOW); digitalWrite (A3, LOW); digitalWrite (A4, LOW); digitalWrite (A5, LOW); } if (irrecv.decode(&results)) { //Beginn Setup Pin Pin Pin Pin Pin Pin LED LED LED LED LED LED A0 A1 A2 A3 A4 A5 angeschlossen. angeschlossen. angeschlossen. angeschlossen. angeschlossen. angeschlossen. //wenn Eingang 12 (Taste gedrueckt ist low dann ... // // // // // // // // // // // // // // // // Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang Ausgang 2 low 3 low 4 low 5 low 6 low 7 low 8 low 9 low 10 low 11 low A0 low A1 low A2 low A3 low A4 low A5 low // wenn die IR Bibliothek ein decodiertes Signal liefert ... 9 Serial.println(results.value, DEC); // ... dann soll dieses auf der Ser. Schnittstelle ausgegeben werden if if if if if if if if if if if if if if if if (results.value==3772784863) (results.value==3772817503) (results.value==3772801183) (results.value==3772780783) (results.value==3772813423) (results.value==3772797103) (results.value==3772788943) (results.value==3772821583) (results.value==3772805263) (results.value==3772811383) (results.value==3772795063) (results.value==3772778743) (results.value==3772829743) (results.value==3772833823) (results.value==3772793023) (results.value==3772837903) Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println Serial.println if (digitalRead(12)==HIGH) Serial.println ("Taste gedrueckt"); if if if if if if if if if if if if if if if if (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value (results.value == == == == == == == == == == == == == == == == 3772784863) 3772817503) 3772801183) 3772780783) 3772813423) 3772797103) 3772788943) 3772821583) 3772805263) 3772811383) 3772795063) 3772778743) 3772829743) 3772833823) 3772793023) 3772837903) ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste ("Taste //Eingang 12, {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite {digitalWrite 1"); 2"); 3"); 4"); 5"); 6"); 7"); 8"); 9"); 0"); auf"); ab"); links"); rechts"); ein/aus"); LS"); //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print //Print Print "Taste gedrueckt" (11, HIGH);} (10, HIGH);} (9, HIGH);} (8, HIGH);} (7, HIGH);} (6, HIGH);} (5, HIGH);} (4, HIGH);} (3, HIGH);} (2, HIGH);} (A0, HIGH);} (A1, HIGH);} (A2, HIGH);} (A3, HIGH);} (A4, HIGH);} (A5, HIGH);} irrecv.resume(); } } /* Fernbedienung Taste 0 1 2 3 4 5 6 7 8 9 nach oben nach unten nach links nach rechts ein/aus Lautspr. */ "Taste1" "Taste2" "Taste3" "Taste4" "Taste5" "Taste6" "Taste7" "Taste8" "Taste9" "Taste0" "Taste auf" "Taste ab" "Taste links" "Taste rechts" "Taste ein/aus" "Taste LS" //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste //Taste 1, LED11 High 2, LED10 High 3, LED9 High 4, LED8 High 5, LED7 High 6, LED6 High 7, LED5 High 8, LED4 High 9, LED3 High 0, LED2 HIGH auf, LED A0 HIGH ab, LED A1 HIGH links, LED A2 HIGH rechts,LED A3 HIGH ein/aus,LED A4 HIGH LS, LED A5 HIGH // Receive the next value Philips SRP1 101/10, digi code 1660 Code (dezimal) 3772811383 3772784863 3772817503 3772801183 3772780783 3772813423 3772797103 3772788943 3772821583 3772805263 3772795063 3772778743 3772829743 3772833823 3772793023 3772837903 Die Copyrights: IRrecvDemo - demonstrates receiving IR codes with IRrecv Version 0.1 July, 2009, Copyright 2009 Ken Shirriff, http://arcfn.com, <IRremote.h>. Vielleicht hat auch diese Doku einige Anregungen zum Nachmachen. Gruß Günter Kurschatke 10
© Copyright 2024 ExpyDoc