Zapisi in dokumenti iz področja prava, človekovih pravic in tehnologije.

BlueSensor – izzivi pri razvoju strojne opreme

Razvoj strojne opreme v praksi prinaša kar nekaj izzivov in tega smo se lahko naučili tudi pri razvoju naprave BlueSensor.

Ko smo se namreč lotili jedkanja tiskanine se je izkazalo, da načrt vezja ni ravno najboljši. Načrt je namreč vseboval napako, poleg tega pa je bil narejen za industrijsko proizvodnjo in za “domače” sestavljanje ni bil ravno najbolj primeren. Zato smo pred jedkanjem na hitro pripravili nov načrt. A hitenje je prineslo nove težave in nov načrt je imel še hujšo napako, kar smo na srečo odkrili pred sestavljanjem končnega produkta. Poleg tega se je izkazalo, da bi bilo na vezje morda smiselno dodati še kakšno malenkost, konkretno LED diodo, zato so bile ponovno potrebne spremembe. Vezje je bilo torej potrebno razviti ponovno, staro serijo ploščic pa žal zavreči.

No, tretji oziroma drugi poskus je uspel in nastala je nova serija ploščic (izdelane so bile po tim. kemo transfer metodi, ki jo bomo opisali v enem prihodnjih prispevkov). Nanje smo prispajkali elemente in naložili strojno programsko opremo in tokrat je vse delovalo kot je treba…

…dokler se ni izkazalo, da pri komunikaciji preko Bluetootha prihaja do težav. Lahko da je težava v slabih Bluetooth modulih, lahko pa je težava v pregovorno slabi implementaciji Bluetooth podpore v Linuxu. Kakorkoli, treba je bilo najti drugo rešitev.

A najprej na hitro o zgradbi celotnega sistema. Prvi del sistema predstavljajo senzorji, ki podatke lahko pošiljajo preko Bluetooth povezave ali preko USB kabla. Mogoče bi bilo tudi pošiljanje preko Wi-Fi ali kakšne druge radijske povezave, a ta del (še) ni implementiran, saj zahteva ustrezno strojno opremo. Podatke nato na računalniku bere ustrezen bralnik (aplikacija), ki jih skupaj s časom in v ustrezni JSON strukturi pošlje strežniški aplikaciji, ta pa nato naprej na tim. spletni vtičnik (angl. web socket). Bralniki berejo ustrezne podatke iz različnih senzorjev z različnimi tipali, strežniška aplikacija podatke zbira ne enem mestu, spletni strežnik pa jih prikazuje na spletu.

Ker se je izkazalo, da bo v časovni stiski razhroščevanje Bluetooth povezave oziroma iskanje ustreznih rešitev (npr. ena izmed Arduino naprav bi lahko delovala v načinu master in podatke zbirala od ostalih ter jih preko USB kabla posredovala računalniku) preveč dolgotrajno, smo se odločili, da bomo raje do konca napisali modul za branje podatkov preko USB povezave (torej razvili dodaten bralnik).

Senzorji so tako na računalnik – v našem primeru je to kar RaspberryPi – povezani preko USB kablov, kar je sicer rahlo nepraktično, a sprejemljivo.

Samodejna povezava preko USB kabla

Da pa bi bila uporaba posameznih senzorjev čim bolj enostavna, smo najprej s pomočjo upravitelja naprav v Linuxu UDEV napisali pravila, s katerimi računalnik samodejno zazna, da je bil v USB vrata priključen Arduino. To ugotovi s pomočjo identifikacije USB naprave in njenega proizvajalca. Rešitev sicer ni optimalna, ker sistem zazna zgolj Arduino, ni pa (še) zmožen ugotoviti ali gre za BlueSensor napravo ali ne, a to bomo rešili kasneje.

Najprej smo si ogledali identifikacijske podatke Arduino sistemov in sicer s pomočjo ukaza lsusb:

Bus 001 Device 009: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

Nastavitev UDEV pravil je nato razmeroma enostavna. V /etc/udev/rules.d/ ustvarimo datoteko 90-bluesensor.rules:

sudo nano /etc/udev/rules.d/90-bluesensor.rules

Vanjo zapišemo pravila:

KERNEL=="ttyUSB0", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor0"
KERNEL=="ttyUSB1", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor1"
KERNEL=="ttyUSB2", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor2"
KERNEL=="ttyUSB3", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="BlueSensor3"

Pravila pomenijo naslednje. Če je v USB vrata vključena naprava z ID proizvajalca 1a86 ter ID naprave 7523, UDEV ustvari ustrezno simbolno povezavo do USB naprave z imenom /dev/BlueSensorX (X je številka od 0 do 3).

Sledi ponovno nalaganje UDEV pravil:

sudo udevadm control --reload-rules

Ko zdaj v USB vrata vključimo Arduino, se poleg naprave npr. /dev/ttyUSBo pojavi še naprava /dev/BlueSensor0.

Hkrati pa smo bralnik podatkov iz USB povezave prilagodili tako, da bere samo podatke iz naprav /dev/BlueSensorX. Ostale ttyUSB naprave pusti pri miru.

Zdaj je potrebno zgolj pognati bralnik in ko se BlueSensor naprava pojavi v sistemu, bralnik prične brati podatke iz nje in jih pošiljati strežniški aplikaciji. Da bi zadevo poenostavili, smo pognali štiri bralnike, vsak “pazi” na svoja USB vrata in ko je nanje priključena BlueSensor naprava, prične podatke pošiljati naprej.

Ta del smo rešili s pomočjo Supervisorja – gre za sistem, ki je namenjen nadzoru procesov v Linux sistemu. Najprej ga namestimo:

sudo apt-get install supervisor

Nato za vsaka USB vrata (na RaspberryPi sistemu so štiri) ustvarimo ustrezno nadzorno aplikacijo:

sudo nano /etc/supervisor/conf.d/bluesensor0.conf

Ta datoteka vsebuje:

[program:bluesensor0]
command = python /home/pi/bluesensor/bluesensor-server.py read-serial 0
autostart=true
autorestart=true

Žal je za vsaka USB vrata potrebno narediti svojo lastno datoteko, saj je podpora za tim. okoljske spremenljivke (angl. env variables), ki jih lahko uporabimo kot parametre (angl. command line parameters) na voljo šele od Supervisorja 3.2 dalje, tega pa operacijski sistem Raspbian v trenutni različici še nima.

Kaj stori zgornja nadzorna aplikacija?

Zažene bluesensor-server.py s parametrom “read-serial 0“. Torej, zažene strežniško aplikacijo, ki pokliče USB bralnik (read-serial.py) in sicer s parametrom 0, kar pomeni, da bralnik skuša poiskati napravo /dev/BlueSensor0. Ta aplikacija se zažene samodejno ob zagonu sistema, v primeru, da preneha delovati, pa jo Supervisor ponovno samodejno zažene.

Sledi posodobitev Supervisor pravil, ki tudi zažene nadzorno aplikacijo (le-ta pa ustrezen bralnik):

sudo supervisorctl update

Da vse deluje preverimo s:

sudo supervisorctl status

Ko sedaj BlueSensor napravo vključimo v USB vrata, se na spletu prične samodejno risati graf (spletni strežnik teče na RaspberryPi sistemu). Če napravo izključimo in kasneje ponovno vključimo, se črta s podatki prekine in nato nadaljuje naprej. Podatki se nareč prikazujejo v realnem času (oz. z zamikom ene sekunde).

Vklop in izklop BlueSensorja se odrazi na vizualizaciji podatkov.

Vklop in izklop BlueSensorja se odrazi na vizualizaciji podatkov.

Ker posamezne BlueSensor naprave v ustrezni strukturi pošiljajo svojo identifikacijo (oz. meta podatke), lahko za vsako meritev vemo iz katerega senzorja prihaja (v oklepaju je navedena lokacija BlueSensorja), ne glede na to na katera USB vrata je le-ta priključena.

Vizualizacija senzorskih podatkov preko spletne aplikacije.

Vizualizacija senzorskih podatkov preko spletne aplikacije.

Mimogrede, plinski senzorji (še) niso umerjeni in prikazani podatki so v tim. surovi obliki in ne ppm. Vlaga je prikazana v odstotkih, temperatura pa v stopinjah Celzija. Prikaz posameznih črt lahko izključimo, podatki se osvežujejo na eno sekundo. Vizualizacija je sicer še nedokončana in bo vanjo potrebno vložiti še kar nekaj razvoja.

Na RaspberryPi napravi je sicer postavljena Wi-Fi dostopna točka in lasten DNS strežnik. Ko se povežemo na to dostopno točko v spletni brskalnik vpišemo “http://bluesensor.ijs” in prikaže se nam spletna aplikacija za vizualizacijo senzorskih podatkov. Tako lahko povsem neodvisno od spleta vzpostavimo povsem lastno infrastrukturo za vizualizacijo podatkov.

Detektor trdnih delcev

Z izrazom trdni delci (PM – angl. particulate matter) označujemo droben prah, ki je prisoten v zraku v določenem obdobju. Droben prah v zraku predstavlja drobne delce in kapljice organskega ali anorganskega izvora, ki lebdijo v zraku. Ta prah nastaja naravno ali zaradi aktivnosti človeka. Naravni prah predstavljajo zemlja, morske soli, vulkanski prah, cvetni prah, itd. Posebej velik problem pa so trdni delci, ki so posledica onesnaženosti zraka. Taki so predvsem delci iz motorjev z notranjem izgorevanjem, delci, ki nastanejo kot posledica cestnega prometa (obraba zavor, gum, cestišča,…), delci, ki izvirajo iz proizvodnje cementa, sežigalnic odpadkov, itd. Veliko trdnih delcev nastaja tudi pri kurjenju s trdnimi gorivi (les, premog), kar se pozna predvsem v zimskih mesecih.

Manjši in svetlejši delci se v zraku zadržujejo dalj časa. Večji delci se v ozračju zadržujejo nekaj ur, manjši delci pa lahko v ozračju ostanejo celo več tednov in se v tla sperejo šele s padavinami.

Trdni delci predstavljajo nevarnost za zdravje ljudi. Trdni delci namreč povečajo umrljivost za boleznimi dihal ter boleznimi srca in ožilja. Če trdni delci vsebujejo težke kovine, je njihova strupenost še večja. Trdnim delcem bi se morali izogibati predvsem otroci, starejši ljudje, nosečnice in tisti, ki imajo težave z dihalnimi organi.

Delci, ki lahko lebdijo v zraku, so velikosti do okrog 35 mikronov (1 mikron je tisoči del milimetra). Te delce ljudje lahko vdihavamo. Delci, ki so večji od 10 mikronov praviloma ostajajo v zgornjih dihalnih poteh (nos, sapnik itd.). Delci, ki so manjši od 10 mikronov (PM10) pa potujejo v pljuča, kjer povzročajo zdravstvene težave. Še večji problem so delci manjši od 2,5 mikrona (PM2.5), ki lahko pridejo v pljučne mehurčke. Delci velikosti do 0,1 mikrona pa lahko preko pljučnih mehurčkov preidejo neposredno v kri in povzročajo zdravstvene težave tudi v drugih organih telesa.

Trdne delce tako ločimo glede na naslednje velikosti:
– PM10 (10 μm)
– PM2.5 (2,5 μm) in PM1 (1 μm)
– nano-delci

Zdravstveni učinki trdnih delcev na zdravje so zelo negativni. Študije so pokazale, da poleg težav z dihalnimi organi povzročajo tudi mutacije DNK, negativno pa vplivajo tudi na srčno žilni sistem, saj jih povezujejo s kardiovaskularnimi boleznimi in srčno kapjo. Svetovna zdravstvena organizacija WHO in International Agency for Research on Cancer sta trdne delce v zraku označile za karcinogene iz prve skupine (Group 1: Carcinogenic to humans). Znanstvena raziskava iz leta 2013 je pokazala, da vsako povečanje trdnih delcev PM10 za 10 μg/m3 poveča stopnjo tveganja za pljučnega raka za 22%. Še bolj nevarni pa so manjši delci PM2.5, kjer povečanje količine za 10 μg/m3 stopnjo tveganja za pljučnega raka poveča za kar 36%.

Merjenje trdnih delcev

Pri meritvah trdnih delcev najpogosteje izvajamo meritve delcev premera 10 µm (PM10), v zadnjem času pa čedalje več tudi 2,5 µm (PM2,5), saj so novejše raziskave pokazale, da so le-ti zdravju najbolj škodljivi.

Mejna dnevna vrednost za delce PM10 je 50 µg/m3 (mikrogramov na kubični meter zraka). Mejna letna vrednost za delce PM10 je 40 µg/m3. Mejna letna vrednost za delce PM2.5 je 25 µg/m3.

Merjenje trdnih delcev v domačem okolju

Profesionalni detektorji trdnih delcev so drage in kompleksne naprave, a razvoj tehnologije je omogočil proizvodnjo in prodajo precej bolj cenenih detektorjev trdnih delcev, ki delujejo na principu laserskega merjenja oz. štetja trdnih delcev. Taki senzorji sicer niso tako natančni, so pa precej poceni in zadostujejo za splošno oceno kvalitete zraka. Eden takih je serija detektorjev trdnih delcev SDS kitajskega podjetja Inovafitness. Ti so SDS011, SDS018 ter SDS021.

Omenjeni detektorji trdnih delcev imajo omejeno življenjsko dobo (okrog 8000 ur delovanja), kar v praksi ni velika težava. Poleg tega jih je potrebno v pogojih visoke prašnosti občasno tudi očistiti. V osnovi so namenjeni vgradnji v različne naprave za čiščenje zraka ter v senzorske naprave za beleženje kvalitete zraka v domačem okolju. Za okrog 25 EUR smo tako na spletu kupili detektor trdnih delcev SDS021 z USB priključkom.

Detektor trdnih delcev SDS021.

Detektor trdnih delcev SDS021.

Detektor torej na računalnik povsem enostavno priključimo preku USB vrat. Če nameravamo uporabiti RaspberryPi, pa detektor lahko priključimo neposredno na GPIO pine in sicer na 5V, GND, TXD0 (UART) in RXD0 (UART).

Programska oprema za branje podatkov iz senzorja priključenega na USB v programskem jeziku Python je objavljena na našem GitHubu.

Uporaba je preprosta. Senzor preko USB vrat priključimo na računalnik in zaženemo aplikacijo:

python dust-sensor-read.py
Starting reading dust sensor on port /dev/ttyUSB0...
PM2.5: 70, PM10: 74
PM2.5: 72, PM10: 76
PM2.5: 79, PM10: 83
PM2.5: 77, PM10: 92
PM2.5: 77, PM10: 89
PM2.5: 78, PM10: 86
PM2.5: 78, PM10: 84
PM2.5: 78, PM10: 82
...

Vizualizacija podatkov

Ker bo merjenje trdnih delcev tudi del projekta BlueSensor, naslednja različica programske kode podatke izpisuje v JSON obliki. Primer podatkov:

{
 "metadata": {
 "device_name": "Senzor trdnih delcev",
 "device_btname": "DUST1",
 "device_location": "doma",
 "sensors": {
 "pm25": ["PM 2.5", "SDS021", "ug/m3", "red"],
 "pm10": ["PM 10", "SDS021", "ug/m3", "blue"]
 }
 },
 "time": 1498081621804,
 "data": {
 "pm25": [71.00, 25.00],
 "pm10": [99.00, 50.00]
 }
}

V JSON strukturi opišemo osnovne podatke o senzorski napravi, katere senzorje vsebuje (razdelek sensors) ter za vsak senzor kaj meri, kateri je tip senzorja, kakšne so enote in kakšna naj bo črta, ki bo prikazovala podatke. V razdelku data pa pošiljamo same podatke ter njihove mejne vrednosti.

Merjenje trdnih delcev - za preskus smo pred detektorjem stresali staro jopico.

Merjenje trdnih delcev – za preskus smo pred detektorjem stresali staro jopico.

S pomočjo detektorja trdnih delcev SDS021 je mogoče izvesti kar nekaj zanimivih poskusov. Predvsem pa nam nekoliko bolj dolgotrajno merjenje trdnih delcev v zraku lahko da vsaj neko osnovno sliko v kako kvalitetnem okolju živimo.

Merjenje trdnih delcev - za preskus smo se detektorjem postavili poleg izpušne cevi dizelskega avtomobila.

Merjenje trdnih delcev – za preskus smo se detektorjem postavili poleg izpušne cevi dizelskega avtomobila.

 

BlueSensor: načrt vezja

Za projekt izdelave senzorske naprave, ki bo merila temperaturo, vlago in strupene oz. škodljive pline v okolju smo pripravili načrt tiskanega vezja. Načrt je dostopen v PDF datoteki in sicer v originalu ter v zrcalni obliki. Vezje ima dimenzije 70,92 mm x 47,27 mm. Načrt je izdelal Drago Trebežnik.

BlueSensor - načrt vezja.

BlueSensor – načrt vezja.

Tiskano vezje se od prototipa razlikuje v nekaj dodatnih funkcionalnostih. Tako se bosta na končnem izdelku nahajala dva plinska senzorja, en senzor za vlago, naprava bo imela možnost priklopa kar štirih temperaturnih senzorjev, dodan pa je še piezzo piskač. Programska koda bo tako omogočala, da bo v primeru ekstremnih temperatur ali povišane koncentracije plina, naprava sprožila zvočni alarm.

Če bi dali tiskano vezje izdelati k profesionalnemu izdelovalcu, bi na koncu izgledalo takole (zgornji del):

BlueSensor - slika vezja (zgornji del).

BlueSensor – slika vezja (zgornji del).

…in spodnji del:

BlueSensor - slika vezja (spodnji del).

BlueSensor – slika vezja (spodnji del).

Še prikaz ujemanja elementov z vezjem:

BlueSensor: slika vezja z elementi.

BlueSensor: slika vezja z elementi.

Sledi izdelava tiskanega vezja (jedkanje), nato pa bomo že lahko sestavili prvo napravo.