Innehållsförteckning:

En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4:15 steg (med bilder)
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4:15 steg (med bilder)

Video: En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4:15 steg (med bilder)

Video: En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4:15 steg (med bilder)
Video: Sound of the '90s: The Gravis Ultrasound Card Revival 2024, Juli
Anonim
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4
En billig IoT luftkvalitetsmonitor baserad på RaspberryPi 4

Santiago, Chile under en vintermiljö nödsituation har förmånen att bo i ett av de vackraste länderna i världen, men tyvärr är det inte alla rosor. Chile under vintersäsongen lider mycket av luftföroreningar, främst på grund av partiklar som damm och smog.

På grund av kallt väder, i söder, beror luftföroreningar främst på träbaserade kalefaktorer och i Santiago (huvudstaden i mitten av landet) blandat från industrier, bilar och dess unika geografiska situation mellan 2 stora bergskedjor.

Numera är luftföroreningar ett stort problem över hela världen och i den här artikeln kommer vi att utforska hur man utvecklar en billig, hemgjord luftkvalitetsmonitor baserad på en Raspberry Pi. Om du är intresserad av att förstå mer om luftkvalitet, besök "World Air Quality Index" -projektet.

Tillbehör

  • Hallon Pi 4
  • 1SDS011 - Hög precision laser pm2.5 luftkvalitetsdetekteringssensor
  • Plastlåda

Steg 1: Particulate Matter (PM): Vad är det? Hur kommer det upp i luften?

Particulate Matter (PM): Vad är det? Hur kommer det upp i luften?
Particulate Matter (PM): Vad är det? Hur kommer det upp i luften?

Så för att förstå föroreningar eller luftföroreningar måste vi studera partiklarna som är relaterade till det, som också kallas partiklar. Om vi tittar på graferna i föregående avsnitt kan vi observera att de nämnde PM2.5 och PM10. Låt oss ge en snabb överblick över det.

PM står för partiklar (även kallad partikelföroreningar): termen för en blandning av fasta partiklar och vätskedroppar som finns i luften. Vissa partiklar, som damm, smuts, sot eller rök, är stora eller mörka nog att ses med blotta ögat. Andra är så små att de bara kan detekteras med ett elektronmikroskop. Partiklar finns i ett stort antal storlekar. Partiklar mindre än eller lika med 10 mikrometer i diameter är så små att de kan komma in i lungorna, vilket kan orsaka allvarliga hälsoproblem. Tio mikrometer är mindre än bredden på ett enda hår.

Partikelföroreningar inkluderar grova dammpartiklar (PM10): inhalerbara partiklar, med diametrar som vanligtvis är 10 mikrometer och mindre. Källor inkluderar krossning eller slipning och damm som rörs upp av fordon på vägar. Fina partiklar (PM2,5): fina inhalerbara partiklar, med diametrar som i allmänhet är 2,5 mikrometer och mindre. Fina partiklar produceras från alla typer av förbränning, inklusive motorfordon, kraftverk, vedeldning i bostäder, skogsbränder, jordbruksförbränning och några industriella processer du kan hitta mer om partiklarna på EPA -webbplatsen: United States Environmental Protection Agency

Steg 2: Varför är det viktigt att bry sig om partiklar?

Varför är det viktigt att bry sig om de partikulära frågorna?
Varför är det viktigt att bry sig om de partikulära frågorna?

Som beskrivs av GERARDO ALVARADO Z. i hans arbete vid Chile University, har studier av episoder av hög luftförorening i Meuse Valley (Belgien) 1930, Donora (Pennsylvania) 1948 och London 1952 varit de första dokumenterade källorna som relaterade dödlighet med partikelkontaminering (Préndez, 1993). Framsteg i undersökningen av effekterna av luftföroreningar på människors hälsa har fastställt att hälsorisker orsakas av inhalerbara partiklar, beroende på deras penetrering och avsättning i olika delar av andningsorganen och det biologiska svaret på deponerade material.

De tjockaste partiklarna, cirka 5 μm, filtreras av den gemensamma verkan av näshålans cilia och slemhinnan som täcker näshålan och luftstrupen. Partiklar med en diameter mellan 0,5 och 5 μm kan deponeras i bronkierna och även i lungalveolerna, men de elimineras av cilierna i bronkierna och bronkiolerna efter några timmar. Partiklar som är mindre än 0,5 μm kan tränga djupt igenom tills de deponeras i lungalveolerna, kvar från veckor till år, eftersom det inte finns någon mucociliär transportmekanism som underlättar eliminering. Följande bild visar partiklarnas penetration i andningsorganen beroende på deras storlek.

Så att upptäcka båda typerna av partiklar (PM2.5 och PM10) är mycket viktiga och de goda nyheterna är att båda är läsbara med en enkel och inte dyr sensor, SDS011.

Steg 3: Partikelsensorn - SDS011

Partikelsensorn - SDS011
Partikelsensorn - SDS011
Partikelsensorn - SDS011
Partikelsensorn - SDS011

Luftkvalitetsövervakning är välkänd och etablerad vetenskap som började redan på 80 -talet. Vid den tiden var tekniken ganska begränsad, och lösningen som användes för att kvantifiera luftföroreningskomplexet, krånglig och riktigt dyr.

Lyckligtvis blir lösningarna som används för övervakning av luftkvalitet numera, med den senaste och modernaste tekniken, inte bara mer exakta utan också snabbare att mäta. Enheterna blir mindre och kostar mycket billigare än någonsin tidigare.

I den här artikeln kommer vi att fokusera på en partikelsensor som kan detektera mängden damm i luften. Medan den första generationen bara kunde upptäcka mängden opacitet kan de senaste sensorerna som SDS011 från INOVAFIT, en spin-off från University of Jinan (i Shandong), nu upptäcka PM2.5 och PM10.

Med sin storlek är SDS011 förmodligen en av de bästa sensorerna när det gäller noggrannhet och pris (mindre än USD 40,00).

  • Uppmätta värden: PM2.5, PM10
  • Område: 0–999,9 μg /m³
  • Matningsspänning: 5V (4,7–5,3V)
  • Strömförbrukning (arbete): 70mA ± 10mA
  • Strömförbrukning (vilolägeslaser och fläkt): <4mA
  • Förvaringstemperatur: -20 till +60C
  • Arbetstemperatur: -10 till +50C
  • Luftfuktighet (lagring): Max. 90%
  • Luftfuktighet (arbete): Max. 70% (kondens av vattenånga förfalskar mätvärden)
  • Noggrannhet: 70% för 0,3μm och 98% för 0,5μm
  • Storlek: 71x70x23 mm
  • Certifiering: CE, FCC, RoHS

SD011 använder kretskortet som ena sidan av höljet, vilket gör det möjligt att minska dess kostnad. Receptordioden är monterad på PCB -sidan (detta är obligatoriskt eftersom allt brus mellan dioden och LNA bör undvikas). Emitterlasern är monterad på plastlådan och ansluten till kretskortet via en flexibel kabel.

Kort sagt, Nova Fitness SDS011 är en professionell laserdammsensor. Fläkt monterad på sensorn suger automatiskt luft. Sensorn använder en laserljusspridningsprincip* för att mäta värdet av dammpartiklar som hänger i luften. Sensorn ger hög precision och pålitlig avläsning av PM2.5- och PM10 -värden. Varje förändring i miljön kan observeras nästan omedelbart kort responstid under 10 sekunder. Sensorn i standardläge rapporterar läsning med ett intervall på 1 sekund.

* Laserspridningsprincip: Ljusspridning kan induceras när partiklar går genom detekteringsområdet. Det spridda ljuset omvandlas till elektriska signaler och dessa signaler kommer att förstärkas och bearbetas. Antalet och diametern på partiklar kan erhållas genom analys eftersom signalvågformen har vissa relationer med partiklarnas diameter.

Steg 4: Men hur kan SDS011 fånga dessa partiklar?

Men hur kan SDS011 fånga dessa partiklar?
Men hur kan SDS011 fånga dessa partiklar?
Men hur kan SDS011 fånga dessa partiklar?
Men hur kan SDS011 fånga dessa partiklar?

Som kommenterats tidigare är principen som används av SDS011 ljusspridning eller bättre, Dynamic Light Scattering (DLS), som är en teknik inom fysik som kan användas för att bestämma storleksfördelningsprofilen för små partiklar i suspension eller polymerer i lösning. Inom ramen för DLS analyseras vanliga tidsfluktuationer med hjälp av intensiteten eller fotonens autokorrelationsfunktion (även känd som fotonkorrelationsspektroskopi eller kvasi-elastisk ljusspridning). I tidsdomänanalysen förfaller autokorrelationsfunktionen (ACF) vanligtvis med början från noll fördröjningstid, och snabbare dynamik på grund av mindre partiklar leder till snabbare avkorrelation av spridd intensitetsspårning. Det har visat sig att intensiteten ACF är Fouriertransformen av effektspektrumet, och därför kan DLS -mätningarna utföras lika bra i spektralområdet.

Ovanför en hypotetisk dynamisk ljusspridning av två prover: Större partiklar (som PM10) på toppen och mindre partiklar (som PM2.5) på botten. Och när vi ser in i vår sensor kan vi se hur ljusspridningsprincipen implementeras.

Den elektriska signalen som fångas upp på dioden går till Low Noise Amplifier och därefter omvandlas den till en digital signal via en ADC och till utsidan via en UART.

Om du vill veta mer om SDS011 om en verklig vetenskaplig erfarenhet, ta en titt på Konstantinos et al., 2018 Utveckling och On-Field Testning av billiga bärbara system för övervakning av PM2.5-koncentrationer.

Steg 5: Showtime

Showtime!
Showtime!
Showtime!
Showtime!

Låt oss ta en paus i all denna teori och fokusera på hur man mäter partiklar med hjälp av en Raspberry Pi och SDS011 -sensorn

HW -anslutningen är faktiskt väldigt enkel. Sensorn säljs med en USB -adapter för att koppla utdata från dess 7 -stifts UART med en av RPi: s standard USB -kontakter.

SDS011 pinout:

  • Pin 1 - ej ansluten
  • Pin 2 - PM2.5: 0–999μg/m³; PWM -utgång
  • Stift 3–5V
  • Stift 4 - PM10: 0–999 μg/m³; PWM -utgång
  • Stift 5 - GND
  • Stift 6 - RX UART (TTL) 3.3V
  • Stift 7 - TX UART (TTL) 3.3V

För denna handledning använder jag för första gången en helt ny Raspberry-Pi 4. Men naturligtvis kommer alla tidigare modeller också att fungera bra.

Så snart du ansluter sensorn på en av RPi USB -portarna börjar du automatiskt lyssna på ljudet från dess fläkt. Bullret är lite irriterande, så kanske du ska koppla ur det och vänta tills du är klar med SW.

Kommunikationen mellan sensorn och RPi sker via ett seriellt protokoll. Detaljer om detta protokoll finns här: Laser Dust Sensor Control Protocol V1.3. Men för det här projektet är det bästa att använda ett python -gränssnitt för att förenkla koden som ska utvecklas. Du kan skapa ditt eget gränssnitt eller använda några som är tillgängliga på internet, som Frank Heuer eller Ivan Kalchev. Vi kommer att använda det sista, vilket är väldigt enkelt och fungerar bra (du kan ladda ner skriptet sds011.py från GitHub eller mitt).

Filen sds011.py måste finnas i samma katalog som du skapar ditt skript.

Under utvecklingsfasen kommer jag att använda en Jupyter Notebook, men du kan använda vilken IDE du vill (Thonny eller Geany, till exempel, som ingår i Raspberry Pi Debian -paketet är båda mycket bra).

Börja importera sds011 och skapa din sensorinstans. SDS011 tillhandahåller en metod för att läsa från sensorn med en UART.

från sds011 import *

sensor = SDS011 ("/dev/ttyUSB0")

Du kan slå på eller av din sensor med kommandot sleep:

pmt_2_5, pmt_10 = sensor.query ()

Vänta minst 10 sekunder för stabilisering före mätningar och minst 2 sekunder för att starta en ny (se koden ovan).

Och det här är allt du behöver veta när det gäller SW för att använda sensorn. Men låt oss gå djupare in på luftkvalitetskontroll! I början av denna artikel, om du har utforskat webbplatser som ger information om hur bra eller dålig luften är, bör du inse att färger är associerade med dessa värden. Varje färg är ett index. Det mest kända av det är AQI (Air Quality Index), som används i USA och flera andra länder.

Steg 6: Luftkvalitetsindex - AQI

Luftkvalitetsindex - AQI
Luftkvalitetsindex - AQI
Luftkvalitetsindex - AQI
Luftkvalitetsindex - AQI
Luftkvalitetsindex - AQI
Luftkvalitetsindex - AQI

AQI är ett index för rapportering av daglig luftkvalitet. Den berättar hur ren eller förorenad din luft är, och vilka associerade hälsoeffekter som kan vara ett problem för dig. AQI fokuserar på hälsoeffekter du kan uppleva inom några timmar eller dagar efter att du andats in förorenad luft.

EPA (United States Environmental Protection Agency) beräknar till exempel AQI inte bara för partikelföroreningar (PM2.5 och PM10) utan även för de andra stora luftföroreningarna som regleras av Clean Air Act: marknära ozon, kolmonoxid, svaveldioxid och kvävedioxid. För var och en av dessa föroreningar har EPA fastställt nationella standarder för luftkvalitet för att skydda folkhälsan. Se bilden ovan med tillhörande AQI -värden, färger och hälsobesvar.

Som kommenterats före är dessa AQI -värden och färger relaterade till var och en av förorenande ämnen, men hur kan man associera värdena som genereras av sensorer med dem? En extra tabell förbinder dem alla enligt ovan.

Men det är naturligtvis ingen mening att använda ett sådant bord. I slutändan är det en enkel matematisk algoritm som gör beräkningen. För det kommer vi att importera biblioteket för att konvertera mellan AQI-värde och föroreningskoncentration (µg/m³): python-aqi.

Installera biblioteket med PIP och gör ett test (se koden ovan)

pip installera python-aqi

Och hur är det med Chile?

I Chile används ett liknande index, ICAP: Air Quality Index for Breathable Particles. Ett högsta dekret 59 av den 16 mars 1998 från generalsekreterarens ministerium för republikens ordförandeskap fastställer i artikel 1, bokstav g) att nivåerna som definierar ICA för andningsbart partikulärt material, ICAP.

Värdena kommer att variera linjärt mellan sektionerna, värdet 500 skulle motsvara det gränsvärde över vilket det skulle finnas en risk för befolkningen vid exponering för dessa koncentrationer. Enligt ICAP -värdena har kategorier fastställt som kvalificerar koncentrationsnivåerna för MP10 som människor utsattes för.

Steg 7: Logga data lokalt

Logga data lokalt
Logga data lokalt
Logga data lokalt
Logga data lokalt
Logga data lokalt
Logga data lokalt

Vid denna tidpunkt har vi alla verktyg för att fånga data från sensorn och även konvertera dem för ett mer "läsbart värde", att det är AQI -index.

Låt oss skapa en funktion för att fånga dessa värden. Vi kommer att fånga 3 värden i sekvens med genomsnittet bland dem:

def get_data (n = 3):

sensor.sleep (sleep = False) pmt_2_5 = 0 pmt_10 = 0 time.sleep (10) för i inom intervall (n): x = sensor.fråga () 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 Ovan kan du se testresultatet. Låt oss också göra en funktion för att konvertera de numeriska värdena för PM i AQI -index

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 ovanför resultatet av ett test med båda funktionerna. Men vad ska man göra med dem? Det enklaste svaret är att skapa en funktion för att spara de fångade data och spara dem i en lokal fil

def save_log ():

med öppen ("DIN VÄG HÄR/air_quality.csv", "a") som log: dt = datetime.now () log.write ("{}, {}, {}, {}, {} n". format (dt, pmt_2_5, aqi_2_5, pmt_10, aqi_10)) log.close () Med en enda slinga kan du logga data på regelbundna baser i din lokala fil, till exempel varje minut

medan (Sant):

pmt_2_5, pmt_10 = get_data () aqi_2_5, aqi_10 = conv_aqi (pmt_2_5, pmt_10) försök: save_log () utom: print ("[INFO] Fel i loggningsdata") time.sleep (60) Var 60: e sekund kommer tidsstämpeln plus data att "läggas till" i den här filen, som vi kan se ovan.

Steg 8: Skicka data till en molntjänst

Skicka data till en molntjänst
Skicka data till en molntjänst

Vid denna tidpunkt har vi lärt oss hur man fångar data från sensorn och sparar dem i en lokal CSV -fil. Nu är det dags att se hur man skickar dessa data till en IoT -plattform. I denna handledning kommer vi att använda ThingSpeak.com.

“ThingSpeak är ett open-source Internet of Things (IoT) -program för att lagra och hämta data från saker med hjälp av REST- och MQTT-API: er. ThingSpeak möjliggör skapande av sensorloggningsprogram, platsspårningsprogram och ett socialt nätverk av saker med statusuppdateringar.”

Först måste du ha ett konto på ThinkSpeak.com. Följ sedan instruktionerna för att skapa en kanal och notera dess kanal -ID och skriv -API -nyckel.

När du skapar kanalen måste du också definiera vilken information som ska laddas upp till vart och ett av de 8 fälten, som visas ovan (i vårt fall kommer endast 4 av dem att användas).

Steg 9: MQTT -protokoll och ThingSpeak -anslutning

MQTT -protokoll och ThingSpeak -anslutning
MQTT -protokoll och ThingSpeak -anslutning

MQTT är en publicerings-/prenumerationsarkitektur som utvecklades främst för att ansluta bandbredd och strömbegränsade enheter över trådlösa nätverk. Det är ett enkelt och lätt protokoll som körs över TCP/IP -uttag eller WebSockets. MQTT via WebSockets kan säkras med SSL. Utgivnings-/prenumerationsarkitekturen gör det möjligt att skicka meddelanden till klientenheterna utan att enheten kontinuerligt behöver polla servern.

MQTT -mäklaren är den centrala kommunikationspunkten, och den ansvarar för att skicka alla meddelanden mellan avsändarna och de rättmätiga mottagarna. En klient är en enhet som ansluter till mäklaren och kan publicera eller prenumerera på ämnen för att komma åt informationen. Ett ämne innehåller routningsinformation för mäklaren. Varje klient som vill skicka meddelanden publicerar dem till ett visst ämne, och varje klient som vill ta emot meddelanden prenumererar på ett visst ämne. Mäklaren levererar alla meddelanden med matchande ämne till lämpliga kunder.

ThingSpeak ™ har en MQTT -mäklare på URL: en mqtt.thingspeak.com och port 1883. ThingSpeak -mäklaren stöder både MQTT -publicering och MQTT -prenumeration.

I vårt fall kommer vi att använda MQTT Publish.

Steg 10: MQTT -publicering

MQTT Publicera
MQTT Publicera

För att börja, låt oss installera Eclipse Paho MQTT Python -klientbiblioteket, som implementerar version 3.1 och 3.1.1 av MQTT -protokollet

sudo pip installera paho-mqtt

Låt oss sedan importera paho -biblioteket:

importera paho.mqtt.publicera som publicera

och initiera Thingspeak -kanalen och MQTT -protokollet. Denna anslutningsmetod är den enklaste och kräver minst systemresurser:

channelID = "DITT KANAL -ID"

apiKey = "DIN SKRIVKNAPP" topic = "channel/" + channelID + "/publish/" + apiKey mqttHost = "mqtt.thingspeak.com" Nu måste vi definiera vår "nyttolast"

tPayload = "field1 =" + str (pmt_2_5) + "& field2 =" + str (aqi_2_5) + "& field3 =" + str (pmt_10) + "& field4 =" + str (aqi_10)

Och det är allt! vi är redo att börja skicka data till molnet! Låt oss skriva om den tidigare loopfunktionen för att även inkludera ThingSpeak -delen av den.

# Skicka all data till ThingSpeak var 1 minut

medan (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 () utom: print ("[INFO] Underlåtenhet att skicka data ") time.sleep (60) Om allt är ok måste du se data också visas på din kanal på thingspeak.com som visas ovan.

Steg 11: Det slutliga manuset

Det är viktigt att påpeka att Jupyter Notebook är ett mycket bra verktyg för utveckling och rapportering, men nej för att skapa en kod för att sätta i produktion. Vad du ska göra nu är att ta den relevanta delen av koden och skapa ett.py -skript och köra det på din terminal.

Till exempel "ts_air_quality_logger.py", som du ska köra med kommandot:

python 3 ts_air_quality_logger.py

Detta skript samt Jupyter Notebook och sds011.py finns i mitt förråd på RPi_Air_Quality_Sensor.

Observera att detta skript endast är möjligt för testning. Det bästa är att inte använda förseningar inuti den sista slingan (som sätter koden i "paus"), istället använda timers. Eller för en riktig applikation, det bästa är inte att använda slingan, med Linux programmerad för att köra skriptet regelbundet med crontab.

Steg 12: Ta ut bildskärmen utanför

Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför
Ta med skärmen utanför

När min Raspberry Pi luftkvalitetsmonitor fungerade monterade jag RPi: n i en plastlåda, förde sensorn utanför och placerade den utanför mitt hem.

Två erfarenheter gjordes.

Steg 13: Förbränning av bensinmotor

Bensinmotorförbränning
Bensinmotorförbränning
Bensinmotorförbränning
Bensinmotorförbränning

Sensorn placerades cirka 1 meter från Lambrettas gasform och dess motor slogs på. Motorn var igång i ett par minuter och stängde av. Från loggfilen ovan, resultatet som jag fick. Intressant att bekräfta att PM2.5 var det farligaste partiklarna som orsakades av motorn.

Steg 14: Vedeldning

Vedeldning
Vedeldning
Vedeldning
Vedeldning

När vi tittar på loggfilen inser vi att sensordata var momentana "out of Range" och inte fångades väl av AQI -konverteringsbiblioteket, så jag ändrar tidigare kod för att hantera det:

def conv_aqi (pmt_2_5, pmt_10):

försök: 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 utom: retur 600, 600 Denna situation kan hända i fältet, vilket är OK. Kom ihåg att du faktiskt borde använda glidande medelvärde för att verkligen få AQI (minst varje timme, men oftast dagligen).

Steg 15: Slutsats

Slutsats
Slutsats

Som alltid hoppas jag att detta projekt kan hjälpa andra att hitta in i den spännande världen av elektronik och datavetenskap!

För mer information och slutkod, besök min GitHub -förvaring: RPi_Air_Quality_Sensor.

Hälsningar från södra världen!

Vi ses på min nästa instruerbara!

Tack, Marcelo

Rekommenderad: