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:
Hi, just want to say thanks for posting this. I got the same fan and plugged it in the other day just to see the display come on and then go dark.
checked the fuse and its fine. Opened it up only to find a pretty crappy power supply and every pin on the logic board was 0 volts.
not knowing which ones might be power, i searched and found this post!
You gave me just what i was looking for to repair this thing.
it really is a nice quiet fan that blows a decent amount.
Created an account on here just to say thanks.


Joined Sep 20, 2022
Hi. I wanted to say thanks as well. My fan suffered the same fate as brokentrace's, and only after two months of use. Now I had the same idea in mind when I bought the fan. Speed could be controlled in a much better way and not start on HIGH all the time, but could be ramped up. I'd also like to have a super-LOW or ultra-quiet speed for when I am watching TV and want the air to circulate. So I have decided not to return the fan but to fix it and modify it.

My board is REV 10 and is quite a bit neater, with all connectors rather than soldered-on wires. And the soldering in the back is perfect, unlike the amateur soldering job on the board in your photos. Still, I expect the board to be functioning the same as yours.

Again, I'd like to say I am grateful for the investigation and the details you have provided thus far. I'd like to take a different approach and stay away from relays that seem to vary the motors' speed through a resistance network, and perhaps control the voltage through a microprocessor. For this, though, I would appreciate any information you could provide on the following:

1. Are the motors straight DC, or are they BLDC, or could they be AC?

2. You mentioned starting the motors at LOW speed. Have you succeeded (and how?) or are you simply activating the relays per the controller pin-out logic you have provided? Your code, as you have offered, may be helpful in clarifying this.

Thanks and cheers,

BW-2300MB Rev 10.jpg
Hey Mike, I just ran into this thread because I ALSO want to upgrade one of these bionaires. I came up with some of the same things that Megaperson found. Did you ever get an answer? Have you made any additional progress?

I haven't done all of the analysis, but I think the motors are multi-pole AC, there are two triacs on the main power board going to the fans so I'm pretty sure these will be AC motors (if there were DC then MOSFET's would have been used). I'm wondering if the triacss are being used to ramp up the voltage for the selected speed. I'll do some testing and work that out.



Joined Sep 20, 2022
Hi Ed,

I haven't been able to work on this since due to other priorities. However I had come to the same conclusions as yours after further examination of the board. My problem seems to lie in the UI board, and not the control board where all the voltages are normal. I will need to hook up my scope in order to trace everything since the voltmeter can't tell the whole story.

I'm a little peeved that this wasn't built with DC motors. I bought the fan(s) based on this assumption, since the motors were reversing and variable-speed, so that I could hack it and control it via my microprocessor network. I guess I'm forced to now.

I'm just fixing some issues with my logic analyzer to see how the UI control board works with the triacs. Don't know if it is just binary (on/off) or if they PWM the triac to bring it to speed. One thing the OP mentioned is how the motors start at high speed and then slow down - I have to try and see if that is just because these are AC motors or if the control board is pulsing the control voltage to the triacs and maybe starts at 100% cycle and then drops to 50% or something like that. Even if it doesn't it may be something I can do to control the fan motor speed. My recollection is that it is best to start AC motors at high speed and slow them down (due to hysteresis???) compared to DC motors.

Looks like the fans have 6 wires - I think they will be 3 speed taps on the main winding, the bottom/common of the main winding, and two wires for the starter winding. There are two relays on the motor control board that flip the main/start between the AC line and AC neutral (which reverses an AC motor). I also see two 2.5uf/250V capacitors on the board - probably acting as the starting caps.

I have to trace some of the PCB to see, but I think the UI control is going directly to the triacs, so it may be possible to use PWM to get finer control of the motor speed.

I'll continue to post to this thread as I progress.


Joined Sep 20, 2022
Ed, I for one appreciate the information you provide. I unfortunately can't get back into it at this time.

The control board seems to be all or mostly all AC. And I didn't want to put my homemade logic analyzer on the UI board as I didn't know what I would encounter; it is only 5-volt-tolerent.

I seem to recall someone saying elsewhere that when the fan failed, the first thing he noticed was the temperature display going dark. Mine worked for a few weeks after reading that, and sure enough... The display was ON, but I could no longer control the brightness, and of course the UI was non-responsive. Not sure whether this clue will help me find the issue with mine. If I can't, I may decide to swap the motors for DC motors. I have small speed controllers that would do the job just fine. And reversing is a simple task with relays.

I'm pretty sure an Arduino can handle most of what I'm trying to do with my fan. But the Teensy 4.1, programmable just like an Arduino on Visual Studio, has far higher speed (600MHz) and much more memory, and gives you full control over threads and interrupts and their priority levels. I am really impressed. Of course there are others.

The one bad thing with Arduinos, as the OP found out, is the number of would-be programmers providing versions of libraries that don't work. So a project only works if you happen to hit on a good one for the device you're trying to access.
Fortunately I have a working UI control board, so I can just disconnect it from the mains board and do any testing. I'm waiting on a new logic analyzer board so that has held me up. Should be here next week. I was trying to use my multi-meter since it has a serial interface, but (1) couldn't get it to work with sigrok, and (2) I think it's speed is REALLY slow, so I'll wait for the replacement logic analyzer. My plan is to use an ESP32 with Arduino. Should be relatively easy I think to match what the OP had planned. I suspect PWM will work for speed control and I'll be happy with the result.


Joined Sep 20, 2022
In reviewing my notes, my temp display did go black.

Also, and just a guess, but the inputs from the UI seem to go to the emitters of power transistors controlling the AC going to each winding/tap. Are you thinking of using PWM to control the AC voltage going to each?
Yes. Those are actually triacs, made up of four or five junctions of silicon. The output of the UI control is going to the gates of the three triacs (one for each speed). Triacs are used to make speed controls for motors. Usually you take some of the AC, rectify it, then use it to trigger a timer that sends long or short "bursts" to the gate, which effectively chops up the AC power going thru the triac. They even make some very simple chips that do this. Probably any big AC motor you see with electronic variable speed is done with a triac. I'm thinking of trying either to pulse the triac using the ESP32's PWM mechanism without synchronizing (which is maybe a really bad idea), or detecting the AC ripple on the incoming DC that is provided on the 7 pin cable and use it as a synchronized trigger.

I did get my ESP32 test module to work today - I have it doing what the manufactured control currently does with three speeds by just turning on the appropriate triacs, and setting the fan direction by controlling the two relays. Haven't done anything with temperature control yet.