البرمجة
#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);
}

