विषयसूची:
- आपूर्ति
- चरण 1: घटकों को जोड़ना
- चरण 2: लाइब्रेरी और Arduino प्रोग्राम
- चरण 3: एमआईटी ऐप आविष्कारक 2 कार्यक्रम
- चरण 4: परिणाम
वीडियो: कण प्रदूषण के लिए वायु गुणवत्ता की निगरानी के लिए प्रणाली: 4 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:20
परिचय:
1 इस परियोजना में मैं दिखाता हूं कि डेटा डिस्प्ले, एसडी कार्ड और आईओटी पर डेटा बैकअप के साथ एक कण डिटेक्टर का निर्माण कैसे किया जाता है। नेत्रहीन एक नियोपिक्सल रिंग डिस्प्ले हवा की गुणवत्ता को इंगित करता है।
2 वायु गुणवत्ता आज एक तेजी से महत्वपूर्ण चिंता का विषय है। धूल की दर को मापने के लिए सिस्टम हैं लेकिन वे बहुत महंगे हैं। बाजार पर कम लागत वाले, उच्च गुणवत्ता वाले कण डिटेक्टर हैं, जैसा कि कुछ अध्ययनों से पता चलता है।
उदाहरण के लिए:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 इसलिए मैंने एक ऐसा उपकरण बनाने का फैसला किया जो आकार वर्गों (0.5μm से 10 µm) द्वारा कणों की संख्या को मापने में सक्षम हो, परिणाम के एक साधारण प्रदर्शन (नव पिक्सेल रिंग) के साथ, एक TFT स्क्रीन पर अधिक विस्तृत डिस्प्ले और एक एसडी कार्ड पर टाइम-स्टैम्प्ड बैकअप।
4 इसके अलावा मैंने एक एंड्रॉइड एप्लिकेशन के साथ संचार करने में सक्षम होने के लिए एक ब्लूटूथ संचार मॉड्यूल जोड़ा है और इस प्रकार एक आईओटी सर्वर पर परिणाम प्रकाशित करता है।
5 संपूर्ण की कुल लागत 60 €. से अधिक नहीं है
आपूर्ति
-Arduino uno R3
-अरुडिनो प्रोटो शील्ड
-टीएफटी स्क्रीन ST7735
-नियोपिक्सल रिंग 24 एलईडी
-प्लांटर PMS5003
-HC-06 ब्लूटूथ मॉड्यूल
चरण 1: घटकों को जोड़ना
विभिन्न घटक ऊपर दिए गए चित्र के अनुसार जुड़े हुए हैं
चरण 2: लाइब्रेरी और Arduino प्रोग्राम
१ पुस्तकालय
टीएफटी स्क्रीन के लिए
github.com/adafruit/Adafruit-GFX-Library
नियो पिक्सेल रिंग के लिए
github.com/adafruit/Adafruit_NeoPixel
एसडी कार्ड के लिए
github.com/arduino-libraries/SD
2 आर्डिनो स्केच
#include #include // Bibliothèque die l'I2C #include "RTClib.h" // Bibliothèque put le मॉड्यूल RTC RTC_DS1307 RTC; #शामिल
// Arduino पर कौन सा पिन NeoPixels से जुड़ा है?
#define PIN 6 // ट्रिंकेट या जेम्मा पर, इसे 1. में बदलने का सुझाव दें
// Arduino से कितने NeoPixels जुड़े हुए हैं?
#define NUMPIXELS 24 // लोकप्रिय NeoPixel रिंग साइज Adafruit_NeoPixel पिक्सल (NUMPIXELS, पिन, NEO_GRB + NEO_KHZ800); uint32_t लंबवत = पिक्सेल। रंग (0, 250, 0); uint32_t नारंगी = पिक्सेल। रंग (२५०, २५०, ०); uint32_t रूज = पिक्सेल। रंग (२५५, ०, ०);
SoftwareSerial pmsSerial(2, 3);
#define cs 10 #define dc 9 #define rst 8 // आप इसे Arduino रीसेट से भी जोड़ सकते हैं
#शामिल करें // कोर ग्राफिक्स लाइब्रेरी
#include // हार्डवेयर-विशिष्ट लाइब्रेरी #include #include const int cs_sd=4; इंट टेम्प्स; // टेम्प्स डी'एक्विजिशन डबल टेम्प्सइनिट; // इनिशियलाइज़ेशन डू टाइमर या डेमरेज डू लूप ()
#if परिभाषित (_SAM3X8E_)
#undef _FlashStringHelper::F(string_literal) #define F(string_literal) string_literal #endif
// विकल्प 1: किसी भी पिन का उपयोग करें लेकिन थोड़ा धीमा
//Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);
// विकल्प 2: हार्डवेयर SPI पिन का उपयोग करना चाहिए
// (UNO के लिए sclk = 13 और sid = 11) और पिन 10 होना चाहिए // एक आउटपुट। यह बहुत तेज़ है - यदि आप चाहते हैं कि // माइक्रोएसडी कार्ड का उपयोग करें (चित्र चित्र उदाहरण देखें) Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst); फ्लोट nombre_leds=0; शून्य सेटअप () {Serial.begin (९६००); // इनिशियलाइज़ ला लाइजन I2C वायर.बेगिन (); // प्रारंभ करें ले मॉड्यूल RTC RTC.begin (); सीरियल.प्रिंट ("इनिट एसडी"); देरी (1000); if(!SD.begin(cs_sd)) // कंडीशन वेरिफिएंट सी ला कार्टे एसडी इस्ट प्रेजेंटे डांस ल'अपैरिल { सीरियल.प्रिंट ("डिफॉट एसडी"); वापसी; } सीरियल.प्रिंट ("कार्टे एसडी ओके");
फ़ाइल डेटा = SD.open ("donnees.txt", FILE_WRITE); // ऑवर ले फ़िशियर "donnees.txt"
डेटा.प्रिंट्लन (""); data.println ("डिमैरेज अधिग्रहण"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // एक ST7735S चिप को इनिशियलाइज़ करें, ब्लैक टैब Serial.println ("init"); // हमारा डिबगिंग आउटपुट tft.fillScreen (ST7735_BLACK); // सेंसर बॉड दर 9600 pmsSerial.begin (9600) है;
पिक्सल। शुरू (); // NeoPixel स्ट्रिप ऑब्जेक्ट को इनिशियलाइज़ करें (आवश्यक)
पिक्सल.सेटब्राइटनेस(2);
}
संरचना पीएमएस5003डेटा {
uint16_t फ्रेमलेन; uint16_t pm10_standard, pm25_standard, pm100_standard; uint16_t pm10_env, pm25_env, pm100_env; uint16_t कण_03um, कण_05um, कण_10um, कण_25um, कण_50um, कण_100um; uint16_t अप्रयुक्त; uint16_t चेकसम; };
संरचना pms5003डेटा डेटा; शून्य लूप () {पिक्सेल। स्पष्ट (); // सभी पिक्सेल रंगों को 'ऑफ' करने के लिए सेट करें डेटटाइम अभी = RTC.now (); // रिक्यूपेयर ल'हेउर एट ले डेट कोर्टेंट //affiche_date_heure(अब);
temps = ((मिली () - tempsInit))/1000; // डेमरेज डू क्रोनो
अगर (readPMSdata(&pmsSerial)) {// tft.fillScreen(ST7735_BLACK); tft.setCursor(१०, ५); tft.setTextColor (ST7735_WHITE); tft.println ("nbre भागों/0.1 l");
tft.setCursor(१०, १७); tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize(1); tft.setCursor(१०, १७); 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(१०, ४१);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize(1); tft.print("1.0 um");tft.print(data.particles_10um);tft.print("");
tft.setCursor(१०, ५३);
tft.setTextColor (ST7735_GREEN, ST7735_BLACK); tft.setTextSize(1); tft.print("2.5 um");tft.print(data.particles_25um);tft.print("");
tft.setCursor(१०, ६५);
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(" माइक्रोग/एम3 ");
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(१०, ५);
tft.setTextColor (ST7735_WHITE, ST7735_BLACK); tft.setTextSize(1); tft.println ("nbre भागों/0.1 l");
// सीरियल.प्रिंट (अस्थायी);
// सीरियल.प्रिंट (""); सीरियल.प्रिंट ("#"); सीरियल.प्रिंट ("03μm"); सीरियल.प्रिंट (डेटा.कण_03um); सीरियल.प्रिंट (" "); सीरियल.प्रिंट ("05μm"); सीरियल.प्रिंट (डेटा.पार्टिकल्स_05um); सीरियल.प्रिंट (" "); सीरियल.प्रिंट ("1μm"); सीरियल.प्रिंट (डेटा.कण_10um); सीरियल.प्रिंट (" "); सीरियल.प्रिंट ("25μm"); सीरियल.प्रिंट (डेटा.पार्टिकल्स_25um); सीरियल.प्रिंट (" "); सीरियल.प्रिंट ("50μm"); सीरियल.प्रिंट (डेटा.पार्टिकल्स_50um); सीरियल.प्रिंट (" "); सीरियल.प्रिंट ("100μm"); सीरियल.प्रिंट (डेटा.कण_100um); Serial.println (" "); nombre_leds =int (((फ्लोट (data.particles_03um)/65535)*24)); // nombre_leds =(8); Serial.println (nombre_leds);
अगर ((nombre_leds=1)){
पिक्सल।फिल (लंबवत, 0, nombre_leds); } और अगर ((nombre_leds=8)) {पिक्सेल.फिल (वर्ट, 0, 8); पिक्सल।फिल (नारंगी, 8, ((nombre_leds) -8)); } और अगर (nombre_leds>16) {
पिक्सल।फिल (वर्ट, 0, 8); पिक्सल।फिल (नारंगी, 8, 8); पिक्सल.फिल (रूज, 16, ((nombre_leds)-16)); } और अगर (nombre_leds<=1) {px.fill(vert, 0, 1); } पिक्सल.शो (); // अपडेट किए गए पिक्सेल रंग हार्डवेयर को भेजें।
// परिभाषा स्ट्रिंग PM03 = स्ट्रिंग (data.particles_03um); स्ट्रिंग PM05 = स्ट्रिंग (data.particles_05um); स्ट्रिंग PM10 = स्ट्रिंग (data.particles_10um); स्ट्रिंग PM25 = स्ट्रिंग (data.particles_25um); स्ट्रिंग PM50 = स्ट्रिंग (data.particles_50um); स्ट्रिंग PM100 = स्ट्रिंग (data.particles_100um); स्ट्रिंग PMS10 = स्ट्रिंग (data.pm10_standard); स्ट्रिंग PMS25 = स्ट्रिंग (data.pm25_standard); स्ट्रिंग PMS100 = स्ट्रिंग (data.pm100_standard); स्ट्रिंग टेम्प्स = स्ट्रिंग (टेम्प्स);
//एक्रिचर डेस डोनीस डान्स ले फिचियर टेक्स्टे
फ़ाइल डेटा = SD.open ("donnees.txt", FILE_WRITE); data.println(Temps + "" + PM03+ "" + PM05 +" "+PM10+" "+PM25+" "+PM50+" "+PM100+" "+PMS10+" "+PMS25+" "+PMS100+" "); डेटा। बंद करें (); }
}
बूलियन रीडपीएमएसडेटा (स्ट्रीम * एस) {
अगर (! एस-> उपलब्ध ()) {झूठी वापसी; } // एक बार में एक बाइट पढ़ें जब तक कि हम विशेष '0x42' स्टार्ट-बाइट तक नहीं पहुंच जाते अगर (s->peek() != 0x42) { s->read(); विवरण झूठा है; }
// अब सभी 32 बाइट्स पढ़ें
अगर (एस-> उपलब्ध () रीडबाइट्स (बफर, 32);
// चेकसम तैयार करें
के लिए (uint8_t i=0; i<30; i++) {योग += बफ़र; }
/* डिबगिंग
के लिए (uint8_t i=2; i<32; i++) { Serial.print("0x"); सीरियल.प्रिंट (बफर , हेक्स); सीरियल.प्रिंट ("", "); } सीरियल.प्रिंट्लन (); *//डेटा एंडियन'ड में आता है, यह इसे हल करता है इसलिए यह सभी प्लेटफॉर्म uint16_t buffer_u16[15] पर काम करता है; के लिए (uint8_t i=0; i<15; i++) {बफर_u16 = बफर[2 + i*2 + 1]; बफर_यू16 + = (बफर [२ + आई * २] << ८); }
// इसे एक अच्छी संरचना में डालें:)
memcpy((void *)&data, (void *)buffer_u16, 30);
अगर (योग! = डेटा। चेकसम) {
Serial.println ("चेकसम विफलता"); विवरण झूठा है; } // सफलता! सच लौटना; }
//Converti le numéro de jour en jour /!\ la semaine start un dimanche
स्ट्रिंग donne_jour_semaine (uint8_t j) {स्विच (j) {केस 0: रिटर्न "डीआईएम"; केस 1: वापसी "लून"; केस 2: वापसी "मार्च"; केस 3: वापसी "एमईआर"; केस 4: वापसी "जेईयू"; केस 5: वापसी "वीएन"; केस 6: "एसएएम" लौटाएं; डिफ़ॉल्ट: वापसी ""; } }
// affiche ला डेट और l'heure sur l'écran
शून्य affiche_date_heure(DateTime datetime){// दिनांक स्ट्रिंग पत्रिकाएं = donne_jour_semaine (datetime.dayOfTheWeek ()) + "" + Vers2Chiffres (datetime.day ()) + "/" + Vers2Chiffres (datetime.month ()) + "/" + स्ट्रिंग (डेटाटाइम। वर्ष (), डीईसी); // हेउर स्ट्रिंग हेउर = ""; Heure = Vers2Chiffres(datetime.hour ())+ ":" + Vers2Chiffres(datetime.minute ())+ ":" + Vers2Chiffres(datetime.second());
सीरियल.प्रिंट (पत्रिका); सीरियल.प्रिंट (""); सीरियल.प्रिंट (हेउर); // सीरियल.प्रिंट (""); फ़ाइल डेटा = SD.open ("donnees.txt", FILE_WRITE); डेटा। प्रिंट (पत्रिकाएँ + "" + यहाँ + ""); डेटा.क्लोज़ ();
tft.setCursor(2, 120);
tft.setTextColor (ST7735_GREEN); tft.setTextSize(1); tft.print("date");tft.setTextColor(ST7735_YELLOW);tft.print(jours);tft.setTextColor(ST7735_GREEN);tft.setCursor(2, 130);tft.print("heure");tft. setTextColor(ST7735_YELLOW);tft.print(Heure);
देरी (500);
}
// Permet d'afficher les nombres sur deux chiffres
String Vers2Chiffres(byte nombre) { String resultat = ""; अगर (नामांकित <10) परिणाम = "0"; वापसी परिणाम + = स्ट्रिंग (नामांकित, डीईसी); }
चरण 3: एमआईटी ऐप आविष्कारक 2 कार्यक्रम
यह एमआईटी ऐप आविष्कारक कोड ब्लॉक है
चरण 4: परिणाम
यहाँ परिणाम का वीडियो है
सिफारिश की:
टीएफटी एलसीडी डिस्प्ले के साथ सरल वायु गुणवत्ता निगरानी-- अमीबा अरुडिनो: 3 कदम
टीएफटी एलसीडी डिस्प्ले के साथ सरल वायु गुणवत्ता निगरानी-- अमीबा अरुडिनो: परिचय अब जबकि अधिकांश लोग संभावित COVID-19 वायरस वाहक के निकट संपर्क से बचने के लिए घर पर रहते हैं, हवा की गुणवत्ता लोगों की भलाई के लिए एक महत्वपूर्ण कारक बन जाती है, खासकर उष्णकटिबंधीय देशों में जहां दा के दौरान एयर-कॉन का उपयोग करना आवश्यक है
वायु प्रदूषण का पता लगाने + वायु निस्पंदन: 4 कदम
वायु प्रदूषण जांच + वायु निस्पंदन: जर्मन स्विस इंटरनेशनल स्कूल के छात्रों (अरिस्टोबुलस लैम, विक्टर सिम, नाथन रोसेनज़वेग और डेक्लन लॉग्स) ने वायु प्रदूषण माप और वायु निस्पंदन प्रभावशीलता की एक एकीकृत प्रणाली का उत्पादन करने के लिए मेकरबे के कर्मचारियों के साथ काम किया। इस
नोकिया एलसीडी के साथ DSM501A के साथ वायु गुणवत्ता की निगरानी: 7 कदम
नोकिया एलसीडी के साथ DSM501A के साथ वायु गुणवत्ता की निगरानी: नमस्कार दोस्तों! इस संक्षिप्त निर्देश में मैं आपको दिखाऊंगा कि आप अपने घर या कहीं भी हवा की गुणवत्ता की निगरानी कैसे कर सकते हैं। इस बजट मूल्य वायु गुणवत्ता निगरानी स्टेशन को इकट्ठा करना काफी आसान है।
कण फोटॉन का उपयोग करके वायु गुणवत्ता की निगरानी: 11 कदम (चित्रों के साथ)
कण फोटॉन का उपयोग कर वायु गुणवत्ता की निगरानी: इस परियोजना में PPD42NJ कण संवेदक का उपयोग कण फोटॉन के साथ हवा में मौजूद वायु गुणवत्ता (PM 2.5) को मापने के लिए किया जाता है। यह न केवल पार्टिकल कंसोल और dweet.io पर डेटा प्रदर्शित करता है, बल्कि आरजीबी एलईडी का उपयोग करके इसे बदलकर हवा की गुणवत्ता का भी संकेत देता है
वायु प्रदूषण निगरानी - IoT-डेटा अर्थात-एमएल: 3 चरण (चित्रों के साथ)
वायु प्रदूषण निगरानी | IoT-Data अर्थात-ML: तो यह मूल रूप से एक पूर्ण IoT अनुप्रयोग है जिसमें हार्डवेयर भाग के साथ-साथ सॉफ़्टवेयर भाग भी शामिल है। इस ट्यूटोरियल में आप देखेंगे कि IoT डिवाइस को कैसे सेट किया जाए और हवा में मौजूद विभिन्न प्रकार की प्रदूषण गैसों की निगरानी के लिए हम इसे कैसे सेट करें।