esphome-fan-controller icon indicating copy to clipboard operation
esphome-fan-controller copied to clipboard

make fan stop spinning at zero

Open sobrarbe opened this issue 1 year ago • 71 comments

Hello, I just installed a Corsair ML120 fan as you say and it works well except for the one when it reaches the stop temperature and it keeps turning at 1400 RPM. Could you help me create a stop or what parameters can I change to make it stop? the adjustments that you had at 13% the stop changed it to 0% but it continues turning. could you help me?? thank you.

sobrarbe avatar Apr 13 '23 18:04 sobrarbe

same here

B1199 avatar Apr 28 '23 12:04 B1199

i tested it myself for fun. a 5 year old Corsair ML120 stops, but the one from November 22 keeps running. Seems that Corsair has changed something.

you would have to buy fans with 0DB mode, the Corsair doesn't have that.

DunklesKaltesNichts avatar Apr 28 '23 13:04 DunklesKaltesNichts

hello. and could you put an IRF520 MOSFET inserted or is it not recommended? And if it could be put, what would the yaml code look like? Thank you so much

sobrarbe avatar Apr 28 '23 13:04 sobrarbe

I'll update the instructions to include a mosfet and an off switch. A lot of people seem to need this.

patrickcollins12 avatar Apr 30 '23 08:04 patrickcollins12

thank you. if you are so kind when i update it i commented here to see how to do it.

sobrarbe avatar Apr 30 '23 09:04 sobrarbe

i tested it myself for fun. a 5 year old Corsair ML120 stops, but the one from November 22 keeps running. Seems that Corsair has changed something.

you would have to buy fans with 0DB mode, the Corsair doesn't have that.

Thanks for your testing. Can you possibly recommend a 0DB or 0rpm fan that might work. My Corsair fan still makes too many revolutions on the smallest setting.

B1199 avatar May 02 '23 06:05 B1199

Arctic P12 PST 0dB

DunklesKaltesNichts avatar May 02 '23 19:05 DunklesKaltesNichts

I did a new test with same new Corsair ML120 (Model: 31-005165), but now with an ESP8266 board. Now it runs as expected and the fan goes off below 13%. There seems to be a difference between ESP32 (platform: ledc) and ESP8266 (platform: esp8266_pwm).

Corsair ML120 (Model: 31-005165) Datasheet: Speed: 400 - 2400 RPM

B1199 avatar May 05 '23 09:05 B1199

I have ordered a Artico fan with a stop from 0 to 2000 RPM. If it doesn't work, I'll do it as you say with an 8266. I also wanted to know if anyone could help me get the yaml to add an RGB light to this same project that includes the fan I bought. I wanted that depending on the temperature detected by the temperature sensor, the RGB of the fan would turn on.
Red 40 to 50 °C Yellow 30 to 40 °C Blue 20 to 30 °C. Thus, by looking at the RGB light of the fan, I will know the temperature of the cabinet. Thank you so much.

sobrarbe avatar May 05 '23 10:05 sobrarbe

i think you mean the Arctic 0DB. the fan has a 3 pin connector for the LED lighting. these are 5v, GND and the data line.

unfortunately, i do not know which protocol is needed. In the simplest case it is WS2812b LEDs. then it is easy and enough examples can be found in the net. you could try that first. Otherwise ask Arctic.

DunklesKaltesNichts avatar May 05 '23 11:05 DunklesKaltesNichts

Thank you, I see that with the fan it will be complicated by the protocol you mention. He still did what you say with a WS2812b led strip. I'm new to ESP32 and I'm looking online to create the yaml and I'm not clear on how to add it to the yaml of this project with the WS2812b leds controlled by the temperature sensor that activates the fan. Do you know of any tutorial that explains it well? thank you.

sobrarbe avatar May 05 '23 12:05 sobrarbe

I just found this documentation that can also be used for the fan with RGB light. What do you think? https://esphome.io/components/light/fastled.html

sobrarbe avatar May 05 '23 20:05 sobrarbe

@kaesebrot1199 Hello. You could pass the yaml configuration of this project to the Esp8266. I'm trying and my Artic fan doesn't work and I don't know why. Thank you.

sobrarbe avatar May 15 '23 11:05 sobrarbe

@kaesebrot1199 Hello. You could pass the yaml configuration of this project to the Esp8266. I'm trying and my Artic fan doesn't work and I don't know why. Thank you.

My yaml with comments: esp8266.yaml.txt

B1199 avatar May 16 '23 08:05 B1199

@kaesebrot1199 Thank you very much for sharing your yaml. I just tried it but my fan still with 8266 board does not stop completely and I will have to integrate a MOSFET. But it's not clear to me how to add it

sobrarbe avatar May 16 '23 12:05 sobrarbe

@kaesebrot1199 Thank you very much for sharing your yaml. I just tried it but my fan still with 8266 board does not stop completely and I will have to integrate a MOSFET. But it's not clear to me how to add it

I advise you to use a layout without MOSFET and find the right fan, which switches off at low PWM. You can see this in the datasheet of the fan. Here for example the diagram of my Be Quiet fan: https://www.bequiet.com/admin/[email protected]&.jpg In the diagram you can see that the fan only turns on at 20% PWM. Not all PWM fans have this behavior. Maybe your Artic Fan cannot do that.

https://www.bequiet.com/de/casefans/3705

B1199 avatar May 16 '23 14:05 B1199

Here is my recommendation. It should work fine.

Buy a logic-level mosfet. I would recommend either the IRLZ44N or FQP30N06L.

The fan's power needs to connect to the Drain pin of the MOSFET. The other side of the, the Source, needs to connect to the 12v power ground.

Gate: Connect to the ESP32's GPIO (possibly through a small resistor, like 100Ω to 220Ω, for gate drive protection). Drain: Connect to the negative (or ground) side of the fan. Source: Connect directly to the circuit ground (0V).

Remember, the ground of the microcontroller should be connected to the same ground as the MOSFET and the fan.

Flyback Diode: It's good practice to place a diode (like the 1N4007) in parallel with the fan, but oriented in such a way that it normally doesn't conduct (anode to the fan's negative terminal and cathode to the fan's positive terminal). This diode will protect the MOSFET from voltage spikes that can occur when the fan is turned off due to inductive kickback.

Assuming you use GPIO PIN 25 for the MOSFET gate, your YAML would be as follows:


# this power supply is turned on/off when the output below
# meets the min_power.
power_supply:
  - id: mosfet_power_supply
    pin: GPIO25

output:
  # Wire this pin (13) into the PWM pin of your 12v fan
  # ledc is the name of the pwm output system on an esp32
  - platform: ledc
    id: console_fan_speed
    pin: GPIO13

    power_supply: mosfet_power_supply

    # 25KHz is standard PC fan frequency, minimises buzzing
    frequency: "25000 Hz" 

    # my fans stop working below 13% powerful.
    # also they're  powerful and loud, cap their max speed to 80%
    min_power: 13%
    max_power: 80%

Please test this and if it works, I'll add it to the documentation,

patrickcollins12 avatar May 22 '23 12:05 patrickcollins12

Hello @kaesebrot1199 , I am desperate with the fan that does not stop. I just bought the be Quiet pro 4 as you recommend to test if it stops below 20% and nothing. It keeps turning at low revs. I test it with ESP32 and 8266 Board and the result is the same. At the end I am going to put a MOSFET that @patrickcollins12 comments. Waiting for the MOSFETs to arrive to test the configuration that it commands.

sobrarbe avatar May 29 '23 17:05 sobrarbe

Please confirm that your yaml also has min_power set to 0 in the ledc configuration

patrickcollins12 avatar May 29 '23 21:05 patrickcollins12

Yes, I have the minimum and maximum fan on and putting it from the minimum of 20% to 0% and it continues to run at 90 RPM. I'll try the setup with the MOSFET you offer and comment. I'm also thinking that it may be because of the type of ESP32 board that some manufacturer builds that does other output parameters? or that doesn't matter. Thanks for the help @patrickcollins12

sobrarbe avatar May 30 '23 15:05 sobrarbe

Hello, today the MOSFETs have finally arrived and I put the programming that @patrickcollins12 says and it works perfectly. I wanted to know if you could help me one last time. I have the RGB fan and I just realized that with the temperature it lights up in different colors depending on the temperature. It works very well for me and it looks very nice. What I want to achieve is that at a certain time of the day, for example at night, the RGB LED turns off and that at a certain time in the morning it turns on and continues the cycle of color changes with the temperature. Could that be done? Thank you

sobrarbe avatar Jun 09 '23 19:06 sobrarbe

Great project. Currently using silent wings fans.. all wires are black so a bit trial and error finding out which is which… so I may have an error here BUT the Fans work but I am not getting any readings at all everything is coming back as -0.000 and not able to control the fans do I need to explore trying with a mosfet or have I done something daft!! I may try with some Corsair fans arriving tomorrow but any guidance gratefully received

mdcryan avatar Jun 10 '23 18:06 mdcryan

Hello, today the MOSFETs have finally arrived and I put the programming that @patrickcollins12 says and it works perfectly. I wanted to know if you could help me one last time. I have the RGB fan and I just realized that with the temperature it lights up in different colors depending on the temperature. It works very well for me and it looks very nice. What I want to achieve is that at a certain time of the day, for example at night, the RGB LED turns off and that at a certain time in the morning it turns on and continues the cycle of color changes with the temperature. Could that be done? Thank you

Glad to hear it works!

Is there a pin to turn on off the rgb? If so you could try controlling that with another gpio pin on the esp32. I don't have experience with rgb fans.

patrickcollins12 avatar Jun 11 '23 10:06 patrickcollins12

Great project. Currently using silent wings fans.. all wires are black so a bit trial and error finding out which is which… so I may have an error here BUT the Fans work but I am not getting any readings at all everything is coming back as -0.000 and not able to control the fans

do I need to explore trying with a mosfet or have I done something daft!! I may try with some Corsair fans arriving tomorrow but any guidance gratefully received

To answer your question. No I don't think a mosfet will help here.

When you say you're not getting any readings, do you mean on the tachometer pin?

Is it possible you've switched the tach and pins?

You might have sent 12v into the circuit which will fry the low voltage tach/pwm pins?

Just ideas.

patrickcollins12 avatar Jun 11 '23 10:06 patrickcollins12

ThanksEntirely possible I have fried the circuits as I did try swapping over the cables when testing for 12v... iI will try with new fans and see whether that makes a differenceI do appreciate the quick response though, thank youMarcoSent from my iPhoneOn 11 Jun 2023, at 11:59, Patrick Collins @.***> wrote:

Great project. Currently using silent wings fans.. all wires are black so a bit trial and error finding out which is which… so I may have an error here BUT the Fans work but I am not getting any readings at all everything is coming back as -0.000 and not able to control the fans do I need to explore trying with a mosfet or have I done something daft!! I may try with some Corsair fans arriving tomorrow but any guidance gratefully received

To answer your question. No I don't think a mosfet will help here. When you say you're not getting any readings, do you mean on the tachometer pin? Is it possible you've switched the tach and pins? You might have sent 12v into the circuit which will fry the low voltage tach/pwm pins? Just ideas.

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you commented.Message ID: @.***>

mdcryan avatar Jun 11 '23 11:06 mdcryan

So I have now connected a new Corsair Fan. This time I did not cut the fan cables, but plugged into into a 4 pin connector. The connector has black, red, yellow and blue wires and so I have connected them as follows:

Ground(Black), 12v (red) GPIO25 (yellow for Tacho ) GPIO13 (blue for PWM)

All the DHT sensors work fine, the ESP32 is working fine (and the dashboard in HA looks great).

Sadly however, the fan speed is still not showing anything but Zero. The log shows the following:

D][dht:048]: Got Temperature=27.5°C Humidity=57.0% [D][sensor:094]: 'Temperature': Sending state 27.55905 °C with 3 decimals of accuracy [D][sensor:094]: 'Fan Speed (PWM Voltage)': Sending state 0.00000 % with 1 decimals of accuracy [D][climate:378]: 'cabinet-fan Thermostat' - Sending state: [D][climate:381]: Mode: COOL [D][climate:383]: Action: IDLE [D][climate:401]: Current Temperature: 27.56°C [D][climate:407]: Target Temperature: 30.00°C [D][sensor:094]: 'cabinet-fan p term': Sending state -43.22857 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan i term': Sending state -0.00000 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan d term': Sending state -0.00000 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan output value': Sending state -43.22857 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan is in deadband': Sending state 0.00000 with 0 decimals of accuracy [D][sensor:094]: 'cabinet-fan error value': Sending state -2.44095 with 2 decimals of accuracy [D][sensor:094]: 'Humidity': Sending state 57.00000 % with 0 decimals of accuracy [D][dht:048]: Got Temperature=27.5°C Humidity=57.1% [D][sensor:094]: 'Temperature': Sending state 27.55314 °C with 3 decimals of accuracy [D][sensor:094]: 'Fan Speed (PWM Voltage)': Sending state 0.00000 % with 1 decimals of accuracy [D][climate:378]: 'cabinet-fan Thermostat' - Sending state: [D][climate:381]: Mode: COOL [D][climate:383]: Action: IDLE [D][climate:401]: Current Temperature: 27.55°C [D][climate:407]: Target Temperature: 30.00°C [D][sensor:094]: 'cabinet-fan p term': Sending state -43.40572 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan i term': Sending state -0.00000 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan d term': Sending state -0.00000 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan output value': Sending state -43.40572 % with 2 decimals of accuracy [D][sensor:094]: 'cabinet-fan is in deadband': Sending state 0.00000 with 0 decimals of accuracy [D][sensor:094]: 'cabinet-fan error value': Sending state -2.44686 with 2 decimals of accuracy [D][sensor:094]: 'Humidity': Sending state 57.10000 % with 0 decimals of accuracy

Any further thoughts?

mdcryan avatar Jun 11 '23 16:06 mdcryan

Just for anyone else reading this post later, the above error was a false friend. It was working.. I took a hairdryer to the temp sensor and saw the readings come alive and the fan rpm increase. I just need to calibrate the fan speed correctly in the code

mdcryan avatar Jun 14 '23 11:06 mdcryan

Here is my recommendation. I've not had a chance to test this, but it should work fine.

Buy a logic-level mosfet. I would recommend either the IRLZ44N or FQP30N06L.

The fan's power needs to connect to the Drain pin of the MOSFET. The other side of the, the Source, needs to connect to the 12v power ground.

Connect Fan +ve to MOSFET Drain pin Connect MOSFET Source pin to 12v Power -ve Connect the Gate pin of the MOSFET to any available GPIO pin on the ESP32.

Assuming you use GPIO PIN 25 for the MOSFET gate, your YAML would be as follows:


# this power supply is turned on/off when the output below
# meets the min_power.
power_supply:
  - id: mosfet_power_supply
    pin: GPIO25

output:
  # Wire this pin (13) into the PWM pin of your 12v fan
  # ledc is the name of the pwm output system on an esp32
  - platform: ledc
    id: console_fan_speed
    pin: GPIO13

    power_supply: mosfet_power_supply

    # 25KHz is standard PC fan frequency, minimises buzzing
    frequency: "25000 Hz" 

    # my fans stop working below 13% powerful.
    # also they're  powerful and loud, cap their max speed to 80%
    min_power: 13%
    max_power: 80%

Please test this and if it works, I'll add it to the documentation,

Sorry to seem stupid here but I cant get it to work.

The PWM Signal from the FAn goes to the GPIO13 in your example. The Gate of the Mosfet goes to GPIO14 in my case.

Mosfet Drain goes to V+ from the fan Mosfet Source goes to ground from the 12V supply?? Where goes V+ from the 12V supply and where goes the Ground from the fan?

theslash avatar Oct 05 '23 20:10 theslash

Here is my recommendation. I've not had a chance to test this, but it should work fine.

Buy a logic-level mosfet. I would recommend either the IRLZ44N or FQP30N06L.

The fan's power needs to connect to the Drain pin of the MOSFET. The other side of the, the Source, needs to connect to the 12v power ground.

Connect Fan +ve to MOSFET Drain pin Connect MOSFET Source pin to 12v Power -ve Connect the Gate pin of the MOSFET to any available GPIO pin on the ESP32.

Assuming you use GPIO PIN 25 for the MOSFET gate, your YAML would be as follows:

this power supply is turned on/off when the output below

meets the min_power.

power_supply:

  • id: mosfet_power_supply
pin: GPIO25

output:

Wire this pin (13) into the PWM pin of your 12v fan

ledc is the name of the pwm output system on an esp32

  • platform: ledc
id: console_fan_speed
pin: GPIO13
power_supply: mosfet_power_supply
# 25KHz is standard PC fan frequency, minimises buzzing
frequency: "25000 Hz" 
# my fans stop working below 13% powerful.
# also they're  powerful and loud, cap their max speed to 80%
min_power: 13%
max_power: 80%

Please test this and if it works, I'll add it to the documentation,

Sorry to seem stupid here but I cant get it to work.

The PWM Signal from the FAn goes to the GPIO13 in your example.

The Gate of the Mosfet goes to GPIO14 in my case.

Mosfet Drain goes to V+ from the fan

Mosfet Source goes to ground from the 12V supply??

Where goes V+ from the 12V supply and where goes the Ground from the fan?

@sobrarbe can you offer some advice here since you did seem to get it working?

patrickcollins12 avatar Oct 19 '23 22:10 patrickcollins12

Hello @patrickcollins12 , in the end I did it with a MOSFET and it worked perfectly. I also had the initiative to buy a PMW fan with an LED light integrated into the fan itself so that depending on the temperature it will change color and be more visual and know more or less the temperature of the closet by seeing the color of the fan. Also to the configuration I added 2 fans with LEDs, one 140mm and the other 120mm to have more air flow. If you need, I gave you my configuration for a PMW fan with LED light.

sobrarbe avatar Oct 20 '23 04:10 sobrarbe