2

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 Fan Remote. 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 enter image description here, 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

ihleonard
  • 41
  • 3

1 Answers1

-1

Interesting question with a lot of paths. I know nothing about your controller but in working with IR remotes in the past I found almost all IR remotes use the infrared frequency range (300 GHz - 400 GHz). This range should not be confused with the modulation rate (carrier frequency) of the remote control. The remote control codes are sent to the receiver using the modulation rate. The modulation rate for the remotes and set top boxes is between 36 kHz and 60 kHz, typically 36 kHz to 39kHz. Try this link it may be a bit redundant but it may help. http://www.pehratek.com/documents/FAQ-Infrared-Light-Control.pdf

Gil
  • 1,863
  • 9
  • 17