عناوين الدرس

نظام مراقبة نقاوة الجو باستخدام الاردوينو و حساس الغبار

مبتدئ

المقدمة

قد يتسبب تلوث الهواء والأجواء الغابرة بمشاكل صحية على الإنسان وخصوصا الذين يعانون من ضيق تنفس أو مشاكل في الجهاز التنفسي لذلك يعد من الضروري قياس ومراقبة نقاوة الجو. نركز في هذا الدرس على تعلم كيفية توصيل حساس الغبار مع الاردوينو وعرض قراءة المستشعر على شاشة (OLED). كذلك تحديد مستوى الغبار  و تشغيل ثنائي مشع للضوء يشير إلى كمية الغبار بالجو.

حساس الغبار

 

المواد والأدوات المطلوبة

اردوينو

1 X اردوينو

سلك اردوينو

1 X سلك الأردوينو

حساس الغبار

1 X حساس الغبار

لوحة تجارب حجم متوسط

1X لوحة تجارب

red led

1 X  الثنائي المشع للضوء لون أحمر

green-led-5mm

1 X  الثنائي المشع للضوء لون أخضر

مقاومة 220

2X مقاومة 220

مكثف

1X مكثف (16v,220uf) متوفر مع الحساس

مقاومة 150 اوم

1X مقاومة (150 اوم ) متوفره مع الحساس

اسلاك توصيل

مجموعة أسلاك توصيل (ذكر/ ذكر )

 

حساس الغبار

يتكون حساس الغبار من صمام ثنائي ضوئي. يبعث الضوء ومستكشف ضوء (Photodiode) لتحديد انعكاسات الضوءـ ويتم وضعهما بشكل قطري بالقرب من مدخل الهواء.

حساس الغبار

عندما تعبر كمية من الهواء إلى المستشعر من خلال مدخل الهواء، تسقط الأشعة الضوئية بشكل متكرر على الهواء بداخل الحساس. يسقط الضوء على جزيئات الغبار الموجودة في الهواء ونتيجة لذلك، يتم إنتاج إشارة ضوئية مشتتة. ويتم الكشف عنها بواسطة مستكشف الضوء (Photodiode). يتم تضخيم خرج دائرة كاشف الضوء بواسطة دائرة مضخم الإشارة. بعد ذلك، تتم معالجة الإشارة الضوئية المضخمة للحصول على تركيز جزيئات الغبار في الهواء.

 

يحتوي حساس الغبار على 6 منافذ وظيفتها كالتالي

حساس الغبار

 

الجدول التالي يوضح وضيفة كل منفذ موجود بحساس الغبار

المنفذ وظيفة منفذ حساس الغبار
V-LED لتزويد الصمام الثنائي الضوئي بالطاقة
LED GND الأرضي للصمام الثنائي الضوئي
LED للتحكم بتشغيل الضوء
S-GND المنفذ الأرضي للحساس
Vo ينتج نبضات جهد تناظرية وفقًا لتركيز جزيئات الغبار في الهواء.
VCC لتزويد الحساس بالطاقة مقدارها 5 فولت
GND GUN

 

 

توصيل الدائرة

توصيل حساس الغبار

 

البرمجة

#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 
#define OLED_RESET 4 
Adafruit_SSD1306 display(OLED_RESET);
#if (SSD1306_LCDHEIGHT != 64) 
#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 
#endif 
const int LED1 = 8;
const int LED2 = 10; 
int measurePin = 0; 
int ledPower = 2; 
unsigned int samplingTime = 280;
unsigned int deltaTime = 40;
unsigned int sleepTime = 9680;
float voMeasured = 0; 
float calcVoltage = 0; 
float dustDensity = 0; 
void setup(){ 
  pinMode(ledPower,OUTPUT); 
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
  display.display(); // show splashscreen 
  delay(2000); 
  display.clearDisplay(); // clears the screen and buffer 
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  }
  void loop(){
    digitalWrite(ledPower,LOW);// power on the LED 
    delayMicroseconds(samplingTime); 
    voMeasured = analogRead(measurePin); // read the dust value 
    delayMicroseconds(deltaTime); 
    digitalWrite(ledPower,HIGH); // turn the LED off 
    delayMicroseconds(sleepTime); 
    calcVoltage = voMeasured * (5.0 / 1024.0); 
    dustDensity = 0.17 * calcVoltage - 0.1; 
    display.clearDisplay(); 
    display.setTextSize(2); 
    display.setTextColor(WHITE); 
    display.setCursor(0,0); 
    display.println("airquality="); 
    display.print(dustDensity); 
    display.display(); 
    delay(100); 
     if ( dustDensity < 0)
  {
    dustDensity = 0.00;
  }
    if(dustDensity < 0.12) { 
digitalWrite(LED1, HIGH); 
digitalWrite(LED2, LOW); } 
if(dustDensity >0.12 ) {
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, HIGH);} 
        delay(100); 
  }

شرح الشفرة البرمجية

نبدأ بتحميل المكتبات شرح طريقة تحميل المكتبات من خلال الرابط

ابحث عن مكتبتي (Adafruit_GFX) و (Adafruit_SSD1306) عن طريق النقر على sketch < include library < manage libraries ثم حمل المكتبات

من داخل ملف المكتبات على جهاز انقر على مكتبة (Adafruit_SSD1306) ثم على ملف (Adafruit_SSD1306.h) و قم بالتعديل التالي :

ازالة رمز التعليق () //عن سطر

#define SSD1306_128_64

اضافة رمز التعليق (//) إلى السطر

//#define SSD1306_128_32

بالبداية نقوم باستدعاء المكتبات المطلوبة

#include <Wire.h> 
#include <Adafruit_GFX.h> 
#include <Adafruit_SSD1306.h> 
#define OLED_RESET 4 
Adafruit_SSD1306 display(OLED_RESET); 
#if (SSD1306_LCDHEIGHT != 64) 
#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 
#endif 

نقوم بتعريف منافذ الثنائي المشع للضوء

const int LED1 = 8; 
const int LED2 = 10;

نقوم بتعريف المنافذ التي تم توصيلها مع حساس الغبار وهي  A0 و  المنفذ الرقمي 2

و حدد قيمة ابتدائية تساوي 0 للمتغيرات التالية (samplingTimeو deltaTime  و  int sleepTime)

int measurePin = 0; 
int ledPower = 2; 

int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;

نحدد قيمة ابتدائية لكل من (voMeasured  و calcVoltage  و dustDensity )

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

في دالة void setup نعرف نعرف منافذ الدخل و الخرج و تهيئة شاشة Oled

void setup(){
  pinMode(ledPower,OUTPUT);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
  display.display(); 
  delay(2000);
  display.clearDisplay();   
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);

}

في دالة void loop نشغل و نطفئ الثنائي المشع للضوء الموجود في حساس الغبار و نقرأ البيانات من المنفذ التناظري A0

void loop(){
  digitalWrite(ledPower,LOW); // power on the LED
  delayMicroseconds(samplingTime);

  voMeasured = analogRead(measurePin); // read the dust value

  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH); // turn the LED off
  delayMicroseconds(sleepTime);

نقوم بعمل عملية حسابية لحساب تركيز ذرات الغبار بالجو بالميكروجرام (واحد على مليون من الجرام) لكل متر مكعب من الهواء أو ميكروغرام / م 3.

calcVoltage = voMeasured * (5.0 / 1024.0);

  dustDensity = 0.17* calcVoltage - 0.1;

بعد حساب تركيز الغبار نقوم بطباعة القيمة على الشاشة

 display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    display.println("airquality=");
    display.print(dustDensity);
    display.display();
    delay(2000);

اذا كان تركيز الغبار عدد سالب يتم احتاسبه بقيمة صفر

 if ( dustDensity < 0)
{
dustDensity = 0.00;
}

اذا كان تركيز الغبارأصغر من  (0.12 ) نعطي أمر بتشغيل الثنائي المشع للضوء الأول

if(dustDensity <= 0.12) {
 digitalWrite(LED1, HIGH); 
digitalWrite(LED2, LOW); }

اذا كان تركيز الغبار أكبر من قيمة (0.12) نعطي أمر بتشغيل الثنائي المشع للضوء الثاني

if(dustDensity > 0.12) {   
digitalWrite(LED1, LOW);
   digitalWrite(LED2, HIGH);}
  delay(1000);
}
X
تم إضافة المنتج إلى السلة بنجاح