مقدمة
يعتبر تلوث الهواء مشكلةً رئيسيةً في العديد من البلدان، حيث إنَّ الهواء الملوث يسبب الكثير من المشاكل الصحية للإنسان وخصوصاً للذين يعانون من مشاكلٍ في الجهاز التنفسي، لذلك أصبحت مراقبة نقاوة و جودة الهواء المحيط بنا ضرورةً ملحة لا بد .منها
سنوضِح في هذا المقال كيفية إجراء تصميمٍ أولي لنظام مراقبة لجودة الهواء باستخدام الأردوينو نانو (Arduino Nano) وحساس قياس كثافة الغبار في الهواء ( GP2Y1014AU0F)،و الذي يعتبر فعال جداً في اكتشاف الجسيمات الدقيقة، ويستخدم في أجهزةِ تنقية الهواء والمكيفات، وشاشة OLED لعرض قراءات الحساس.
المكونات المطلوبة لتصميم نظام مراقبة جودة الهواء
- Arduino Nano
- GP2Y1014AU0F
- شاشة OLED
- مكثف 220μf
- مقاومة 150Ω
- أسلاك.
-
Arduino Nano
عبارة عن لوحة تطوير إلكترونية صغيرة وملائمة للوحات التجارب، تَعتمدُ على المتحكِّم Atmega328P. لمعرفة المزيد من المعلومات والمواصفات التقنية يمكن قراءة المقال التالي: Arduino Nano
2. حساس قياس كثافة الغبار في الهواء ( GP2Y1014AU0F)
يعتمد حساس الغبار على وجود (IR LED) يصدر أشعة تحت حمراء و ديود ضوئي (photodiode) يتم وضعهما ضمن غرفة معتمة داخل الحساس بشكل قطري بالقرب من مدخل الهواء. حيث يتم قياس مقدار الضوء المتناثر في الغرفة الناتج عن وجود جزيئات الغبار، مما يؤدي إلى قياس كثافة جزيئات الغبار في الهواء.
يتكون حساس الغبار من ستة أطراف Pins وهي موضحة بالجدول التالي مع وظيفة كل منها:
1 | V-LED | ليد إشارة لمنفذ التغذية يتم ربطة مع جهد 5V و مقاومة 150Ω على التسلسل |
2 | LED-GND | ليد إشارة للأرضي يتم ربطة مع GND |
3 | LED | يستخدم للتبديل بين تشغيل / إيقاف تشغيل LED.يتم ربطة بأي PIN رقمي من Arduino |
4 | S-GND | الأرضي GND يتم ربطة مع أرضي الأردوينو |
5 | VOUT | خرج الحساس تشابهي Analog يتم ربطة مع أي رجل Analog مثل A0 |
6 | VCC | رجل التغذية الأساسي للحساس 5V |
مواصفات GP2Y1014AU0F
- استهلاك منخفض التيار (20mA max).
- جهد التشغيل النموذجي (4.5V to 5.5V).
- الحد الأدنى لحجم الغبار القابل للكشف (0.5µm).
- نطاق استشعار كثافة الغبار (Up to 580 ug/m3).
- زمن الاستشعار أقل من ثانية واحدة.
3.OLED Display
شاشات OLED أكثر فعالية وبساطة من شاشات LCD، ومن ميزاتها لا تعتمد على إضاءة الخلفية ولا الفلاتر، وتؤمن جودة صورة جيدة بوضوح عالٍ، وكذلك لها ميزات لونية رائعة، ويمكن ربطها بالمتحكم بطرق عدةٍ بما في ذلك بروتوكولات I2C و SPI، و بشكلٍ عام يعتبر بروتوكول SPI أسرع من SPI لكنَّه يتطلب عدد منافذ Pins أكثر، بينما يتطلب I2C منفذين فقط.
إن عملية المفاضلة بين عدد المنافذ والسرعة المطلوبة للتصميم هي التي تحدد اختيارك لبروتوكول الاتصال المستخدم.
مواصفات OLED :
- الدِّقة: 128 × 64
- الزاوية البصرية أكبر من 160 درجة.
- جهد الدخل: (3.3 V – 6 V)
- لون البكسل: أزرق
- درجة حرارة العمل: (-30~ 70) درجة مئوية
وللاطلاع أكثر على شاشات OLED يمكنك قراءة المقال التالي: شاشات OLED
مخطط توصيل الدارة:
توصيلات الأردوينو وشاشة ال OLED:
CS | DC | RES | D1 | D0 | VCC | GND | OLED Pin |
12 | 11 | 13 | 9 | 10 | 5 V | Ground | Arduino Pin |
توصيلات الأردوينو و الحساس:
V-LED | LED-GND | LED | S- GND | V0 | VCC | Sensor Pin |
5V through 150 resistor | GND | 7 | GND | A5 | 5 V | Arduino Pin |
الكود البرمجي:
- يتم في الكود استخدم مكتبة Adafruit_GFX ومكتبة Adafruit_SSD1306، حيث يمكن تحميل كل منهما من Manager Arduino IDE وتثبيتهما من هناك.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
- تحديد المنافذ الخاصة بحساس الغبار والليد، حيث إنَّ منفذ الاستشعار هو عبارة عن منفذ الخرج لحساس الغبار المستخدم لقراءة قيم الجهد، في حين منافذ LED تستخدم لتشغيل و إطفاء ليد الأشعة تحت الحمراء IR LED.
int measurePin = A5;
int ledPower = 7;
- تحديد قيم كل من (voMeasured وcalcVoltage وdustDensity):
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
- في دالة Void setup نعرف المخرجات والمدخلات ونقوم بتهيئة شاشة
Void setup () {
Serial. Begin (9600);
Pin Mode (ledPower, OUTPUT);
display.begin (SSD1306_SWITCHCAPVCC);
display.clearDisplay ();
display. Display ();
}
- في دالة Void loop يتم تشغيل وإطفاء الليد الموجود في حساس الغبار ونقوم بقراءة البيانات من المنفذ التناظري
Void loop () {
digitalWrite (ledPower, LOW);
delay Microseconds (280);
VoMeasured = analog Read (measurePin);
delayMicroseconds(40);
digitalWrite(ledPower,HIGH);
delayMicroseconds(9680);
- ثم يتم إجراء عملية حسابية لحساب تركيز ذرات الغبار في الجو المحيط بالميكروغرام أي واحد على مليون من الغرام لكل متر مكعب من الهواء، وفي حال كان ناتج العملية أي “تركيز جزيئات الغبار” سالب يتم اعتبار القيمة صفر.
CalcVoltage = voMeasured*(5.0/1024);
dustDensity = 0.17*calcVoltage-0.1;
If (dustDensity < 0)
{ dustDensity = 0.00; }
Serial.println(“Raw Signal Value (0-1023):”);
Serial.println(voMeasured);
Serial.println(“Voltage:”);
Serial.println(calcVoltage);
Serial.println(“Dust Density:”);
Serial.println(dustDensity);
- ثم بعد إجراء العملية الحسابية تتم طباعة القيمة على شاشة OLED.
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(85,22);
display.println(“Dust”);
display.setCursor(85,38);
display.println(“Density”);
display.setTextSize(3);
display.setCursor(0,13);
display.println(dustDensity);
display.setCursor(6,43);
display.setTextSize(2);
display.println(“ug/m3”);
display.display();
display.clearDisplay();
delay (1000);
}
وهكذا يكون قد تم تقديم شرح تفصيلي للمكونات الأساسية اللازمة لتصميم نظام مراقبة جودة الهواء باستخدام الأردوينو وحساس الغبار وكذلك تم توضيح مخطط توصيل الدارة والكود البرمجي.
إعداد: حسن شليحه، مراجعة: مهند العبيد، تصميم: علي العلي، تدقيق لغوي: بولا ابراهيم، تحرير: رؤى حمود