تنفس هوای پاک و سالم برای انسانها حیاتی است، بااینحال، کیفیت نامطلوب هوا در بسیاری از محیطها به یک نگرانی تبدیل شده است. در این مطلب، نحوه ساخت یک سیستم نظارت بر کیفیت هوا مبتنی بر آردوینو را بررسی میکنیم. در ادامه، ابتدا اجزای مختلف را معرفی میکنیم و سپس به سنسور رابط MQ135 با برد آردوینو و در نهایت، کدنویسی آن میپردازیم.
شاید برای شما مفید باشد: آموزش آردوینو از 0 تا 100
سنسور AQI یا سنسور شاخص کیفیت هوا چیست؟
شاخص کیفیت هوا (AQI) یک سنجش استاندارد است که برای اطلاع از میزان آلودگی یا تمیز بودن هوا در یک منطقه خاص در یک زمان معین استفاده میشود. این شاخص روشی است که برای انتقال اطلاعات در مورد کیفیت هوا به عموم مردم بهراحتی قابلدرک است.
شاخص AQI به طور معمول چندین آلاینده اصلی هوا را که توسط آژانسهای زیستمحیطی در سراسر جهان تنظیم میشود، مانند ازن سطح زمین، ذرات معلق (PM2.5 و PM10)، مونوکسید کربن (CO)، دیاکسید گوگرد (SO2) و دیاکسید نیتروژن (NO2) در نظر میگیرد. هر آلاینده مقیاس و سطوح آستانه خود را دارد که مقدار AQI را تعیین میکند.
مقیاس AQI از ۰ تا ۵۰۰ متغیر است و با دستهبندیهای خاص زیر که سطح نگرانی درباره سلامت مرتبط با کیفیت هوا را نشان میدهد، مشخص میشود:
- ۰ تا ۱۵۰ (نرمال تا متوسط): این محدوده شامل شرایط کیفیت هوایی است که برای اکثر افراد قابلقبول در نظر گرفته میشود، البته گاهی با نگرانیهای برای گروههای حساس در عدد بالایی بازه
- ۱۵۱ تا ۲۰۰ (بد): همه افراد میتوانند عوارض این هوا را تجربه کنند و گروههای حساس بیشتر تحتتأثیر قرار میگیرند.
- ۲۰۱ تا ۳۰۰ (بسیار بد): هشدارهای بهداشتی در مورد شرایط اضطراری. کل جمعیت احتمالاً تحتتأثیر قرار میگیرند و ممکن است اثرات جدی بر سلامتی ایجاد شود.
- ۳۰۱ تا ۵۰۰ (سمی): این مقیاس نشاندهنده هشدار جدی برای سلامتی است و ممکن است به دلیل کیفیت بسیار ضعیف هوا، اثرات جدیتری بر سلامتی همه داشته باشند.
برای این پروژه ما PM2.5 و PM10 را اندازهگیری نخواهیم کرد، اما اگر میخواهید بیشتر بدانید، میتوانید سیستم نظارت AQI را بررسی کنید و بعداً آن را بهعنوان ارتقا به این پروژه اضافه کنید.
سیستم نظارت بر کیفیت هوا چگونه کار میکند؟
سیستم مانیتورینگ کیفیت هوا از سنسور برای تشخیص پارامترهای محیطی مانند سطح گاز، دما و رطوبت استفاده میکند. به طور خاص، سیگنال آنالوگ سنسور گاز، متصل به پین آنالوگ آردوینو، دادههایی را در مورد کیفیت هوا ارائه میدهد. این سنجشها با آستانههای از پیش تعریفشده بررسی میشوند و کیفیت هوا را بهعنوان «خوب»، «بد»، «بسیار بد» یا «سمی» طبقهبندی میکنند. به طور همزمان، سنسور DHT11 رطوبت و دما را اندازهگیری میکند. دادههای جمعآوریشده بهصورت بلادرنگ روی صفحهنمایش OLED با استفاده از کتابخانههای Adafruit نمایش داده میشود. با نظارت مداوم بر این پارامترها، سیستم تصویری از شرایط کیفیت هوا ارائه میدهد و کاربران را قادر میسازد تا تغییرات محیط خود را ارزیابی کرده و به آن پاسخ دهند.
قطعات موردنیاز برای این پروژه عبارتاند از:
- برد آردوینو
- سنسور گاز MQ135 برای تشخیص گازهای مختلف
- سنسور دما و رطوبت DHT11
- نمایشگر OLED برای خروجی بصری
- برد بورد و سیمهای جامپر
مدار سیستم پایش کیفیت هوای آردوینو
اتصالات کامل مدار سیستم نظارت بر کیفیت هوا با سنسور گاز OLED، DHT11 و MQ135 متصل به آردوینو Uno روی برد بورد در شکل زیر نشاندادهشده است.
آردوینو با استفاده از پروتکل I2C با کمک SDA و پینهای SCL به OLED متصل میشود. سنسور گاز MQ135 سیگنال آنالوگ صادر میکند که به پایه ورودی آنالوگ A0 آردوینو ارسال میشود. سنسور DHT11 نیز دارای یک پایه خروجی داده دیجیتال است که به پایه D2 آردوینو متصل است.
تصویر زیر مدار را پس از اتصال آن روی برد بورد را نشان میدهد.
توضیح کد سیستم نظارت بر کیفیت هوا مبتنی بر آردوینو
کدهای نوشتهشده کیفیت هوا را کنترل میکند و خوانش سنسور (دما، رطوبت و سطح گاز) را روی یک صفحهنمایش OLED نمایش میدهد. در ادامه، جزئیات این کد را شرح میدهیم.
1 2 3 4 5 6 7 8 9 | #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <dht.h> |
این خطوط شامل کتابخانههای لازم برای پروتکلهای ارتباطی (SPI، Wire)، پردازش گرافیکی (Adafruit_GFX)، کنترل صفحهنمایش OLED (Adafruit_SSD1306) و سنسور DHT است.
1 2 3 4 5 | #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET 4 |
ثابتها برای عرض، ارتفاع و پین ریست نمایشگر OLED تعریف شدهاند.
1 | Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); |
یک شیء به نام display از نوع Adafruit_SSD1306 برای کنترل صفحهنمایش OLED با استفاده از عرض، ارتفاع، ارتباط (سیم) و پین ریست ایجاد شده است.
1 2 3 | #define sensor A0 #define DHT11PIN 2 |
ثابتها برای پین آنالوگ متصل به سنسور گاز (سنسور) و پایه متصل به سنسور DHT11 (DHT11PIN) تعریف شده است.
1 2 3 4 5 | int gasLevel = 0; String quality = ""; dht DHT; |
متغیرها برای ذخیره سطوح گاز و توضیحات کیفیت اعلام میشوند و نمونهای از DHT بهجای سنسور DHT ایجاد میشود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | void sendSensor() { // Function to read temperature and humidity from the DHT sensor int readData = DHT.read11(DHT11PIN); float h = DHT.humidity; float t = DHT.temperature; if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); Return; } display.setTextColor(WHITE); display.setTextSize(1); display.setFont(); display.setCursor(0, 43); display.println("Temp :"); display.setCursor(80, 43); display.println(t); display.setCursor(114, 43); display.println("C"); display.setCursor(0, 56); display.println("RH :"); display.setCursor(80, 56); display.println(h); display.setCursor(114, 56); display.println("%"); } |
این تابع برای خواندن اطلاعات دما و رطوبت از سنسور DHT و نمایش آن روی صفحهنمایش OLED تعریف شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | void air_sensor() { gasLevel = analogRead(sensor); if(gasLevel<151){ quality = " GOOD!"; } else if (gasLevel >151 && gasLevel<200){ quality = " Poor!"; } else if (gasLevel >200 && gasLevel<300){ quality = "Very bad!"; } else if (gasLevel >300 && gasLevel<500){ quality = "Toxic!"; } else{ quality = " Toxic"; } display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(1,5); display.setFont(); display.println("Air Quality:"); display.setTextSize(1); display.setCursor(5,23); display.println(gasLevel); display.setCursor(20,23); display.println(quality); } This function is defined to read gas levels from the analog pin connected to the gas sensor and determine the air quality based on predefined thresholds. It also displays the gas level and quality on the OLED screen. void setup() { Serial.begin(9600); pinMode(sensor,INPUT); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); } display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(50, 0); display.println("Air"); display.setTextSize(1); display.setCursor(23, 20); display.println("Quality monitor"); display.display(); delay(1200); display.clearDisplay(); display.setTextSize(1.5); display.setCursor(20, 20); display.println("BY Circuit"); display.setCursor(20, 40); display.println("Digest"); display.display(); delay(1000); display.clearDisplay(); } |
تابع setup ارتباط سریال را راهاندازی میکند، پین حسگر را بهعنوان ورودی تنظیم میکند و نمایشگر OLED را مقداردهی اولیه میکند. همچنین، پیامهای مقدماتی را روی صفحهنمایش میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void loop() { display.clearDisplay(); air_sensor(); sendSensor(); display.display(); } |
تابع loop نمایشگر را پاک میکند، دادههای سنسور گاز و سنسور DHT را با استفاده از تابعهای تعریفشده فرامیخواند و به طور مداوم نمایشگر را با آخرین خوانشها بهروزرسانی میکند.
این کد اساساً سنسورها را مقداردهی اولیه میکند، دادههای آنها را میخواند، کیفیت هوا را بر اساس سطح گاز تعیین میکند و تمام اطلاعات روی صفحه OLED را در یک حلقه نمایش میدهد.
شما می توانید علاوه بر این پروژه صد ها پروژه آردوینو دیگر را در پروژه های آردوینو بررسی بفرمایید.
نمایش پروژه نظارت بر کیفیت هوای آردوینو
ویدئوی زیر نسخه آزمایشی کامل پروژه را نشان میدهد. همانطور که میبینیم، مقادیر دما و رطوبت در پایین OLED نشان داده میشود. در بالا نیز سطح سمی بودن هوا قابلمشاهده است که پس از واردشدن گاز از فندک، از خوب به سمی تبدیل میشود.
منبع:
سلام کد نویسی که انجام دادید قبلا تست شده ؟؟؟
سلام
https://circuitdigest.com/microcontroller-projects/arduino-based-air-quality-monitoring-system
از منبع، لینک بالا، گذاشته شده.