Rechercher dans ce blog

Sunday, January 30, 2022

Toto musí mít každý bastlíř: Česká Wi-Fi deska pro laciné prachové čidlo Ikea Vindriktning - Živě.cz

Š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.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
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.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
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.

Klepněte pro větší obrázek
Č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₂.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Š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.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
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.

Klepněte pro větší obrázek
Ú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.

Klepněte pro větší obrázekKlepněte pro větší obrázek
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

No comments:

Post a Comment

Metro Awakening zve do tunelů moskevského metra ve virtuální realitě - INDIAN - INDIAN

Abychom vám mohli nabídnout co nejlepší zážitek z našich stránek, používáme ty nejmodernější technologie. Bez JAVASCRIPTU tyto stránky nem...