ዝርዝር ሁኔታ:

የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት ብክለት -4 ደረጃዎች
የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት ብክለት -4 ደረጃዎች

ቪዲዮ: የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት ብክለት -4 ደረጃዎች

ቪዲዮ: የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት ብክለት -4 ደረጃዎች
ቪዲዮ: IWCAN - WaterAid's Experience of mWater 2024, ህዳር
Anonim
የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት
የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት
የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት
የአየር ብክለትን ለክትትል የሚቆጣጠር ስርዓት

መግቢያ ፦

1 በዚህ ፕሮጀክት ውስጥ የውሂብ ማሳያ ፣ በ SD ካርድ እና በ IOT ላይ የውሂብ ምትኬን እንዴት ቅንጣት መመርመሪያን እንደሚገነቡ አሳያለሁ። በእይታ አንድ የኒዮፒክሰል ቀለበት ማሳያ የአየር ጥራቱን ያሳያል።

2 የአየር ጥራት ዛሬ እየጨመረ የሚሄድ አሳሳቢ ጉዳይ ነው። የአቧራውን መጠን ለመለካት ስርዓቶች አሉ ግን እነሱ በጣም ውድ ናቸው። በአንዳንድ ጥናቶች እንደሚታየው በዝቅተኛ ዋጋ ፣ ከፍተኛ ጥራት ያላቸው ጥቃቅን ቅንጣቶች በገበያ ላይ አሉ።

ለምሳሌ:

www.atmos-meas-tech.net/11/4823/2018/amt-1…

3 ስለዚህ የቅንጣቶችን ብዛት በመጠን ክፍሎች (ከ 0.5µm እስከ 10 µm) የመለኪያ ችሎታ ያለው መሣሪያ ፣ በውጤቱ ቀላል ማሳያ (ኒዮ ፒክስል ቀለበት) ፣ በ TFT ማያ ገጽ ላይ የበለጠ ዝርዝር ማሳያ እና በኤስዲ ካርድ ላይ ጊዜ-የታተመ ምትኬ።

4 በተጨማሪም ከ android መተግበሪያ ጋር መገናኘት እና ውጤቱን በ IOT አገልጋይ ላይ ማተም እንዲችል የብሉቱዝ የግንኙነት ሞዱሉን አክዬአለሁ።

5 የጠቅላላው አጠቃላይ ዋጋ ከ 60 exceed አይበልጥም

አቅርቦቶች

-Arduino uno R3

-አርዱዲኖ ፕሮቶ ጋሻ

-TFT ማያ ገጽ ST7735

-የኒዮፒክስል ቀለበት 24 መሪ

-የእፅዋት ኃይል PMS5003

-HC-06 የብሉቱዝ ሞዱል

ደረጃ 1: ክፍሎችን ማገናኘት

ክፍሎችን ማገናኘት
ክፍሎችን ማገናኘት

ከላይ ባለው ሥዕላዊ መግለጫ መሠረት የተለያዩ አካላት ተገናኝተዋል

ደረጃ 2 ቤተ -መጽሐፍት እና አርዱዲኖ ፕሮግራም

1 ቤተ -መጽሐፍት

ለ TFT ማያ ገጽ

github.com/adafruit/Afadfruit-GFX- Library

ለኒዮ ፒክስል ቀለበት

github.com/adafruit/Adafruit_NeoPixel

ለ sd ካርድ

github.com/arduino-libraries/SD

2 የአርዱዲኖ ንድፍ

#ያካትቱ #ያካትቱ // Bibliothèque pour l'I2C #"RTClib.h" ን ያካትቱ // Bibliothèque pour le module RTC RTC_DS1307 RTC; #ያካትቱ

// በ Arduino ላይ የትኛው ፒን ከ NeoPixels ጋር ተገናኝቷል?

#ጥራት ፒን 6 // በትሪኔት ወይም ገማ ላይ ፣ ይህንን ወደ 1 ለመቀየር ይጠቁሙ

// ከአርዱinoኖ ጋር ስንት ኒኦፒክስሎች ተያይዘዋል?

#ጥራት NUMPIXELS 24 // ታዋቂው የኒኦፒክስል ቀለበት መጠን Adafruit_NeoPixel pixels (NUMPIXELS ፣ PIN ፣ NEO_GRB + NEO_KHZ800); uint32_t vert = ፒክስሎች ቀለም (0, 250, 0); uint32_t ብርቱካናማ = ፒክስሎች ቀለም (250 ፣ 250 ፣ 0); uint32_t rouge = ፒክስሎች ቀለም (255 ፣ 0 ፣ 0);

SoftwareSerial pmsSerial (2, 3);

#ጥራት cs 10 #define dc 9 #መግለፅ የመጀመሪያ 8 // እንዲሁም ይህንን ከአርዲኖ ዳግም ማስጀመር ጋር ማገናኘት ይችላሉ

#ያካትቱ // ዋና ግራፊክስ ቤተ -መጽሐፍት

#ያካትቱ // በሃርድዌር-ተኮር ቤተ-መጽሐፍት #ጨምሮ #inc inc const cs_sd = 4; int temps; // temps d'acquisition double tempsInit; // የመጀመሪያ ደረጃ አሰጣጥ ዱ ሰዓት ቆጣሪ አው ዲማሬጅ ዱፕ loop ()

#ከተገለጸ (_ SAM3X8E_)

#undef _FlashStringHelper:: F (string_literal) #define F (string_literal) string_literal #endif

// አማራጭ 1 - ማንኛውንም ፒን ይጠቀሙ ግን ትንሽ ቀርፋፋ

// Adafruit_ST7735 tft = Adafruit_ST7735 (cs ፣ dc ፣ mosi ፣ sclk ፣ የመጀመሪያ);

// አማራጭ 2 - የሃርድዌር SPI ፒኖችን መጠቀም አለበት

// (ለ UNO thats sclk = 13 እና sid = 11) እና ፒን 10 // ውፅዓት መሆን አለበት። ይህ በጣም ፈጣን ነው - እንዲሁም / የማይክሮ ኤስዲ ካርድን ለመጠቀም ከፈለጉ (የምስሉን ስዕል ምሳሌ ይመልከቱ) Adafruit_ST7735 tft = Adafruit_ST7735 (cs ፣ dc ፣ first); ተንሳፋፊ nombre_leds = 0; ባዶነት ማዋቀር () {Serial.begin (9600); // የመጀመሪያ ስም ላ አገናኝ I2C Wire.begin (); // ሞጁል RTC RTC.begin (); Serial.print ("init SD"); መዘግየት (1000); ከሆነ (! መመለስ; } Serial.print ("Carte SD እሺ");

የፋይል ውሂብ = SD.open ("donnees.txt", FILE_WRITE); // ኦውቭሬ ፊኪየር "donnees.txt"

data.println (""); data.println ("የዴማሬጅ ማግኛ"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // የ ST7735S ቺፕ ፣ ጥቁር ትር Serial.println (“init”) ያስጀምሩ። // የእኛን የማረም ውጤት tft.fillScreen (ST7735_BLACK); // የአነፍናፊ ባውድ መጠን 9600 pmsSerial.begin (9600) ነው።

pixels.begin (); // መጀመሪያ ኒኦፒክስል ስትሪፕ ነገር (ተፈላጊ)

ፒክስሎች። ቅንብር ብሩህነት (2);

}

መዋቅር pms5003data {

uint16_t framelen; uint16_t pm10_standard ፣ pm25_standard ፣ pm100_standard; uint16_t pm10_env ፣ pm25_env ፣ pm100_env; uint16_t particles_03um ፣ particles_05um ፣ particles_10um ፣ particles_25um ፣ particles_50um ፣ particles_100um ፤ uint16_t ጥቅም ላይ አልዋለም; uint16_t checksum; };

የተዋቀረ pms5003data ውሂብ; ባዶነት loop () {pixels.clear (); // ሁሉንም የፒክሰል ቀለሞች ወደ “ጠፍቷል” DateTime now = RTC.now (); // Récupère l'heure et le date courante // affiche_date_heure (አሁን);

temps = ((ሚሊስ () - tempsInit))/1000; // Démarrage du chrono

ከሆነ (ያንብቡ PMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("nbre ክፍሎች/ 0.1 ሊ");

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 (""); microg/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.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.setCursor (10, 5);

tft.setTextColor (ST7735_WHITE ፣ ST7735_BLACK); tft.setTextSize (1); tft.println ("nbre ክፍሎች/ 0.1 ሊ");

// Serial.print (temps);

// Serial.print (""); Serial.print ("#"); Serial.print ("03µm"); Serial.print (data.particles_03um); Serial.print (""); Serial.print ("05µm"); Serial.print (data.particles_05um); Serial.print (""); Serial.print ("1µm"); Serial.print (data.particles_10um); Serial.print (""); Serial.print ("25µm"); Serial.print (data.particles_25um); Serial.print (""); Serial.print ("50µm"); Serial.print (data.particles_50um); Serial.print (""); Serial.print ("100µm"); Serial.print (data.particles_100um); Serial.println (""); nombre_leds = int (((ተንሳፋፊ (data.particles_03um)/65535)*24)); // nombre_leds = (8); Serial.println (nombre_leds);

ከሆነ ((nombre_leds = 1)) {

pixels.fill (vert, 0, nombre_leds); } ሌላ ከሆነ ((nombre_leds = 8)) {pixels.fill (vert, 0, 8); pixels.fill (ብርቱካንማ ፣ 8 ፣ ((nombre_leds) -8))); } ሌላ ከሆነ (nombre_leds> 16) {

pixels.fill (vert, 0, 8); pixels.fill (ብርቱካንማ ፣ 8 ፣ 8); pixels.fill (ሩዥ ፣ 16 ፣ ((nombre_leds) -16))); } ሌላ ከሆነ (nombre_leds <= 1) {pixels.fill (vert, 0, 1); } pixels.show (); // የዘመኑ የፒክሰል ቀለሞችን ወደ ሃርድዌር ይላኩ።

// ትርጓሜ données String PM03 = String (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); String Temps = String (temps);

// Ecriture des données dans le fichier texte

የፋይል ውሂብ = SD.open ("donnees.txt", FILE_WRITE); data.println (Temps+""+PM03+""+PM05+""+PM10+""+PM25+""+PM50+""+PM100+""+PMS10+""+PMS25+""+PMS100+""); data.close (); }

}

ቡሊያን ማንበብ PMSdata (ዥረት *ዎች) {

ከሆነ (! s-> የሚገኝ ()) {ሐሰት መመለስ ፤ } // ልዩ (0- 42) መጀመሪያ-ባይ (s-> peek ()! = 0x42) {s-> ን አንብብ () ን እስክንደርስ ድረስ ባይት አንብብ። ሐሰትን መመለስ; }

// አሁን ሁሉንም 32 ባይቶች ያንብቡ

ከሆነ (s-> የሚገኝ () readBytes (ቋት ፣ 32);

// Checksum ን ያዘጋጁ

ለ (uint8_t i = 0; i <30; i ++) {sum+= ቋት ; }

/* ማረም

ለ (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (ቋት ፣ HEX) ፤ Serial.print (","); } Serial.println (); */ // ውሂቡ endian'd ውስጥ ይመጣል ፣ ይህ ይፈታል ስለዚህ በሁሉም የመሣሪያ ስርዓቶች ላይ ይሰራል uint16_t buffer_u16 [15]; ለ (uint8_t i = 0; i <15; i ++) {buffer_u16 = ቋት [2 + i*2 + 1]; buffer_u16 + = (ቋት [2 + i*2] << 8); }

// በጥሩ አወቃቀር ውስጥ ያስገቡ:)

memcpy ((ባዶነት *) & ውሂብ ፣ (ባዶ *) buffer_u16, 30);

ከሆነ (ድምር! = data.checksum) {

Serial.println ("Checksum failure"); ሐሰትን መመለስ; } // ስኬት! እውነት ተመለስ; }

// Converti le numéro de jour en jour /! / La semaine commence un dimanche

ሕብረቁምፊ donne_jour_semaine (uint8_t j) {switch (j) {case 0: "DIM" ን ይመልሱ ፤ ጉዳይ 1: "LUN" ን መመለስ; ጉዳይ 2 - ‹MAR› ን መመለስ ፤ ጉዳይ 3: "MER" ን መመለስ; ጉዳይ 4: "JEU" ን መመለስ; ጉዳይ 5: "VEN" ን መመለስ; ጉዳይ 6 - “SAM” ይመለሱ ፤ ነባሪ: ተመለስ ""; }}

// affiche la date et l'heure sur l'écran

ባዶ affiche_date_heure (DateTime datetime) {// ቀን ሕብረቁምፊ jour = donne_jour_semaine (datetime.dayOfTheWeek ()) + "" " + Vers2Chiffres (datetime.day ()) +"/" + Vers2Chiffres (datetime.month ()) +"/" + ሕብረቁምፊ (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 (""); የፋይል ውሂብ = 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 ("ቀን"); tft.setTextColor (ST7735_YELLOW); tft.print (jour); tft.setTextColor (ST7735_GREEN); tft.setCursor (2, 130); setTextColor (ST7735_YELLOW); tft.print (heure);

መዘግየት (500);

}

// permet d'afficher les nombres sur deux chiffres

ሕብረቁምፊ Vers2Chiffres (byte nombre) {String resultat = ""; ከሆነ (nombre <10) resultat = "0"; የመመለሻ ውጤት += ሕብረቁምፊ (nombre ፣ DEC); }

ደረጃ 3: የ MIT መተግበሪያ ፈላጊ 2 ፕሮግራም

የ MIT መተግበሪያ ፈላጊ 2 ፕሮግራም
የ MIT መተግበሪያ ፈላጊ 2 ፕሮግራም

ይህ የ MIT መተግበሪያ የፈጠራ ኮድ ማገጃ ነው

ደረጃ 4 ፦ ውጤቱ

የውጤቱ ቪዲዮ እዚህ አለ

የሚመከር: