فهرست مطالب:
- تدارکات
- مرحله 1: اتصال قطعات
- مرحله 2: کتابخانه و برنامه آردوینو
- مرحله 3: برنامه MIT App Inventor 2
- مرحله 4: نتیجه
تصویری: سیستم نظارت بر کیفیت هوا برای آلودگی ذرات معلق: 4 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
مقدمه:
1 در این پروژه نحوه ساخت یک آشکارساز ذرات با نمایش داده ها ، پشتیبان گیری داده ها بر روی کارت SD و IOT را نشان می دهم. از لحاظ بصری یک صفحه نمایش حلقه ای نئوپیکسلی کیفیت هوا را نشان می دهد.
2 کیفیت هوا امروزه به طور فزاینده ای مورد توجه قرار گرفته است. سیستم هایی برای اندازه گیری میزان گرد و غبار وجود دارد اما بسیار گران هستند. همانطور که در برخی از مطالعات نشان داده شده است ، آشکارسازهای ذرات ارزان قیمت و با کیفیت بالا در بازار وجود دارد.
مثلا:
www.atmos-meas-tech.net/11/4823/2018/amt-1…
3 بنابراین تصمیم گرفتم دستگاهی بسازم که بتواند تعداد ذرات را بر اساس کلاس های اندازه گیری (0.5 میکرومتر تا 10 میکرومتر) اندازه گیری کند ، از نظر بصری با نمایش ساده نتیجه (حلقه نئو پیکسل) ، نمایش دقیق تر بر روی صفحه TFT و پشتیبان گیری مهر و موم شده روی کارت SD
4 علاوه بر این من یک ماژول ارتباطی بلوتوث اضافه کرده ام تا بتوانم با یک برنامه اندرویدی ارتباط برقرار کرده و نتایج را در سرور IOT منتشر کنم.
5 هزینه کلی کل 60 یورو تجاوز نمی کند
تدارکات
-Arduino uno R3
-سپر اولیه آردوینو
صفحه نمایش TFT ST7735
حلقه Neopixel 24 led
-Plantower PMS5003
-HC-06 ماژول بلوتوث
مرحله 1: اتصال قطعات
اجزای مختلف مطابق نمودار بالا به هم متصل می شوند
مرحله 2: کتابخانه و برنامه آردوینو
1 کتابخانه
برای صفحه TFT
github.com/adafruit/Adafruit-GFX-Library
برای حلقه نئو پیکسل
github.com/adafruit/Adafruit_NeoPixel
برای کارت sd
github.com/arduino-libraries/SD
2 طرح آردوینو
#Include #include // Bibliothèque pour l'I2C #include "RTClib.h" // Bibliothèque pour le module RTC RTC_DS1307 RTC؛ #عبارتند از
// کدام پین در آردوینو به NeoPixels متصل است؟
#پین 6 را تعریف کنید // در Trinket یا Gemma ، پیشنهاد کنید این را به 1 تغییر دهید
// چند NeoPixel به آردوینو وصل شده است؟
#تعریف NUMPIXELS 24 // اندازه محبوب حلقه NeoPixel Adafruit_NeoPixel (NUMPIXELS ، PIN ، NEO_GRB + NEO_KHZ800) ؛ uint32_t vert = پیکسل. رنگ (0 ، 250 ، 0) ؛ uint32_t نارنجی = پیکسل. رنگ (250 ، 250 ، 0) ؛ uint32_t rouge = پیکسل. رنگ (255 ، 0 ، 0) ؛
نرم افزار سریال pms سریال (2 ، 3) ؛
#define cs 10 #define dc 9 #define rst 8 // همچنین می توانید این را به ریست آردوینو متصل کنید
#include // کتابخانه اصلی گرافیکی
#شامل // کتابخانه مخصوص سخت افزار #شامل #شامل const int cs_sd = 4؛ int temps ؛ // temps d'acquisition double tempsInit؛ // initialisation du timer au démarrage du loop ()
#if تعریف شده (_ SAM3X8E_)
#undef _FlashStringHelper:: F (string_literal) #تعریف 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 باید // خروجی باشد. این بسیار سریعتر است - همچنین در صورت تمایل // برای استفاده از کارت microSD (به مثال طراحی تصویر مراجعه کنید) Adafruit_ST7735 tft = Adafruit_ST7735 (cs، dc، rst)؛ float nombre_leds = 0؛ void setup () {Serial.begin (9600)؛ // Initialise la liaison I2C Wire.begin ()؛ // Initialise le module RTC RTC.begin ()؛ Serial.print ("init SD") ؛ تاخیر (1000) ؛ if (! 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) است ؛
pixels.begin ()؛ // INITIALIZE شیء نوار NeoPixel (مورد نیاز)
pixels.setBrightness (2)؛
}
struct pms5003data {
uint16_t framelen؛ 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 checksum؛ }؛
ساختار داده pms5003 داده ها ؛ حلقه خالی () {pixels.clear ()؛ // همه رنگهای پیکسل را روی "off" DateTime now = RTC.now () تنظیم کنید. // Récupère l'heure et le date courante // affiche_date_heure (در حال حاضر) ؛
temps = ((millis () - tempsInit))/1000 ؛ // Démarrage du chrono
if (readPMSdata (& 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 ("")؛ tft.setTextColor (ST7735_GREEN، ST7735_BLACK) "tft.pt 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.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/ 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 (((float (data.particles_03um)/65535)*24)) ؛ // nombre_leds = (8) ؛ Serial.println (nombre_leds) ؛
if ((nombre_leds = 1)) {
pixels.fill (vert، 0، nombre_leds)؛ } else if ((nombre_leds = 8)) {pixels.fill (vert، 0، 8)؛ pixels.fill (نارنجی ، 8 ، ((nombre_leds) -8)) ؛ } else if (nombre_leds> 16) {
pixels.fill (vert، 0، 8)؛ pixels.fill (نارنجی ، 8 ، 8) ؛ pixels.fill (روژ ، 16 ، ((nombre_leds) -16))) ؛ } else if (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 ()؛ }
}
boolean readPMSdata (جریان *ها) {
if (! s-> available ()) {return false؛ } // یک بایت را در یک زمان بخوانید تا زمانی که به بایت اولیه "0x42" if (s-> peek ()! = 0x42) {s-> read () برسیم. false false؛ }
// حالا همه 32 بایت را بخوانید
if (s-> available () readBytes (بافر ، 32) ؛
// چک چک را آماده کنید
برای (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 ((void *) & data، (void *) buffer_u16، 30)؛
if (sum! = data.checksum) {
Serial.println ("شکست چک") ؛ false false؛ } // موفقیت! بازگشت واقعی ؛ }
// 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: بازگشت "SAM" ؛ پیش فرض: return ""؛ }}
// 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 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) ؛ 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 = ""؛ if (nombre <10) resultat = "0"؛ return resultat += String (nombre، DEC)؛ }
مرحله 3: برنامه MIT App Inventor 2
این بلوک کد مخترع برنامه MIT است
مرحله 4: نتیجه
در اینجا فیلم نتیجه است
توصیه شده:
نظارت ساده بر کیفیت هوا با صفحه LCD TFT-- Ameba Arduino: 3 مرحله
پایش ساده کیفیت هوا با صفحه نمایش TFT LCD-آمبا آردوینو: مقدمه اکنون که اکثر مردم در خانه می مانند تا از تماس نزدیک با حامل احتمالی ویروس COVID-19 جلوگیری کنند ، کیفیت هوا به فاکتور مهمی برای رفاه افراد تبدیل می شود ، به ویژه در کشورهای گرمسیری که استفاده از سیستم تهویه مطبوع در طول روز ضروری است
تشخیص آلودگی هوا + تصفیه هوا: 4 مرحله
تشخیص آلودگی هوا + تصفیه هوا: دانش آموزان (Aristobulus Lam ، Victor Sim ، Nathan Rosenzweig و Declan Loges) مدرسه بین المللی سوئیس آلمان با کارکنان MakerBay برای ایجاد یک سیستم یکپارچه برای اندازه گیری آلودگی هوا و اثر فیلتراسیون هوا کار کردند. این
نظارت بر کیفیت هوا با DSM501A با LCD نوکیا: 7 مرحله
نظارت بر کیفیت هوا با DSM501A با LCD نوکیا: سلام دوستان! در این دستورالعمل کوتاه به شما نشان خواهم داد که چگونه می توانید بر کیفیت هوا در خانه یا هر مکان خود نظارت داشته باشید. مونتاژ این ایستگاه نظارت بر کیفیت هوا با قیمت مناسب بسیار آسان است
نظارت بر کیفیت هوا با استفاده از ذرات فوتون: 11 مرحله (همراه با تصاویر)
پایش کیفیت هوا با استفاده از فوتون ذرات: در این پروژه از سنسور ذرات PPD42NJ برای اندازه گیری کیفیت هوا (PM 2.5) موجود در هوا با ذرات فوتون استفاده می شود. این نه تنها داده ها را روی کنسول Particle و dweet.io نمایش می دهد بلکه با تغییر آن کیفیت هوا را با استفاده از LED RGB نشان می دهد
مانیتور کیفیت هوا با ذرات: 7 مرحله
نظارت بر کیفیت هوا با ذرات: کیفیت هوا. احتمالاً اکنون که هوای پاک ما به یک مه دائمی در آسمان تبدیل شده است ، بیشتر به آن فکر می کنید. اوه. یکی از مواردی که شما بر آن کنترل دارید کیفیت هوای داخل خانه است. در این آموزش ، من به شما نحوه ساخت هوا را نشان می دهم