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

مبتدئ

image_pdf

البرمجة

#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
تم إضافة المنتج إلى السلة بنجاح