সুচিপত্র:

কণা দূষণের জন্য বায়ুর গুণমান পর্যবেক্ষণের জন্য সিস্টেম: 4 টি ধাপ
কণা দূষণের জন্য বায়ুর গুণমান পর্যবেক্ষণের জন্য সিস্টেম: 4 টি ধাপ

ভিডিও: কণা দূষণের জন্য বায়ুর গুণমান পর্যবেক্ষণের জন্য সিস্টেম: 4 টি ধাপ

ভিডিও: কণা দূষণের জন্য বায়ুর গুণমান পর্যবেক্ষণের জন্য সিস্টেম: 4 টি ধাপ
ভিডিও: বিশ্বের 10টি সবচেয়ে দূষিত শহরের মধ্যে 3টি ভারতের । most Polluted city in the world 2024, নভেম্বর
Anonim
বায়ু গুণমান দূষণের জন্য পর্যবেক্ষণের জন্য সিস্টেম
বায়ু গুণমান দূষণের জন্য পর্যবেক্ষণের জন্য সিস্টেম
বায়ু গুণমান দূষণের জন্য পর্যবেক্ষণের জন্য সিস্টেম
বায়ু গুণমান দূষণের জন্য পর্যবেক্ষণের জন্য সিস্টেম

ভূমিকা:

1 এই প্রজেক্টে আমি দেখাব কিভাবে ডেটা ডিসপ্লে, এসডি কার্ডে ডেটা ব্যাকআপ এবং আইওটি দিয়ে পার্টিকেল ডিটেক্টর তৈরি করতে হয়। দৃশ্যত একটি নিওপিক্সেল রিং ডিসপ্লে বাতাসের গুণমান নির্দেশ করে।

2 বায়ুর মান আজ একটি ক্রমবর্ধমান গুরুত্বপূর্ণ উদ্বেগ। ধুলো হার পরিমাপ করার জন্য সিস্টেম আছে কিন্তু সেগুলি খুব ব্যয়বহুল। বাজারে কম খরচে, উচ্চমানের কণা ডিটেক্টর রয়েছে, যেমন কিছু গবেষণায় দেখানো হয়েছে।

উদাহরণ স্বরূপ:

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

3 অতএব আমি সিদ্ধান্ত নিলাম একটি ডিভাইস তৈরি করার ক্ষমতা যা মাপের ক্লাস (0.5µm থেকে 10 µm) দ্বারা কণার সংখ্যা পরিমাপ করতে পারে, দৃশ্যত ফলাফলের একটি সহজ প্রদর্শন (নিও পিক্সেল রিং), একটি TFT স্ক্রিনে আরও বিস্তারিত প্রদর্শন এবং এসডি কার্ডে টাইম স্ট্যাম্পড ব্যাকআপ।

4 উপরন্তু আমি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশনের সাথে যোগাযোগ করতে সক্ষম হবার জন্য একটি ব্লুটুথ যোগাযোগ মডিউল যুক্ত করেছি এবং এইভাবে একটি IOT সার্ভারে ফলাফল প্রকাশ করি।

5 সামগ্রিক খরচ 60 exceed অতিক্রম করে না

সরবরাহ

-Arduino uno R3

-আরডুইনো প্রোটো ieldাল

-TFT স্ক্রিন ST7735

-নিওপিক্সেল রিং 24 নেতৃত্বাধীন

-প্লান্টওয়ার PMS5003

-HC-06 ব্লুটুথ মডিউল

ধাপ 1: উপাদানগুলি সংযুক্ত করা

উপাদানগুলি সংযুক্ত করা হচ্ছে
উপাদানগুলি সংযুক্ত করা হচ্ছে

উপরের চিত্র অনুযায়ী বিভিন্ন উপাদান সংযুক্ত

ধাপ 2: লাইব্রেরি এবং আরডুইনো প্রোগ্রাম

1 লাইব্রেরি

TFT স্ক্রিনের জন্য

github.com/adafruit/Adafruit-GFX- লাইব্রেরি

নিও পিক্সেল রিং এর জন্য

github.com/adafruit/Adafruit_NeoPixel

এসডি কার্ডের জন্য

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 সংজ্ঞায়িত করুন // Trinket বা Gemma তে, এটি 1 এ পরিবর্তন করার পরামর্শ দিন

// আরডুইনোতে কতগুলি নিওপিক্সেল সংযুক্ত?

#সংজ্ঞায়িত NUMPIXELS 24 // জনপ্রিয় NeoPixel রিং সাইজের Adafruit_NeoPixel পিক্সেল (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t vert = pixels। রঙ (0, 250, 0); uint32_t কমলা = পিক্সেল। রঙ (250, 250, 0); uint32_t রাউজ = পিক্সেল। রঙ (255, 0, 0);

সফটওয়্যার সিরিয়াল pms সিরিয়াল (2, 3);

#define cs 10 #define dc 9 #define rst 8 // আপনি এটিকে Arduino রিসেটের সাথেও সংযুক্ত করতে পারেন

#অন্তর্ভুক্ত // কোর গ্রাফিক্স লাইব্রেরি

#অন্তর্ভুক্ত // হার্ডওয়্যার-নির্দিষ্ট লাইব্রেরি #অন্তর্ভুক্ত #অন্তর্ভুক্ত #int int cs_sd = 4; int temps; // temps d'acquigation ডবল tempsInit; // প্রারম্ভিকতা du টাইমার au démarrage du লুপ ()

#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 thats sclk = 13 এবং sid = 11 এর জন্য) এবং পিন 10 অবশ্যই // একটি আউটপুট হতে হবে। এটি অনেক দ্রুত - যদি আপনি মাইক্রোএসডি কার্ড ব্যবহার করতে চান তবেও প্রয়োজন (চিত্র অঙ্কনের উদাহরণ দেখুন) Adafruit_ST7735 tft = Adafruit_ST7735 (cs, dc, rst); ভাসা nombre_leds = 0; অকার্যকর সেটআপ () {Serial.begin (9600); // সূচনা লা যোগাযোগ I2C Wire.begin (); // le module RTC RTC.begin () শুরু করুন; Serial.print ("init SD"); বিলম্ব (1000); যদি (! SD.begin (cs_sd)) // শর্ত vérifiant si la carte SD est présente dans l'appareil {Serial.print ("Defaut SD"); প্রত্যাবর্তন; } Serial.print ("Carte SD OK");

ফাইল ডেটা = SD.open ("donnees.txt", FILE_WRITE); // Ouvre le fichier "donnees.txt"

data.println (""); data.println ("Démarrage অধিগ্রহণ"); // Ecrit dans ce fichier data.close (); tft.initR (INITR_GREENTAB); // একটি ST7735S চিপ আরম্ভ করুন, কালো ট্যাব Serial.println ("init"); // আমাদের ডিবাগিং আউটপুট tft.fillScreen (ST7735_BLACK); // সেন্সর বড রেট হল 9600 pmsSerial.begin (9600);

পিক্সেল শুরু (); // নিওপিক্সেল স্ট্রিপ অবজেক্ট (প্রয়োজনীয়)

পিক্সেলসেট উজ্জ্বলতা (2);

}

গঠন pms5003data {

uint16_t ফ্রেমলেন; 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 চেকসাম; };

স্ট্রাক্ট pms5003data ডেটা; অকার্যকর লুপ () {pixel.clear (); // সমস্ত পিক্সেল রং এখন 'বন্ধ' তারিখের সময় = RTC.now () সেট করুন; // Rècupère l'heure et le date courante // affiche_date_heure (এখন);

temps = ((মিলিস () - tempsInit))/1000; // Démarrage du chrono

যদি (readPMSdata (& pmsSerial)) {// tft.fillScreen (ST7735_BLACK); tft.setCursor (10, 5); tft.setTextColor (ST7735_WHITE); tft.println ("nbre অংশ/ 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.setTextCor মাইক্রোগ/এম 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.gpr3

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। mpr3 ("মাইক্রোফ্রন্ট/m3)

tft.setCursor (10, 5);

tft.setTextColor (ST7735_WHITE, ST7735_BLACK); tft.setTextSize (1); tft.println ("nbre অংশ/ 0.1 l");

// সিরিয়াল.প্রিন্ট (টেম্পস);

// সিরিয়াল.প্রিন্ট (""); সিরিয়াল.প্রিন্ট ("#"); সিরিয়াল.প্রিন্ট ("03µm"); Serial.print (data.particles_03um); সিরিয়াল.প্রিন্ট (""); সিরিয়াল.প্রিন্ট ("05µm"); Serial.print (data.particles_05um); সিরিয়াল.প্রিন্ট (""); সিরিয়াল.প্রিন্ট ("1µm"); Serial.print (data.particles_10um); সিরিয়াল.প্রিন্ট (""); সিরিয়াল.প্রিন্ট ("25µm"); Serial.print (data.particles_25um); সিরিয়াল.প্রিন্ট (""); সিরিয়াল.প্রিন্ট ("50µm"); Serial.print (data.particles_50um); সিরিয়াল.প্রিন্ট (""); Serial.print ("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);

যদি ((nombre_leds = 1)) {

pixel.fill (vert, 0, nombre_leds); } অন্যথায় যদি ((nombre_leds = 8)) {pixels.fill (vert, 0, 8); pixel.fill (কমলা, 8, ((nombre_leds) -8)); } অন্যথায় যদি (nombre_leds> 16) {

pixel.fill (vert, 0, 8); পিক্সেল পূরণ (কমলা, 8, 8); pixel.fill (রাউজ, 16, ((nombre_leds) -16)); } অন্যথায় যদি (nombre_leds <= 1) {pixels.fill (vert, 0, 1); } pixels.show (); // হার্ডওয়্যারে আপডেট হওয়া পিক্সেল রং পাঠান।

// সংজ্ঞা স্ট্রিং 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); স্ট্রিং টেম্পস = স্ট্রিং (টেম্পস);

// 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 (); }

}

বুলিয়ান readPMSdata (স্ট্রিম *গুলি) {

if (! s-> available ()) {return false; } // একটি সময়ে একটি বাইট পড়ুন যতক্ষণ না আমরা বিশেষ '0x42' স্টার্ট-বাইটে পৌঁছাই যদি (s-> peek ()! = 0x42) {s-> read (); মিথ্যা প্রত্যাবর্তন; }

// এখন সব 32 বাইট পড়ুন

যদি (s-> উপলব্ধ () readBytes (বাফার, 32);

// চেকসাম প্রস্তুত করুন

জন্য (uint8_t i = 0; i <30; i ++) {sum+= buffer ; }

/* ডিবাগিং

জন্য (uint8_t i = 2; i <32; i ++) {Serial.print ("0x"); Serial.print (বাফার , HEX); সিরিয়াল.প্রিন্ট (","); } Serial.println (); */ // ডেটা এন্ডিয়ান'ডে আসে, এটি সমাধান করে তাই এটি 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 ((void *) & data, (void *) buffer_u16, 30);

যদি (যোগ! = data.checksum) {

Serial.println ("চেকসাম ব্যর্থতা"); মিথ্যা প্রত্যাবর্তন; } // সফলতা! সত্য ফিরে; }

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

স্ট্রিং donne_jour_semaine (uint8_t j) {switch (j) {case 0: return "DIM"; কেস 1: "LUN" ফিরিয়ে দিন; কেস 2: "MAR" ফিরিয়ে দিন; কেস 3: "MER" ফিরিয়ে দিন; কেস 4: "JEU" ফিরিয়ে দিন; কেস 5: "VEN" ফিরিয়ে দিন; কেস 6: "স্যাম" ফিরিয়ে দিন; ডিফল্ট: ফিরে ""; }}

// 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 ()) + "/" + স্ট্রিং (datetime.year (), DEC); // heure স্ট্রিং heure = ""; heure = Vers2Chiffres (datetime.hour ()) + ":" + Vers2Chiffres (datetime.minute ()) + ":" + Vers2Chiffres (datetime.second ());

Serial.print (jour); সিরিয়াল.প্রিন্ট (""); Serial.print (heure); // সিরিয়াল.প্রিন্ট (""); ফাইল ডেটা = 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); tft.print ("heure"); tft। setTextColor (ST7735_YELLOW); tft.print (heure);

বিলম্ব (500);

}

// permet d'afficher les nombres sur deux chiffres

স্ট্রিং Vers2Chiffres (বাইট nombre) {স্ট্রিং resultat = ""; যদি (nombre <10) resultat = "0"; রিটার্ন ফলাফল += স্ট্রিং (nombre, DEC); }

ধাপ 3: এমআইটি অ্যাপ উদ্ভাবক 2 প্রোগ্রাম

এমআইটি অ্যাপ উদ্ভাবক 2 প্রোগ্রাম
এমআইটি অ্যাপ উদ্ভাবক 2 প্রোগ্রাম

এটি এমআইটি অ্যাপ উদ্ভাবক কোড ব্লক

ধাপ 4: ফলাফল

এখানে ফলাফলের ভিডিও

প্রস্তাবিত: