Fernbedienung

Liebe Community, ich hätte eine kleine Bitte, ich habe einen Programm für einen Arduino Uno geschrieben für ein Schulprojekt. Da ich noch ein ganzes Set mit Zubehör für diesen Arduino hatte, und bei diesem eine Fernbedienung dabei war, würde ich gerne die 8 LEDs per Fernbedienung (4 mit einem Knopf der Fernbedienung, 2 mit einem anderen und die letzten 2 auch mit einem anderen Knopf) steuern. Ich habe mich jetzt schon Stunden im Internet informiert wie dies funktioniert. Da ich bis jetzt noch nicht annähernd verstanden habe wie es geht und ich sowieso kaum Erfahrung mit Arduinos habe und auch nicht vorhabe diese je wieder zu benutzen wäre ich demjenigen der mir das machen könnte sehr dankbar. Wäre wenn es funktioniert auch bereit einen kleinen Obolus zu geben.

Mit diesem Programm würde ich gerne bei Knopfdruck (von der Fernbedienung) 4 Lichter an/aus gehen lassen, die anderen jeweils 2 LEDs sollen bei Knopfdruck (von der Fernbedienung) 3mal Blinken mit einer Blinkzeit von 1,2 Sekunden (Also 0,36 Sekunden aus und 0,6 Sekunden an).

Auf der Fernbedienung sollte dass dann ungefähr so aussehen:

Genauere Informationen zur Fernbedienung gibt es HIER

Mit freundlichen Grüßen Vincent Uiker

push

In meinem Verständnis ist dieses Forum ein Ort wo Wissen geteilt und ausgetauscht wird. Ich denke, dass es nicht die Idee war, dass jemand hier eine Aufgabe reinstellt und verlangt, dass ein anderer diese für einen erledigt. Bestimmt wäre es für viele kein Problem diese Aufgabe zu erledigen, aber ich denke das würde am Sinn vorbeigehen. Es ist nicht persönlich gegegn dich gerichtet, aber ich denke, mit der Einstellung wirst du auf wenig Erfolg stoßen. Du sagst es sei für ein Schulprojekt, und Schule ist schließlich dafür da, dass DU was lernst und nicht einfach die Arbeit den anderen überlässt. So einfach geht's dann doch nicht. ;) Wenn du einen Ansatz, z. B. den Quellcode wo du grade festhängst, postest oder erklärst, was genau du nicht verstehst, wird dir bestimmt jemand helfen können.

Gruß, Marv

Sehe ich genauso, dem ist nichts hinzuzufügen.

Außer vielleicht, dass man hier in der Regel binnen Minuten/Stunden eine Anwort auf eine konkrete Frage bekommt, welche möglichst präzise beschreibt, was Du schon getan hast und an welchem Punkt Du nicht weiterkommst.

Grüße

Helmuth

ich weiß was du meinst, ich habe auch bereits das Programm für die LEDs geschrieben aber mit Tastern. Jedoch versteh ich nicht im Ansatz wie das mit der Fernbedienung funktioniert. Bei mir nimmt Das Arduino Programm nicht einmal die library an. Und das ist nicht das Schulprojekt, es wäre lediglich ein gutes Zubehör für das eigentliche Projekt ;)

P.S. Das Projekt ist ein Auto, und ich würde damit gerne die Beleuchtung machen^^ (Fürs ABI)

Hier das was ich schon geschrieben habe:

const int buttonPinSchein = 2;
const int buttonPinLeft = 3;
const int buttonPinRight = 4;
const int ledPinLeft = 12;
const int ledPinRight = 11;
const int ledPin = 13;


int state = 0;
int stateLeft = 0;
int stateRight = 0;
int ledState;
int oldState = 1;

void setup()
{
  pinMode (ledPin, OUTPUT);
  pinMode (ledPinLeft, OUTPUT);
  pinMode (ledPinRight, OUTPUT);
  pinMode (buttonPinSchein, INPUT);
  pinMode (buttonPinLeft, INPUT);
  pinMode (buttonPinLeft, INPUT);
}

void loop()
{
  state = digitalRead (buttonPinSchein);
  oldState=1;
  if (oldState == 1 && state == HIGH)
  {
    if (ledState == 0)
    {
      digitalWrite (ledPin, HIGH);
      ledState = 1;
      delay (500);
    }
    else
    {
      digitalWrite (ledPin, LOW);
      ledState = 0;
      delay (500);
    }
  }
  oldState=state;
  stateLeft = digitalRead (buttonPinLeft);
  if (stateLeft == HIGH)
  {
    digitalWrite (ledPinLeft, HIGH);
    delay (600);
    digitalWrite (ledPinLeft, LOW);
    delay (600);
    digitalWrite (ledPinLeft, HIGH);
    delay (600);
    digitalWrite (ledPinLeft, LOW);
    delay (600);
    digitalWrite (ledPinLeft, HIGH);
    delay (600);
    digitalWrite (ledPinLeft, LOW);
    delay (600);
  }
  stateRight = digitalRead (buttonPinRight);
  if (stateRight == HIGH)
  {
    digitalWrite (ledPinRight, HIGH);
    delay (600);
    digitalWrite (ledPinRight, LOW);
    delay (600);
    digitalWrite (ledPinRight, HIGH);
    delay (600);
    digitalWrite (ledPinRight, LOW);
    delay (600);
    digitalWrite (ledPinRight, HIGH);
    delay (600);
    digitalWrite (ledPinRight, LOW);
    delay (600);
  }
}

Das ist doch ein Anfang.

Nächster Schritt: der Fernbedienung zuhören, also Signale empfangen.

Schau Dir das mal an: http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

The examples/IRrecvDemo sketch provides a simple example of how to receive codes:

Gruß

Helmuth

Habs mal eingefügt, aber wie schon gesagt, der erkennt ja nichmal die library :confused:
So siehts aus wenn ichs überprüfe

Zuerst musst Du die Library ordnungsgemäß installieren.

http://arduino.cc/de/Guide/Libraries

Dann startest Du die Arduino IDE neu und probierst die mitgelieferten Demos aus (gehe zum Menüpunkt File->Examples->IR...)

Ich würde mit IRrecord anfangen.

Hochladen.

Tools->Serial Monitor aufmachen.

Taste auf Fernbedienung drücken.

Lesen, was im Serial Monitor Fenster steht.

P.S. Bin ab jetzt bis Montag offline. Viel Erfolg!

Hab das gesagt ausprobiert, jedoch keine Reaktion, ich schätze meine Fernbedienung ist kaputt :D. Hab eine bei ebay bestellt, bei der beschreibung ist sogar schon ein sketch dabei, bei welchem ich einfach die aktion unter die jeweilige Taste schreiben muss, also danke an alle die mir geholfen haben, falls etwas nicht funktioniert melde ich mich :D. Und sry nochmal dass ich den Thread etwas falsch angefangen habe^^

MfG xSt4rScreamx

Du kannst die Fernbedienung testen: Handykamera an, draufhalten (auf die IR-Diode der FB) und nen paar Tasten drücken- in der Digicam solltest du dann den Licht"Punkt" deutlich sehen.

:O krass, tatsächlich :D ok dann isses der empfänger der nich funzt, naja is ja nich so dramatisch, die fernbedienung hat 5 euro gekostet, und dass programm is ja sozusagen au glei dabei^^ danke trotzdem :)

Sicher dass du den IR-Sensor richtig angeschlossen hast? Irgendwas sollte da eigentlich ankommen. Man auch mit einem Oszilloskop messen wenn eines vorhanden ist.

Man auch mit einem Oszilloskop messen wenn eines vorhanden ist.

Man kann auch zwischen Vcc und Input Pin eine LED (natürlich mit Vorwiderstand) anschliessen. Dann sieht man ( wie beim Fernseher ) wann und wie lange der IR Receiver "getroffen" wurde.

Beim TSOP31238 sollte der Strom am Signal-Pin max 5 mA betragen, ein 1k LED Widerstand wäre also sinnvoll.

Ich habe das mal nachvollzogen, mit der lib aus dem Link https://github.com/shirriff/Arduino-IRremote/blob/master/readme

RECV_PIN angepasst ergibt auch bei mir beim IRrecvDemo im Seriell Monitor keine Ausgabe. Mit dem Scope sind die Signale aber zu sehen, evtl filtert die Lib auf bestimmte FB Codes.

Ich habe in den Lib Code noch nicht reingesehen..

Mist, als ich damals damit rumgespielt habe, fand ich die Lib super, weil sie sofort mit ALLEN Fernbedienungen umgehen konnte, welche bei mir gerade rumlagen.

Hat jemand einen besseren Vorschlag für eine universelle IR Lib?

@Helmuth: Ich glaube inzwischen nicht mehr das es an der Lib liegt. Ich denke habe dort ein Problem mit dem Receive Pin. - muss morgen nochmals schauen. Nutze an meinem Nano V2 einen anderen Pin als vorgegeben.

Aber das hier ist in der Lib sehe ich nicht optimal:

ISR(TIMER_INTR_NAME)
{
  TIMER_RESET;

  uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin);

  irparams.timer++; // One more 50us tick
  if (irparams.rawlen >= RAWBUF) {
    // Buffer overflow
    irparams.rcvstate = STATE_STOP;

In Timer 2 ISR wird digitalRead(irparams.recvpin); benutzt, dachte das ist langsam im Gegensatz zum Portzugriff ??

Ja, das braucht etwa 50-60 Takte. Es ist aber einfach zu handhaben. Direkter Port Zugriff mit beliebigen Pins ist nicht so einfach. Mit der digitalWriteFast Lib geht es aber, wenn der Pin zur Compile-Zeit feststeht: https://code.google.com/p/digitalwritefast/downloads/list

Hallo,
die Lib, und die Beispiel Programme dazu laufen ohne Probleme. Ich habe sehr
genau nach einer anderen “IR-Lib” gesucht, aber etwas richtig, gut brauchbares
nicht gefunden. Also, das ist die “Referenz”:

wie Helmut schon sagte, läuft mit allem.

Dann ist hier immer noch nicht geklärt, ob die IR-Lib richtig installiert
worden ist.
Der vorgegebene “Pin 3” darf NICHT geändert werden. Der ist zwingend vorgegeben.
Den “Pin 11” für den Empfänger kann man ohne Problem ändern.
Man sollte nur tunlichst darauf achten, das beide Pin´s nicht von anderer
Harware belegt wird.
Der “Pin 3” wird als “PWM” betrieben- man sollte also darauf achten, das der
originale Arduino diesen Pin auch so zur Verfügung stellt.

Zum Schaltbild auf der o.g. Seite:
Die “Sende IR-Diode” kann so verdrahtet werden. Bei Sichtkontakt- ausgerichtet,
“Arduino Sende IR-Diode → Empfänger IR-Diode” sollten 5m kein Problem sein.

Das Schaltbild des IR-Empfänger kann funktionieren, muß aber nicht.
Die Datenblätter der selben, verlangen fast alle eine Beschaltung mit
Kondensator und Widerstand. Einfach mal nachschlagen.

Auch sollte man bei den Bausteinen darauf achten, dass die selbe Bandbreite
genutzt wird, wie bei der zu benutzten Fernbedienung.
Also, IR-Empfänger 38kHz <-> Fernbedienung 38kHz.
IR-Empfänger 38kHz <-> Fernbedienung 36kHz kann funktionieren, muß aber nicht.

Das war das leichte, nun das schwere:
Nachdem man sich die IR-Lib und deren Beispiele runtergeladen hat, installiert
man die IR-Lib nach den üblichen Vorlagen.

Danach lädt man sich das Beispielprogramm “IRrecvDemo” in die Arduino-IDE und
überprüft es. Hier darf es zu KEINER Fehlermeldung kommen. Das Programm läuft!

Wenn man es “tatsächlich” bis hier her geschafft hat, dann kann man die Zeile:

“int RECV_PIN = 11;”

aus dem Sketch seinen Bedürfnissen anpassen (NUR- die Ziffer des Pin ändern)

Nun besorgt man sich aus dem Haushalt eine “Handels übliche” Fernbedienung, von
der man vermuten kann, das sie sich an irgendwelche Standarts hält.
Überträgt man nun den Sketch auf den Arduino, und stellt die Übertragungsrate
des seriellen Monitor so ein, wie im Sketch- kann man im selben beobachten,
was “empfangen” wird: Das sieht dann z.B. so aus:

Fernbedienung MacMini, empfangender Code: 77E150B6
Fernbedienung FischerTechnik, empfangender Code: 6C8
Fernbedienung CyrusAudio, empfangender Code: C07
Fernbedienung Panasonic, empfangender Code: B520CEC
Fernbedienung Grundig, empfangender Code: A888FB04

Empfängt man nun “so” einen Code ohne “geheimnisvolle Sonderzeichen” sollte das
ganze funktionieren. Die empfangenden Code´s sind reproduzierbar.

Das ganze hier trifft auch auf die IR-Sende Sketche zu. Es funktioniert ohne
Probleme.
Man sollte sich nur an die Datenblätter halten, alles richtig installieren- und
auch alles richtig verdrahten.

Die IR-Lib kann nicht jeden Code reproduzieren, aber jeden Code empfangen.
“Jeden Code” heißt- die empfangenen Roh-Daten darstellen.
Informationen zu Code´s findet man z.B. hier:

http://www.mikrocontroller.com/de/IR-Protokolle.php

und sehr gut, hier:

http://www.sbprojects.net/knowledge/ir/index.php

Gruß und Spaß dabei
Andreas