Arduino + ferngesteuerte Lampe

Posted by eddy14 - 07/03/11 at 11:03 pm

Ich bin ein blutiger Kacknoob was Elektrotechnik angeht. Dennoch habe ich seit Jahren vor, etwas in der Richtung zu tun (wer will denn auch Systeme erforschen, ohne verstehen zu wollen, wie die darunter liegende Hardware funktioniert?). Also habe ich mich mit meinen bisherigen Kenntnissen (die mir schon fast peinlich sind) daran gewagt, ein Stückchen Hardware einem Reverse Engineering zu unterziehen :-)

(Wer die vielen Andeutungen nicht verstanden hat: ich entschuldige mich dafür, keine genaue Ahnung davon zu haben, was ich hier in dem Post von mir gebe :D )

Ich wollte mit einem simplen Target anfangen. Bei Reverse Engineering von Software ist sowas einfach, da man ja unzählige 30-Tage-Shareware Programme findet, die man einfach kostenfrei runterladen kann, um an ihnen rumzuexperimentieren. Bei Geräten sieht die Sache wieder ganz anders aus. Ich fand zufällig diesen Artikel. Leider habe ich das dort vorgestellte Gerät nicht Zuhause (obwohl ich sowas schon im Baumarkt gesehen habe). Daraufhin fiel mir sofort ein, dass meine liebe Mami eine Wohnzimmerlampe gekauft hatte die (zu ihrer eigenen Überraschung) mit einer Fernbedienung an und ausgeschaltet werden konnte.

Was ich nun vor hatte war folgendes: Analysieren wie das Gerät funktioniert. Nachbauen. Und anschließend eventuell was tolles damit machen.

Ich habe mir schon gedacht, dass es schwer wird ihr zu erklären, wieso ich ihre Fernbedienung brauche. Also habe ich es mir eines Abends einfach geborgt, ohne zu fragen. (Falls es bei meiner Analyse kaputt gegangen wäre, hätte ich das Teil einfach verschwinden lassen. Und wenn meiner Mutter aufgefallen wäre, dass es geklaut wurde, hätte ich einfach die polnischen Nachbarn beschuldigen können)

Vier Buttons um verschiedene Farben und Funktionen der Lampe zu steuern. Mir würde auch schon genügen, wenn ich das Teil an und ausschalten könnte.

Also ersteinmal das ganze aufgeschraubt:

Hey, das ist ja super! Das sieht sehr einfach aus. Ich wollte nun zu aller erst wissen, wie die Fernbedienung der Lampe mitteilt, dass sie angehen soll. Und da fiel mir schon etwas auf:

Auf den oben verlinkten Beitrag vertrauend, habe ich angenommen, dass dieses Gerät im 433.92Mhz Bereich arbeitet, um seine Befehle zu versenden. Also habe ich mir einen 434 Mhz Empfänger und Sender gekauft, in der Hoffnung, diese mit meinem Arduino ansteuern zu können (mit dem Empfänger wollte ich das Protokoll analysieren).

Einige Tage später kam meine Bestellung an. Zu meinem Entsetzen musste ich feststellen, dass der Empfänger viel “rauschen” empfang. Es war sehr schwierig die relevanten Daten zu finden (und diese haben so merkwürdig variiert, dass ich keine Muster erkennen konnte).

Da kam mir die Idee, mir einen Logic Analyzer zu besorgen (so kann ich dann sehen, wann und wie lange eine 1 und eine 0 gesendet werden, indem ich direkt an dem Gerät selbst messe). Ich wollte mir schon seit längerem Bus Pirate gönnen und dieser ist in der Lage als (laut offiziellen Informationen ein sehr schlechter) Logic Analyzer zu dienen. Nachdem mein Bus Pirate ankam, schloss ich ihn direkt an und begann mit dem reversen!

Ich musste nun meinen Bus Pirate an die Pins anlegen, an denen ich messen/sniffen wollte. Dafür habe ich erstmal das oben dargestellte Element mit der Aufschrift “LR1 433.92″ (welches anscheinend das hier ist, genauer gesagt das hier) auf der Rückseite gesucht:

Und nun einfach die Kabel angelegt (nachdem ich mir sicher war, dass es hier um höchstens 5V geht, was der Bus Pirate anscheinend vertragen kann).

Nun musste ich nur noch die Kabel halten, sowie den Button der Fernbedienung drücken, und gleichzeitig das Sniffen in der Software starten (da hierbei aufgrund mangelnder Speicher nur sehr kurz aufgezeichnet werden kann, muss das alles sehr schnell gehen). Mit nur 2 Händen ist das ziemlich schwer!

Nach einigen Versuchen (und einem 5 Minuten (!) anhaltenden Krampf in meiner Hand, währenddessen ich in der Wohnung gebrüllt habe “HAHAHA, ICH BIN BEHINDERT” … habe ich Magnesiummangel?) hatte ich endlich eine Aufnahme:

Wobei hier nur die oberste Zeile/Aufnahme relevant ist.

Nun konnte ich entweder so cool sein, und analysieren was hier genau einen Bit darstellt (und ob es eine 1 oder eine 0 repräsentiert) oder aber, ich könnte das ganze einfach dumm nachbauen (Anmerkung: ich bin dumm).

Ich habe mir aufgeschrieben, wie lange eine “1″ gesendet wird, und wie lange die darauffolgende 0 etc. Was dann ungefähr so aussah:

1 = 300 us
0 = 800 us
1 = 800 us
0 = 300 us
1 = 800 us
0 = 200 us
1 = 800 us
[...]

Das habe ich nun in Arduino implementiert, wobei ich dafür den 434 Mhz Sender benutzt habe:

Und der Code dazu:

#define DATA_PIN 10

int send_1[] = {300, 800, 800, 300, 800, 200, 800, 300,
                200, 800, 300, 800, 800, 200, 800, 300,
                800, 200, 800, 200, 800, 300, 800, 200,
                300, 800, 800, 200, 300, 800, 300, 700,
                800, 300, 800, 200, 300, 800, 300, 700,
                300, 800, 300, 800, 200, 800, 300, 800,
                200};

int state;

void setup() {
  state = HIGH;
  pinMode(DATA_PIN, INPUT);
  Serial.begin(9600);
  Serial.println("Zu deinen Diensten!");
}

void loop() {
  while(Serial.available() == 0);
  while(Serial.read() != -1);
  int a;
  for(a = 0; a < 8; a++) {
    int i;
    for(i = 0; i < 49; i++) {
      digitalWrite(DATA_PIN, state);
      digitalWrite(13, state);
      delayMicroseconds(send_1[i]);
      state = (state == HIGH) ? (LOW) : (HIGH);
    }

    digitalWrite(DATA_PIN, state);
    digitalWrite(13, state);
    delay(8);
    state = HIGH;
  }
  digitalWrite(13, LOW);
  delay(5000);
}

Ganz einfach! Und funktionieren tut es. Damit ich irgendwas aufregenderes anstelle, habe ich einen Webserver bei mir auf dem Rechner aufgesetzt, welches per serieller Verbindung meinem Arduino befiehlt, das Licht an/auszumachen. Nun kann ich mit jedem internetfähigen Gerät, das Licht ausschalten. Hier beispielhaft mit meiner DSi:

Demnächst baue ich noch eine Klatsch-Funktion ein, sodass das Licht anspringt wenn man klatscht. Und falls ich den Spaß daran nicht so schnell verliere, wirds enden wie in einer Folge von The Big Bang Theory.

Wie auch immer. Ich hoffe, dass einige von euch trotzdem Spaß beim lesen hatten. Ich fühle mich jedesmal immer so doof, wenn ich noch am Anfang eines langen Weges stehe. Hofft mit mir, dass ich irgendwann in der Lage sein werde, spannendere Geräte zu analysieren!

Demnächst blogge ich wohl über das SFT09 Format, welches ich so gut wie fertig analysiert habe.

If you enjoyed this article please consider staying updated via RSS. Links to your own social media pages could be added here.

14 Responses to “Arduino + ferngesteuerte Lampe”

  1. der vor 20 mins says:
    March 7th, 2011 at 23:48

    Abend,

    Ein sehr netter Einstieg ins Thema RE von Elektrotechnischen Dingen. Finde weder der Humor (Nachbar, krampf usw) noch der Informationsgehalt fuer deinen ersten Post bzgl. des beschriebenen Neulands kommt zu kurz. Weiter so! :) und gn8.

    Mfg.

  2. ShockerZz says:
    March 8th, 2011 at 20:48

    Netter Artikel! Würd mich freuen über mehr Elektro-RE von dir zu lesen.
    Am Ende der Folge die Chinesen find ich auch sehr cool =D
    [Staffel 1, Folge 9: Der Cooper Hofstadter Antagonismus, für diejenigen die's interessiert]

  3. dein bra aus jarbakahr says:
    March 9th, 2011 at 16:35

    Wie immer was sehr nettes von dir, optriodiomal und hoffentlich nicht dein letzter elektro reverse , danach kommt sft auf jeden fall dran , das wird eine famehochburg werden,aber hallo ;) ))

  4. x0 says:
    March 9th, 2011 at 21:38

    Ich bin echt beeindruckt .
    Wie immer : weiter so !
    Freue mich schon auf nächste “reverses” , egal ob soft oder hardware , von dir .

    MfG

  5. disse says:
    March 10th, 2011 at 15:27

    Hey, find ich super das Ding. Vor allem sehr interessant das Thema. Funktioniert das Adruino Board eigentlich auch gut unter Linux (falls du das weißt)?
    Der komplette Source mit webserver wäre noch interessant.

  6. Lemming says:
    March 10th, 2011 at 16:00

    Dadurch werde ich dich ausfindig machen! DAS ist die Spur um dein Haus zu finden! Einfach nach all den Käufern diese Lampe suchen!

    MUHAAHAHAHAHHA

  7. eddy14 says:
    March 10th, 2011 at 16:54

    @disse
    Ich benutze es ausschließlich unter Linux, und es funktioniert super (jedenfalls für den Bereich, wofür ich es nutze). Mit Ubuntu und Arch Linux getestet.
    Der Webserver ist einfach nur LAMPP, wobei hier ein PHP Skript per exec ein Python Script aufruft, welches die Serielle Kommunikation übernimmt:
    from serial import *
    serial = Serial(‘/dev/ttyUSB0′, 9600)
    serial.write(‘a’);

    @Lemming
    Verdammt alter, gib doch nicht jedem so einen Tipp!

  8. disse says:
    March 12th, 2011 at 15:52

    habe ich mir auch schon überlegt das zu kaufen. Fände es echt geil, das wie bei the big bang theory nachzustellen. Eine Fernbedienung wär auch kewl (tv, dvd, evtl. sogar konsolen)

  9. Atakan says:
    March 20th, 2011 at 10:33

    Ein interessanter Artikel. Ich bin auch langsam dabei von der Programmierung auf die Hardware Ebene überzugehen :D
    Aber ich hole mir demächst den C-Control Microcontroller von Conrad.

  10. chizo says:
    March 20th, 2011 at 21:44

    Nabend,

    manchmal hasse ich dich dafür! Jeden deiner Beiträge verschlinge ich förmlich und werde jedes mal erneut neidisch wie du dich für bestimmte Sachen einfach begeistern kannst bzw. die Motivation findest es einfach zu machen. Ich erwische mich jedes mal von neuem wie ich mir Dinge vornehme und dann aber einfach aus fehlender Motivation oder zu großem Respekt vor dem Gebiet davon abweiche. Nichtsdestotrotz vielen Dank für diesen Beitrag und ich hoffe man hört wieder mehr von dir!

    chizo

  11. Adrian says:
    March 23rd, 2011 at 10:11

    Also ich muss schon sagen, diesen Mut bewundere ich! Ich würde mich nie trauen so ein technisches Gerät auf zuschrauben, ich hätte immer angst etwas kaputt zu machen…
    Aber danke für diesen Beitrag und viele Grüße!

  12. theone says:
    March 24th, 2011 at 14:02

    Sehr schöner Artikel!
    Vor einiger Zeit habe ich etwas ähnliches aus Komponenten von Pollin.de gebaut.
    Als Erweiterung könntest du noch ein Ethernet Shield anbauen. Damit hättest du dann ein Standalone-Gerät.
    Mich würde noch interessieren, welchen Sender du verwendet hast.
    Viele Grüße!

  13. eddy14 says:
    March 26th, 2011 at 00:01

    Hallo theone,
    das mit dem ethernet shield ist eine nette Idee! Allerdings ist die Wohnzimmerlampe bereits kaputt; genau die Leuchten, die ich an- und ausgeschaltet hatte, funktionieren nicht mehr. Ich werde also stark verdächtigt :-D Obwohl ich mir nicht erklären kann, wie es bei sowas kaputt gehen kann.
    Der Sender ist der folgende: http://www.sparkfun.com/products/8946
    Scheints auch bei einem deutschen Anbieter zu geben: http://www.watterott.com/de/RF-Link-Sender-434MHz

  14. Adrian says:
    April 8th, 2011 at 16:35

    Ich muss schon sagen, ist eine sehr ausführlich und gute beschreibung,leider habe ich zwei linke hände und bin somit immernoch auf hilfe angewiesen. aber die ist in sicht und insofern hat das jammern bald ein ende!

Leave a Reply

I would love to hear your view.