0,00 €

V košarici ni izdelkov.

0,00 €

V košarici ni izdelkov.

More
    DomovRevijaProgramiranjeIoT Merilnik kvalitete zraka z RPi

    IoT Merilnik kvalitete zraka z RPi

    Avtor: Marcelo José Rovai
    Na sliki vidite mesto Santiago, Čile med zimskim okoljskim onesnaženjem. Imajo privilegij, da živijo v eni najlepših držav na svetu, a žal ni vse rožnato.
    Čile med zimsko sezono zelo trpi zaradi onesnaženosti zraka, predvsem zaradi trdnih delcev, kot sta prah in smog.
    Zaradi hladnega vremena je zrak na jugu onesnažen predvsem zaradi peči na trda kuriva, v Santiagu (glavnem mestu v središču države) pa zaradi industrije, avtomobilov in edinstvenega geografskega položaja med dvema velikima gorskima verigama.
    Danes je onesnaženost zraka velik problem po vsem svetu in v tem članku bomo raziskali, kako razviti poceni domači monitor kvalitete zraka, ki temelji na Raspberry Pi. Če želite izvedeti več o kvaliteti zraka, obiščite projekt „Svetovni indeks kvaliteti zraka“ [1].
    Kaj potrebujemo za projekt?
    Za projekt potrebujemo:
    • Raspberry Pi 4
    • 1SDS011 – Zelo natančen laserski senzor za zaznavanje kvaliteti zraka pm2,5
    • Plastično ohišje
    Korak 1: trdni delci (PM): Kaj so to? Kako pridejo v zrak?
    Da bi razumeli onesnaženost ali kontaminacijo zraka, moramo preučiti delce, ki so s tem povezani in so znani tudi kot trdni delci. Podajmo kratek pregled tega.

    PM je kratica za trdne delce (angl. Particle Matter): izraz velja za mešanico trdnih delcev in kapljic, ki se nahajajo v zraku. Nekateri delci, kot so prah, umazanija, saje ali dim, so dovolj veliki ali temni, da jih lahko vidimo s prostim očesom. Drugi so tako majhni, da jih lahko zaznamo le z elektronskim mikroskopom. Delci so zelo različnih velikosti. Delci s premerom manjšim ali enakim 10 mikrometrov so tako majhni, da lahko pridejo v pljuča in lahko povzročijo resne zdravstvene težave. Deset mikrometrov je manj kot širina enega človeškega lasa.

    Onesnaženost z delci vključuje grobe prašne delce (PM10): delce, ki jih je mogoče vdihavati in katerih premer je običajno 10 mikrometrov ali manj. Viri so drobljenje ali mletje in prah, ki ga dvigajo vozila na cestah. Drobni delci (PM2,5): drobni delci, ki jih je mogoče vdihavati, s premerom 2,5 mikrometra in manjšim. Drobni delci nastajajo pri vseh vrstah izgorevanja, vključno z izgorevanjem v motornih vozilih, elektrarnah, kurjenjem lesa v gospodinjstvih, gozdnimi požari, kurjenjem v kmetijstvu in nekaterimi industrijskimi postopki. več o delcih lahko najdete na spletni strani EPA: Agencija Združenih držav Amerike za varstvo okolja.

    Korak 2: Zakaj je pomembno poznati te trdne delce?
    Kot je opisal Gerardo Alvarado Z. v svojem delu na Univerzi v Čilu [2], so bile študije epizod visoke onesnaženosti zraka v dolini Meuse (Belgija) leta 1930, Donori (Pensilvanija) leta 1948 in Londonu leta 1952 prvi dokumentirani viri, ki so smrtnost povezovali z onesnaženostjo z delci (Préndez, 1993). Z napredkom pri raziskovanju učinkov onesnaženega zraka na zdravje ljudi je bilo ugotovljeno, da tveganje za zdravje povzročajo že delci, ki jih je mogoče vdihavati, odvisno od njihovega prodiranja in odlaganja v različnih delih dihalnega sistema ter od biološkega odziva na odložene snovi.
    Najdebelejši delci, veliki približno 5 μm, se filtrirajo s skupnim delovanjem resic nosnega prehoda in sluznice, ki pokriva nosno votlino in sapnik. Delci s premerom med 0,5 in 5 μm se lahko odložijo v bronhijih in celo v pljučnih alveolah, vendar jih po nekaj urah odstranijo resice bronhijev in tudi bronhioli. Delci, manjši od 0,5 μm, lahko prodrejo globoko, dokler se ne odložijo v pljučnih alveolah, kjer ostanejo od nekaj tednov do več let, saj ni mukociliarnega transportnega mehanizma, ki bi olajšal izločanje. Naslednja slika prikazuje prodiranje delcev v dihalni sistem glede na njihovo velikost.
    Zato je odkrivanje obeh vrst delcev (PM2,5 in PM10) zelo pomembno, dobra novica pa je, da je obe vrsti delcev mogoče odčitati z enostavnim in ne dragim senzorjem SDS011.
    Korak 3: Senzor delcev – SDS011
    Spremljanje kvalitete zraka je dobro znana in uveljavljena znanost, ki se je začela že v 80. letih prejšnjega stoletja. Takrat je bila tehnologija precej omejena, rešitve za količinsko opredelitev onesnaženosti zraka pa zapletene, okorne in zelo drage.
    Na srečo so danes z najnovejšimi in sodobnimi tehnologijami rešitve, ki se uporabljajo za spremljanje kvalitete zraka, ne le natančnejše, temveč tudi hitrejše pri merjenju. Naprave postajajo manjše in cenovno veliko bolj dostopne kot kdaj koli prej.
    V tem članku se bomo osredotočili na senzor delcev, ki lahko zazna količino prahu v zraku. Medtem ko je prva generacija zaznavala le količino motnosti, lahko najnovejši senzorji, kot je SDS011 podjetja INOVAFIT, ki je ločena družba Univerze Jinan (v Shandongu), zaznavajo delce PM2,5 in PM10.
    SDS011 je s svojo velikostjo verjetno eden najboljših senzorjev glede na natančnost in ceno (manj kot 40,00 USD).

    Specifikacije senzorja:

    • Izmerjene vrednosti: PM2,5, PM10
    • Območje: 0-999,9 μg /m³
    • Napajalna napetost: 5 V (4,7-5,3 V)
    • Poraba energije (pri delu): 70mA±10mA
    • Poraba energije (laser in ventilator v načinu mirovanja): < 4 mA
    • Temperatura shranjevanja: od -20 do +60C
    • Delovna temperatura: -10 do +50C
    • Vlaga (skladiščenje): Vlaga (temperatura): max. 90%
    • Vlaga (pri delu): 90 %: (90 %): največ 90 % (90 %). 70 %(kondenzacija vodne pare poslabša odčitke)
    • Natančnost: 70 % za 0,3 μm in 98 % za 0,5 μm
    • Velikost: 71x70x23 mm
    • CE, FCC, RoHS
    SD011 uporablja tiskano vezje kot eno stran ohišja, kar omogoča zmanjšanje stroškov. Sprejemna dioda je nameščena na strani tiskanega vezja (to je obvezno, saj se je treba izogniti vsakršnemu šumu med diodo in LNA). Oddajni laser je nameščen na plastični škatli in je povezan s tiskanim vezjem prek fleksibilne žice.
    Skratka, Nova Fitness SDS011 je profesionalni laserski senzor prahu. Ventilator, nameščen na senzorju, samodejno sesa zrak. Senzor uporablja načelo laserskega sipanja svetlobe* za merjenje vrednosti prašnih delcev, suspendiranih v zraku. Senzor omogoča zelo natančne in zanesljive odčitke vrednosti delcev PM2,5 in PM10. Vsako spremembo v okolju je mogoče opaziti skoraj takoj, kratek odzivni čas je krajši od 10 sekund. Senzor v standardnem načinu posreduje odčitke v 1-sekundnem intervalu.
    * Načelo laserskega razprševanja: ko gredo delci skozi območje zaznavanja, se lahko sproži razpršitev svetlobe. Razpršena svetloba se pretvori v električne signale, ki se nato ojačajo in obdelajo. Število in premer delcev je mogoče dobiti z analizo, ker je oblika valovanja signala v določenem razmerju s premerom delcev.
    Korak 4: Kako lahko SDS011 zajame te delce?
    Kot je bilo že omenjeno, je princip, ki ga uporablja SDS011, sipanje svetlobe ali bolje dinamično sipanje svetlobe (DLS), kar je fizikalna tehnika, ki se lahko uporablja za določanje profila porazdelitve velikosti majhnih delcev v suspenziji ali polimerov v raztopini. Pri DLS se časovna nihanja običajno analizirajo s pomočjo intenzitetne ali fotonske avtokorelacijske funkcije (znana tudi kot fotonska korelacijska spektroskopija ali kvazielastično sipanje svetlobe). Pri analizi v časovni domeni avtokorelacijska funkcija (ACF) običajno razpade od ničelnega časa zakasnitve, hitrejša dinamika zaradi manjših delcev pa povzroči hitrejšo dekorelacijo sledi razpršene intenzitete. Pokazalo se je, da je ACF intenzitete Fourierova transformacija spektra moči, zato se lahko DLS meritve enako dobro izvajajo v spektralni domeni.
    Nad hipotetičnim dinamičnim sipanjem svetlobe dveh vzorcev: Na vrhu so večji delci (kot PM10), na dnu pa manjši delci (kot PM2,5). In če pogledamo v naš senzor, lahko vidimo, kako se izvaja načelo sipanja svetlobe.
    Električni signal, ujet na diodi, se prenese v nizkošumni ojačevalnik, nato pa se prek ADC pretvori v digitalni signal in prek UART prenese navzven.
    Če želite izvedeti več o sistemu SDS011 na podlagi resničnih znanstvenih izkušenj, si oglejte delo Konstantinosa in drugih iz leta 2018, Development and On-Field Testing of Low-Cost Portable System for Monitoring PM2.5 Concentrations [3].
    Korak 5: Čas za predstavo!
    Prekinimo z vso to teorijo in se osredotočimo na merjenje trdnih delcev s pomočjo Raspberry Pi in senzorja SDS011. HW povezava je pravzaprav zelo preprosta. Senzor se prodaja z USB adapterjem, ki omogoča povezavo izhodnih podatkov iz njegovega 7-pinskega UART z enim od standardnih USB priključkov na Rpi.
    Razporeditev priključkov na SDS011:
    Pin 1 – ni povezan
    Pin 2 – PM2.5: 0-999μg/m³; izhod PWM
    Pin 3-5V
    Pin 4 – PM10: 0-999 μg/m³; izhod PWM
    Pin 5 – GND
    Pin 6 – RX UART (TTL) 3,3 V
    Pin 7 – TX UART (TTL) 3,3 V
    Za ta članek prvič uporabljam popolnoma nov Raspberry-Pi 4. Seveda pa bo dobro deloval tudi kateri koli prejšnji model.

    Takoj ko senzor priključite na enega od USB vhodov RPi, boste samodejno začeli poslušati zvok njegovega ventilatorja. Šum je nekoliko nadležen, zato ga morda raje odklopite in počakajte, dokler ne opravite vseh nastavitev s SW.

    Komunikacija med senzorjem in RPi bo potekala prek serijskega protokola. Podrobnosti o tem protokolu so na voljo tukaj: Protokol za nadzor laserskega senzorja prahu V1.3. Za ta projekt pa je najbolje uporabiti Python prevajalnik, da se poenostavi koda, ki jo je treba razviti. Ustvarite lahko lasten vmesnik ali uporabite katerega od tistih, ki so na voljo na internetu, na primer vmesnik Franka Heuerja ali Ivana Kalčeva. Mi bomo uporabili slednjega, ki je zelo preprost in deluje dobro (skripto sds011.py lahko prenesete z njegovega GitHuba ali mojega).
    Datoteka sds011.py mora biti v istem imeniku, v katerem ste ustvarili skripto.
    V razvojni fazi bom uporabljal beležnico Jupyter, lahko pa uporabite katero koli IDE, ki vam je všeč (zelo dobra sta na primer Thonny ali Geany, ki sta del paketa Raspberry Pi Debian).
    Začnite uvažati sds011 in ustvarite primerek senzorja. SDS011 zagotavlja metodo za branje s senzorja z uporabo UART.
    from sds011 import *
    sensor = SDS011(„/dev/ttyUSB0“)<br>
    Senzor lahko vklopite ali izklopite z ukazom, s katerim ga postavite v režim spanja:
    pmt_2_5, pmt_10 = sensor.query()
    Pred meritvami počakajte vsaj 10 sekund za stabilizacijo in vsaj 2 sekundi za začetek nove meritve (glejte zgornjo kodo).
    To je vse, kar morate vedeti o tem, kako uporabljati senzor. Toda poglobimo se v nadzor kvalitete zraka! Če ste na začetku tega članka raziskali spletna mesta, ki dajejo informacije o tem, kako dober ali slab je zrak, ste morali ugotoviti, da so s temi vrednostmi povezane barve. Vsaka barva pomeni svoj indeks. Najbolj znan je indeks kvaliteti zraka AQI (Air Quality Index), ki se uporablja v ZDA in več drugih državah.

    Korak 6: Indeks kvaliteti zraka – AQI

    Indeks AQI je indeks za poročanje o dnevni kvaliteti zraka. Pove nam, kako čist ali onesnažen je naš zrak in kakšni so s tem povezani učinki na zdravje. Indeks AQI se osredotoča na zdravstvene učinke, ki se lahko pojavijo v nekaj urah ali dneh po vdihavanju onesnaženega zraka.
    Agencija EPA (United States Environmental Protection Agency) na primer ne izračunava indeksa AQI samo za onesnaženost z delci (PM2,5 in PM10), temveč tudi za druga glavna onesnaževala zraka, ki jih ureja Zakon o čistem zraku: prizemni ozon, ogljikov monoksid, žveplov dioksid in dušikov dioksid. Za vsako od teh škodljivih snovi je agencija EPA določila nacionalne standarde kvaliteti zraka za varovanje javnega zdravja. Oglejte si slikah 8 in 9 z vrednostmi AQI, barvami in povezanimi zdravstvenimi sporočili.
    Kot je bilo že povedano, so te vrednosti in barve AQI povezane z vsakim onesnaževalcem, vendar kako z njimi povezati vrednosti, ki jih ustvarijo senzorji? Dodatna tabela jih povezuje, kot je prikazano na sliki 9.
    Seveda pa je uporaba takšne tabele nesmiselna. Konec koncev gre za preprost matematični algoritem, ki opravi izračun. V ta namen bomo uvozili knjižnico za pretvorbo med vrednostjo AQI in koncentracijo škodljivih snovi (µg/m³): python-aqi [5].
    Namestite knjižnico s programom PIP in naredite test (glejte kodo na sliki 10).
    pip install python-aqi
    Korak 7: Lokalno beleženje podatkov
    Na tej točki imamo na voljo vsa orodja za zajemanje podatkov iz senzorja in njihovo pretvorbo v bolj „berljivo vrednost“, to je indeks AQI.
    Ustvarimo funkcijo za zajem teh vrednosti. Zaporedno bomo zajeli 3 vrednosti in med njimi izračunali povprečje:
    def get_data(n=3):
    sensor.sleep(sleep=False)
    pmt_2_5 = 0
    pmt_10 = 0
    time.sleep(10)
    for i in range (n):
    x = sensor.query()
    pmt_2_5 = pmt_2_5 + x[0]
    pmt_10 = pmt_10 + x[1]
    time.sleep(2)
    pmt_2_5 = round(pmt_2_5/n, 1)
    pmt_10 = round(pmt_10/n, 1)
    sensor.sleep(sleep=True)
    time.sleep(2)
    return pmt_2_5, pmt_10
    Zgoraj si lahko ogledate rezultat testa. Naredimo tudi funkcijo za pretvorbo številčnih vrednosti PM v indeks AQI
    def conv_aqi(pmt_2_5, pmt_10):
    aqi_2_5 = aqi.to_iaqi(aqi.POLLUTANT_PM25, str(pmt_2_5))
    aqi_10 = aqi.to_iaqi(aqi.POLLUTANT_PM10, str(pmt_10))
    return aqi_2_5, aqi_10
    nad rezultatom testa z obema funkcijama. Toda kaj storiti z njima? Najpreprostejši odgovor je, da ustvarite funkcijo za shranjevanje zajetih podatkov in jih shranite v lokalno datoteko:
    def save_log():
    with open(„YOUR PATH HERE/air_quality.csv“, „a“) as log:
    dt = datetime.now()
    log.write(„{},{},{},{},{}n“.format(dt, pmt_2_5, aqi_2_5,       pmt_10,aqi_10))
    log.close()

    Z eno samo zanko lahko v lokalno datoteko redno beležite podatke, na primer vsako minuto:

    while(True):
    pmt_2_5, pmt_10 = get_data()
    aqi_2_5, aqi_10 = conv_aqi(pmt_2_5, pmt_10)
    try:
    save_log()
    except:
    print („[INFO] Failure in logging data“)
    time.sleep(60)
    Vsakih 60 sekund se v to datoteko „doda“ časovni žig in podatki, kot lahko vidimo zgoraj.
    Korak 8: Pošiljanje podatkov v storitev v oblaku
    Na tej točki smo se naučili zajemati podatke iz senzorja in jih shraniti v lokalno datoteko CSV. Zdaj je čas, da si ogledamo, kako te podatke poslati na platformo IoT. V tem članku bomo uporabili ThingSpeak.com.
    „ThingSpeak je odprtokodna aplikacija za internet stvari (IoT) za shranjevanje in pridobivanje podatkov iz stvari z uporabo vmesnikov REST in MQTT API. ThingSpeak omogoča ustvarjanje aplikacij za beleženje senzorjev, aplikacij za sledenje lokaciji in družabnega omrežja stvari s posodobitvami stanja.“
    Najprej morate imeti račun na spletnem mestu ThinkSpeak.com. Nato sledite navodilom za ustvarjanje kanala in upoštevajte njegovo ID kanala in ključ API za pisanje.
    Pri ustvarjanju kanala morate tudi določiti, katere informacije bodo naložene v vsako od 8 polj, kot je prikazano na sliki 14 (v našem primeru bomo uporabili le 4 od njih).
    Korak 9: Protokol MQTT in povezava ThingSpeak™
    MQTT je arhitektura publish/subscribe, ki je bila razvita predvsem za povezovanje naprav z omejeno pasovno širino in energijo prek brezžičnih omrežij. Gre za preprost in lahek protokol, ki deluje prek TCP/IP ali WebSockets vtičnic. MQTT prek vtičnic WebSockets je mogoče zavarovati s protokolom SSL. Arhitektura publish/subscribe omogoča pošiljanje sporočil odjemalskim napravam, ne da bi naprava morala nenehno spraševati strežnik.
    MQTT posrednik je osrednja komunikacijska točka in je odgovoren za pošiljanje vseh sporočil med pošiljatelji in upravičenimi prejemniki. Odjemalec je vsaka naprava, ki se poveže s posrednikom in lahko objavi ali se naroči na teme za dostop do informacij. Tema vsebuje informacije o usmerjanju za posrednika.
    Vsak odjemalec, ki želi pošiljati sporočila, jih objavi v določeni temi. Vsak odjemalec, ki želi prejemati sporočila, pa se na določeno temo naroči. Posrednik vsa sporočila z ustrezno temo dostavi ustreznim odjemalcem.
    ThingSpeak™ ima MQTT posrednika na naslovu URL mqtt.thingspeak.com in vratih 1883. ThingSpeak posrednik podpira objavo MQTT in naročanje MQTT. V našem primeru bomo uporabili MQTT objavo.

    Korak 10: MQTT objava

    Za začetek namestimo odjemalsko knjižnico Eclipse Paho MQTT Python, ki implementira različici 3.1 in 3.1.1 protokola MQTT.
    sudo pip install paho-mqtt
    Nato uvozimo knjižnico paho:
    import paho.mqtt.publish as publish
    in zaženite kanal Thingspeak in protokol MQTT. Ta način povezave je najpreprostejši in zahteva najmanj sistemskih virov:
    channelID = „YOUR CHANNEL ID“
    apiKey = „YOUR WRITE KEY“
    topic = „channels/“ + channelID + „/publish/“ + apiKey
    mqttHost = „mqtt.thingspeak.com“
    Zdaj moramo določiti „koristni tovor“:
    ”:
    tPayload = „field1=“ + str(pmt_2_5)+
     „&field2=“ + str(aqi_2_5)+ „&field3=“ +
     str(pmt_10)+ „&field4=“ + str(aqi_10)
    In to je to! pripravljeni smo na pošiljanje podatkov v oblak! Ponovno napišimo prejšnjo funkcijo zanke, da bo vključevala tudi del ThingSpeak.
    # Sending all data to ThingSpeak every 1 minute
    while(True):
    pmt_2_5, pmt_10 = get_data()
    aqi_2_5, aqi_10 = conv_aqi(pmt_2_5, pmt_10)
    tPayload = „field1=“ + str(pmt_2_5)+
     „&field2=“ + str(aqi_2_5)+ „&field3=“ +
     str(pmt_10)+ „&field4=“ + str(aqi_10)
    try:
    publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS,
    transport=tTransport)
    save_log()
    except:
    print („[INFO] Failure in sending data“)
    time.sleep(60)
    Če je vse v redu, morajo biti podatki prikazani tudi v kanalu thingspeak.com, kot je prikazano na sliki 16.

    Korak 11: Končna koda

    Pomembno je poudariti, da je Jupyter Notebook zelo dobro orodje za razvoj in poročanje, vendar ne za ustvarjanje kode, ki bi jo bilo mogoče prenesti v produkcijo. Zdaj morate vzeti ustrezen del kode, ustvariti skripto .py in jo zagnati na terminalu.
    Na primer „ts_air_quality_logger.py“, ki ga zaženete z ukazom:
    python 3 ts_air_quality_
    logger.py
    To skripto, Jupyter Notebook in sds011.py najdete v moji shrambi RPi_Air_Quality_Sensor [5]. Upoštevajte, da je ta skripta izvedljiva samo za testiranje. Najbolje je, da znotraj končne zanke ne uporabljate zakasnitev (zaradi katerih se koda „ustavi“), temveč uporabite časovnike.
    Za pravo uporabo je najbolje, da ne uporabljate zanke in da je Linux sprogramiran za redno izvajanje skripte s crontabom [6].
    Korak 12: Prenos monitorja na prosto
    Ko je moj monitor kvalitete zraka Raspberry Pi deloval, sem RPi namestil v plastično škatlo, pri čemer je senzor ostal zunaj, in jo namestil zunaj mojega doma. Pridobili smo dve meritvi.
    Korak 13: Izgorevanje v bencinske motorju
    Senzor je bil nameščen približno 1 m od izpuha motorja Lambretta, njegov motor pa je bil vklopljen. Motor je deloval nekaj minut in se nato izklopil. Iz zgornje dnevniške datoteke je razviden rezultat, ki sem ga dobil. Zanimivo je potrditi, da so bili delci PM2,5 najnevarnejši delci, ki so nastali zaradi delovanja motorja.
    Ob pregledu dnevniške datoteke ugotovimo, da so bili podatki senzorja v trenutku „zunaj območja“ in jih knjižnica za pretvorbo AQI ni dobro zajela, zato spremenim prejšnjo kodo, da to obravnava:
    def conv_aqi(pmt_2_5, pmt_10):
    try:
    aqi_2_5 = aqi.to_iaqi(aqi.POLLUTANT_PM25, str(pmt_2_5))
    aqi_10 = aqi.to_iaqi(aqi.POLLUTANT_PM10, str(pmt_10))
    return aqi_2_5, aqi_10
    except:
    return 600, 600
    To se lahko zgodi tudi na terenu, kar je v redu. Ne pozabite, da bi morali dejansko uporabiti drseče povprečje, če želite resnično dobiti AQI (vsaj urno, običajno pa dnevno).
    Zaključek
    Kot vedno upam, da bo ta projekt tudi drugim pomagal najti pot v vznemirljivi svet elektronike in podatkovne znanosti! Za podrobnosti in končno kodo obiščite mojo GitHub shrambo: Rpi_Air_Quality_Sensor [5].
    Viri:
    2: http://www.tesis.uchile.cl/tesis/uchile/2006/alvarado_g /sources/alvarado_g.pdf
    3: https://pdfs.semanticscholar.org/8dbd/245e7045693aa 4858b3638466f17bb946aff.pdf
    5: https://github.com/Mjrovai/Python4DS/tree/master/RP _Air_Quality_Sensor
    Povzeto po:
    https://svet-el.si