Ein wenig herumgespielt mit dem Arduino habe ich ja schon bei dem Rauchmelder und dem BetaBrite-Display. Nicht gebloggt wurde bisher über die Funksteckdosen, die derweil per Webserver an- und ausgeschaltet werden können (Dank dieser Library).
Das müsste doch ansich auch mit dem Garagentoröffner funktionieren. Der tut doch auch auf 433,92MhZ. Letztes Jahr hatte ich mir bei Watterod einen 433er Sender und einen Empfänger, der bisher noch nicht zum Einsatz kam, geordert. Den Empfänger also fix mal startklar gemacht und an den Arduino angeflanscht. Allerdings ist das auslesen eines Senders, bei dem man keinen Schimmer hat welche Codierung genutzt wird, alles andere als trivial. Habe es dann ersteinmal mit der 433MhZ-Wetterstation von Tchibo probiert. Nach diversen Bitfriemeleien purzelte da dann auch tatsächlich die Temperatur heraus. Nungut – wir wollen ja einen Garagentoröffner simulieren, nicht Funkthemometer auslesen.
Aus dem ollen Code bin ich allerdings nicht schlau geworden. Hier mal ein oszillografierter Ausschnitt (due to security reasons
) des Senders:
Man erkennt insgesamt 3 Arten von Pulsen – kurze, lange und mittlere (WTF ?). Habe erst auf einen Manchester-Code getippt. War mir dann aber irgendwie zu doof den zu analysieren. Also fix mit gtkwave die Pulslängen in ein Array gepackt, und fertig ist der Garagentoröffner per Arduino. Hier der (Draft !) des Sourcecodes mit dem Pulslängenarray (Negativ = LOW, Positiv = HIGH):
int garage[45]={ // Block 1 (21 x das gepulse)
-16382,-16382, // Blocktrenner (2)
// Block 2 (22 x das gepulse)
};
void setup() {
pinMode(8,OUTPUT);
pinMode(13,OUTPUT);
digitalWrite(8,LOW);
}
void loop() {
fire(garage,0); // Garage Toggeln
digitalWrite(8,LOW);
digitalWrite(13,HIGH);
delay(10000);
digitalWrite(13,LOW);
}
void fire(int what[],int corr) { // what: PositiverWert: Dauer des HIGHPulses, NegativerWert: Dauer des LowPulses; corr = Korrekturzeit pro Puls
for (int i=0;i<26;i++) {
int del=what[i]+corr;
if (del>0) {
digitalWrite(8,HIGH);
delayMicroseconds(del);
} else {
del=del*(-1);
digitalWrite(8,LOW);
delayMicroseconds(del);
}
}
}
Fazit: Funktioniert perfekt. Wenn allerdings jemand ‘ne Ahnung hat welches Protokoll (bzw. Leitungscode) das sein könnte – immer her damit



