عناوين الدرس

إضاءة ذكية باستخدام مستشعر تجنب الحواجز بالأشعة تحت الحمراء

مبتدئ

يستخدم مستشعر تجنب الحواجز بالأشعة تحت الحمراء (IR Obstacle Avoidance) مع اردوينو في عدد من التطبيقات مثل الروبوتات وأنظمة الأمان وخطوط الانتاج الصناعية. في هذا الدرس سنتعلم صنع اضاءة ذكية باستخدام مستشعر تجنب الحواجز بالأشعة تحت الحمراء وكيفية عمل الحساس في عد الزوار بالأماكن المغلقة مثل قاعات المؤتمرات والفصول الدراسية وجعل الاضاءة في هذه الأماكن تعمل فقط في حال وجود أفراد وذلك تجنبا للاستهلاك الزائد للطاقة وهدرها

إضاءة ذكية مستشعر تجنب الحواجز بالأشعة تحت الحمراء

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

اردوينو

x1 اردوينو أونو

إضاءة ذكية مستشعر تجنب الحواجز بالأشعة تحت الحمراء

x2 مستشعر تجنب الحواجز بالأشعة تحت الحمراء

arduino-usb-lead-blue

x1 سلك أردوينو

lcd

x1 شاشة كرستالية

لوحة تجارب

x1 لوحة تجارب

ليدات 10 ملم

x1 LED

مقاومة متغيرة

x1 مقاومة متغيرة

مقاومة 220

x2 مقاومة 220 أوم

اسلاك توصيل

أسلاك توصيل (M/M)اسلاك توصيل

أسلاك توصيل (F/M)

مستشعر تجنب الحواجز بالأشعة الحمراء

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

إضاءة ذكية مستشعر تجنب الحواجز بالأشعة تحت الحمراء

فكرة عمل المشروع 

تعتمد فكرة المشروع على وجود حساسين تجاوز العقبات ، يزيد العداد أو ينقص اعتمادًا على اتجاه حركة الشخص ويتم تحديد ذلك من خلال أي من المستشعرين يكتشف الشخص أولاً.

إضاءة ذكية مستشعر تجنب الحواجز بالأشعة تحت الحمراء

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

إضاءة ذكية مستشعر تجنب الحواجز بالأشعة تحت الحمراء

الكود البرمجي

قم برفع الكود البرمجي التالي على لوحة الاردوينو

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 
#define sensorPin1 9
#define sensorPin2 10
#define led 8

int sensorState1 = 0;
int sensorState2 = 0;
int count=0;

void setup()
{
pinMode (sensorPin1, INPUT_PULLUP);
pinMode (sensorPin2, INPUT_PULLUP);
pinMode(led, OUTPUT);

lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("COUNTER");
lcd.setCursor(0,1);
lcd.print("No Visitors ");
delay(200);
}

void loop()
{ 
sensorState1 = digitalRead(sensorPin1);
sensorState2 = digitalRead(sensorPin2);

if(sensorState1 == LOW){
count++; 
delay(500);
}

if(sensorState2 == LOW){
count--; 
delay(500);
}


if(count<=0)
{
digitalWrite(led, LOW); 
lcd.setCursor(0,1);
lcd.print("No visitors ");
}
else if (count>0 ){
digitalWrite(led, HIGH);
lcd.setCursor(0,1);
lcd.print("Visitors: ");
lcd.setCursor(12,1);
lcd.print(count);
lcd.setCursor(13,1);
lcd.print(" "); 

}
}

شرح الكود البرمجي

بالبداية نقوم باستدعاء مكتبة الشاشة الكرستالية LiquidCrystal و نعرف منافذ الشاشة و منافذ حساس تجنب العوائق و الليد

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); 
#define sensorPin1 9
#define sensorPin2 10
#define led 8

ننشئ متغير لحالة الحساس الأول و الثاني بقيمة ابتدائية 0

int sensorState1 = 0;
int sensorState2 = 0;

ننشئ متغير يمثل قيمة عدد الأفراد الموجودين بالغرفة

int count=0;

في دالة (void setup) نعرف منافذ الادخال و منافذ الاخراج للقطع المستخدمة ونقوم بتهيئة الشاشة

void setup()
{
pinMode (sensorPin1, INPUT_PULLUP);
pinMode (sensorPin2, INPUT_PULLUP);
pinMode(led, OUTPUT);

lcd.begin(16,2);
lcd.setCursor(4,0);
lcd.print("COUNTER");
lcd.setCursor(0,1);
lcd.print("No Visitors ");
delay(200);
}

في دالة ال(void loop) نقوم بقراءة اشارة الدخل من الحساس

void loop()
{ 
sensorState1 = digitalRead(sensorPin1);
sensorState2 = digitalRead(sensorPin2);

if(sensorState1 == LOW){
count++; 
delay(500);
}

if(sensorState2 == LOW){
count--; 
delay(500);
}

اذا كانت قيمة متغير عدد أفراد الغرفة (count) أقل أو يساوي 0 يتم ايقاف تشغيل الاضاءة و يتم طباعة “No Visitors” على الشاشة الكرستالية

if(count<=0)
{
digitalWrite(led, LOW); 
lcd.setCursor(0,1);
lcd.print("No visitors ");
}

اذا كانت قيمة متغير عدد أفراد الغرفة (count) وطباعة عدد أفراد الغرفة على الشاشة الكرستالية  أكبر من 0 يتم تشغيل الاضاءة

else (count>0 ){
digitalWrite(led, HIGH);
lcd.setCursor(0,1);
lcd.print("Visitors: ");
lcd.setCursor(12,1);
lcd.print(count);
lcd.setCursor(13,1);
lcd.print(" "); 

}

}
X
تم إضافة المنتج إلى السلة بنجاح