Pojďme programovat elektroniku | Raspberry Pi | Kouření

Programování elektroniky: Stavíme detektor otravných kuřáků

  • Také vás obtěžují sousedé s cigaretou na balkoně?
  • Dnes začneme stavět jejich detektor
  • Nejprve si vyzkoušíme prachové laserové čidlo SDS011

V několika následujících pokračováních našeho seriálu o programování elektroniky si vyzkoušíme metody, pomocí kterých bychom mohli s trochou štěstí detekovat obtěžujícího kuřáka třeba na některém z okolních balkonů bytového domu.

Možná to také znáte. Je parné léto a vy chcete vyvětrat. Jakmile ale dokořán otevřete okno, průvan napříč budovou vtáhne do bytu agresivní cigaretový kouř ze sousedství. Sám s tím bojuji už roky a otravných kuřáků mě nakonec zbavil až covid a přetrvávající ztráta čichu.

Asi se ale shodneme, že virová infekce a dočasná ztráta klíčového smyslu je v boji s kuřáky docela agresivní řešení a vhodnější by bylo něco bezpečnějšího. A jelikož právě teď čtete seriál o programování elektroniky, asi by to měl být nějaký elektronický detektor.

Dnes se podíváme na první z nich, přičemž definitivní detektor bude komplexem hned několika optických a chemických čidel.

SDS011

Jedním z těch potenciálně nejpokročilejších, a přitom cenově stále relativně dostupných je malá krabička SDS011 (datasheet) od čínského výrobce Shandong Nova Fitness, kterou založili inženýři z tamní univerzity.

Na asijských i českých e-shopech ji často najdete i pod názvem Nova PM Sensor, no a jak už tento rozšířený název napovídá, jedná se o detektor prachových částic kategorie PM2,5 a PM10. Tedy drobky s velikostí okolo 2,5 μm, respektive 10 μm.

Klepněte pro větší obrázek
Prachový senzor SDS011 s USB/UART převodníkem pro snadné připojení k PC. My použijeme jako řídící počítač Raspberry Pi

Čidlo počítá jejich koncentraci v rozsahu 0,0 až 999,9 μg/m3, respektive 0,0 až 1 999,9 μg/ma změřené údaje vyjadřuje na adekvátních pinech buď délkou periodického obdélníkového pulzu (2 až 1001 ms odpovídá 0,0 až 999,9 μg/m3), anebo skrze 9600 b/s sériovou linku UART.

Rozptyl světla

Čidlo k měření koncentrace používá princip rozptylu světla – v tomto případě laserového paprsku uvnitř temné komory. Optický detektor pak měří změnu charakteru světla po průchodu prachovými částicemi. Aby mohl být detektor co nejrychlejší, obsahuje také malý ventilátor, který do komory neustále vhání čerstvý vzduch.

Metodu lze ovšem spolehlivě použít jen při relativní vlhkosti nasávaného vzduchu do 70 %. Při vyšší vlhkosti už totiž může na prachových částicích kondenzovat voda, zvětší se jejich objem a detektor nebude schopen podávat spolehlivé výsledky.

Klepněte pro větší obrázek
Prachové čidlo s nasávací trubičkou ve venkovní krabici s Raspberry Pi 4 a výkonným napájením PoE. Raspberry Pi poslouží skrze USB/UART převodník jako zdroj energie a počítač, který bude číst zprávy s koncentrací

Při použití venku tedy hrozí chybné údaje třeba za deště, kdy relativní vlhkost vzduchu stoupá ke 100 %. I z tohoto důvodu jsem detektor umístil do plastové schránky, ve které u mě na balkoně operuje i Raspberry Pi 4 napájené skrze PoE. Uvnitř schránky je díky jeho odpadnímu teplu i při teplotách pod nulou relativně vysoká teplota a nižší vlhkost.

Kuřákův prach

SDS011 sice primárně slouží k detekci ambientní přírodní a antropogenní prašnosti, prachové částice ale tvoří i kouř z cigarety. A pokud budeme pracovat s předpokladem, že čím silnější zápach, tím i vyšší koncentrace kouře a tedy i drobných částic, měřící jednotka by mohla zápach skutečně detekovat.

Ve výchozím stavu čip SDS011 měří automaticky s frekvencí 1 Hz. To znamená, že se ventilátor po připojení zdroje napájení roztočí a začne blikat laserová LED. Pokud nyní začneme v nekonečné smyčce číst hodnoty ze sériové linky, můžeme se prakticky okamžitě dozvědět, že se něco děje.

Klepněte pro větší obrázek
Teplo z PoE měniče, Raspberry Pi a ADSB přijímače se postará o to a díky ventilátoru prachového čidla neustálé proudění vzduchu se postarají o to, aby se v krabici držela vlhkost na bezpečné úrovni

Má to ale jednu nevýhodu. Výrobce odhaduje trvanlivost LED zhruba na 8 000 hodin aktivního svitu, což není ani jeden celý rok. LED ale jen krátce blikne, praktická trvanlivost optického zdroje proto bude mnohem vyšší.

Horší je to už se zanášením komory. Pokud bude čidlo vystavené trvale silně prašnému prostředí, po roce a bez důkladné očisty taktéž může vracet velmi shlazené hodnoty. Bohužel, toto není teploměr ale doslova prachový čítač, takže až jeho reálným používáním a sledováním, co vlastně zaznamenává a subjektivním porovnáváním s realitou zjistíte, jestli podává vůbec nějaké smysluplné výsledky.

Raspberry Pi, sériová linka a C

Jelikož krabička kvůli laserové LED a ventilátoru potřebuje solidní 5V napájení (až 1 W), k zapojení použiji zmíněné Raspberry Pi 4 a jeden z volných konektorů USB. SDS011 je totiž dodávané v balení včetně USB/UART převodníku, který nám zároveň bezpečně převede 3V logiku sériové linky na 5V a zpět.

Klepněte pro větší obrázek
Linuxový Raspberry Pi OS korektně detekoval USB/UART převodník sériové linky, který je dostupný na cestě /dev/ttyUSB0

Na Raspberry Pi mi běží standardní linuxový operační systém Raspberry Pi OS, a tak si to dnes celé naprogramujeme v jazyku C.

Zdrojové kódy najdete také na GitHubu našeho seriálu

Náš textový program bude mít několik parametrů. Tím prvním bude USB zařízení, se kterým se má program spojit, no a tím druhým počet měření, které má program zachytit, než skončí. Zároveň bude umět přepnout modul do režimu spánku s vypnutou laserovou LED a ventilátorem a zase jej probudit.

Aplikační rozhraní sériové linky senzoru toho umí ještě více. Třeba změnit frekvenci automatického měření, anebo jej zcela vypnout s tím, že se budeme požadavky na změření zasílat ručně. My se ale pro jednoduchost dnešního příkladu spokojíme s výchozím stavem. V každém případě, v závěru článku najdete vložené PDF s popisem kontrolního protokolu.

Deset bajtů

Když bychom se pomocí libovolného terminálu sériové linky spojili s čidlem, ve výchozím stavu by měl každou sekundu dorazit sled deseti bajtů v tomto formátu:

AA C0 71 00 85 00 2E 81 A5 AB

  • AA: úvodní hlavička
  • C0: úvodní hlavička
  • 71: spodní bajt koncentrace PM2,5
  • 00: horní bajt koncentrace PM2,5
  • 85: spodní bajt koncentrace PM10
  • 00: horní bajt koncentrace PM10
  • 2E: první bajt ID čidla
  • 81: druhý bajt ID čidla
  • A5: 8bitový kontrolní součet bajtů 71, 00, 85, 00, 2E, 81
  • AB: závěrečná patička

Jakmile tuto zprávu přečteme, spojíme spodní a horní bajt obou koncentrací do 16bitových čísel 0077 a 0085, která podělíme 10 a konečně vypočítáme koncentraci v μg/m3.Pokud bychom měli oněch 10 bajtů výše uloženo v poli zprava, pak by přepočet mohl vypadat v jazyku C třeba takto:

uint8_t zprava[10] = {0xAA, 0xC0, 0x71, 0x00, 0x85, 0x00, 0x2E, 0x81, 0xA5, 0xAB};
uint16_t _pm25 = (zprava[3] * 256) + zprava[2];
uint16_t _pm10 = (zprava[5] * 256) + zprava[4];

float pm25 = (float)_pm25 / 10.0f
float pm10 = (float)_pm10 / 10.0f

Pokračování článku patří k prémiovému obsahu

Získejte neomezený přístup a Živě bez reklam už za 41 Kč měsíčně

Témata článku: Zdraví, Linux, Programování, Pojďme programovat elektroniku, Raspberry Pi, C++, Kouření



Izrael díky speciální kamufláži zařídil pro své vojáky „neviditelnost“

Izrael díky speciální kamufláži zařídil pro své vojáky „neviditelnost“

** Materiál „Kit 300“ představuje vizuální i termální kamufláž ** Dokáže zablokovat tepelné vyzařování maskovaného vojáka či třeba stroje ** Velký kus materiálu Kit 300 může ukrýt vozidlo až do velikosti Hummeru

Stanislav Mihulka
IzraelMateriálArmáda
Adriano vdechne starým smartphonům nový život. Mohou se stát centrem domácnosti
Martin Miksa
UdržitelnostVysloužilý mobilChytrý telefon
Rusko obviňuje astronautku NASA ze sabotáže Mezinárodní vesmírné stanice
Jiří Černý
Mezinárodní vesmírná staniceNASARusko
Recenze zesilovače PrimaLuna EVO 300 Hybrid. Poctivý a přirozený zvuk s dotekem elektronek

Recenze zesilovače PrimaLuna EVO 300 Hybrid. Poctivý a přirozený zvuk s dotekem elektronek

Čekáte-li od svého zesilovače díky elektronkám automaticky barevnost, sytost a šťavnatost, sáhněte spíše po klasické firemní sérii, pokud ale chcete poctivý a přirozeně hrající zesilovač, smočte ucho v tom, jak hraje EVO 300 Hybrid.

Daniel Březina
Zesilovače
Nejlepší filmy na Netflixu v roce 2021. Všechny mají český dabing nebo titulky

Nejlepší filmy na Netflixu v roce 2021. Všechny mají český dabing nebo titulky

Tyto filmy byly v roce 2021 na českém Netflixu nejoblíbenější. Nerozlišujeme žánr, stáří ani hodnocení na filmových webech. Jde o oblíbenost, kterou sleduje web FlixPatrol a počítá z ní souhrnné žebříčky.

Ondřej Králík
Netflix
Lék proti depresi za stokorunu snižuje riziko těžkého průběhu i úmrtí na onemocnění covid-19

Lék proti depresi za stokorunu snižuje riziko těžkého průběhu i úmrtí na onemocnění covid-19

** Klinická studie zkoumala vliv antidepresiva fluvoxamin na covid-19 ** Počet úmrtí souvisejících s covidem-19 klesl zhruba o 90 % ** Potřeba intenzivní lékařské péče se snížila zhruba o 65 %

Karel Kilián
COVID-19LékyDepreseMedicína
Dead Drops: Nejpomalejší internet na světě je připravený pro planetu po apokalypse

Dead Drops: Nejpomalejší internet na světě je připravený pro planetu po apokalypse

** V roce 2010 se začala rodit síť mrtvých schránek Dead Drops ** Byly jich tisíce, časem se na ně ale zapomnělo ** Vypravili jsme se ke schránce č. 595, která funguje dodnes

Jakub Čížek
ZajímavostiÚložiště