Indholdsfortegnelse:
- Forbrugsvarer
- Trin 1: Tilslutning af komponenterne
- Trin 2: Bibliotek og Arduino -program
- Trin 3: MIT App Inventor 2 Program
- Trin 4: RESULTATET
![System til overvågning af luftkvalitet for partikler forurening: 4 trin System til overvågning af luftkvalitet for partikler forurening: 4 trin](https://i.howwhatproduce.com/images/010/image-29646-j.webp)
Video: System til overvågning af luftkvalitet for partikler forurening: 4 trin
![Video: System til overvågning af luftkvalitet for partikler forurening: 4 trin Video: System til overvågning af luftkvalitet for partikler forurening: 4 trin](https://i.ytimg.com/vi/2nAdiT7anVU/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
![System til overvågning af luftkvalitet for partikler forurening System til overvågning af luftkvalitet for partikler forurening](https://i.howwhatproduce.com/images/010/image-29646-1-j.webp)
![System til overvågning af luftkvalitet for partikler forurening System til overvågning af luftkvalitet for partikler forurening](https://i.howwhatproduce.com/images/010/image-29646-2-j.webp)
INTRO:
1 I dette projekt viser jeg, hvordan man opbygger en partikeldetektor med datavisning, data backup på SD -kort og IOT. Visuelt angiver et neopixels ringdisplay luftkvaliteten.
2 Luftkvaliteten er en stadig vigtigere bekymring i dag. der er systemer til måling af støvhastigheden, men de er meget dyre. Der er billige partikeldetektorer af høj kvalitet på markedet, som det fremgår af nogle undersøgelser.
for eksempel:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 Jeg besluttede derfor at bygge en enhed, der er i stand til at måle antallet af partikler efter størrelsesklasser (0,5 µm til 10 µm), visuelt med en simpel visning af resultatet (neo pixel ring), en mere detaljeret visning på en TFT -skærm og en tidsstemplet backup på et SD-kort.
4 Derudover har jeg tilføjet et Bluetooth -kommunikationsmodul for at kunne kommunikere med en Android -applikation og dermed offentliggøre resultaterne på en IOT -server.
5 De samlede omkostninger for det hele overstiger ikke 60 €
Forbrugsvarer
-Arduino uno R3
-Arduino proto skjold
-TFT -skærm ST7735
-Neopixel ring 24 led
-Plantower PMS5003
-HC-06 bluetooth-modul
Trin 1: Tilslutning af komponenterne
![Tilslutning af komponenterne Tilslutning af komponenterne](https://i.howwhatproduce.com/images/010/image-29646-3-j.webp)
de forskellige komponenter er forbundet i henhold til diagrammet ovenfor
Trin 2: Bibliotek og Arduino -program
1 biblioteket
til TFT -skærmen
github.com/adafruit/Adafruit-GFX-Library
til neo pixelringen
github.com/adafruit/Adafruit_NeoPixel
til sd -kortet
github.com/arduino-libraries/SD
2 arduino -skitsen
#include #include // Bibliothèque pour l'I2C #include "RTClib.h" // Bibliothèque pour le module RTC RTC_DS1307 RTC; #omfatte
// Hvilken pin på Arduino er forbundet til NeoPixels?
#define PIN 6 // På Trinket eller Gemma foreslår du at ændre dette til 1
// Hvor mange NeoPixels er knyttet til Arduino?
#define NUMPIXELS 24 // Populær NeoPixel ringstørrelse Adafruit_NeoPixel pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = pixels. Farve (0, 250, 0); uint32_t orange = pixels. Farve (250, 250, 0); uint32_t rouge = pixels. Color (255, 0, 0);
SoftwareSerial pmsSerial (2, 3);
#define cs 10 #define dc 9 #define rst 8 // du kan også slutte dette til Arduino reset
#include // Core grafikbibliotek
#include // Hardware-specifikt bibliotek #include #include const int cs_sd = 4; int vikarer; // temps d'acquisition dobbelt tempsInit; // initialisering af timer eller démarrage du loop ()
#if defineret (_ SAM3X8E_)
#undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif
// Mulighed 1: brug alle stifter, men lidt langsommere
// Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, mosi, sclk, rst);
// Mulighed 2: skal bruge hardware -SPI -benene
// (for UNO er det sclk = 13 og sid = 11) og pin 10 skal være // en output. Dette er meget hurtigere - også påkrævet, hvis du vil // bruge microSD -kortet (se billedtegningseksemplet) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); float nombre_leds = 0; ugyldig opsætning () {Serial.begin (9600); // Initialiser la liaison I2C Wire.begin (); // Initialiser modulet RTC RTC.begin (); Serial.print ("init SD"); forsinkelse (1000); if (! SD.begin (cs_sd)) // Condition vérifiant si la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); Vend tilbage; } Serial.print ("Carte SD OK");
Fildata = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "donnees.txt"
data.println (""); data.println ("Démarrage -erhvervelse"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // initialiser en ST7735S -chip, sort fane Serial.println ("init"); // vores debugging output tft.fillScreen (ST7735_BLACK); // sensor baud rate er 9600 pmsSerial.begin (9600);
pixels.begin (); // INITIALISER NeoPixel -strimmelobjekt (påkrævet)
pixels.setBrightness (2);
}
struct pms5003data {
uint16_t framelen; uint16_t pm10_standard, pm25_standard, pm100_standard; uint16_t pm10_env, pm25_env, pm100_env; uint16_t partikler_03um, partikler_05um, partikler_10um, partikler_25um, partikler_50um, partikler_100um; uint16_t ubrugt; uint16_t kontrolsum; };
struct pms5003data data; void loop () {pixels.clear (); // Indstil alle pixelfarver til 'off' DateTime nu = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (nu);
temps = ((millis () - tempsInit))/1000; // Démarrage du chrono
hvis (readPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("nbre dele/ 0,1 l");
tft.setCursor (10, 17); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.setCursor (10, 17); tft.print ("0,3 um"); tft.print (data.particles_03um); tft.print ("");
tft.setCursor (10, 29);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("0,5 um"); tft.print (data.particles_05um); tft.print ("");
tft.setCursor (10, 41);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("1.0 um"); tft.print (data.particles_10um); tft.print ("");
tft.setCursor (10, 53);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("2,5 um"); tft.print (data.particles_25um); tft.print ("");
tft.setCursor (10, 65);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("5,0 um"); tft.print (data.particles_50um); tft.print ("");
tft.setCursor (10, 77);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("10 um"); tft.print (data.particles_100um); tft.print ("");
tft.setCursor (2, 89);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 1.0"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm10_standard); tft.print (""); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print (" mikrog/m3 ");
tft.setCursor (2, 100); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 2.5"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm25_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg/m3");
tft.setCursor (2, 110);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize (1); tft.print ("PM 10"); tft.setTextColor (ST7735_YELLOW, ST7735_BLACK); tft.print (data.pm100_standard); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.print ("microg/m3");
tft.setCursor (10, 5);
tft.setTextColor (ST7735_WHITE, ST7735_BLACK); tft.setTextSize (1); tft.println ("nbre dele/ 0,1 l");
// Serial.print (vikarer);
// Serial.print (""); Serial.print ("#"); Serielt tryk ("03 µm"); Serial.print (data.particles_03um); Serial.print (""); Serial.print ("05 µm"); Serial.print (data.particles_05um); Serial.print (""); Serielt tryk ("1 µm"); Serial.print (data.particles_10um); Serial.print (""); Serielt tryk ("25 µm"); Serial.print (data.particles_25um); Serial.print (""); Serielt tryk ("50 µm"); Serial.print (data.particles_50um); Serial.print (""); Serielt tryk ("100 µm"); Serial.print (data.particles_100um); Serial.println (""); nombre_leds = int (((float (data.particles_03um)/65535)*24)); // nombre_leds = (8); Serial.println (nombre_leds);
hvis ((nombre_leds = 1)) {
pixels.fill (vert, 0, nombre_leds); } ellers hvis ((nombre_leds = 8)) {pixels.fill (vert, 0, 8); pixels.fill (orange, 8, ((nombre_leds) -8)); } ellers hvis (nombre_leds> 16) {
pixel. udfyldning (vert, 0, 8); pixel. udfyldning (orange, 8, 8); pixels.fill (rouge, 16, ((nombre_leds) -16)); } ellers hvis (nombre_leds <= 1) {pixels.fill (vert, 0, 1); } pixels.show (); // Send de opdaterede pixelfarver til hardwaren.
// Définition données String PM03 = String (data.particles_03um); String PM05 = String (data.particles_05um); String PM10 = String (data.particles_10um); String PM25 = String (data.particles_25um); String PM50 = String (data.particles_50um); String PM100 = String (data.particles_100um); String PMS10 = String (data.pm10_standard); String PMS25 = String (data.pm25_standard); String PMS100 = String (data.pm100_standard); String Temps = String (temps);
// Ecriture des données dans le fichier texte
Fildata = SD.open ("donnees.txt", FILE_WRITE); data.println (Temps+""+PM03+""+PM05+""+PM10+""+PM25+""+PM50+""+PM100+""+PMS10+""+PMS25+""+PMS100+""); data.close (); }
}
boolsk readPMSdata (Stream *s) {
hvis (! s-> tilgængelig ()) {return false; } // Læs en byte ad gangen, indtil vi kommer til den særlige '0x42' start-byte, hvis (s-> peek ()! = 0x42) {s-> read (); return falsk; }
// Læs nu alle 32 bytes
hvis (s-> tilgængelig () readBytes (buffer, 32);
// gør kontrolsummen klar
for (uint8_t i = 0; i <30; i ++) {sum+= buffer ; }
/* fejlfinding
for (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (buffer , HEX); Serial.print (","); } Serial.println (); */ // Dataene kommer i endian'd, dette løser det, så det fungerer på alle platforme uint16_t buffer_u16 [15]; for (uint8_t i = 0; i <15; i ++) {buffer_u16 = buffer [2 + i*2 + 1]; buffer_u16 + = (buffer [2 + i*2] << 8); }
// sætte det i en flot struktur:)
memcpy ((void *) & data, (void *) buffer_u16, 30);
hvis (sum! = data.checksum) {
Serial.println ("Fejl ved kontrolsum"); return falsk; } // succes! vende tilbage sandt; }
// Converti le numéro de jour en jour /! / La semaine commence un dimanche
String donne_jour_semaine (uint8_t j) {switch (j) {case 0: return "DIM"; sag 1: returner "LUN"; sag 2: returner "MAR"; sag 3: returner "MER"; sag 4: returner "JEU"; sag 5: returner "VEN"; sag 6: returner "SAM"; default: return ""; }}
// affiche la date et l'heure sur l'écran
void affiche_date_heure (DateTime datetime) {// Date String jour = donne_jour_semaine (datetime.dayOfTheWeek ()) + "" + Vers2Chiffres (datetime.day ()) + "/" + Vers2Chiffres (datetime.month ()) + "/" + String (datetime.year (), DEC); // heure String heure = ""; heure = Vers2Chiffres (datetime.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());
Serial.print (jour); Serial.print (""); Serial.print (heure); //Serial.print (""); Fildata = SD.open ("donnees.txt", FILE_WRITE); data.print (jour + "" + heure + ""); data.close ();
tft.setCursor (2, 120);
tft.setTextColor (ST7735_GREEN); tft.setTextSize (1); tft.print ("dato"); tft.setTextColor (ST7735_YELLOW); tft.print (jour); tft.setTextColor (ST7735_GREEN); tft.setCursor (2, 130); tft.print ("heure"); tft. setTextColor (ST7735_YELLOW); tft.print (heure);
forsinkelse (500);
}
// permet d'afficher les nombres sur deux chiffres
String Vers2Chiffres (byte nombre) {String resultat = ""; hvis (nombre <10) resultat = "0"; returresultat += String (nombre, DEC); }
Trin 3: MIT App Inventor 2 Program
![MIT App Inventor 2 -program MIT App Inventor 2 -program](https://i.howwhatproduce.com/images/010/image-29646-4-j.webp)
dette er MIT -appens opfinderkodeblok
Trin 4: RESULTATET
![](https://i.ytimg.com/vi/bh6fuqkrgAA/hqdefault.jpg)
her er videoen af resultatet
Anbefalede:
Enkel overvågning af luftkvalitet med TFT LCD-display- Ameba Arduino: 3 trin
![Enkel overvågning af luftkvalitet med TFT LCD-display- Ameba Arduino: 3 trin Enkel overvågning af luftkvalitet med TFT LCD-display- Ameba Arduino: 3 trin](https://i.howwhatproduce.com/images/006/image-17293-j.webp)
Enkel luftkvalitetsovervågning med TFT LCD-skærm-Ameba Arduino: Introduktion Nu hvor de fleste mennesker bliver hjemme for at undgå tæt kontakt med potentiel COVID-19-virusbærer, bliver luftkvalitet en vigtig faktor for folks velfærd, især i tropiske lande, hvor brug af air-con er et must i løbet af dagen
Overvågning af luftkvalitet med DSM501A Med Nokia LCD: 7 trin
![Overvågning af luftkvalitet med DSM501A Med Nokia LCD: 7 trin Overvågning af luftkvalitet med DSM501A Med Nokia LCD: 7 trin](https://i.howwhatproduce.com/images/001/image-2819-59-j.webp)
Luftkvalitetsovervågning med DSM501A Med Nokia LCD: Hej venner! I denne korte instruktør vil jeg vise dig, hvordan du overvåger luftkvaliteten i dit hjem eller hvor som helst.Det er ret let at samle denne budgetpris luftkvalitetsovervågningsstation
Overvågning af luftkvalitet ved hjælp af partikelfoton: 11 trin (med billeder)
![Overvågning af luftkvalitet ved hjælp af partikelfoton: 11 trin (med billeder) Overvågning af luftkvalitet ved hjælp af partikelfoton: 11 trin (med billeder)](https://i.howwhatproduce.com/images/002/image-5921-11-j.webp)
Overvågning af luftkvalitet ved hjælp af partikelfoton: I dette projekt bruges PPD42NJ -partikelsensor til at måle luftkvaliteten (PM 2.5), der er til stede i luften med partikelfoton. Det viser ikke kun dataene på partikelkonsol og dweet.io, men angiver også luftkvaliteten ved hjælp af RGB LED ved at ændre det
AirCitizen - Overvågning af luftkvalitet: 11 trin (med billeder)
![AirCitizen - Overvågning af luftkvalitet: 11 trin (med billeder) AirCitizen - Overvågning af luftkvalitet: 11 trin (med billeder)](https://i.howwhatproduce.com/images/004/image-10300-7-j.webp)
AirCitizen - Overvågning af luftkvalitet: Hej alle sammen! I dag vil vi lære dig at reproducere vores projekt: AirCitizen af AirCitizenPolytech Team!-Kommer fra 'OpenAir / What your air?' Projekter, AirCitizen -projektet har til formål at sætte borgerne i stand til aktivt at evaluere kvaliteten
Atmosfærisk forurening Visualisering: 4 trin
![Atmosfærisk forurening Visualisering: 4 trin Atmosfærisk forurening Visualisering: 4 trin](https://i.howwhatproduce.com/images/006/image-15090-16-j.webp)
Atmosfærisk forurening Visualisering: Problemet med luftforurening tiltrækker mere og mere opmærksomhed. Denne gang forsøgte vi at overvåge PM2.5 med Wio LTE og ny Laser PM2.5 -sensor