IR-Sender mit Arduino Mega

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten

IR-Sender mit Arduino Mega

Beitrag von Dylan Baumann am Mi Feb 24, 2016 8:39 am

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.
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 : 18
Ort : 3AHET

Nach oben Nach unten

Re: IR-Sender mit Arduino Mega

Beitrag von Nico Szawlowski am Mi Feb 24, 2016 3:38 pm

bounce bounce bounce
avatar
Nico Szawlowski

Anzahl der Beiträge : 2
Anmeldedatum : 23.02.16
Alter : 18

Nach oben Nach unten

IR-Sender mit Arduino Mega [reworked]

Beitrag von Dylan Baumann am Mo Feb 29, 2016 9:43 am

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.
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 : 18
Ort : 3AHET

Nach oben Nach unten

Re: IR-Sender mit Arduino Mega

Beitrag von Gesponserte Inhalte


Gesponserte Inhalte


Nach oben Nach unten

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben

- Ähnliche Themen

 
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten