Pojďme programovat elektroniku | Chytrá domácnost

Stavíme chytrou ventilaci ložnice. Legrační větráčky z počítače jsme vyměnili za turbo

  • Loni v létě jsme zkusili větrat ložnici chladičem z počítače
  • Fungovalo to, ale trvalo to celou noc
  • Proto do boje povoláváme 12V turboventilátor

Loni v létě jsme si v našem seriálu o programování elektroniky ukázali, jak automaticky vyvětrat ložnici tím nejpitomějším možným způsobem. Vzali jsme do ruky bourací kladivo, vysekali ve zdi otvor na balkon a do jeho nitra umístili malý 12V větráček z počítače.

Když se tichý ventilátor roztočil, začal do bytu vhánět čerstvý vzduch a spáč se probudil do příjemného rána. To je skvělé! No, ne tak docela. Sice to fungovalo, ale bylo to zároveň žalostně pomalé.

Počítačové chladiče totiž mají už podle svého názvu za úkol především chladit, a nikoliv přenášet metry krychlové vzduchu skrze šachtu kamsi do nitra bytu. Běžný 12V ventilátor s rozměry 120×120 mm jsme proto vyměnili za 12V turbo!

Podívejte se na video stavby turboventilátoru v redakci a praktickou ukázku skutečného větrání v domácnosti autora článku:

Pozor, PC větráček sice chladí, ale...

Malé větráčky pro chlazení osobních počítačů a další podobné elektroniky můžeme zpravidla rozlišovat podle:

  • Hlučnosti (dB)
  • Otáček (RPM)
  • A průtoku vzduchu (m³/hod, nebo CFM – stopa²/min)

Takže třeba takový chladič Noctua NF-A12x25 dosahuje podle specifikace a při nejvyšším výkonu:

  • Hlučnosti 22,6 dB
  • Otáček 2000 RPM
  • A průtoku vzduchu 102,1 m³/hod, respektive 60,03 CFM

Na první pohled to nevypadá vůbec špatně, začátečník se totiž podívá především na ten poslední řádek se 102 metry krychlovými za hodinu a spočítá si, že kompletní výměna vzduchu v jeho malé panelákové ložnici zabere zhruba 20-30 minut. No, a když budou v ložnici funět dvě spící osoby, bude to dvojnásobek.

0d35a0f4-27e3-4f06-8ab8-b81c054b90f6
Večerní a noční růst koncentrace CO₂ v nevětrané panelákové ložnici. Zelená linka představuje hladinu 1500-2000 ppm, kdy se už doporučuje vyvětrat

Takže dejme tomu, že někdy ve tři ráno zaznamená čidlo koncentraci CO₂ okolo 1500 ppm (koncentrace oxidu uhličitého koreluje i s dalšími plyny biologického původu) a dá povel řídící jednotce, aby spustila větrání. Tichý chladič nikoho neprobudí a za pár desítek minut hladina opět klesne na akceptovatelnou hodnotu.

Nemá dostatečný statický tlak!

Mohlo by se zdát, že máme vítěze, ale ve specifikaci jinak velmi povedeného PC chladiče jsme zapomněli zmínit pro naše účely zdaleka nejdůležitější parametr:

  • Statický tlak (mmH₂O, 1 mmH₂O = 9,80665 Pa)

V případě Noctua NF-A12x25 to dělá 2,34 mmH₂O, což sice stačí k tomu, aby ventilátor vytvořil proud vzduchu, který efektivně ovane žebroví pasivního chladiče hned pod ním, ale pro náš byt je to příliš nízká hodnota.

Statický tlak totiž představuje sílu, kterou ventilátor potřebuje k tomu, aby čelil překážkám v cestě a dopravil čerstvý vzduch až do cíle. Překážkou je pochopitelně úplně všechno počínaje již přítomným vzduchem v místnosti, který chceme dostat pryč, a konče úzkým hrdlem 60cm šachty vysekané v panelu.

Dost možná bude muset běžet celou noc

V praxi to proto dopadne tak, že se noční výměna zaprděné atmosféry v ložnici dost možná protáhne až do rána. Pokud tedy vůbec dokáže ventilátor čelit vydechujícím osobám v posteli.

c3b966a6-989f-4d9f-910b-a7b6ce1b5265
Velikonoce 2018 na Hané a noční následky, aneb zvýšená koncentrace CO₂ kvůli zrychlenému metabolismu při odbourávání alkoholu a vanilkových rohlíčků

Průměrná plicní vitální kapacita se pohybuje okolo 4 litrů. Dýchání ve spánku je sice naštěstí mělké a frekvence nízká, ale i kdyby hodnota klesla třeba jen na 1 litr a nadechovali bychom se jednou za 3 sekundy, stále to dělá 1 200 litrů odpadních plynů s extrémní koncentrací CO2 za hodinu v jedné jediné osobě.

A to se raději ani nebudeme věnovat případům, kdy si večer vyrazíte s přáteli do hospody. Metabolismus odbourávání alkoholu se totiž po návratu domů postará o to, že se množství vydechovaného oxidu zvýší i několikanásobně.

Turboventilátor FFB1212EH

Krátce po prvním prototypu, který měl ověřit základní funkčnost celého nápadu, jsme proto běžný počítačový chladič nahradili truboventilátorem FFB1212EH. Stále jej napájí stejnosměrné napětí 12 V a má také identické rozměry a montážní otvory, které najdeme u konstrukce 120×120 mm, ale výkonově to je už úplně jiná třída.

8ae47bd7-e230-428a-9524-318ccc4676fc
Turboventilátor vytváří o řád vyšší statický tlak díky statickému usměrňovači s opačně orientovanými lopatkami

Není to ale zadarmo, za vyšší výkon totiž zaplatíme i vyšší spotřebou (při nejvyšším bezpečném napětí 13 V příkon až 21 W) a také hlučností:

  • Hlučnost: 60,4 dB
  • Otáčky: 4000 RPM
  • Průtok vzduchu: 255,4 m³/hod, respektive 150,33 CFM
  • Statický tlak: 12,43 mmH₂O

Všimněte si, že má ventilátor při plném výkonu zhruba 2× vyšší otáčky a 2,5× vyšší průtok vzduchu než Noctua se stejnými rozměry, ale až 5,3× vyšší statický tlak!

Má tedy 5,3× větší sílu k tomu, aby překonal odpor vzduchu v šachtě a místnosti. A také k tomu, aby se popral s mírným přetlakem v ložnici, který vytvoří, protože z místnosti musí vzduch také někam unikat. Předpokládejme, že spíte se zavřenými dveřmi, takže plyn musí proudit ven právě škvírami skrze ně.

Image 086.pngPC210015.JPGPC210020.JPGPC210021.JPG
Pro venkovní instalaci jsme si navrhli a vytiskli kryt ventilátoru se zasunovacím adaptérem do úzké šachty. Materiál: PETG, Model najdete an Tinkercadu

Pokud k tomu ventilátor nebude mít dostatečný tlak, bude se sice točit jak centrifuga na pouti, zvesela spalovat elektřinu, ale to vše bez kýženého efektu. Když dáme před vnitřní výdech šachty dlaň, musíme prostě cítit relativně silný proud vzduchu.

Vytváří statický tlak i při nízkých otáčkách

No dobrá, takže turbovětrák za pár stovek z AliExpressu a podobných asijských tržišť nám sice vyvětrá místnost, ale také probudí všechny spáče v domě, ne? Vždyť 60,4 dB je už pěkně hlučný řev! To samozřejmě je, ale právě z toho důvodu jsme jej umístili na fasádu, a nikoliv přímo do bytu.

cce46d61-b299-43e1-b77a-c1dccc04f4c3
Koncentrace oxidu uhličitého v nevětrané ložnici během prosince 2021

Podstatnou část decibelů utlumí 60 cm izolace pláště a betonová zeď, takže ruchy vytváří jen proudící vzduch, který naráží do plastového usměrňovače z 3D tiskárny na výdechu.

Co je však zdaleka nejdůležitější, díky tomu, že má turboventilátor takovou sílu, nemusíme jej vždy spouštět na plný výkon – ten naopak regulujeme pomocí PWM signálu.

Zatímco uprostřed noci se může spustit třeba jen na pětinový výkon s tím, že sice bude měnit vzduch pomaleji, ale nikoho neprobudí, během večerního sledování nové epizody The Last of Us na domácím kině se mohou otáčky zvýšit klidně na 100 %.

f9f57a22-2e9f-42e0-8b17-31e4242d8027
Koncentrace oxidu uhličitého v automaticky větrané ložnici během prosince 2022. Proluku na začátku měsíce způsobilo čerpání dovolené a prázdný byt

Pro náš systém chytré domácnosti to není žádná překážka, v místnosti je totiž také mikrofon, který měří intenzitu hluku, takže máme zpětnou vazbu. Když bude hrát televizor, může automat zvýšit otáčky, no a když bude o půl čtvrté ráno v bytě ticho jako po uzávěrce časopisu Computer, bude tichá i ventilace.

Noční větrání propálí okolo 14 Wh

Suma sumárum, automatické větrání, které se aktivuje, pokud koncentrace CO₂ překoná hladinu 2 000 ppm, se spustí zhruba 2-3× za noc, a protože ventilátor běží v tichém režimu, jeho příkon bude pouze okolo 3 W.

Člověk se ráno probudí do vyvětrané místnosti, přičemž za tento servis zaplatí pouze 14 Wh propálené elektrické energie!

Pojďme si to vyzkoušet v redakční dílně

Tolik tedy praktická část po osmnácti měsících experimentování a na závěr si to ještě pojďme celé vyzkoušet v Arduinu s Wi-Fi konektivitou u nás v redakční dílně. Arduino volím pro jeho jednoduchost, ačkoliv doma ve skutečnosti používám českou prototypovací platformu Hardwario Tower s 868MHz rádiovými vysílači a velmi úsporným během na baterii.

8d852cf6-ad3b-4334-80a1-d264d928c6ab
Pro redakční experiment použijeme miniaturní desku Seed Studio XIAO ESP32C3

Před pár dny mi do dílny dorazila krabička s hromadou maličkých a laciných prototypovacích destiček zhruba za stovku Seed Studio XIAO ESP32C3. Experiment s ventilátorem je tedy docela hezká výzva pro jejich redakční křest.

Výpočetním mozkem desky je nový 32bitový RISC-V mikrokontroler Espressif ESP32-C3 s Wi-Fi a Bluetooth 5 LE a destičku najdete po doinstalování podpory pro čipy z rodiny ESP32 i ve vývojovém prostředí Arduino.

PC210024.JPGPC210032.JPGPC210028.JPG
Deska XIAO ESP32C3 a obvod s motorovým ovladačem a ventilátorem na nepájivém poli

Wi-Fi ovládání větráčku

Náš program na řídícím čipu spustí ihned po startu a připojení k předdefinované Wi-Fi jednoduchý webový server, který bude reagovat na adresu http://lan-ip-adresa/?rychlost=číslo v rozsahu 0-255. Tato hodnota bude nastavovat střídu (duty-cycle) strojově generovaného periodického obdélníkového signálu PWM s frekvenci 5 000 Hz.

Image 082.pngImage 083.png
Čip ESP32-C3 se připojil k Wi-Fi, získal IP adresu 172.17.16.112 a spustil si miniaturní webový server, takže můžeme řídit otáčky ventilátoru prostým načtením URL

Pro naprosté začátečníky připomenu, že PWM bude v našem případě představovat rychlý sled pulzů elektrické energie. Čím širší bude pulz v jedné periodě, tím větší dávku energie dostane za jednotku času i motor.

Když bude střída jen na úrovní 25 % (¼ periody tvoří pulz a ¾ prodleva), bude v ideálním případě čtvrtinový i výkon motoru. V praxi je to složitější a průběh není takto lineární jako na papíře, ale chování motoru a správné hodnoty zjistíme vlastní praxí.

f1c943ed-7b78-48fb-afc6-6284d8228ef1299af708-5a93-41f0-aaab-0d005c368bed
Střídou obdélníkového periodického signálu PWM nastavíme množství elektrické energie, kterou za jednotku času dostane 12V ventilátor

H-můstek jako 12V zesilovač signálu PWM

Dvanáctivoltový truboventilátor samozřejmě nemůžeme připojit přímo na 3,3V destičku Seed Studio XIAO ESP32C3, jeho lopatky se totiž roztočí zhruba až při napětí 7 V. Budeme proto potřebovat ještě nějaký dostatečně rychlý spínač, který dokáže zpracovat náš signál PWM a zároveň jej nezničí až 20W příkon ventilátoru.

Mohli bychom použít třeba některý z mnoha hotových prototypovacích mosfetových spínačů, my však máme plnou dílnu motorových ovladačů, tzv. H-můstků pro řízení stejnosměrných motorů, a tak sáhneme po některém z nich.

3e4110d1-f590-45ee-b99b-4b2f53ec5e10
Motorový ovladač DRV8871 připojený k ventilátoru, externímu zdroji 12V napájení a logickými signály k řídícímu čipu ESP32-C3 

Volba nakonec padla na jeden z laciných prototypovacích modulů s čipem DRV8871 od Texas Instruments. Ovladač si poradí s napětím motoru v rozsahu 6,5-45 V, unese špičkový proud až 3,6 A, zpracuje vstupní signál PWM s frekvencí až 200 kHz a lze jej ovládat i 3,3V logikou z naší řídící destičky.

Kombinací stavů na vstupu nastavíme výstupní polaritu

Ovladač DC motorů je ve své podstatě jen takový sofistikovanější mosfetový spínač, který dokáže měnit polaritu výstupu (směr otáčení motoru), což my určitě dělat nebudeme, abychom ventilátor přepólováním nezničili, a budeme jej používat opravdu jen jako zesilovač vstupního PWM signálu.

Prototypovací deska s čipem DRV8871 má dva vstupní signály IN1 a IN2. Když na IN1 nastavíme vysoký stav a na IN2 nízký (v našem případě tedy 3,3 V, respektive 0 V), ovladač připojí výstup k externímu napětí. Když logické stavy na vstupu prohodíme, prohodí se i polarita výstupu. Stejným způsobem bude DRV8871 překládat na vyšší napětí i vstupní PWM signál.

8400c5f3-dfaf-4296-9e17-82e1f9be1cfe
Tabulka logických stavu IN1 a IN2 na ovladači DRV8871 od Texas Instruments

V našem případě proto k motorovému driveru připojíme externí 12V zdroj napětí a vstupní signály IN1 a IN2 propojíme s piny D2 a D3 na desce XIAO. Na pinu D3 poté nastavíme setrvale nízký logický stav (na adekvátním výstupu motorového ovladače bude napětí 0 V) a na druhém pinu budeme generovat signál PWM (na výstupu bychom běžným domácím multimetrem změřili zprůměrované napětí 0-12 V dle aktuální střídy signálu PWM).

Namísto primitivního analogWrite ESP32 LEDC

Arduino nabízí k nastavení signálu PWM na podporovaných pinech primitivní funkci analogWrite s 8bitovým nastavením střídy v numerickém rozsahu 0-255. Čipy ESP32 ale nabízejí vlastní techniku generování PWM LED Control API (LEDC) s mnohem detailnější konfigurací, kterou můžeme použít i v Arduinu. Jak už název techniky napovídá, primárně má sloužit pro nastavení jasu LED pomocí pulzně-šířkové modulace.

Pomocí instrukce ledcSetup(0, 5000, 8) nakonfigurujeme LEDC na kanál 0 (čip ESP32 jich nabízí hned několik a mohou pracovat nezávisle na sobě s různým nastavením), přičemž PWM se nám bude generovat s frekvencí 5000 Hz. Poslední parametr 8 představuje bitové rozlišení střídy. Vystačíme si s rozsahem 0-255 jako v Arduinu (takže 8bitové rozlišení).

Další instrukcí ledcAttachPin(D2, 0) konečně připojíme na konkrétní kanál LEDC kýžený pin. V tomto případě tedy připojujeme na kanál LEDC číslo 0 GPIO pin D2 desky XIAO ESP32C3.

A to je celé. Teď už jen stačí libovolně nastavovat střídu na zvoleném kanálu LEDC instrukcí ledcWrite(0, 127). Zde jsme na kanálu 0 nastavili střídu 127 z 255 (cca 50 %), takže hotový obdélníkový signál bude mít v jedné periodě stejně dlouhý vysoký a nízký stav.

Zdrojový kód

Na to, jak naše laboratorní demo dopadlo v praxi, se určitě podívejte v úvodním videu, kde vám také ukážeme praktickou instalaci ventilačního systému u autora doma.

78cdaf4d-2836-4411-b61d-264a76382811
Úspěšně jsme přeložili a nahráli nový firmware do čipu ESP32-C3 a mikrokontroler nám o tom dal vědět v sériovém terminálu, do kterého napsal LAN IP adresu, na které můžeme ovládat ventilátor

Níže si pak konečně můžete prohlédnout celý zdrojový kód pro mikrokontroler ESP32-C3 na desce XIAO ESP32C3 a v softwarovém prostředí Arduino.

#include <WiFi.h>      // Knihovna pro pripojeni k Wi-Fi
#include <WebServer.h> // Knihovna pro spusteni jednoducheho HTTP serveru

const char *ssid = "NazevWiFiSite"; // SSID 2,4GHz Wi-Fi site
const char *heslo = "********";     // Heslo k WI-Fi siti

WebServer server(80); // Objekt HTTP serveru, ktery pobezi na standardnim TCP portu 80

// Tato funkce se vyvola pri HTTP GET pozadavku /
void httpDotaz(void) {
  if (server.hasArg("rychlost")) {                         // Pokud je soucasti URL parametr ?rychlost=...
    uint8_t rychlost = server.arg("rychlost").toInt();     // Prevedeme hodnotu pramateru rychlost na 8bitove cele cislo (0-255)
    // Odpovime HTTP klientu pro kontrolu dve textovymi radky:
    // OK
    // Rychlost: ... 
    server.send(200, "text/plain", "OK\nRychlost: " + String(rychlost)); 
    ledcWrite(0, rychlost);                                // Nastavime novo ustridu signalu PWM na LEDC kanalu 0
  } else {                                                 // V opacnem pripade odpovime klientu napovedou, jak se server pouziva
    server.send(200, "text/plain", "Pouziti: /?rychlost=hodnota (0-255)");
  }
}

// Hlavni funkce setup se zpracuje hned po startu
void setup() {
  ledcSetup(0, 5000, 8);                      // Nakonfigurujeme LEDC na 0. kanal, rychlost 5000 Hz a 8bitovou stridu
  ledcAttachPin(D2, 0);                       // Pripojime na LEDC kanal 0 pin D2
  ledcWrite(0, 0);                            // Nastavime vychozi stav stridy 0 - ventilator se netoci
  pinMode(D3, OUTPUT);                        // Pin D3 nastavime na digitalni vystup
  digitalWrite(D3, 0);                        // Nastavime pin D3 na logickou 0 (0 V, role „-“)

  Serial.begin(115200);                       // Nastartujeme seriovou linku rychlosti 115200 b/s
  WiFi.disconnect();                          // Odpojime se od Wi-Fi (neni nutne, ale pri ladeni to casto pomuze, pokud ma cip problemy s pripojenim)
  WiFi.mode(WIFI_STA);                        // Nastavime WI-Fi na rezim stanice, ktera se bude pripojovat k AP
  WiFi.begin(ssid, heslo);                    // Zacneme se pripojovat k Wi-Fi
  Serial.printf("Pripojuji se k %s ", ssid);
  while (WiFi.status() != WL_CONNECTED) {     // Kazdych 500 ms vypisujeme do seriove linky „.“ dokud nejsme pripojeni
    delay(500);
    Serial.print(".");
  }                                           // Jsme pripojeni, a tak do seriove linky pro kontrolu napiseme LAN IP adresu
  Serial.printf(" OK\nIP: %s", WiFi.localIP().toString());
  server.on("/", httpDotaz);                  // Pri HTTP GET pozadavku / zavolame funkci httpDotaz
  server.begin();                             // Spustime HTTP server
}

// Smycka loop se spusti po zpracovani funcke setup a opakuje se stale dokola
void loop() {
  server.handleClient();                      // Zpracuj pozadavky serveru (kontrola, jestli je pripojeny novy TCP kloient atp.)
  delay(2);                                   // Pockej 2 ms (predej na 2 ms CPU cas pripadnym dalsim procesum)
}
Diskuze (49) Další článek: Rekordní dvojice ultrachladných trpaslíků: Rok tam trvá méně než jeden den

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,