I'm trying to use an Arduino to control my Bionaire window fan. I followed several guides to build an IR receiver circuit to record the patterns sent by the remote for its five buttons
. From there, I've tried both an IR transmitter circuit with IRSendRaw and a separate Raspberry Pi circuit using an IR transceiver hat and LIRC
, but the fan does not seem to pick up either. I've verified that the Pi receiver recognizes the commands from the Arduino transmitter circuit just as it does from the fan's actual remote and vice-versa, but even if I put the fan directly against the IR LED, it does not respond to any of the commands from the circuit.
What else might I need to do to make this work properly? As an alternative, what would be the best way to go about directly activating the 'buttons' on the remote circuit board pictured above?
Thanks in advance for your help
For future refernece, these are the signals I recorded for the remote, which match up with this post on electronics stackexchange.
power: 4E87E0AB
1300 -400 1300 -350 450 -1200 1300 -400 1300 -350 1300 -400 450 -1200 500 -1200 450 -1200 1300 -400 1300 -350 450
temp_up: 4EA240AE
1300 -400 1300 -350 450 -1200 1300 -400 1300 -350 1300 -400 450 -1200 450 -1250 450 -1200 450 -1250 1300 -350 1300
temp_down: 1D2FEFF6
1300 -400 1300 -350 450 -1250 1300 -350 1300 -350 500 -1200 1300 -350 500 -1200 450 -1200 500 -1200 450 -1200 450
mode: 39D41DC6
1300 -350 1300 -400 450 -1200 1300 -350 1300 -400 450 -1200 500 -1200 1300 -350 500 -1200 450 -1200 450 -1250 450
air_flow: E0984BB6
1300 -400 1300 -350 500 -1200 1300 -350 1300 -400 450 -1200 450 -1250 450 -1200 1300 -350 500 -1200 450 -1200 500
This is the sketch I'm trying to use to transmit data (just a modified version of the send raw demo from the library). Note that I also tried with only 23 items in the array (as originally recorded), but that made no difference:
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
int khz = 38; // 38kHz carrier frequency for the NEC protocol
Serial.println("Sending power");
unsigned int irSignal[] = {1300,350, 1300,350, 500,1200, 1300,350, 1300,400, 1300,350, 450,1250, 450,1200, 450,1200, 1300,400, 1300,350, 500, 1200};
irsend.sendRaw(irSignal, 24, khz); //Note the approach used to automatically calculate the size of the array.
delay(1000); //In this example, the signal will be repeated every 5 seconds, approximately.
}
EDIT to show that I seem to be able to replicate the real signal.
In the following output from the IRecvDump2 example, the top two signal dumps are from the real remote and the bottom two are from my RPi sending the recorded signal. They're very slightly different, but seem (to me) to be within the variation of the recording of the true signal anyway.
What else could I be missing? Could there be some brightness threshold such that even holding the Pi directly up to (i.e. touching) the fan receiver wouldn't work? Some other sort of wake-up signal that for whatever reason the Arduino isn't recording/receiving?
Encoding : UNKNOWN
Code : 4E87E0AB (32 bits)
Timing[23]:
+1300, - 400 +1300, - 350 + 450, -1200 +1350, - 350
+1300, - 350 +1300, - 400 + 450, -1200 + 500, -1200
+ 450, -1200 +1300, - 400 +1250, - 400 + 450
unsigned int rawData[23] = {1300,400, 1300,350, 450,1200, 1350,350, 1300,350, 1300,400, 450,1200, 500,1200, 450,1200, 1300,400, 1250,400, 450}; // UNKNOWN 4E87E0AB
Encoding : UNKNOWN
Code : 4E87E0AB (32 bits)
Timing[23]:
+1300, - 400 +1300, - 350 + 450, -1250 +1300, - 350
+1300, - 400 +1300, - 350 + 450, -1200 + 500, -1200
+ 450, -1200 +1300, - 400 +1300, - 350 + 450
unsigned int rawData[23] = {1300,400, 1300,350, 450,1250, 1300,350, 1300,400, 1300,350, 450,1200, 500,1200, 450,1200, 1300,400, 1300,350, 450}; // UNKNOWN 4E87E0AB
Encoding : UNKNOWN
Code : 4E87E0AB (32 bits)
Timing[23]:
+1350, - 350 +1300, - 350 + 450, -1200 +1300, - 350
+1300, - 350 +1300, - 400 + 450, -1200 + 450, -1200
+ 450, -1200 +1350, - 350 +1300, - 350 + 450
unsigned int rawData[23] = {1350,350, 1300,350, 450,1200, 1300,350, 1300,350, 1300,400, 450,1200, 450,1200, 450,1200, 1350,350, 1300,350, 450}; // UNKNOWN 4E87E0AB
Encoding : UNKNOWN
Code : 4E87E0AB (32 bits)
Timing[23]:
+1350, - 300 +1350, - 350 + 450, -1200 +1300, - 350
+1300, - 350 +1350, - 350 + 450, -1200 + 450, -1200
+ 450, -1200 +1300, - 350 +1350, - 350 + 450
unsigned int rawData[23] = {1350,300, 1350,350, 450,1200, 1300,350, 1300,350, 1350,350, 450,1200, 450,1200, 450,1200, 1300,350, 1350,350, 450}; // UNKNOWN 4E87E0AB