Montag, 24. März 2008 13:06
Funksteckdosen sind im Baumarkt für ca. zehn Euro zu bekommen. Dazu gibt es eine Fernbedienung, mit der sich die Steckdosen an und aus schalten lassen.
Heute zeige ich Dir am Beispiel einer Lichtorgel, wie man so eine Fernbedienung hackt und an Arduino anschließt.

Als Erstes nimmst Du die Batterie aus der Fernbedienung und schraubst sie auf. Auf der Platine meiner Fernbedienung sind jeweils zwei Microtaster pro Kanal angebaut, die aber die gleiche Funktion haben. Wieso es zwei sind, weiß ich wirklich nicht.
Ich konzentriere mich auf drei der Microtaster. Alle drei Taster sind mit einer Seite mit einander verbunden. Ich habe es hier mit der blauen Linie hervorgehoben. Microtaster haben vier Beinchen, wobei jeweils zwei mit einander verbunden sind. An der verbundenen Seite der Taster liegt ein Minus-Pol an (GND). Wenn man also möchte, dass die Platine denkt, dass der Taster gedrückt wird, muss man also nur an sein andere Ende einen GND schalten.
Dazu benutze ich Transistoren, die das Signal weiter schalten. Wenn Dir das zu kompliziert klinkt, bau einfach die Schaltung auf dem Breadboard nach. Es sind drei Transistoren (NPN) und jeweils ein Vorwiderstand von 100 Ω. Der Vorwiderstand ist an der Basis des Transistors (mittleres Beinchen) und an einem DigitalOut-Kanal vom Arduinoboard (hier 3,7,10) angeschlossen. Am unteren Beinchen des Transistors liegt ein GND an, am oberen das Kabel, das an den jeweiligen Taster angelötet ist.

Der GND der Platine (Klar, da wo die Batterie den Minus-Pol hat) und der GND des Arduinoboards müssen! verbunden werden.
Jetzt habe ich noch ein Potentiometer in die Analogen Eingänge von Arduino gesteckt (1,3,5) und dazu gibt es jetzt noch ein bisschen Arduino-Code für meine Lichtorgel, die über das Potentiometer schneller oder langsamer gemacht werden kann:
int pins[3]={3,7,10};
int potiplus=15;
int poti=17;
int potiminus=19;
int potimin=450;
int schaltzeit=500;
int rand_nr;
void setup(){
// Pin 13
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
// Pins der Schaltkanäle
for (int i=0;i<3;i++){
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
// Potiinitialisierung
pinMode(potiplus,OUTPUT);
pinMode(potiminus,OUTPUT);
pinMode(poti,OUTPUT);
digitalWrite(potiplus,HIGH);
digitalWrite(potiminus,LOW);
// Seriale Ausgabe initialisieren
Serial.begin(9600);
}
void loop(){
rand_nr=random(4);
if (rand_nr==1) {
digitalWrite(pins[0],HIGH);
delay(schaltzeit);
digitalWrite(pins[0],LOW);
}
if (rand_nr==2) {
digitalWrite(pins[1],HIGH);
delay(schaltzeit);
digitalWrite(pins[1],LOW);
}
if (rand_nr==3) {
digitalWrite(pins[2],HIGH);
delay(schaltzeit);
digitalWrite(pins[2],LOW);
}
delay(1000+(analogRead(poti)-potimin)*4);
}