Bionaire BW2300-N window fan modification - Arduino - questions

Thread Starter


Joined Dec 3, 2018

I bought Bionaire BW2300-N window fan, which does what it's supposed to, and on LOW setting it's quiet enough to allow me to sleep. However, current fan's controller is quite bad, as it reads temperature all the time, there is no temperature threshold, no delays, and when fan starts, it starts on HIGH and then it goes to option that I set it to.

So for example, fan is set to 60F (minimum) intake on low speed, it turns on in HIGH mode, second later is goes into LOW mode, temperature sensor drops to below 60F and fan shuts down, about 3 seconds later temperature raises above 60F and fan turns ON again. That makes it really annoying and impossible to sleep, and leaving it ON all the time, even on Exchange mode (where one fan blows in, and another blows out), on LOW setting makes whole room too cold.

How to fix that? The plan is to build my own controller that I can program however I want. Because I'm not much of an electronics guy, but I can program without much problems, my best bet is to use arduino. I have some experience with this platform, and connecting it to pre-build modules is fairly easy.

So I begin to reverse engineer current fan controller. It consists of two boards - one mostly mains voltage, and second small board with micro controller or something. Being extremely careful I probed that second board and figured out that it operates at 5V DC. So I disconnected it from rest of the fan, soldered two wires to it, and run it from bench power supply to make it safe to work with (to separate it from any AC stuff).

There is the setup that I used to test that board:

That is what I discovered:

So it seems like it should be really easy to control this fan with arduino.

However, I decided to take a look how this board is getting its 5V DC. Here are couple photos of "mains voltage" board:

So tracking back to those two pins, I came up with something like:

I guess it's not important what exact components are those. It seems like "5V DC" is directly connected to AC live. That's nice. And "0V DC" has some kind of capacitor dropper? No idea here. Bunch of zener diodes, transistor, etc. Well it doesn't seem like "clean" DC power that I would like to feed to my arduino. That's bad idea, right?

I'm planning to use small phone charger as 5V power source, and relays to control mains voltage board.

For right now, my components list is:
- Arduino mini
- LCD display
- rotary encoder
- small phone charger
- temperature sensor
- IR receiver (to use remote that came with the fan)
- relay module - found 8 channel ready module on amazon

What you guys think? I know it's quite an overkill, with components' price reaching over price of the fan, but I like projects like that. When I have functioning hardware, I can take care of software no problem.

Plan is to connect arduino with LCD and rotary encoder to make it easy to access options or set temperature.

I will use relays to separate arduino from mains voltage board. I will use some high value resistor to pull up the pins on high voltage board (to that 5V DC), and use relays to pull them down, probably through some lower value (like 1k) resistors. Or maybe it will be better to pull the pins, through high value resistors, to their default states when fan is off?

Did you find any problems with my plan so far?

Couple things to figure out:
- what happens if my arduino code has mistake and for example powers all relays on, pulling all pins down. Will that burn the motors? How can I figure it out?
- current module powers on fan in HIGH mode, and second or two later switches back to selected mode, for example LOW. Would it be a problem if I attempt to start fans directly in LOW mode, or reduce the time of HIGH mode to like 100ms?


Raymond Genovese

Joined Mar 5, 2016
I appreciate the attention that you are giving to this and I am surprised that I am the first to respond.

There is a lot there and it is a bit overwhelming, but two things occur to me right away.

First: You are dissatisfied with the performance of the unit because it seems to oscillate around the temperature threshold. It is a shame that they didn't program better on and off thresholds or some kind of user-defined wait period...but you want want you want and you have what you have. Maybe there is another way to crack that nut without rebuilding the whole unit - I don't know how off hand though.

One aspect of the proposed mod might deserve a feasibility check before going too far....

- IR receiver (to use remote that came with the fan)

This may not be a trivial issue for an Arduino. I have used a couple of these types of IR receivers with success BUT....I made use of a great deal of the work of others to decode the signal (with the transmitter an inch away) and only enough to be able to clone it for a specific function (volume up/down on a TV).

You are going to have to decode the signal from your remote. If it is not an accessible standard, that may not be too easy. Additionally, the Arduino has to do a lot of other things and can't be missing an IR remote signal that can occur at any time.

This issue, however, you could start to test out pretty cheaply and that might be a good idea, especially if it is a deal breaker if you can't use the remote.

So, those are just some things that I thought to mention. Good luck with it and please do let us know how it goes.

Thread Starter


Joined Dec 3, 2018
Thanks for the reply. I already have some arduinos and temp sensors, I ordered couple of those 3 prong IR receivers and pretty neat SunFounder LCD screen. I will test arduino/relay setup before even coming close to the fan.

I'm planning to somehow fit the relay module inside the fan, and leave arduino/screen outside until I'm 100% satisfied with its operation - mostly so I can revert back.

Don't be disappointed if you don't hear from me for couple weeks. Finals are coming so I'm not sure how much free time I will have.

One more thing - since I will be using 8 channel relay module (because it's the simplest option) and I need only 5 channels, I was thinking about using rest of the relays for some purpose. I'm thinking about adding ability to turn one fan completely off. One problem - each fan has 6 wires, and they are not marked on the board other than by colors. What is the simple way to figure out what wires are what? I suspect they have like a common ground/neutral and different winding depending on speed and direction of rotation, but again: I have no experience with any AC stuff.

Thread Starter


Joined Dec 3, 2018
Small update:

Screen arrived today. Apparently there is like thousand libraries called "LiquidCrystal_I2C" and half of them doesn't work, and other half doesn't have any documentation. Finally found one that works ok. Surprisingly, using the screen is really easy.

So far that is my setup:

Had only couple hours after work, so far only two temperature sensors, screen, and rotary encoder works. Next step is getting some basic menu, and try to get IR to work. I will also add couple buttons for fan mode/speed.

Thread Starter


Joined Dec 3, 2018
Not sure if anybody is interested, but I finished the hardware about a week ago and have been playing with software.
I added photo resistor to make display back light go OFF when light level is low, so it doesn't disturb me at night. After any button press, screen will remain light up for 60 seconds anyways. I'm also "blinking" the screen back light when received the signal from the IR remote.

Couple things I noticed:
- I'm using DS18B20 temperature sensor, and initially I set it to the lowest precision (9) to make it read faster. However, it was "jumping" around values too much. Sometimes it was reading 73F, and two seconds later 79F, just to jump back to 73F. Right now, when precision is set to 10 bit, it doesn't jump at all (I graphed the readout for about an hour without any suspicious spikes).
- For IR receiver I'm using "AIRSUNNY three Legs 5 pairs Infrared Diode LED IR Emission and Receiver" from Amazon. I decoded the fan's remote no problem.

Here are my values for the buttons:
4E87E0AB - Power
4EA240AE - Temp up
1D2FEFF6 - Temp down
39D41DC6 - Mode
E0984BB6 - Airflow

This thing reads IR even when remote is pointed to the opposing wall.

Was it worth ~$50 in parts? Well I had some fun, learned couple things, and ended up with fan that runs like I want it to, so overall it was worth it.

If anybody is interested, I can post my code that I'm running right now.
Last edited: