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í



Vychází LibreOffice 7.2. Je rychlejší a zase si lépe poradí s dokumenty MS Office
Lukáš Václavík
LibreOfficeMicrosoft OfficeSoftwareOpen source
Recenze Windows 11. Microsoft nás opíjí rohlíkem a omezuje použitelnost

Recenze Windows 11. Microsoft nás opíjí rohlíkem a omezuje použitelnost

** Oproti Desítkám významně stouply hardwarové požadavky ** Windows 11 mají nový vzhled, ale výrazně narušují workflow. ** Potěší vyhledávání, multitasking i rychlejší aktualizace

Petr Urban
Windows 11Testy
Další postrach lidských překladatelů. Český CUBBITT má být přesnější než člověk

Další postrach lidských překladatelů. Český CUBBITT má být přesnější než člověk

** Na MFF UK vyvíjejí překladač postavený na neuronových sítích ** Podle slepého testu je lepší než Google Translator ** Překlad má být dokonce přesnější než od lidí

Lukáš Václavík
Překladače celých větPřekladačStrojové učení
40 ženských erotických symbolů osmdesátých let

40 ženských erotických symbolů osmdesátých let

Vyzývavá krása, rafinovanost, nevinnost i perverzní voyeurské fantazie. Filmaři už se sexu ve filmu nebáli, a tak dala 80. léta vzniknout řadě kultovních ženských erotických symbolů.

Marek Čech
Filmy a seriály