Jump to content
  • Sign Up
Støtt hjemmeautomasjon.no!
  • Fermate
    Fermate

    ESP32/MQTT Viftestyring (4)

    Her er basis kode for PWM styring av en PC vifte:

     

    Sitat
     // fan PWM
    const int pwmFanPin           = GPIO_NUM_14;
    const int pwmFanFreq          = 25000; // 25kHz for PC vifter
    const int pwmFanChannel       = 0; //PWM Kanal
    const int pwmFanResolution    = 8;
    int iFanSpeed =1; // Init speed

     

    void setup() {

     

      // configure Fan PWM
      ledcSetup(pwmFanChannel, pwmFanFreq, pwmFanResolution);
      // attach the channel to the GPIO to be controlled
      ledcAttachPin(pwmFanPin, pwmFanChannel);
      // Init speed
      ledcWrite(pwmFanChannel, iFanSpeed);
    }

     

    void loop() {
        // Sett ønsket hastighet fra 0 - 255
     
        iFanSpeed= 255;
        ledcWrite(pwmFanChannel, iFanSpeed);
     }

     

    Mange PC vifter kan en styre hastigheten på, men ikke alle. Dersom vifta har 4 kabler (og ikke bare 3) kan den styres. Lederne er:

    • 12V
    • Jord
    • PWM (plus bredde modulasjon) styresignal inn
    • Puls informasjon om hvor fort vifta faktisk går (Tach)

     

    pins - Is the PWM rail of a 4pin pwm Computer fan Positive ...

     

    PC vifter har PWM signal på 25kHz (antakeligvis for at en ikke skal kunne høre den med ørene) og tidligere var det litt klønete å få til med en Arduino, men med en ESP32 går det som en lek.

    Vi bruker en av de 6-16 (avhengig av ESP32 type) innebyggede PWM kanalene i ESP32'en og styrer dette med noen få linjer kode.

     

    Her er koden satt inn for å styre vifta fra MQTT:

     

    Sitat
    #include <EspMQTTClient.h>

     

    // fan PWM

     

    const int pwmFanPin           = GPIO_NUM_14;
    const int pwmFanFreq          = 25000; // 25kHz for PC vifter
    const int pwmFanChannel       = 0; //PWM Kanal
    const int pwmFanResolution    = 8;
    int iFanSpeed =1; // Init speed

     

    //MQTT

     

    EspMQTTClient MQTTclient(
      "ThePromisedLAN", // SSID
      "Hallelujah!", // WiFi Password
      "192.168.1.2",  // MQTT Broker server ip
      "",   // MQTTUsername Can be omitted if not needed
      "",   // MQTTPassword Can be omitted if not needed
      "vifteClient",     // Client name that uniquely identify your device
      1883              // The MQTT port, default to 1883. this line can be omitted
    );

     

    void setup() {

     

      Serial.begin(115200);

     

      // configure Fan PWM

     

      ledcSetup(pwmFanChannel, pwmFanFreq, pwmFanResolution);
      // attach the channel to the GPIO to be controlled
      ledcAttachPin(pwmFanPin, pwmFanChannel);
      // Init speed
      ledcWrite(pwmFanChannel, iFanSpeed);

     

     // MQTTclient.setKeepAlive();

     

     MQTTclient.setKeepAlive(60);

     

    }

     

     

    void loop() {

     

        MQTTclient.loop();
     
      }

     

    void onConnectionEstablished()

     

     {
     Serial.println("onConnectionEstablished");
     MQTTclient.publish("vifteClient/status", "started");   // Denne MÅ ikke være med

     

      MQTTclient.subscribe("vifteClient/fanSpeed", [](const String & payload) {

     

       Serial.print("fanSpeed: ");
       Serial.println(payload);
       iFanSpeed=payload.toInt();
       iFanSpeed= map(iFanSpeed,0,100,0,255); // la den går fra 0 til 100 istedet for 0 til 255
       ledcWrite(pwmFanChannel, iFanSpeed);
      });
      }

     

    Det er også mulig å LESE den REELLE hastigheten på vifta ved å telle pulser fra den siste ledningen fra PC vifta men det må bli en annen gang. 

     

    OBS:

    • Pulsene fra vifta er 12V og vil skade ESP32 om de kobles direkte.
    • Det er ofte 2 eller 4 pulser / rotasjon

    User Feedback

    Recommended Comments

    Kanskje dette er løsningen jeg er på utkikk etter.. Jeg tok litt for mye møllers tran, og kjøpte to Noctura-vifter til nettverksskapet mitt på 3000rpm. Disse bråker mer enn ventilasjonanlegget inne på teknisk rom, og såpass at det ble en del mer sjenerende enn jeg så for meg. Så jeg må finne en enkelst mulig måte å styre hastigheten på disse, men ESP32 og MQTT har jeg aldri vært borti.
     

    Link to comment
    Share on other sites

    OlavT skrev (På 27.1.2024 den 8.37):

    Har du skrevet noe om hvordan dette skal kobles?


    Nei jeg har ikke gjort dette selv så jeg bare nevnte det på slutten. (Jeg trengte ikke dette da jeg hadde prosjektet på gang)

    Jeg har en følelse av at noen vifter sender disse pulsene som 12V og at de må ha en motstand eller to for å ta spenningen ned til 3,3V for ikke å svi av ESP32en.

    Har en vag følelse av at jeg målte 12V med et multimeter.


    Men andre steder står det at pulsene kommer som kobling mot ground og at de trenger en pullup resistor.

    Det siste er jo unødvendig siden sensor pinnen kan defineres med pinMode( X, INPUT_PULLUP )

     

    Si gjerne ifra om du finner ut noe så oppdaterer jeg guiden.

     

    Im_IB skrev (På 27.1.2024 den 1.03):

    Så jeg må finne en enkelst mulig måte å styre hastigheten på disse, men ESP32 og MQTT har jeg aldri vært borti.


    Du trenger jo ikke MQTT for dette da. Bruk et Potensiometer sammen med ESP32en for å regulere hastigheten.
    Goggle så finner du eksempler på dette.

    • Thanks 1
    Link to comment
    Share on other sites

    On 02/02/2024 at 14:39, Fermate said:

    Si gjerne ifra om du finner ut noe så oppdaterer jeg guiden.


    Veldig bra utgreiing om viftestyring.
    Bruker du Arduino IDE?

    Disse 2 epistlene forteller mye om dette med signalgangen angående PWM og Tacho.
    https://noctua.at/pub/media/wysiwyg/Noctua_PWM_specifications_white_paper.pdf
    https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/intel-4wire-pwm-fans-specs.pdf
    Håper dette er det du trenger for eventuelt å videreføre prosjektet til å inkludere Tacho avlesning.

    Setpunkt / Feedback er jo alltid greit å holde styr på i et regulert system.
     

     

    On 27/01/2024 at 01:03, Im_IB said:

    men ESP32 og MQTT har jeg aldri vært borti.

     

    Om du ikke ønsker å involvere deg i ESP per. nå så kan kanskje det enkleste for øyeblikket være å justere ned supply spenningen til vifta.
    Jeg har i ei 4x4x1cm 12 V Noctua vifte uten PWM styring(3 pins) som nå spinner stille og rolig på 9,5V / 0,02A og holder Pi’en på 35’ish C.
    Forøvrig så kommer enkelt av Noctua viftene med ekstra "kabler" som jeg tror gjør akkurat dette. 
    Disse er benevnt: Low-Noise Adaptor og/eller Ultra Low-Noise Adaptor.
    Muligens dette er kun for vifte uten PWM styring(3 pins).

    Om du derimot skulle ønske å involvere deg i ESP verdenen så kan du kanskje tenke at en temperatur sensor (feks DS18B20) leser temp og justerer vifta.
    Se Fermante sin post her :

     

    Eventuellt bytte ut DS18B20'en med en sensor som måler både temperatur og fuktighet feks DHT11 bare for å nevne en.
    Om du bruker Arduino IDE er www. fullt av eksempler for dette og Arduino IDE er enklere å komme i gang med enn andre.
    Det er jo også et eget forum om ESP: https://www.hjemmeautomasjon.no/forums/forum/103-mikrokontrollere/
     

    Om du har videre spørsmål rundt dette så tenker jeg at basert på denne posten er nok Fermante mye bedre istand til å hjelpe deg videre på vegen enn meg.
    Ikke det at jeg nekter å svare altså. Kan jeg være til noen hjelp så selvfølgelig.
     

    Edited by Per-Chr
    Link to comment
    Share on other sites



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.




×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.