Controler un ventilateur 12V type Ordi

Hello,
J’avais monté le même truc pour faire une extraction d’air pour un caisson imprimante 3D
Avec Sonde de température + capteur de fumée + lampe led + Oled


Ces ventilateurs posent un problème, le démarrage n’est pas linéaire, il commence a se mettre en route que très haut dans les commandes PWM.
Puis a très basse vitesse, ça fait un très gros bruit électrique.
J’ai abandonné l’idée d’utilisation de ce type de montage Vieux ventilateurs d’ordinateur + mosfet + ESPxxx
Il faut utiliser un ventilateur PWM , c’est beaucoup plus efficace.

Salut @Monsieur

Depuis quelques semaines j’ai ajouté une sonde « Dallas » et modifié mon code en partant de ce lien.

L’avantage est que l’esp régul de lui-même la fréquence de rotation des ventilos, et qu’avec une consigne minimum à 20% ceux-ci démarrent sans difficultés.

J’ai eu ça aussi quand j’ai fait le montage la première fois sur le coin de mon bureau.

J’ai résolu ce phénomène en jouant sur la « frequency » de l’output, et je n’ai plus de « sifflements ».

mon dernier code esp
substitutions:
  device_name: esp-baie
  device_description: "Esp Baie"
  temperature_threshold_low: "15"
  temperature_threshold_high: "35"
  minimum_fan_speed: "20"

esphome:
  name: '${device_name}'

esp8266:
  board: nodemcuv2

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Optional manual IP
  manual_ip:
    static_ip: !secret fan_ip
    gateway: !secret gateway_ip
    subnet: !secret sub_mask
  fast_connect: true

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: '${device_name}'
    password: !secret ap_pwd

captive_portal:

logger:     

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_key

ota:
  password: !secret ota_pwd

# Serveur Web
web_server:
  port: 80
  auth:
    username: !secret user_pwd
    password: !secret http_pwd

output:
  - platform: esp8266_pwm
    pin: D0
    frequency: 19531 Hz
    id: pwm_output

fan:
  - platform: speed
    output: pwm_output
    name: Ventilateurs Baie
    id: fan_1

dallas:
  - pin: TX

sensor:
  # Additional sensors
  - platform: wifi_signal
    name: "${device_description} Wifi Signal"
    update_interval: 60s
  - platform: dallas
    address: 0xcf01145064dbaa28
    name: Temperature Baie
    id: temperature_sensor
    on_value:
      then:
        - script.execute: set_fan_state    
  - platform: uptime
    name: "${device_description} Uptime Sensor"
    disabled_by_default: true
    id: fanrack_uptime_sensor
    update_interval: 60s
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(fanrack_uptime_sensor).raw_state);
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds /  60;
              seconds = seconds % 60;
              return (
                (days ? to_string(days) + "d " : "") +
                (hours ? to_string(hours) + "h " : "") +
                (minutes ? to_string(minutes) + "m " : "") +
                (to_string(seconds) + "s")
              ).c_str();     
              
text_sensor:
  - platform: wifi_info
    ip_address:
      name: "${device_description} IP address"
      icon: mdi:ip-network
    ssid:
      name: "${device_description} SSID"
      icon: mdi:wifi
    bssid:
      name: "${device_description} BSSID"
      icon: mdi:wifi-star
    mac_address:
      name: "${device_description} mac address"
      icon: mdi:console-network
  - platform: template
    name: "${device_description} Uptime"
    id: uptime_human
    icon: mdi:clock-start           

switch:
  # Restart button
  - platform: restart
    name: "${device_description} Reboot Switch"

script:
  - id: set_fan_state
    then:
      - if:
          condition:
            lambda: |-
              return id(temperature_sensor).state < id(${temperature_threshold_low});
          then:
            - fan.turn_off: fan_1
          else:
            - fan.turn_on:
                id: fan_1
                speed: !lambda |-
                  if (id(temperature_sensor).state >= id(${temperature_threshold_high})) {
                    // Over upper threshold, fan speed at maximum
                    ESP_LOGD("Fan speed calc", "Temperature is above or equal to upper threshold so setting to max");
                    return 100;
                  }
                  else {
                    float calc_speed = ((100-id(${minimum_fan_speed})) / (id(${temperature_threshold_high})-id(${temperature_threshold_low})))*(id(temperature_sensor).state-id(${temperature_threshold_low}))+id(${minimum_fan_speed});
                    ESP_LOGD("Fan speed calc", "calculated speed = %f", calc_speed);
                    return calc_speed;
                  }    

Malgré tout, si tu pouvais détailler un peu plus ça :

Matériel, code etc …

Ça pourrait être pas mal :wink:

Bonjour,
Je peux effectivement tout partager, mais pas sur que cela t’aide dans ton projet.
C’était un système complètement autonome et pas du tout connecté.
Je ne sais plus si j’avais fait le code en dur ou si j’avais utilisé ESPEasy.
Mais quoi qu’il en soit, ce n’était pas a l’époque un projet lié à HA, mais sans doute possible de l’adapter.
J’avais rebondit sur ton POST pour partager mon expérience sur l’utilisation d’un ventilateur 2 files + & - en mode PWM
Depuis, je préfère utiliser des ventilateurs vrai PWM 3 files + & - & pilotage PWM ils sont plus efficace à basse très basse vitesse.

UPDATE

Je viens de le rallumer (sans les sondes ni ventilateur)
C’est effectivement sous ESPEasy

Le matériel
ESP-12F (mais tout esp8266 ou ESP32 vont bien)
mosfet
https://www.amazon.fr/gp/product/B08CVK6TLF/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
OLED SSD1306
https://www.amazon.fr/gp/product/B07G4JN2B9/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1
capteur de temperature DHT22
Detecteur de fumée
image
Pour couper l’alimentation de l’imprimante en cas d’incendie.

Et en fin de compte, il était bien connecté via MQTT avec autorégulation du fan suivant température et affichage sur le Oled ds informations.
Les Devices et model 3D

Et la Rules pour changer la vitesse et envoyer dans le Broker MQTT

on System#Boot do
  GPIO,14,0
endon


// comparison is only "<,>,=" - "less,greater,equal" - not "<=" or so
// PWM 0...1023 GPIO 0...15

on DHT22#Temperature do
 if [DHT22#Temperature]<20
   PWM,14,50
   Publish /%sysname%/Fan_Speed,10
 elseif [DHT22#Temperature]>20 and [DHT22#Temperature]<30
   PWM,14,100
   Publish %sysname%/Fan/Fan_Speed,20
   oledframedcmd,3,20%
elseif [DHT22#Temperature]>30 and [DHT22#Temperature]<41
   PWM,14,700
   Publish %sysname%/Fan/Fan_Speed,70
   oledframedcmd,3,70%
 else
   PWM,14,1023
   Publish %sysname%/Fan/Fan_Speed,100
   oledframedcmd,3,100%
 endif
endon

Mais c’est un truc qui est dans le fond d’un carton depuis un moment, donc certainement des choses que j’aurais optimisé.
Mais tu as les grandes ligne du projet.
Si tu as des questions, n’hésite pas.

Salut @Monsieur

Merci pour le partage :wink:

Bonjour à tous

je ressors ce sujet de ventilation pour une baie technique, soit à base d’ESP ou depuis les broches d’un raspberry.

en altrenative, j’ai vu ce post : Simple PWM Fan Control with Tasmota - Hardware - Home Assistant Community. Et du coup je me posais la question d’utiliser : Mini contrôleur de bande LED intelligent, commande vocale pour Echo Plus SmartThings, Zigbee 3.0, DC 5V, 12V, 24V, RGB + CCT, RGBW, CW - AliExpress 39

j’utilise Home assistant via docker et Zigbee2mqtt (d’où l’idée d’un contrôleur zigbee)

Merci d’avance pour vos avis/retours
Christophe

Hello,
Regarde ce sujet

Nous avons un peu dérivé le sujet sur une VMC piloté