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

RaspberryPi kot Wi-Fi dostopna točka

RaspberryPi 3, ki ima vgrajen Wi-Fi in ethernet omrežno kartico je mogoče z nekaj prilagoditvami spremeniti v Wi-Fi dostopno točko. Pravzaprav lahko to storimo s katerimkoli mini računalnikom, pogoj je le da ima brezžični omrežni vmesnik ki podpira tim. AP način (angl. AP mode).

To preverimo z ukazom:

iw list

Ukaz izpiše podprte načine:

...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
...

Sistem bo tekel na operacijskem sistemu Raspbian, ki ga je seveda predhodno potrebno naložiti.

Nastavitev brezžičnega omrežnega vmesnika

V novejših različicah operacijskega sistema Raspian, omrežne vmesnike upravlja aplikacija dhcpcd. Ker tega upravljanja za brežični omrežni vmesnik ne želimo, spremenimo konfiguracijo. Najprej odpremo nastavitveno datoteko:

sudo nano /etc/dhcpcd.conf

…in na začetek dodamo:

denyinterfaces wlan0

Sedaj odpremo datoteko z nastavitvami omrežnih vmesnikov:

sudo nano /etc/network/interfaces

V njen spremenimo nastavitve brezžičnega omrežnega vmesnika wlan0. Najprej odstranimo ali zakomentiramo obstoječe nastavitve:

# iface wlan0 inet manual
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Namesto njih dodamo:

allow-hotplug wlan0
iface wlan0 inet static
address 172.16.0.1
netmask 255.255.255.0
network 172.16.1.0
broadcast 172.16.1.255

S tem smo brezžičnemu omrežnemu vmesniku nastavili statičen IP naslov in sicer 172.16.0.1.

Sedaj ponovno zaženemo dhcpcd in ugasnemo ter ponovno prižgemo brezžični omrežni vmesnik:

sudo service dhcpcd restart
sudo ifdown wlan0
sudo ifup wlan0

Zdaj lahko preverimo ali ima wlan0 pravilno nastavljen IP naslov:

sudo ifconfig wlan0

Izpiše se:

...
inet addr:172.16.0.1
...

Nastavimo še, da wlan0 ne “zaspi” oz. računalnik zanj ne izključi napajanja. Odpremo datoteko:

sudo nano /etc/rc.local

…ter na konec, pred “exit 0” dodamo:

sudo iw dev wlan0 set power_save off

Kasneje, po ponovnem zagonu računalnika, lahko nastavitev preverimo z ukazom:

iw dev wlan0 get power_save

Izpiše se:

Power save: off

Brezžični omrežni vmesnik je sedaj pripravljen.

Namestitev aplikacije za Wi-Fi dostopno točko

Sledi namestitev aplikacije hostapd (host access point daemon), ki dejansko vzpostavi brezžično dostopno točko:

sudo apt-get install hostapd

Ko je aplikacija nameščena, uredimo nastavitveno datoteko, ki vsebuje vse podatke o Wi-Fi povezavi – ime povezave, geslo, šifriranje, itd… Nastavitve se nahajajo v datoteki:

sudo nano /etc/hostapd/hostapd.conf

Vsebina datoteke:

# Wifi vmesnik
interface=wlan0
# Gonilnik za Wi-Fi napravo:
# - ce uporabimo v RaspberryPi 3 vgrajeno Wi-Fi napravo, gonilnika ne navedemo,
# sicer navedemo vrsto gonilnika, npr.: driver=nl80211 ali driver=rtl871xdrv
# Ime Wi-Fi omrezja
ssid=BlueSensor
# Nastavitev drzave
country_code=SI
# Uporabimo 2.4GHz frekvencni pas
hw_mode=g
# Uporabimo kanal 8
channel=8
# Sprejmemo vse MAC naslove naprav
macaddr_acl=0
# Uporabimo WPA avtentikacijo
auth_algs=1
# Zahtevamo, da odjemalci poznajo ime omrezja
ignore_broadcast_ssid=0
# Vrsta WPA avtentikacije
# wpa=2 - samo WPA2, wpa=3 - WPA+WPA2
wpa=3
# Geslo za Wi-Fi omrezje
wpa_passphrase=mojegeslo
# Uporabimo WPA "pre-shared kljuc"
wpa_key_mgmt=WPA-PSK
# Katera vrsta šifriranja se uporablja z WPA: AES in TKIP (TKIP je sicer varnostno pomanjkljiv)
wpa_pairwise=CCMP TKIP
# Katera vrsta šifriranja se uporablja z WPA2
rsn_pairwise=CCMP
# Casovni interval (v sekundah) za sprmembo kljucev (rekeying GTK - broadcast/multicast encryption keys)
wpa_group_rekey=86400
# Omogocimo 802.11n
ieee80211n=1
# Omogocimo WMM
wme_enabled=1
# Omogocimo 40MHz kanale z 20ns intervalom (tim. guard interval)
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

Načeloma v zgornji konfiguraciji spremenimo zgolj SSID (ime omrežja) in geslo, ostalo lahko ostane kot je. Po potrebi lahko uporabimo kakšen drug Wi-Fi kanal (odvisno od ostalih Wi-Fi dostopnih točk v bližini), morda omogočimo samo uporabo WPA2 in samo AES šifriranja (odvisno od tega kakšne Wi-Fi odjemalce pričakujemo na omrežju).

Sedaj poskusimo zagnati aplikacijo hostapd:

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Če se aplikacija pravilno zažene, se bo izpisalo naslednje:

Configuration file: /etc/hostapd/hostapd.conf
Failed to create interface mon.wlan0: -95 (Operation not supported)
wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr b8:27:eb:cc:f0:87 and ssid "BlueSensor"
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED

Spodnja vrstica z informacijo AP-ENABLED pomeni, da Wi-Fi dostopna točka deluje. Na okoliških Wi-Fi napravah pa bi se moralo pojaviti omrežje BlueSensor. Nanj se lahko tudi povežemo, vendar internetna povezava še ne bo delovala.

Če vse pravilno deluje, hostapd zaustavimo s pritiskom na Ctrl-C.

Nastavitev IP posredovanja in povezave Wi-Fi AP v internet

Najprej namestimo aplikacijo za shranjevanje nastavitev požarnega zidu:

sudo apt-get install iptables-persistent

Nato nastavimo IP posredovanje. Odpremo datoteko:

sudo nano /etc/sysctl.conf

…in vanjo vpišemo:

net.ipv4.ip_forward=1

Nastavitev bo postala aktivna šele ob ponovnem zagonu računalnika, zato IP posredovanje še takoj aktiviramo z ukazom:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

Sedaj nastavimo požarni zid, da bo omogočal posredovanje Wi-Fi povezav v internet (torej iz wlan0 na eth0 omrežni vmesnik):

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Če želimo, preverimo pravila požarnega zidu:

sudo iptables -t nat -S
sudo iptables -S

Na koncu pa nastavitve požarnega zidu še shranimo, da bo pravilno deloval tudi po ponovnem zagonu sistema:

sudo sh -c "iptables-save > /etc/iptables/rules.v4"

Zagon Wi-Fi dostopne točke

Sedaj je potrebno nastaviti še samodejen zagon Wi-Fi dostopne točke. Najprej aplikaciji hostapd povemo kje se nahaja nastavitvena datoteka:

sudo nano /etc/default/hostapd

Vanjo vpišemo:

DAEMON_CONF="/etc/hostapd/hostapd.conf"

Preverimo še, da je enaka nastavitev tudi v datoteki /etc/init.d/hostapd:

sudo nano /etc/init.d/hostapd

Nastavitev:

DAEMON_CONF=/etc/hostapd/hostapd.conf

Sedaj poženemo:

sudo systemctl daemon-reload

Nato zaženemo aplikacijo hostapd kot sistemsko storitev:

sudo service hostapd start

Ter jo omogočimo ob zagonu:

sudo update-rc.d hostapd enable

Zdaj lahko preverimo ali dostopna točka deluje:

sudo iw dev wlan0 info

Dobimo naslednji izpis:

Interface wlan0
        ifindex 3
        wdev 0x1
        addr b8:27:eb:cc:f0:87
        ssid BlueSensor
        type AP
        wiphy 0
        channel 8 (2447 MHz), width: 20 MHz, center1: 2447 MHz

Na tej točki se sicer že lahko z odjemalcem povežemo na Wi-Fi dostopno točko, vendar odjemalci še ne bodo dobili lokalnega IP naslova. Zato je potrebno postaviti še DHCP strežnik.

Postavitev lokalnega DHCP in DNS strežnika

Na koncu postavimo še lokalni DHCP in DNS strežnik, ki Wi-Fi odjemalcem dodeljuje IP naslove in skrbi za pretvorbo domen v IP naslove. Namestimo dnsmasq:

sudo apt-get install dnsmasq

Nato odpremo nastavitveno datoteko:

sudo nano /etc/dnsmasq.conf

Vanjo na ustrezna mesta vpišemo oz. zakomentiramo (onemogočimo) naslednje parametre:

resolv-file=/etc/dnsmasq/resolv.conf
...
#no-resolv
...
#no-poll
...
interface=wlan0
...
listen-address=172.16.0.1
...
bind-interfaces
...
addn-hosts=/etc/dnsmasq/hosts.conf
...
dhcp-range=172.16.0.50,172.16.0.150,12h
...
dhcp-leasefile=/var/lib/misc/dnsmasq.leases

S tem smo določili, da bodo odjemalci dobivali IP naslove v območju med 172.16.0.50 in 172.16.0.150. Strežnik, oz. dostopna točka pa ima IP naslov 172.16.0.1.

Nato odpremo datoteko, kjer nastavimo “zaledne” DNS strežnike:

sudo nano /etc/dnsmasq/resolv.conf

…ter jih vnesemo (uporabimo Googlove DNS strežnike):

nameserver 127.0.0.1
nameserver 8.8.8.8
nameserver 8.8.4.4

Na koncu vpišemo še lastne (lokalne) DNS naslove:

sudo nano /etc/dnsmasq/hosts.conf

Nastavimo, da se bo Wi-Fi dostopna točka oglašala na domensko ime (v našem primeru bluesensor.ijs ter www.bluesensor.ijs):

172.16.0.1 bluesensor.ijs
172.16.0.1 www.bluesensor.ijs

Ustvarimo še datoteko, kjer se bodo zapisovale dodeljene DHCP povezave (tim. DHCP lease) in ji nastavimo pravice dostopa:

sudo touch /var/lib/misc/dnsmasq.leases
sudo chown -R root:root /var/lib/misc/

Sedaj ponovno začenemo dnsmasq strežnik:

sudo service dnsmasq restart

Na koncu namestimo še upravitelja informacij o domenskih strežnikih (če že ni nameščen):

sudo apt-get install resolvconf

In ga zaženemo:

sudo service resolvconf start

S tem je sistem postavljen.

Delovanje sistema

Če smo vse pravilno nastavili, se sedaj z odjemalcem lahko povežemo na Wi-Fi in odjemalec bo imel dostop do interneta. Če iz odjemalca skušamo dostopati do bluesensor.ijs, se bo odzvala WiFi dostopna točka z IP naslovom 172.16.0.1.

To pomeni, da lahko sedaj na RaspberryPi postavimo spletni strežnik in odjemalci, ki bodo v brskalnik vpisali bluesensor.ijs ali www.bluesensor.ijs, bodo lahko videli spletno stran postavljeno na Wi-Fi dostopni točki.

 

Vse podeljene DHCP povezave lahko pogledamo z ukazom:

cat /var/lib/misc/dnsmasq.leases

Struktura izpisa (po stolpcih) je naslednja:

  • čas preteka DHCP povzave (v sekundah po 1970 – tim. epoch time).
  • MAC naslov odjemalca
  • IP naslov odjemalca
  • ime odjemalca (če je znano)
  • ID odjemalca

Ali je posamezna povezava trenutno aktivna preverimo z ukazom ping.

S pomočjo tcpdump lahko spremljamo promet, ki poteka preko brezžičnega omrežnega vmesnika wlan0:

sudo tcpdump -i wlan0

Spremljanje lahko omejimo tudi za samo konkretnega odjemalca. Če poznamo njegov IP naslov, to storimo takole:

sudo tcpdump -i wlan0 host 172.16.0.140

Če pa poznamo MAC naslov njenega omrežnega vmesnika, pa to storimo takole:

sudo tcpdump -i wlan0 ether host aa:bb:cc:dd:11:22

MAC ali IP naslov za povezane naprave dobimo iz datoteke dnsmasq.leases.

 

Na sami RaspberryPi napravi lahko še pogledamo status oz. delovanje obeh ključnih aplikacij:

sudo service hostapd status
sudo service dnsmasq status

 

Wi-Fi dostopna točka sedaj deluje. Če je preko žičnega omrežnega vmesnika povezana na internet, bodo Wi-Fi odjemalci preko nje imeli dostop do interneta, sicer pa bodo lahko vzpostavili lokalno omrežje. Če na dostopni točki teče spletni strežnik, lahko odjemalci na ta način preprosto dostopajo do lokalne spletne strani – neodvisno od interneta.

Na RaspberryPi napravo smo preko USB vrat povezali BlueSensor senzorske sisteme, in odjemalci lahko do senzorskih podatkov dostopajo kar preko spleta – preko povezave http://bluesensor.ijs ali http://www.bluesensor.ijs. Nekoliko težav je le pri dostopanju z Androidnimi mobilnimi telefoni, saj je na teh telefonih potrebno omogočiti uporabo slabe omrežne povezave (izključimo “Avoid poor internet connection“). V nasprotnem primeru mobilni telefon povezav v lokalno omrežje ne dovoli in vse povezave preko podatkovnega prenosa preusmeri v internet.

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.