Forum: Mikrocontroller und Digitale Elektronik Westinghouse Deckenventilator über Infrarot (Westinghouse IR 78095) mit Arduino steuern


von Christoph G. (fadingdream)


Angehängte Dateien:

Lesenswert?

Ich habe lange nach einer Lösung suchen müssen, um meinen Westinghouse 
Deckenventilator über Infrarot zu steuern, da mir alle IR Libraries für 
Arduino nicht weitergeholfen haben. Vielleicht habe ich mich auch zu 
blöd angestellt, aber ich habe jetzt eine gut funktionierende Lösung 
gefunden.

Und da mir das Internet und dieses Forum im speziellen schon viele gute 
Antworten geliefert hat, möchte ich meine Lösung hier gerne teilen.

Der Westinghouse Deckenventilator hat einen IR-Empfänger von 
Westinghouse (78095) mit dran.

Den Schaltungsaufbau habe ich als Bild angehängt.

Als IR-LED habe ich eine SFH4580 mit einen 4,7 Ohm Vorwiderstand 
genommen (der könnte auch kleiner sein, aber ich möchte den Transistor 
nicht überlasten und es funktioniert damit sehr gut).
Als Transistor habe ich einen BC337-16 verwendet, der mit einen 1 kOhm 
Widerstand am Arduino hängt.

Für den Arduino-Code habe ich versucht den Speicherverbrauch klein zu 
halten und den Code möglichst übersichtlich zu schreiben.
Der komplette Code sieht so aus:
.
.
1
// Westinghouse ceiling fan ir control 78095
2
#define irLedPin 8 // der Pin an dem der Transistor für die IR-LED hängt
3
4
void setup() {
5
  pinMode(irLedPin, OUTPUT);
6
}
7
8
void loop() {
9
  delay(3000);
10
  sendCodeLight(); // Licht an- oder ausschalten
11
  delay(2000);
12
  sendCodeFan1(); // Ventilator auf Stufe 1
13
  delay(10000);
14
  sendCodeFan2(); // Ventilator auf Stufe 2
15
  delay(10000);
16
  sendCodeFan3(); // Ventilator auf Stufe 3
17
  delay(10000);
18
  sendCodeFan0(); // Ventilator aus
19
  delay(10000);
20
  sendCodeLightDimmer(38); // Licht dimmen - 38 ist 1x komplett runter- oder hochgedimmt
21
}
22
23
// IR-Codes definieren
24
void sendCodeLight() {
25
  byte irCode[] = {1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0};
26
  sendCode(irCode);
27
}
28
void sendCodeLightDimmer(byte dimmingSteps) {
29
  byte irCode[] = {1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0};
30
  for (byte i = 0; i < dimmingSteps; i++) {
31
    sendCode(irCode);
32
  }
33
}
34
void sendCodeFan0() {
35
  byte irCode[] = {1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0};
36
  sendCode(irCode);
37
}
38
void sendCodeFan1() {
39
  byte irCode[] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
40
  sendCode(irCode);
41
}
42
void sendCodeFan2() {
43
  byte irCode[] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0};
44
  sendCode(irCode);
45
}
46
void sendCodeFan3() {
47
  byte irCode[] = {1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1};
48
  sendCode(irCode);
49
}
50
51
// IR-Code senden
52
void sendCode(byte irCode[]) {
53
  for (byte r = 0; r < 4; r++) {
54
    for (byte i = 0; i < 12; i++) {
55
      sendCodeStep(irCode[i]);
56
    }
57
    delayMicroseconds(6620);
58
  }
59
}
60
61
// aktuelle Stelle vom IR-Code senden
62
void sendCodeStep(byte actualStep) {
63
  if (actualStep == 0) {
64
    sendPulse(460);
65
    delayMicroseconds(1180);
66
  } else {
67
    sendPulse(1300);
68
    delayMicroseconds(340);
69
  }
70
}
71
72
// Puls mit ca. 38 kHz senden
73
void sendPulse(int pulseLength) {
74
  cli();
75
  while (pulseLength > 0) {
76
    digitalWrite(irLedPin, HIGH);
77
    delayMicroseconds(10);
78
    digitalWrite(irLedPin, LOW);
79
    delayMicroseconds(10);
80
    pulseLength -= 26;
81
  }
82
  sei();
83
}

: Bearbeitet durch User
Beitrag #5266201 wurde vom Autor gelöscht.
von RvK (Gast)


Lesenswert?

Thanks a lot for sharing, we succeeded using your timings / messages. We 
used the arduino IR library (which is also used within the ESPEasy 
project). The trick is to send the code multiple times (it's 4x in your 
code, in our case 2x was sufficient) sending it just once did never work 
in our setup.
We ended up with a esp (with ESPEasy) using irsend raw command, a 
transistor/mosfet with resistors to drive the IR led.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.