يستخدم مستشعر تجنب الحواجز بالأشعة تحت الحمراء (IR Obstacle Avoidance) مع اردوينو في عدد من التطبيقات مثل الروبوتات وأنظمة الأمان وخطوط الانتاج الصناعية. في هذا الدرس سنتعلم صنع اضاءة ذكية باستخدام مستشعر تجنب الحواجز بالأشعة تحت الحمراء وكيفية عمل الحساس في عد الزوار بالأماكن المغلقة مثل قاعات المؤتمرات والفصول الدراسية وجعل الاضاءة في هذه الأماكن تعمل فقط في حال وجود أفراد وذلك تجنبا للاستهلاك الزائد للطاقة وهدرها
المواد والأدوات المطلوبة
x1 اردوينو أونو
x2 مستشعر تجنب الحواجز بالأشعة تحت الحمراء
x1 سلك أردوينو
x1 لوحة تجارب
x1 LED
أسلاك توصيل (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(" "); } }