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

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

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

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

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í

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í

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

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

Linuxový Raspberry Pi OS korektně detekoval USB/UART převodník sériové linky, který je dostupný na cestě /dev/ttyUSB0

Linuxový Raspberry Pi OS korektně detekoval USB/UART převodník sériové linky, který je dostupný na cestě /dev/ttyUSB0

Sériový monitor minicom a patrný sled třech zpráv z čidla uvozených bajty AACO

Sériový monitor minicom a patrný sled třech zpráv z čidla uvozených bajty AACO

8bitový kontrolní součet ve vývojářské kalkulačce na Windows. Výsledek B7 odpovídá kontrolnímu součtu pro příkaz k probuzení zmíněný výše

8bitový kontrolní součet ve vývojářské kalkulačce na Windows. Výsledek B7 odpovídá kontrolnímu součtu pro příkaz k probuzení zmíněný výše

Uspání senzoru (parametr -s) a kontrolní výpis jednotlivých odesílaných bajtů zprávy (parametr -l pro logování). Poté sice dorazí ještě jedna zpráva s koncentrací, ta ale už pochází jen z mezipaměti USB/UART čipu nebo systému

Uspání senzoru (parametr -s) a kontrolní výpis jednotlivých odesílaných bajtů zprávy (parametr -l pro logování). Poté sice dorazí ještě jedna zpráva s koncentrací, ta ale už pochází jen z mezipaměti USB/UART čipu nebo systému

A pro srovnání ještě úspěšně odeslaná instrukce k probuzení (parametr -b), za kterou již následuje první změření hodnota

A pro srovnání ještě úspěšně odeslaná instrukce k probuzení (parametr -b), za kterou již následuje první změření hodnota

A zde ještě jednou probuzení (-b) a rovnou deset měření (-c 10), ze kterých je patrné, že prvních několik hodnot má poměrně velký rozptyl

A zde ještě jednou probuzení (-b) a rovnou deset měření (-c 10), ze kterých je patrné, že prvních několik hodnot má poměrně velký rozptyl

Provedli jsme jedno měření (parametr -c 1) a pro kontrolu vypsali nejen výsledek, ale i sled bajtů zachycené zprávy (parametr -l pro logování) ohraničený hvězdičkami

Provedli jsme jedno měření (parametr -c 1) a pro kontrolu vypsali nejen výsledek, ale i sled bajtů zachycené zprávy (parametr -l pro logování) ohraničený hvězdičkami

Senzor nyní spí a neodpovídá. Náš program ale nezamrzne, protože počítá s timeoutem 1,5 sekundy, a tak při při žádosti o pět hodnot zobrazí pět chybových hlášení a skončí

Senzor nyní spí a neodpovídá. Náš program ale nezamrzne, protože počítá s timeoutem 1,5 sekundy, a tak při při žádosti o pět hodnot zobrazí pět chybových hlášení a skončí

První dvě zprávy jsme přečetli prakticky okamžitě (58 a 54 us), takže už byly načtené ve vyrovnávací paměti USB/UART převodníku nebo systému. Další zprávy už chodí s frekvencí jedné sekundy, čemuž odpovídá i doba v mikrosekundách

První dvě zprávy jsme přečetli prakticky okamžitě (58 a 54 us), takže už byly načtené ve vyrovnávací paměti USB/UART převodníku nebo systému. Další zprávy už chodí s frekvencí jedné sekundy, čemuž odpovídá i doba v mikrosekundách

SOSIK, aneb  kosmická technologie z Brna

SOSIK, aneb kosmická technologie z Brna

Test SOSIK v časovém grafu

Test SOSIK v časovém grafu

Během několika okamžiku se koncentrace dostane na hraniční hodnoty

Během několika okamžiku se koncentrace dostane na hraniční hodnoty

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
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í
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
Linuxový Raspberry Pi OS korektně detekoval USB/UART převodník sériové linky, který je dostupný na cestě /dev/ttyUSB0
16
Fotogalerie

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.

c18fa663-1215-4152-90f2-dddaa17d5c04
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.

2a79aed9-32d5-435f-aa79-c3556c077c94
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.

7c275980-d39c-4f19-af5b-201ebd9b1f90
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.

ebd154a1-5b94-4473-945a-b74f9dd784ec
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 pro předplatitele

Chci Premium a Živě.cz bez reklam Od 41 Kč měsíčně

Určitě si přečtěte

Články odjinud