সুচিপত্র:
- সরবরাহ
- ধাপ 1: উপাদানগুলি সংযুক্ত করা
- ধাপ 2: লাইব্রেরি এবং আরডুইনো প্রোগ্রাম
- ধাপ 3: এমআইটি অ্যাপ উদ্ভাবক 2 প্রোগ্রাম
- ধাপ 4: ফলাফল
ভিডিও: কণা দূষণের জন্য বায়ুর গুণমান পর্যবেক্ষণের জন্য সিস্টেম: 4 টি ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 08:00
ভূমিকা:
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 প্রোগ্রাম
এটি এমআইটি অ্যাপ উদ্ভাবক কোড ব্লক
ধাপ 4: ফলাফল
এখানে ফলাফলের ভিডিও
প্রস্তাবিত:
বায়ুর গুণমান পরিমাপ: 17 টি ধাপ
বায়ুর গুণমান পরিমাপ করুন: বাতাসের গুণমান এবং সূক্ষ্ম কণা: স্থগিত কণা (" কণা পদার্থের জন্য " PM " সূক্ষ্ম কণা ফুসফুসের গভীরে প্রবেশ করে। তারা এর কারণ হতে পারে
কণা ফোটন ব্যবহার করে বায়ু গুণমান পর্যবেক্ষণ: 11 টি ধাপ (ছবি সহ)
কণা ফোটন ব্যবহার করে বায়ু গুণমান পর্যবেক্ষণ: এই প্রকল্পে PPD42NJ কণা সেন্সর ব্যবহার করা হয় বায়ু গুণমান পরিমাপ করতে (PM 2.5) কণা ফোটন দিয়ে। এটি শুধুমাত্র পার্টিকেল কনসোল এবং dweet.io- এ ডেটা প্রদর্শন করে না বরং এটি পরিবর্তন করে RGB LED ব্যবহার করে বাতাসের গুণমান নির্দেশ করে
এয়ারসিটিজেন - বায়ুর গুণমান পর্যবেক্ষণ: 11 টি ধাপ (ছবি সহ)
এয়ারসিটিজেন - বাতাসের গুণমান পর্যবেক্ষণ: সবাইকে হাই! আজ, আমরা আপনাকে শেখাবো কিভাবে আমাদের প্রকল্পটি পুনরুত্পাদন করতে হয়: AirCitizenPolytech টিম দ্বারা AirCitizen!-'OpenAir / What’s your air' থেকে আসছে? প্রকল্প, এয়ারসিটিজেন প্রকল্পের লক্ষ্য নাগরিকদের সক্রিয়ভাবে মানের মূল্যায়ন করতে সক্ষম করা
বায়ুমণ্ডলীয় দূষণের দৃশ্যায়ন: 4 টি ধাপ
বায়ুমণ্ডলীয় দূষণ ভিজ্যুয়ালাইজেশন: বায়ু দূষণ সমস্যা বেশি বেশি মনোযোগ আকর্ষণ করে। এবার আমরা Wio LTE এবং নতুন লেজার PM2.5 সেন্সর দিয়ে PM2.5 পর্যবেক্ষণ করার চেষ্টা করেছি
টিকা নিতে হবে নাকি? রোগ সিমুলেশনের মাধ্যমে হার্ড অনাক্রম্যতা পর্যবেক্ষণের একটি প্রকল্প: 15 টি ধাপ
টিকা নিতে হবে নাকি? রোগ সিমুলেশনের মাধ্যমে পালের অনাক্রম্যতা পর্যবেক্ষণের একটি প্রকল্প: প্রকল্পের সংক্ষিপ্ত বিবরণ: আমাদের প্রকল্পটি পালের অনাক্রম্যতা অনুসন্ধান করে এবং আমাদের সম্প্রদায়ের সংক্রমণের হার কমাতে মানুষকে টিকা নিতে উৎসাহিত করার আশা করে। আমাদের কর্মসূচী অনুকরণ করে কিভাবে একটি রোগ জনসংখ্যাকে বিভিন্ন সংখ্যক টিকা দিয়ে সংক্রমিত করে