![Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma: 4 soļi Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma: 4 soļi](https://i.howwhatproduce.com/images/010/image-29646-j.webp)
Satura rādītājs:
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59
![Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma](https://i.howwhatproduce.com/images/010/image-29646-1-j.webp)
![Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma Daļiņu piesārņojuma gaisa kvalitātes uzraudzības sistēma](https://i.howwhatproduce.com/images/010/image-29646-2-j.webp)
IEVADS:
1 Šajā projektā es parādīšu, kā izveidot daļiņu detektoru ar datu displeju, datu dublēšanu SD kartē un IOT. Vizuāli neopikseļu gredzena displejs norāda uz gaisa kvalitāti.
2 Gaisa kvalitāte mūsdienās kļūst arvien svarīgāka. Ir sistēmas putekļu daudzuma mērīšanai, taču tās ir ļoti dārgas. Tirgū ir lēti, augstas kvalitātes daļiņu detektori, kā liecina daži pētījumi.
piemēram:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 Tāpēc es nolēmu izveidot ierīci, kas spēj izmērīt daļiņu skaitu pēc izmēru klasēm (no 0,5 µm līdz 10 µm), vizuāli ar vienkāršu rezultāta parādīšanu (neo pikseļu gredzens), detalizētāku displeju TFT ekrānā un dublējums ar laika zīmogu SD kartē.
4 Turklāt esmu pievienojis Bluetooth sakaru moduli, lai varētu sazināties ar android lietojumprogrammu un tādējādi publicēt rezultātus IOT serverī.
5 Kopējās izmaksas nepārsniedz 60 €
Piegādes
-Arduino uno R3
-Arduino proto vairogs
-TFT ekrāns ST7735
-Neopikselu gredzens 24 led
-Plantower PMS5003
-HC-06 Bluetooth modulis
1. darbība: komponentu savienošana
![Komponentu savienošana Komponentu savienošana](https://i.howwhatproduce.com/images/010/image-29646-3-j.webp)
dažādas sastāvdaļas ir savienotas saskaņā ar iepriekš redzamo diagrammu
2. darbība: bibliotēka un Arduino programma
1 bibliotēka
TFT ekrānam
github.com/adafruit/Adafruit-GFX-Library
neo pikseļu gredzenam
github.com/adafruit/Adafruit_NeoPixel
par SD karti
github.com/arduino-libraries/SD
2 arduino skice
#include #include // Bibliothèque pour l'I2C #include "RTClib.h" // Bibliothèque pour le module RTC RTC_DS1307 RTC; #iekļaut
// Kura Arduino tapa ir savienota ar NeoPixels?
#define PIN 6 // Vietnē Trinket vai Gemma ieteicams to mainīt uz 1
// Cik NeoPikseļu ir pievienoti Arduino?
#define NUMPIXELS 24 // Populārs NeoPixel gredzena izmērs Adafruit_NeoPixel pikseļi (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = pikseļi. Krāsa (0, 250, 0); uint32_t oranžs = pikseļi. Krāsa (250, 250, 0); uint32_t rouge = pikseļi. Krāsa (255, 0, 0);
SoftwareSerial pmsSerial (2, 3);
#define cs 10 #define dc 9 #define rst 8 // varat to savienot arī ar Arduino atiestatīšanu
#include // Galvenā grafikas bibliotēka
#include // Aparatūrai specifiska bibliotēka #include #include const int cs_sd = 4; int temps; // temps d'acquisition double tempsInit; // Initialization du timer au démarrage du loop ()
#if definēts (_ SAM3X8E_)
#undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif
// 1. iespēja: izmantojiet jebkuras tapas, bet nedaudz lēnāk
// Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, mosi, sclk, rst);
// 2. iespēja: jāizmanto aparatūras SPI tapas
// (UNO gadījumā tas ir sclk = 13 un sid = 11) un tapai 10 jābūt // izvadei. Tas ir daudz ātrāk - nepieciešams arī, ja vēlaties // izmantot microSD karti (skatiet attēla zīmēšanas piemēru) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); pludiņš nombre_leds = 0; void setup () {Serial.begin (9600); // Initialise la liaison I2C Wire.begin (); // Inicializēt le moduli RTC RTC.begin (); Serial.print ("init SD"); kavēšanās (1000); if (! SD.begin (cs_sd)) // Nosacījums asinsspiediens si la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); atgriešanās; } Serial.print ("Kartes SD OK");
Failu dati = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "donnees.txt"
data.println (""); data.println ("Demarāžas iegāde"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // inicializēt ST7735S mikroshēmu, melna cilne Serial.println ("init"); // mūsu atkļūdošanas izvade tft.fillScreen (ST7735_BLACK); // sensora pārraides ātrums ir 9600 pmsSerial.begin (9600);
pikseļi.sākas (); // UZSĀKT NeoPixel sloksnes objektu (OBLIGĀTS)
pikseļi.setBrightness (2);
}
structure pms5003data {
uint16_t framelen; uint16_t pm10_standard, pm25_standard, pm100_standard; uint16_t pm10_env, pm25_env, pm100_env; uint16_t daļiņas_03um, daļiņas_05um, daļiņas_10um, daļiņas_25um, daļiņas_50um, daļiņas_100um; uint16_t neizmantots; uint16_t kontrolsumma; };
struk pms5003datu dati; void loop () {pixels.clear (); // Iestatiet visas pikseļu krāsas uz 'izslēgts' DateTime now = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (tagad);
temps = ((milis () - tempsInit))/1000; // Démarrage du chrono
if (readPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("nbre daļas/ 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 daļas/ 0,1 l");
// Serial.print (temps);
// Serial.print (""); Serial.print ("#"); Sērijas nospiedums ("03µm"); Sērijas nospiedums (data.particles_03um); Serial.print (""); Sērijas nospiedums ("05µm"); Sērijas nospiedums (data.particles_05um); Serial.print (""); Sērijas nospiedums ("1µm"); Sērijas nospiedums (data.particles_10um); Serial.print (""); Sērijas nospiedums ("25µm"); Sērijas nospiedums (data.particles_25um); Serial.print (""); Sērijas nospiedums ("50µm"); Sērijas nospiedums (data.particles_50um); Serial.print (""); Sērijas nospiedums ("100µm"); Sērijas nospiedums (data.particles_100um); Serial.println (""); nombre_leds = int (((float (data.particles_03um)/65535)*24)); // nombre_leds = (8); Serial.println (nombre_leds);
ja ((nombre_leds = 1)) {
pixels.fill (vert, 0, nombre_leds); } cits if ((nombre_leds = 8)) {pixels.fill (vert, 0, 8); pixels.fill (oranža, 8, ((nombre_leds) -8)); } cits if (nombre_leds> 16) {
pixels.fill (vert, 0, 8); pixels.fill (oranžs, 8, 8); pixels.fill (sarkans, 16, ((nombre_leds) -16)); } cits if (nombre_leds <= 1) {pixels.fill (vert, 0, 1); } pixels.show (); // Nosūtiet aparatūrai atjauninātās pikseļu krāsas.
// 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
Failu dati = SD.open ("donnees.txt", FILE_WRITE); data.println (Temps+""+PM03+""+PM05+""+PM10+""+PM25+""+PM50+""+PM100+""+PMS10+""+PMS25+""+PMS100+""); data.close (); }
}
Būla lasījumsPMSdata (straume *s) {
ja (! s-> pieejams ()) {return false; } // Lasiet baitu vienlaikus, līdz nonākam pie īpašā '0x42' sākuma baita, ja (s-> peek ()! = 0x42) {s-> read (); atgriezt nepatiesu; }
// Tagad izlasiet visus 32 baitus
ja (s-> pieejams () readBytes (buferis, 32);
// sagatavojiet kontrolsummu
par (uint8_t i = 0; i <30; i ++) {summa+= buferšķīdums ; }
/* atkļūdošana
par (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Sērijas nospiedums (buferis , HEX); Serial.print (","); } Sērijas.println (); */ // Dati tiek ievadīti endian'd, tas to atrisina, tāpēc tas darbojas visās platformās uint16_t buffer_u16 [15]; par (uint8_t i = 0; i <15; i ++) {buffer_u16 = buferis [2 + i*2 + 1]; buferis_u16 + = (buferis [2 + i*2] << 8); }
// salieciet to jaukā struktūrā:)
memcpy ((void *) & data, (void *) buffer_u16, 30);
ja (summa! = data.checksum) {
Serial.println ("Kontrolsummas kļūme"); atgriezt nepatiesu; } // veiksmi! atgriezties patiesi; }
// 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"; 1. gadījums: atgriezt "LUN"; 2. gadījums: atgriezt "MAR"; 3. gadījums: atdot "MER"; 4. gadījums: atgriezt "JEU"; 5. gadījums: atgriezt "VEN"; 6. gadījums: atgriezt "SAM"; noklusējums: atgriezt ""; }}
// affiche la date et l'heure sur l'écran
void affiche_date_heure (DateTime datetime) {// Datuma virkne 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 ());
Sērijas nospiedums (ceļojums); Serial.print (""); Sērijas nospiedums (heure); //Serial.print (""); Failu dati = 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 ("datums"); 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);
kavēšanās (500);
}
// permet d'afficher les nombres sur deux chiffres
String Vers2Chiffres (baitu nombre) {String resultat = ""; ja (nombre <10) resultat = "0"; atgriešanās rezultāts += virkne (nombre, DEC); }
3. darbība: programma MIT App Inventor 2
![Programma MIT App Inventor 2 Programma MIT App Inventor 2](https://i.howwhatproduce.com/images/010/image-29646-4-j.webp)
tas ir MIT lietotnes izgudrotāja koda bloks
4. solis: REZULTĀTS
![](https://i.ytimg.com/vi/bh6fuqkrgAA/hqdefault.jpg)
šeit ir video par rezultātu
Ieteicams:
Gaisa uzraudzības sistēma, izmantojot NodeMCU un IOT Thingspeak: 4 soļi
![Gaisa uzraudzības sistēma, izmantojot NodeMCU un IOT Thingspeak: 4 soļi Gaisa uzraudzības sistēma, izmantojot NodeMCU un IOT Thingspeak: 4 soļi](https://i.howwhatproduce.com/images/010/image-28222-j.webp)
Gaisa uzraudzības sistēma, izmantojot NodeMCU un IOT Thingspeak: ThingSpeak ir atvērtā pirmkoda IoT lietojumprogramma un API, lai uzglabātu un izgūtu datus no aparatūras ierīcēm un sensoriem. Tā saziņai izmanto HTTP protokolu internetā vai LAN. Ir iekļauta MATLAB analītika, lai analizētu un vizualizētu informāciju
Gaisa piesārņojuma noteikšana + gaisa filtrēšana: 4 soļi
![Gaisa piesārņojuma noteikšana + gaisa filtrēšana: 4 soļi Gaisa piesārņojuma noteikšana + gaisa filtrēšana: 4 soļi](https://i.howwhatproduce.com/images/011/image-31170-j.webp)
Gaisa piesārņojuma noteikšana + gaisa filtrēšana: Vācijas Šveices Starptautiskās skolas studenti (Aristobulus Lam, Victor Sim, Nathan Rosenzweig un Declan Loges) sadarbojās ar MakerBay darbiniekiem, lai izveidotu integrētu gaisa piesārņojuma mērīšanas un gaisa filtrēšanas efektivitātes sistēmu. Šī
Gaisa kvalitātes uzraudzība, izmantojot daļiņu fotonu: 11 soļi (ar attēliem)
![Gaisa kvalitātes uzraudzība, izmantojot daļiņu fotonu: 11 soļi (ar attēliem) Gaisa kvalitātes uzraudzība, izmantojot daļiņu fotonu: 11 soļi (ar attēliem)](https://i.howwhatproduce.com/images/002/image-5921-11-j.webp)
Gaisa kvalitātes uzraudzība, izmantojot daļiņu fotonu: Šajā projektā PPD42NJ daļiņu sensors tiek izmantots, lai izmērītu gaisa kvalitāti (PM 2,5), kas atrodas gaisā ar daļiņu fotonu. Tas ne tikai parāda datus daļiņu konsolē un dweet.io, bet arī norāda gaisa kvalitāti, izmantojot RGB LED, mainot to
Daļiņu gaisa kvalitātes monitors: 7 soļi
![Daļiņu gaisa kvalitātes monitors: 7 soļi Daļiņu gaisa kvalitātes monitors: 7 soļi](https://i.howwhatproduce.com/images/005/image-13068-7-j.webp)
Daļiņu darbināms gaisa kvalitātes monitors: Gaisa kvalitāte. Jūs droši vien domājat par to vairāk tagad, kad mūsu tīrais gaiss ir pārvērties par pastāvīgu dūmu debesīs. Džaks. Viena lieta, ko jūs kontrolējat, ir gaisa kvalitāte jūsu mājās. Šajā apmācībā es jums parādīšu, kā veidot gaisu
Izveidojiet LoRa daļiņu piesārņojuma detektoru: 8 soļi
![Izveidojiet LoRa daļiņu piesārņojuma detektoru: 8 soļi Izveidojiet LoRa daļiņu piesārņojuma detektoru: 8 soļi](https://i.howwhatproduce.com/images/006/image-16404-2-j.webp)
Izveidojiet LoRa daļiņu piesārņojuma detektoru: Mēs izveidosim daļiņu detektoru, izmantojot PM2.5 gaisa kvalitātes sensoru, ESP32, UNO un LoRa moduli. Daļiņu piesārņojums, kas pazīstams arī kā daļiņu materiāls, ir dažādu izmēru cietvielu un šķidrumu maisījums, kas atrodams gaisā. Daži no šiem p