Švédská Ikea začala loni na jaře prodávat maličký senzor kvality vzduchu v bytě Vindriktning. Bílá krabička napájená skrze USB-C pomocí barevných LED upozorní na míru prašnosti v bytě, pod kapotou je totiž schovaný malý nasávací 5V ventilátor a čidlo částic PM2.5 Cubic PM1006, které komunikuje po sériové lince UART.
Na rovinu, ten senzor není nejpřesnější, ovšem pro základní orientaci a semafor kvality (zelená, oranžová a rudá) bohatě stačí. Pokud byste si chtěli postavit mnohem přesnější detektor prašnosti a to i pro venkovní instalaci, jako základ se nabízí třeba pokročilejší čidlo SPS30 od Sensirionu.
Ikea Vindriktning průběžně měří kvalitu vzduchu a stav zobrazuje barvou na čelním displeji
Česká základní deska s čipem ESP32
Jenže zatímco za holý inženýrský modul SPS30 zaplatíte přes tisíc korun, Ikea Vindriktning se vším všudy přijde zájemce na směšných 249 kaček. I proto si jej během posledního půlroku koupila hromada kutilů a bastlířů a někteří z nich provedli na Twitteru prakticky dokonalou rozborku. Konstruktéři elektroniky z českého e-shopu pro kutily LaskaKit brzy vycítili příležitost.
Demontáž Vindriktningu a jeho úzká základní deska s řídícím čipem Eastsoft ES7P001
Navrhli prototyp vlastní a rozměrově kompatibilní řídící desky, kterou namísto jednoduchého 8bit mikrokontroleru ES7P001 (8 kB ROM, 1 kB RAM) vybavili oblíbeným a mnohem výkonnějším Wi-Fi SoC ESP32-WROOM-32 s dvěma výpočetními 32bit jádry a hromadou flashové i operační paměti prakticky pro jakýkoliv měřící program.
Česká deska od LaskaKitu pro Vindriktning
První várka v únoru
Destička měla být původně k dispozici na konci ledna, výroba v Asii se však protáhla, a tak si budou muset kutilové počkat nejméně do poloviny února.
V každém případě, zájemci si ji budou moci objednat za 498 korun (první várka je dle webu vyprodaná). Společně s Vindriktningem, který přirozeně není součástí balení, pak celá investice přijde na 747 korun.
Nechybí barevné LED a vývod pro sběrnici I²C
Součástí desky je opět sestava barevných LED a v LaskaKit nezapomněli ani na standardní prototypovací piny s roztečí 2,54 mm, na které vyvedli 3,3V napájení a sběrnici I²C. Kutil tak může k desce připojit další čidla – třeba teploměr, vlhkoměr, barometr, luxmetr a čidlo CO₂.
Šest barevných LED (2 pro každý odstín). USB/UART převodník CH340 pro snadné programování skrze USB a prostředí Arduino, konektory ventilátoru a prachového čidla a pájecí otvory s přivedenými signály sběrnice I²C a 3,3V napájení
Možná by nebylo od věci vyvést vedle I²C ještě jeden-dva GPIO. Snad by se tam s trochou inženýrské magie ještě vešly. Čip ESP32 jich má totiž požehnaně a do hry bychom pak mohli zapojit třeba i maličký bzučák, který začne pípat při vysoké prašnosti.
V samotné plastové krabičce je na to vše hromada místa, ventilátor a prachové čidlo totiž okupují zhruba jen ½ vnitřního prostoru. LaskaKit doporučuje třeba nasazení drobného CO₂ čidla SCD41 od Sensirionu, které komunikuje právě na sběrnici I²C a autoři pro něj připravili i funkční příklad v Arduinu, který vystavili na GitHubu.
Výměna původní základní desky za tu novou s výkonným Wi-Fi čipem
Na GitHubu najdete i veškerou hardwarovou dokumentaci destičky včetně elektrických schémat. LaskaKit ji totiž uvolnil pod svobodnou licencí MIT, a tak si mohou zkušení bastlíři základní design libovolně vylepšit.
Destičku můžete flashovat přímo z Arduina
Na GitHubu nakonec najdete i základní ukázkový projekt (pm1006.ino) pro Arduino, který v nekonečné smyčce měří koncentraci, údaj vypisuje skrze sériovou linku do počítače a nastavuje barvu LED.
Po výměně desek tedy stačí připojit Vindriktning skrze USB-C k počítači, spustit Arduino s nainstalovanou podporou pro čip ESP32 a jako cílovou desku zvolit generický ESP32 Dev Module.
Úspěšné navázání spojení s čipem ESP32, nahrání firmwaru z Arduina a výpis koncentrace v sériovém terminálu na PC. Koncentrace prachu je nízká, a tak svítí světýlko zeleně
LaskaKit vyzbrojil destičku USB/UART převodníkem CH340, deska se tedy bude po připojení k PC hlásit jako sériové zařízení a k dispozici budete mít i výstup po sériové lince. Stručně řečeno, chová se jako jakákoliv jiná prototypovací deska s čipem ESP32.
Máte přístup ke všem LED, ventilátoru a čidlu
Na předběžném prototypu, který nám autoři zaslali do redakce, jsou připojené piny ventilátoru, prachového čidla a soustavy LED tímto způsobem:
- Ventilátor: pin 12
- Zelená LED: pin 25
- Žlutá LED: pin 26
- Červená LED: 27
- Prachové čidlo: sekundární sériová linka čipu ESP32 RX2 (16) a TX2 (17)
Kutil pak může ve svém programu nastavováním logických stavů na těchto pinech ovládat jak spínání jednotlivých světýlek, tak ventilátoru, který je vhodné spustit třeba jen na pár sekund, aby se komora zaplnila čerstvým okolním vzduchem. Po změření koncentrace částic jej můžete zase vypnout.
Silné červené a zelené LED. Žluté uprostřed na prototypu svítí jen slabě a společně s aktivními zelenými LED mají vytvořit oranžovou
Co se samotné komunikace s prachovým čidlem týče, LaskaKit ve svých příkladech na GitHubu vychází z této knihovny od Bertika, takže váš aplikační kód může být o to stručnější.
Základní program, který každých 10 sekund změří koncentraci prachových částic, vypíše hodnotu do sériové linky a nastaví barvu stavového světla (převzato z GitHubu projektu):
// Knihovna pro praci s cidlem PM1006
// Soubory pm1006.h a pm1006.cpp najdete na GitHubu projektu:
// https://github.com/LaskaKit/ESP-Vindriktning/tree/main/SW/ESP-Vindriktning_SCD41
#include "pm1006.h"
#define PIN_FAN 12 // Ovladani ventilatoru
#define PIN_LED_G 25 // Zelena LED
#define PIN_LED_Y 26 // Zluta LED
#define PIN_LED_R 27 // Cervena LED
#define RXD2 16 // Seriova linka RX prachoveho cidla
#define TXD2 17 // Seriova linka TX prachoveho cidla
// Objekt prachoveho cidla
static PM1006 pm1006(&Serial2);
// Hlavni funkce setup se zpracuje po spusteni cipu
void setup() {
Serial.begin(115200); // Nastartuj seriovou linku do PC rychlosti 115 200 b/s
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); // Nastartuj sekundarni seriovou linku do prachoveho cidla rychlosti 9 600 b/s
pinMode(PIN_FAN, OUTPUT); // Nastaveni pinu ventilatoru na zapis
pinMode(PIN_LED_G, OUTPUT); // Nastaveni pinu zelene LED na zapis
pinMode(PIN_LED_R, OUTPUT); // Nastaveni pinu cervene LED na zapis
pinMode(PIN_LED_Y, OUTPUT); // Nastaveni pinu zlute LED na zapiss
}
// Funkce loop se opakuje stale dokola
// Spusti se po zpracovani funkce setup
void loop() {
digitalWrite(PIN_FAN, HIGH); // Zapni ventilator
Serial.println("Zapinam vetracek");
delay(10000); // Nech jej 10 sekund nasavat vzduch
// Zmer koncentraci prachovych castic PM2.5
// A pokud se to podari, vypis ciselnou hodnotu do seriove linky
uint16_t pm2_5;
if (pm1006.read_pm25(&pm2_5)) {
Serial.printf("PM2.5 = %u\n", pm2_5);
}
else {
Serial.println("Neco se rozbilo, nelze precit data :-(\n");
}
delay(1000);
digitalWrite(PIN_FAN, LOW); // Vypni ventilator
Serial.println("Vypinam vetracek");
// Podle koncentrace prachovych castic
// nastav zelene, oranzove (zelena+zluta), nebo cervene svetlo
if (pm2_5 < 30) {
digitalWrite(PIN_LED_G, HIGH);
digitalWrite(PIN_LED_Y, LOW);
digitalWrite(PIN_LED_R, LOW);
}
if ((pm2_5 > 30) && (pm2_5 < 40)) {
digitalWrite(PIN_LED_G, HIGH);
digitalWrite(PIN_LED_Y, HIGH);
digitalWrite(PIN_LED_R, LOW);
}
if ((pm2_5 > 40) && (pm2_5 < 80)) {
digitalWrite(PIN_LED_Y, HIGH);
digitalWrite(PIN_LED_G, LOW);
digitalWrite(PIN_LED_R, LOW);
}
if ((pm2_5 > 80) && (pm2_5 < 90)) {
digitalWrite(PIN_LED_Y, HIGH);
digitalWrite(PIN_LED_R, HIGH);
digitalWrite(PIN_LED_G, LOW);
}
if (pm2_5 > 90) {
digitalWrite(PIN_LED_R, HIGH);
digitalWrite(PIN_LED_Y, LOW);
digitalWrite(PIN_LED_G, LOW);
}
// Pockej 10 sekund a vse opakuj
delay(10000);
}
Povedený příklad profesionálního DIY
Základní výpis koncentrace do PC skrze sériovou linku nám fungoval na jedničku, a jelikož máme k dispozici ohromný výkon dvoujádrového Wi-Fi čipu, mohli bychom si dále naprogramovat průběžné zasílání dat třeba někam na web, anebo senzor napojit na některý ze systémů chytré domácnosti, který v případě překročení koncentrace aktivuje ventilaci vzduchu v bytě apod.
S Wi-Fi a čipy ESP32 v Arduinu jsme v našem seriálu pracovali už mnohokrát, takže tyto hrátky už necháme na vás. Deska samotná funguje, povedla se a je to krásný příklad principu DIY – Do it yourself, kdy pomocí profesionálně vyrobené alternativní destičky povzneseme původní produkt na úplně novou úroveň.
Adblock test (Why?)
Toto musí mít každý bastlíř: Česká Wi-Fi deska pro laciné prachové čidlo Ikea Vindriktning - Živě.cz
Read More