IR-Sender mit Arduino Mega
2 verfasser
Seite 1 von 1
IR-Sender mit Arduino Mega
Aufgabe des Projekts
Einen funktionierenden Infrarot Sender mit dem Arduino Mega bauen und programmieren.
Vorgehen:
1) Schaltung
Die Schaltung wurde wie folgt realisiert: Der Pin 9 wird über einen 500 Ohm Widerstand mit der Base eines Transistors vom Typ BC547 verbunden. Der Emitter liegt auf Masse und am Kollektor ist die Kathode meiner IR-LED. Die Anode hängt direkt an +5V.
2) Programmieren
Für das Programm habe ich die IRLib Library verwendet. Mit dieser Bibliothek gestaltete sich der Code recht einfach.
3) Code
Prinzipielle Erklärung: Es wird permanent gecheckt ob es eine Eingabe im Serial Monitor gibt. Wenn es eine Eingabe gibt wird gesucht was es für ein Zeichen ist und je nach Zeichen sendet der Sender einen anderen von mir bestimmten Hex-Code.
Anmerkung
Die IRLib kann IR-Signale mit verschiedenen Protokollen codieren. Für mein Programm habe ich das Sony Protokoll gewählt.
Es ist wichtig Pin 9 als OUTPUT zu verwenden, da in der Library der Pin 9 extra modifiziert wurde um das Gewünschte zu tun. (Es ist nur beim Arduino Mega Pin 9, beim Uno ist es z.B. Pin 3)
Einen funktionierenden Infrarot Sender mit dem Arduino Mega bauen und programmieren.
Vorgehen:
1) Schaltung
Die Schaltung wurde wie folgt realisiert: Der Pin 9 wird über einen 500 Ohm Widerstand mit der Base eines Transistors vom Typ BC547 verbunden. Der Emitter liegt auf Masse und am Kollektor ist die Kathode meiner IR-LED. Die Anode hängt direkt an +5V.
2) Programmieren
Für das Programm habe ich die IRLib Library verwendet. Mit dieser Bibliothek gestaltete sich der Code recht einfach.
3) Code
Prinzipielle Erklärung: Es wird permanent gecheckt ob es eine Eingabe im Serial Monitor gibt. Wenn es eine Eingabe gibt wird gesucht was es für ein Zeichen ist und je nach Zeichen sendet der Sender einen anderen von mir bestimmten Hex-Code.
- Code:
#include <IRLib.h>
int input;
IRsend IR_Sender; //Sender erstellen
void setup()
{
Serial.begin(9600);
}
void loop() {
if(Serial.available() > 0){ //Wenn im Serial Monitor etwas eingegeben wird
input = Serial.read(); //Die Variable Input hat nun den Wert der Serial Monitor Eingabe
switch(input){
case '0': IR_Sender.send(SONY,0x910, 20); Serial.println("0 was sendt"); break; //Wenn eine Zahl zwischen 0 und 9 eingegeben
case '1': IR_Sender.send(SONY,0x10, 20); Serial.println("1 was sendt"); break; //wird sendet der Sender eine
case '2': IR_Sender.send(SONY,0x810, 20); Serial.println("2 was sendt"); break; //vorgegebene Hex-Zahl.Die Zahl wird mit
case '3': IR_Sender.send(SONY,0x410, 20); Serial.println("3 was sendt"); break; //dem Sony-Protokoll codiert.
case '4': IR_Sender.send(SONY,0xC10, 20); Serial.println("4 was sendt"); break; //Außerdem wird eine Nachricht ausgegeben,
case '5': IR_Sender.send(SONY,0x210, 20); Serial.println("5 was sendt"); break; //welche die erfolgreiche Sendung zeigt.
case '6': IR_Sender.send(SONY,0xA10, 20); Serial.println("6 was sendt"); break;
case '7': IR_Sender.send(SONY,0x610, 20); Serial.println("7 was sendt"); break;
case '8': IR_Sender.send(SONY,0xE10, 20); Serial.println("8 was sendt"); break;
case '9': IR_Sender.send(SONY,0x110, 20); Serial.println("9 was sendt"); break;
}
}
}
Anmerkung
Die IRLib kann IR-Signale mit verschiedenen Protokollen codieren. Für mein Programm habe ich das Sony Protokoll gewählt.
Es ist wichtig Pin 9 als OUTPUT zu verwenden, da in der Library der Pin 9 extra modifiziert wurde um das Gewünschte zu tun. (Es ist nur beim Arduino Mega Pin 9, beim Uno ist es z.B. Pin 3)
Zuletzt von Dylan Baumann am Do März 03, 2016 3:30 pm bearbeitet; insgesamt 3-mal bearbeitet
Dylan Baumann- Admin
- Anzahl der Beiträge : 4
Anmeldedatum : 23.02.16
Alter : 25
Ort : 3AHET
Nico Szawlowski- Anzahl der Beiträge : 2
Anmeldedatum : 23.02.16
Alter : 25
IR-Sender mit Arduino Mega [reworked]
Vorwort:
Ich habe es mir zur Aufgabe gesetzt, dass der Sender nicht nur Zahlen sondern auch Buchstaben und Sonderzeichen senden kann. Des Weiteren kann man auch die Zeile wechseln.Das Ganze wir parallel zum Empfänger auch im Serial-Monitor des Senders ausgegeben.
Kurz gesagt: Man kann jetzt ganze Texte senden.
Schaltung: Die Schaltung bleibt unverändert, siehe Originalbeitrag.
Code: Das Prinzip bleibt unverändert, nur gibt es mehr Codes die die der Sender senden kann. Außerdem wird jetzt nach jedem gesendeten Zeichen 500ms gewartet, da der Empfänger sonst zu träge ist um alle Signal zu empfangen.
Ich habe es mir zur Aufgabe gesetzt, dass der Sender nicht nur Zahlen sondern auch Buchstaben und Sonderzeichen senden kann. Des Weiteren kann man auch die Zeile wechseln.Das Ganze wir parallel zum Empfänger auch im Serial-Monitor des Senders ausgegeben.
Kurz gesagt: Man kann jetzt ganze Texte senden.
Schaltung: Die Schaltung bleibt unverändert, siehe Originalbeitrag.
Code: Das Prinzip bleibt unverändert, nur gibt es mehr Codes die die der Sender senden kann. Außerdem wird jetzt nach jedem gesendeten Zeichen 500ms gewartet, da der Empfänger sonst zu träge ist um alle Signal zu empfangen.
- Code:
#include <IRLib.h> //Library muss erst downgeloadet werden
int input;
IRsend IR_Sender; //Sender definieren
void setup()
{
Serial.begin(9600); //Beginne Serielle Übertragung
Serial.print("/////Starte Uebertragung/////"); //Nachricht zum Übertragungsstart
Serial.println("");
Serial.print("#: "); //Erstelle erste Übertragungszeile
}
void loop() {
if(Serial.available() > 0){ //Wenn es eine Eingabe im Serial Monitor gibt
input = Serial.read(); //Die Eingabe des Serial Monitors als input-Variable definieren
switch(input){
case '0': IR_Sender.send(SONY,0x910, 20); Serial.print("0"); delay(500); break; //Zahlen Anfang
case '1': IR_Sender.send(SONY,0x10, 20); Serial.print("1"); delay(500); break;
case '2': IR_Sender.send(SONY,0x810, 20); Serial.print("2"); delay(500); break;
case '3': IR_Sender.send(SONY,0x410, 20); Serial.print("3"); delay(500); break;
case '4': IR_Sender.send(SONY,0xC10, 20); Serial.print("4"); delay(500); break;
case '5': IR_Sender.send(SONY,0x210, 20); Serial.print("5"); delay(500); break;
case '6': IR_Sender.send(SONY,0xA10, 20); Serial.print("6"); delay(500); break;
case '7': IR_Sender.send(SONY,0x610, 20); Serial.print("7"); delay(500); break;
case '8': IR_Sender.send(SONY,0xE10, 20); Serial.print("8"); delay(500); break;
case '9': IR_Sender.send(SONY,0x110, 20); Serial.print("9"); delay(500); break; //Zahlen Ende
case 'a': IR_Sender.send(SONY,0x120, 20); Serial.print("a"); delay(500); break; //Alphabet Anfang
case 'b': IR_Sender.send(SONY,0x220, 20); Serial.print("b"); delay(500); break;
case 'c': IR_Sender.send(SONY,0x320, 20); Serial.print("c"); delay(500); break;
case 'd': IR_Sender.send(SONY,0x420, 20); Serial.print("d"); delay(500); break;
case 'e': IR_Sender.send(SONY,0x520, 20); Serial.print("e"); delay(500); break;
case 'f': IR_Sender.send(SONY,0x620, 20); Serial.print("f"); delay(500); break;
case 'g': IR_Sender.send(SONY,0x720, 20); Serial.print("g"); delay(500); break;
case 'h': IR_Sender.send(SONY,0x820, 20); Serial.print("h"); delay(500); break;
case 'i': IR_Sender.send(SONY,0x920, 20); Serial.print("i"); delay(500); break;
case 'j': IR_Sender.send(SONY,0x130, 20); Serial.print("j"); delay(500); break;
case 'k': IR_Sender.send(SONY,0x230, 20); Serial.print("k"); delay(500); break;
case 'l': IR_Sender.send(SONY,0x330, 20); Serial.print("l"); delay(500); break;
case 'm': IR_Sender.send(SONY,0x430, 20); Serial.print("m"); delay(500); break;
case 'n': IR_Sender.send(SONY,0x530, 20); Serial.print("n"); delay(500); break;
case 'o': IR_Sender.send(SONY,0x630, 20); Serial.print("o"); delay(500); break;
case 'p': IR_Sender.send(SONY,0x730, 20); Serial.print("p"); delay(500); break;
case 'q': IR_Sender.send(SONY,0x830, 20); Serial.print("q"); delay(500); break;
case 'r': IR_Sender.send(SONY,0x930, 20); Serial.print("r"); delay(500); break;
case 's': IR_Sender.send(SONY,0x140, 20); Serial.print("s"); delay(500); break;
case 't': IR_Sender.send(SONY,0x240, 20); Serial.print("t"); delay(500); break;
case 'u': IR_Sender.send(SONY,0x340, 20); Serial.print("u"); delay(500); break;
case 'v': IR_Sender.send(SONY,0x440, 20); Serial.print("v"); delay(500); break;
case 'w': IR_Sender.send(SONY,0x540, 20); Serial.print("w"); delay(500); break;
case 'x': IR_Sender.send(SONY,0x640, 20); Serial.print("x"); delay(500); break;
case 'y': IR_Sender.send(SONY,0x740, 20); Serial.print("y"); delay(500); break;
case 'z': IR_Sender.send(SONY,0x840, 20); Serial.print("z"); delay(500); break; //Alphabet Ende
case ' ': IR_Sender.send(SONY,0x940, 20); Serial.print(" "); delay(500); break; //Leerzeile
case '+': IR_Sender.send(SONY,0x250, 20); Serial.println(""); Serial.print("#: "); delay(500); break; //Zeilenwechsel#
case ',': IR_Sender.send(SONY,0x350, 20); Serial.print(","); delay(500); break; //Sonderzeichen Anfang
case '.': IR_Sender.send(SONY,0x450, 20); Serial.print("."); delay(500); break;
case ':': IR_Sender.send(SONY,0x550, 20); Serial.print(":"); delay(500); break;
case '!': IR_Sender.send(SONY,0x650, 20); Serial.print("!"); delay(500); break;
case '^': IR_Sender.send(SONY,0x750, 20); Serial.print("^"); delay(500); break;
case '$': IR_Sender.send(SONY,0x950, 20); Serial.print("$"); delay(500); break;
case '%': IR_Sender.send(SONY,0x160, 20); Serial.print("%"); delay(500); break;
case '&': IR_Sender.send(SONY,0x260, 20); Serial.print("&"); delay(500); break;
case '/': IR_Sender.send(SONY,0x360, 20); Serial.print("/"); delay(500); break;
case '(': IR_Sender.send(SONY,0x460, 20); Serial.print("("); delay(500); break;
case ')': IR_Sender.send(SONY,0x560, 20); Serial.print(")"); delay(500); break;
case '=': IR_Sender.send(SONY,0x660, 20); Serial.print("="); delay(500); break;
case '?': IR_Sender.send(SONY,0x760, 20); Serial.print("?"); delay(500); break;
case '#': IR_Sender.send(SONY,0x860, 20); Serial.print("#"); delay(500); break;
case ';': IR_Sender.send(SONY,0x960, 20); Serial.print(";"); delay(500); break; //Sonderzeichen Ende
}
}
}
Dylan Baumann- Admin
- Anzahl der Beiträge : 4
Anmeldedatum : 23.02.16
Alter : 25
Ort : 3AHET
Seite 1 von 1
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten
|
|