- المكونات مطلوبة
- مستشعر Nova PM SDS011 لقياس PM2.5 و PM10
- أساسيات 0.96 'OLED Display Module
- تحضير مستشعر MQ-7 لقياس أول أكسيد الكربون (CO)
- حساب مؤشر جودة الهواء
- مخطط الرسم البياني
- بناء دائرة نظام مراقبة جودة الهواء على لوحة الأداء
- إعداد Adafruit IO
- شرح كود ل
- غلاف مطبوع ثلاثي الأبعاد لنظام مراقبة AQI
- اختبار نظام مراقبة AQI
مع حلول فصل الشتاء ، يزداد الهواء المعلق فوقنا مع الدخان والانبعاثات الغازية من الحقول المحترقة ، والمصانع الصناعية ، وحركة مرور المركبات ، مما يحجب أشعة الشمس ويجعل التنفس صعبًا. يقول الخبراء إن المستويات العالية من تلوث الهواء ووباء COVID-19 يمكن أن يكون مزيجًا خطيرًا يمكن أن يكون له عواقب وخيمة. إن ضرورة المراقبة في الوقت الحقيقي لجودة الهواء أمر صارخ للغاية.
لذلك في هذا المشروع ، سنقوم ببناء نظام مراقبة جودة الهواء ESP32 باستخدام مستشعر Nova PM SDS011 ومستشعر MQ-7 ومستشعر DHT11. سنستخدم أيضًا وحدة عرض OLED لعرض قيم جودة الهواء. يعتمد مؤشر جودة الهواء (AQI) في الهند على ثمانية ملوثات هي PM10 و PM2.5 و SO2 و NO2 و CO و Ozone و NH3 و Pb. ومع ذلك ، ليس من الضروري قياس جميع الملوثات. لذلك سنقوم بقياس تركيز PM2.5 و PM10 وأول أكسيد الكربون لحساب مؤشر جودة الهواء. سيتم نشر قيم AQI على Adafruit IO حتى نتمكن من مراقبتها من أي مكان. في السابق ، قمنا أيضًا بقياس تركيز غاز البترول المسال والدخان والأمونيا باستخدام Arduino.
المكونات مطلوبة
- ESP32
- Nova PM حساس SDS011
- 0.96 'SPI OLED Display Module
- مستشعر DHT11
- مستشعر MQ-7
- أسلاك توصيل
مستشعر Nova PM SDS011 لقياس PM2.5 و PM10
مستشعر SDS011 هو مستشعر جودة هواء حديث جدًا تم تطويره بواسطة Nova Fitness. إنه يعمل على مبدأ تشتت الليزر ويمكنه الحصول على تركيز الجسيمات بين 0.3 إلى 10 ميكرومتر في الهواء. يتكون هذا المستشعر من مروحة صغيرة وصمام مدخل الهواء وصمام ثنائي ليزر وثنائي ضوئي. يدخل الهواء عبر مدخل الهواء حيث يضيء مصدر الضوء (الليزر) الجسيمات ويتحول الضوء المتناثر إلى إشارة بواسطة جهاز كشف ضوئي. ثم يتم تضخيم هذه الإشارات ومعالجتها للحصول على تركيز الجسيمات PM2.5 و PM10. استخدمنا سابقًا مستشعر Nova PM مع Arduino لحساب تركيز PM10 و PM2.5.
مواصفات جهاز الاستشعار SDS011:
- الإخراج: PM2.5، PM10.5
- نطاق القياس: 0.0-999.9 ميكروغرام / م 3
- جهد الإدخال: 4.7 فولت إلى 5.3 فولت
- الحد الأقصى الحالي: 100mA
- النوم الحالي: 2mA
- وقت الاستجابة: 1 ثانية
- تردد إخراج البيانات التسلسلية: 1 مرة / ثانية
- دقة قطر الجسيمات: ≤0.3μm
- خطأ نسبي: 10٪
- نطاق درجة الحرارة: -20 ~ 50 درجة مئوية
أساسيات 0.96 'OLED Display Module
OLED (الصمام الثنائي الباعث للضوء العضوي) هو نوع من الصمام الثنائي الباعث للضوء يتم تصنيعه باستخدام مركبات عضوية تثير عندما يُسمح للتيار الكهربائي بالتدفق من خلالها. هذه المركبات العضوية لها ضوء خاص بها ومن ثم فهي لا تتطلب أي دوائر للإضاءة الخلفية مثل شاشات LCD العادية. لهذا السبب ، فإن تقنية شاشة OLED موفرة للطاقة وتستخدم على نطاق واسع في أجهزة التلفزيون ومنتجات العرض الأخرى.
تتوفر أنواع مختلفة من OLEDs في السوق بناءً على لون الشاشة وعدد المسامير والحجم ودائرة التحكم. في هذا البرنامج التعليمي ، سنستخدم وحدة OLED أحادية اللون ذات 7 أسنان SSD1306 0.96 بوصة بعرض 128 بكسل وطول 64 بكسل. يدعم OLED المكون من 7 سنون بروتوكول SPI ووحدة التحكم IC SSD1306 يساعد OLED في عرض الأحرف المستلمة. تعرف على المزيد حول OLED وتفاعله مع ميكروكنترولر مختلفة باتباع الرابط.
تحضير مستشعر MQ-7 لقياس أول أكسيد الكربون (CO)
تكتشف وحدة استشعار غاز أول أكسيد الكربون MQ-7 CO تركيزات ثاني أكسيد الكربون في الهواء. يمكن لجهاز الاستشعار قياس تركيزات من 10 إلى 10000 جزء في المليون. يمكن شراء مستشعر MQ-7 إما كوحدة نمطية أو كمستشعر وحده. لقد استخدمنا سابقًا العديد من أنواع مستشعرات الغاز المختلفة لاكتشاف وقياس الغازات المختلفة ، ويمكنك أيضًا التحقق منها إذا كنت مهتمًا. في هذا المشروع ، نستخدم وحدة استشعار MQ-7 لقياس تركيز أول أكسيد الكربون في PPM. فيما يلي مخطط الدائرة للوحة MQ-7:
يلعب مقاوم الحمل RL دورًا مهمًا جدًا في جعل المستشعر يعمل. يغير هذا المقاوم من قيمته المقاومة وفقًا لتركيز الغاز. تأتي لوحة المستشعر MQ-7 بمقاومة تحميل تبلغ 1KΩ وهي عديمة الفائدة وتؤثر على قراءات المستشعر. لذلك لقياس قيم تركيز ثاني أكسيد الكربون المناسبة ، عليك استبدال المقاوم 1KΩ بمقاوم 10KΩ.
حساب مؤشر جودة الهواء
يتم حساب AQI في الهند على أساس متوسط تركيز ملوث معين تم قياسه على مدى فترة زمنية قياسية (24 ساعة لمعظم الملوثات ، 8 ساعات لأول أكسيد الكربون والأوزون). على سبيل المثال ، يعتمد AQI لـ PM2.5 و PM10 على متوسط تركيز 24 ساعة ويستند AQI لأول أكسيد الكربون على متوسط التركيز لمدة 8 ساعات). تتضمن حسابات AQI ثمانية ملوثات وهي PM10 و PM2.5 وثاني أكسيد النيتروجين (NO 2) وثاني أكسيد الكبريت (SO 2) وأول أكسيد الكربون (CO) وأوزون مستوى الأرض (O 3) والأمونيا (NH 3) ، والرصاص (الرصاص). ومع ذلك ، لا يتم قياس جميع الملوثات في كل مكان.
بناءً على قياس تركيزات الملوثات المحيطة على مدار 24 ساعة ، يتم حساب مؤشر فرعي ، وهو دالة خطية للتركيز (على سبيل المثال ، سيكون المؤشر الفرعي لـ PM2.5 51 عند التركيز 31 ميكروغرام / م 3 ، 100 عند التركيز 60 ميكروجرام / م 3 و 75 بتركيز 45 ميكروجرام / م 3). يحدد أسوأ مؤشر فرعي (أو الحد الأقصى لجميع المعلمات) AQI الكلي.
مخطط الرسم البياني
مخطط الدائرة لنظام مراقبة جودة الهواء المعتمد على إنترنت الأشياء بسيط للغاية وموضح أدناه:
يتم تشغيل مستشعر SDS011 و DHT11 و MQ-7 بجهد +5 فولت بينما يتم تشغيل وحدة عرض OLED بجهد 3.3 فولت. ترتبط دبابيس جهاز الإرسال والاستقبال SDS011 بـ GPIO16 & 17 من ESP32. يتم توصيل دبوس خرج التناظرية لمستشعر MQ-7 بـ GPIO 25 ودبوس البيانات لمستشعر DHT11 متصل بمستشعر GPIO27. نظرًا لأن وحدة عرض OLED تستخدم اتصال SPI ، فقد أنشأنا اتصال SPI بين وحدة OLED و ESP32. التوصيلات موضحة في الجدول أدناه:
لا |
دبوس وحدة OLED |
ESP32 دبوس |
1 |
GND |
أرض |
2 |
VCC |
5 فولت |
3 |
د 0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
العاصمة |
4 |
7 |
CS |
5 |
لا |
SDS011 دبوس |
ESP32 دبوس |
1 |
5 فولت |
5 فولت |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
تكساس |
16 |
لا |
دبوس DHT |
ESP32 دبوس |
1 |
Vcc |
5 فولت |
2 |
GND |
GND |
3 |
البيانات |
27 |
لا |
MQ-7 دبوس |
ESP32 دبوس |
1 |
Vcc |
5 فولت |
2 |
GND |
GND |
3 |
أ 0 |
25 |
بناء دائرة نظام مراقبة جودة الهواء على لوحة الأداء
كما ترى من الصورة الرئيسية ، كانت الفكرة هي استخدام هذه الدائرة داخل غلاف مطبوع ثلاثي الأبعاد. لذا فإن الدائرة الكاملة الموضحة أعلاه ملحومة على لوحة أداء. تأكد من استخدام الأسلاك لترك مسافة كافية لتركيب OLED وأجهزة الاستشعار. لوحة الأداء الخاصة بي ملحومة بـ OLED ويتم عرض وحدة المستشعر أدناه.
إعداد Adafruit IO
Adafruit IO هي عبارة عن منصة بيانات مفتوحة تتيح لك تجميع البيانات الحية وتصورها وتحليلها على السحابة. باستخدام Adafruit IO ، يمكنك تحميل بياناتك وعرضها ومراقبتها عبر الإنترنت ، وتمكين إنترنت الأشياء لمشروعك. يمكنك التحكم في المحركات وقراءة بيانات المستشعر وإنشاء تطبيقات إنترنت الأشياء الرائعة عبر الإنترنت باستخدام Adafruit IO.
لاستخدام Adafruit IO ، قم أولاً بإنشاء حساب على Adafruit IO. للقيام بذلك ، انتقل إلى موقع Adafruit IO وانقر على "البدء مجانًا" في الجزء العلوي الأيمن من الشاشة.
بعد الانتهاء من عملية إنشاء الحساب ، قم بتسجيل الدخول إلى الحساب وانقر فوق "عرض مفتاح AIO" في الزاوية اليمنى العليا للحصول على اسم مستخدم الحساب ومفتاح AIO.
عند النقر فوق مفتاح AIO ، ستظهر نافذة بها مفتاح Adafruit IO AIO واسم المستخدم. انسخ هذا المفتاح واسم المستخدم ، وسيتم استخدامه في الكود.
الآن ، بعد الحصول على مفاتيح AIO ، قم بإنشاء موجز لتخزين بيانات مستشعر DHT. لإنشاء موجز ، انقر فوق "موجز". ثم انقر فوق "الإجراءات" ، ثم حدد "إنشاء موجز جديد" من الخيارات المتاحة.
بعد ذلك ، ستفتح نافذة جديدة حيث تحتاج إلى إدخال اسم ووصف الخلاصة. كتابة الوصف أمر اختياري.
انقر فوق "إنشاء" بعد ذلك ؛ ستتم إعادة توجيهك إلى الخلاصة المنشأة حديثًا.
بالنسبة لهذا المشروع ، أنشأنا ما مجموعه ستة خلاصات لقيم PM10 و PM2.5 و CO ودرجة الحرارة والرطوبة و AQI. اتبع نفس الإجراء الموضح أعلاه لإنشاء الخلاصات المتبقية.
بعد إنشاء الخلاصات ، سنقوم الآن بإنشاء ميزة لوحة معلومات Adafruit IO لتصور بيانات المستشعر في صفحة واحدة. لذلك ، أولاً ، قم بإنشاء لوحة تحكم ثم أضف كل هذه الخلاصات في لوحة القيادة هذه.
لإنشاء لوحة تحكم ، انقر فوق خيار لوحة التحكم ، ثم انقر فوق "الإجراء" ، وبعد ذلك ، انقر فوق "إنشاء لوحة تحكم جديدة".
في النافذة التالية ، أدخل اسم لوحة القيادة وانقر على "إنشاء".
أثناء إنشاء لوحة القيادة ، سنستخدم الآن كتل Adafruit IO مثل Gauge و Slider لتصور البيانات. لإضافة كتلة ، انقر فوق "+" في الزاوية اليمنى العليا.
ثم حدد كتلة "المقياس".
في النافذة التالية ، حدد بيانات الخلاصة التي تريد تصورها.
في الخطوة الأخيرة ، قم بتغيير إعدادات الحظر لتخصيصها.
الآن اتبع نفس الإجراء الموضح أعلاه لإضافة كتل تصور لبقية الخلاصات. بدت لوحة معلومات Adafruit IO كما يلي:
شرح كود ل
يتم تقديم الكود الكامل لهذا المشروع في نهاية المستند. نحن هنا نوضح بعض الأجزاء المهمة من الكود.
يستخدم رمز SDS011 ، Adafruit_GFX، Adafruit_SSD1306، Adafruit_MQTT، و DHT.h المكتبات. يمكن تنزيل مكتبات SDS011 و Adafruit_GFX و Adafruit_SSD1306 من Library Manager في Arduino IDE وتثبيتها من هناك. لذلك ، افتح Arduino IDE وانتقل إلى Sketch <Include Library <Manage Libraries . ابحث الآن عن SDS011 وقم بتثبيت مكتبة SDS Sensor بواسطة R. Zschiegner.
وبالمثل ، قم بتثبيت مكتبات Adafruit GFX و Adafruit SSD1306 بواسطة Adafruit. يمكن تنزيل Adafruit_MQTT.h و DHT11.h من الروابط المحددة.
بعد تثبيت المكتبات على Arduino IDE ، ابدأ الكود بتضمين ملفات المكتبات المطلوبة.
#تضمن
في الأسطر التالية ، حدد عرض وارتفاع شاشة OLED. في هذا المشروع ، استخدمت شاشة OLED مقاس 128 × 64 SPI. يمكنك تغيير SCREEN_WIDTH ، و SCREEN_HEIGHT المتغيرات وفقا لشاشة العرض.
#define SCREEN_WIDTH 128 # تعريف SCREEN_HEIGHT 64
ثم حدد دبابيس اتصال SPI حيث يتم توصيل شاشة OLED.
# تعريف OLED_MOSI 23 # تعريف OLED_CLK 18 # تعريف OLED_DC 4 # تعريف OLED_CS 5 # تعريف OLED_RESET 2
بعد ذلك ، قم بإنشاء مثيل لشاشة Adafruit بالعرض والارتفاع وبروتوكول الاتصال SPI الذي تم تحديده مسبقًا.
عرض Adafruit_SSD1306 (SCREEN_WIDTH ، SCREEN_HEIGHT ، OLED_MOSI ، OLED_CLK ، OLED_DC ، OLED_RESET ، OLED_CS) ؛
ثم قم بتضمين بيانات اعتماد WiFi و Adafruit IO التي نسختها من خادم Adafruit IO. سيتضمن ذلك خادم MQTT ورقم المنفذ واسم المستخدم ومفتاح AIO.
const char * ssid = "Galaxy-M20" ؛ const char * pass = "ac312124" ؛ #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
ثم قم بإعداد خلاصات Adafruit IO لتخزين بيانات المستشعر. في حالتي ، قمت بتحديد ستة خلاصات لتخزين بيانات المستشعر المختلفة ، وهي: جودة الهواء ، ودرجة الحرارة ، والرطوبة ، و PM10 ، و PM25 ، و CO.
Adafruit_MQTT_Client mqtt (& client ، MQTT_SERV ، MQTT_PORT ، MQTT_NAME ، MQTT_PASS) ؛ Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / AirQuality") ؛ Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / Temperature") ؛ Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / Humidity") ؛ Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / PM10") ؛ Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / PM25") ؛ Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt، MQTT_NAME "/ f / CO") ؛
الآن داخل وظيفة setup () ، قم بتهيئة Serial Monitor بمعدل باود 9600 لأغراض التصحيح. قم أيضًا بتهيئة شاشة OLED ومستشعر DHT ومستشعر SDS011 باستخدام وظيفة البدء () .
إعداد باطل () {my_sds.begin (16،17) ؛ Serial.begin (9600) ؛ dht.begin () ، display.begin (SSD1306_SWITCHCAPVCC) ،
تُستخدم حلقة for داخل وظيفة الإعداد لتجميع القيم حتى رقم محدد ثم ضبط العداد على الصفر.
لـ (int thisReading1 = 0 ؛ thisReading1 <numReadingsPM10 ؛ thisReading1 ++) {readingsPM10 = 0 ؛ }
قراءة قيم الاستشعار:
الآن داخل وظيفة الحلقة ، استخدم طريقة millis () لقراءة قيم المستشعر في كل ساعة. ينتج كل من مستشعرات الغاز قيمة تناظرية من 0 إلى 4095. لتحويل هذه القيمة إلى جهد ، استخدم المعادلة التالية: RvRo = MQ7Raw * (3.3 / 4095) ؛ حيث MQ7Raw هي القيمة التناظرية من الدبوس التناظري للمستشعر . اقرأ أيضًا قراءات PM2.5 و PM10 من مستشعر SDS011.
إذا ((بدون توقيع طويل) (currentMillis - previousMillis)> = فاصل زمني) {MQ7Raw = analogRead (iMQ7) ؛ RvRo = MQ7Raw * (3.3 / 4095) ؛ MQ7ppm = 3.027 * exp (1.0698 * (RvRo)) ؛ Serial.println (MQ7ppm) ؛ error = my_sds.read (& p25، & p10) ؛ if (! error) {Serial.println ("P2.5:" + String (p25))؛ Serial.println ("P10:" + String (p10)) ؛ }}
تحويل القيم:
قيم PM2.5 و PM10 موجودة بالفعل بالميكروجرام / م 3 لكننا نحتاج إلى تحويل قيم أول أكسيد الكربون من PPM إلى mg / m 3. يتم إعطاء صيغة التحويل أدناه:
التركيز (mg / m 3) = التركيز (PPM) × (الكتلة الجزيئية (g / mol) / الحجم المولي (L))
حيث: الجزيئية كتلة CO هو 28.06 جم / مول ومولار وحدة التخزين 24.45L في 25 0 C
التركيزINmgm3 = MQ7ppm * (28.06 / 24.45) ؛ Serial.println (التركيزINmgm3) ؛
حساب متوسط 24 ساعة:
ثم في السطور التالية ، احسب متوسط 24 ساعة لقراءة PM10 ، وقراءة PM2.5 ، ومتوسط 8 ساعات لقراءات أول أكسيد الكربون. في السطر الأول من الكود ، خذ الإجمالي الحالي واطرح العنصر الأول في المصفوفة ، واحفظه الآن كإجمالي جديد. في البداية ، سيكون الصفر. ثم احصل على قيم المستشعر وأضف القراءة الحالية إلى الإجمالي وقم بزيادة مؤشر الرقم. إذا كانت قيمة المؤشر مساوية لـ numReadings أو أكبر منها ، فقم بتعيين الفهرس مرة أخرى إلى الصفر.
totalPM10 = totalPM10 - قراءات PM10 ؛ قراءات: PM10 = p10 ؛ totalPM10 = totalPM10 + قراءات PM10 ؛ readIndexPM10 = readIndexPM10 + 1 ؛ إذا (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0 ؛ }
ثم ، أخيرًا ، انشر هذه القيم على Adafruit IO.
if (! temperature.publish (temperature)) {delay (30000)؛ } if (! Humidity.publish (humidity)) {delay (30000)؛ ………………………………………………………………. ……………………………………………………………….
غلاف مطبوع ثلاثي الأبعاد لنظام مراقبة AQI
بعد ذلك ، قمت بقياس أبعاد الإعداد باستخدام الورنية الخاصة بي وقمت أيضًا بقياس أبعاد المستشعرات و OLED لتصميم غلاف. بدا تصميمي كالتالي أدناه ، بمجرد الانتهاء منه
بعد أن كنت راضيًا عن التصميم ، قمت بتصديره كملف STL ، وقمت بتقطيعه بناءً على إعدادات الطابعة ، وأخيراً طبعته. مرة أخرى ، يتوفر ملف STL للتنزيل من Thingiverse ويمكنك طباعة الغلاف الخاص بك باستخدامه.
بعد الانتهاء من الطباعة ، شرعت في تجميع المشروع الذي تم إعداده في حاوية دائمة لتثبيته في منشأة. مع الاتصال الكامل الذي تم إجراؤه ، قمت بتجميع الدائرة في غلافي وكان كل شيء مناسبًا كما ترون هنا.
اختبار نظام مراقبة AQI
بمجرد أن يصبح الجهاز والرمز جاهزًا ، فقد حان الوقت لاختبار الجهاز. استخدمنا محول خارجي بجهد 12 فولت 1 أمبير لتشغيل الجهاز. كما ترى ، سيعرض الجهاز تركيز PM10 و PM2.5 وأول أكسيد الكربون على شاشة OLED. تركيز PM2.5 و PM10 بالميكروجرام / م 3 بينما تركيز أول أكسيد الكربون بالملجم / م 3.
سيتم نشر هذه القراءات أيضًا على Adafruit IO Dashboard. سيكون الحد الأقصى لجميع المعلمات (PM10 و PM2.5 & CO) هو AQI.
سيتم عرض قيم AQI لآخر 30 يومًا كرسم بياني.
هذه هي الطريقة التي يمكنك بها استخدام مستشعرات SDS011 و MQ-7 لحساب مؤشر جودة الهواء. يمكن أيضًا العثور على العمل الكامل للمشروع في الفيديو المرتبط أدناه. آمل أن تكون قد استمتعت بالمشروع ووجدت أنه من المثير للاهتمام بناء مشروعك الخاص. إذا كان لديك أي أسئلة ، فيرجى تركها في قسم التعليقات أدناه.