في هذا الدرس سوف نتعلم كيفية عمل نظام إنذار بسيط جدًا باستعمال Infrared LED و برمجة كود الأدروينو الخاص بها. هذا الدرس رائع جدا للتدريب على استعمال الأدروينو للمبتدئين.
المكونات
ملحوظة :
في هذا الدرس، قمنا بإستعمال TCRT5000 module، والذي يحتوي على ترانزيستور للأشعة الحمراء بالإضافة إلى Infrared LED. وقمنا بإضافة Infrared LED خارجية لتقوية انبعاث الأشعة تحت الحمراء.
كما يمكنك أن تستعمل دايود أشعة تحت الحمراء / ترانزيستور و لكن تأكد من وضع لاصق (أسود) حول الدايود أو الترانزيستور حتى لا يتأثر بالجوانب كما بالصورة.
تصميم لوح التجارب
قم بتوصيل الدائرة كما هو موضح بالصورة التالية :
شرح الدارة
تقوم الدارة ببعث ضوء IR من خلال الـ LEDs الموضوعه، وعندما يتواجد سطح عاكس (تقريبا أي سطح عدا الاسطح السوداء فهي تمتص الضوء و لا تنعكس الا بجزء صغير) تنعكس الأشعة تحت الحمراء لتقوم بالتأثير على الدايود أو الترانيستور وعندما يعمل الدايود يقوم بخفض الجهد نتيجة أن انخفاض مقاومته بشكل ملحوظ و يمكن من خلال الأردوينو قياس قيمة الفولت عن طريق استعمال Analog Read .
برمجة الاردوينو :
قم بكتابة الكود كما هو موضح أدناه :
#define SENSOR A0 #define BUZZER 12 void setup() { pinMode(SENSOR, INPUT); pinMode(BUZZER,OUTPUT); } void loop() { if(readIR(600) == true) beep(); // else // doNothing } void beep(void) { tone(BUZZER, 1000); delay(200); noTone(BUZZER); delay(200); } bool readIR(int refernceValue) { int x = analogRead(SENSOR); if(refernceValue > x) return true; else return false; }
شرح الكود:
في البداية، نقوم بتسمية المدخل A0 بإسم SENSOR ، والمنفذ رقم 12 بإسم BUZZER . وهكذا يصبح الكود أسهل وأفضل في الفهم والتعامل.
داخل الدالة ()setup، نقوم بتعريف الـ SENSOR كمدخل، والـ BUZZER كمخرج.
#define SENSOR A0 #define BUZZER 12 void setup() { pinMode(SENSOR, INPUT); pinMode(BUZZER,OUTPUT); }
في دالة ()loop، نقوم بالتحقق ما إذا كانت القراءة أقل من 600، فإذا تحقق الشرط نقوم بإصدار إنذار.
void loop() { if(readIR(600) == true) beep(); }
نقوم بإنشاء الدالة ()beep، لتوليد الإنذار. حيث تقوم الدالة بإصدار نغمة ذو تردد 1000 هيرتز، وتتوقف لمدة 200 ميلي ثانية بين النغمات.
void beep(void) { tone(BUZZER, 1000); delay(200); noTone(BUZZER); delay(200); }
نقوم بإنشاء الدالة readIR، والتي تقوم بقراءة قيمة الحساس وإذا كانت القيمة أصغر من القيمة refernce value فإن الدالة تقوم بإرجاع قيمة صحيحة true وإلا تقوم بإرجاع قيمة خاطئ false .
bool readIR(int refernceValue) { int x = analogRead(SENSOR); if(refernceValue > x) return true; else return false; }