سنوظف في هذا المقال ما تعلمناه سابقًا في بناء مشروع جديد من سلسلتنا التعليمية دليل أردوينو وهو عبارة عن نظام لقياس عداد الزوار باستخدام لوحة الأردوينو أونو Arduino Uno، حيث يمكن استخدامه في العديد من الأماكن، لنفترض أننا بحاجة لمعرفة عدد الأشخاص ضمن متجر أو مكتب مثلًا، بحيث إذا كان أكبر من العدد المسموح به، فيجب أن ينتظر الشخص حتى خروج أحد الأشخاص من المكان حتى يدخل هو.
ولبناء هذا المشروع، سنستخدم عنصرًا جديدًا يتمثل في حساس الأشعة تحت الحمراء Infrared Sensor الذي سنتعرف عليه في هذا المقال.
فكرة مشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
سنبني نظامًا لقياس عدد الزوار ضمن متجر يتسع لتسعة أشخاص على الأكثر، وذلك من خلال حساسين من حساسات الأشعة تحت الحمراء Infrared Sensors وشاشة العرض ذات السبع أجزاء Seven Segment Display، حيث يوضع الحساس الأول عند باب الدخول وعند مرور أي جسم أمام هذا الحساس ستزداد قيمة العداد بمقدار واحد، والحساس الثاني يوضع عند باب الخروج وعند مرور أي جسم من أمام هذا الحساس ستنقص قيمة العداد بمقدار واحد، وتعرض قيمة عدد الأشخاص الموجودين داخل المتجر على الشاشة وتحدث باستمرار، والمخطط الآتي يوضح آلية العمل:
العناصر المستخدمة لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
سنستخدم مجموعةً من العناصر الإلكترونية والأدوات وهي:
- لوحة أردوينو أونو Arduino Uno
- كابل البرمجة USB Cable
- لوحة توصيل التجارب Breadboard
- حساس الأشعة تحت الحمراء Infrared Sensor عدد 2
- مقاومة بقيمة 220 أوم عدد 7
- شاشة العرض ذات السبع أجزاء Seven Segment Display من نوع CC
- مجموعة أسلاك توصيل من نوع Male to Male
تعرفنا في المقال السابق على شاشة العرض ذات السبع أجزاء Seven Segment Display وأهميتها في بناء مشاريع إلكترونية تفاعلية وبنينا لعبة بسيطة لتخمين الأرقام، وسنتعرف في هذا المقال على عنصر جديد ومهم وهو حساس الأشعة تحت الحمراء Infrared Sensor.
حساس الأشعة تحت الحمراء Infrared Sensor
يعرف اختصارًا IR Sensor وهو عبارة عن جهاز إلكتروني يتكون من مجموعة من العناصر الإلكترونية المتصلة مع بعضها في دارة إلكترونية، ومن أهم هذه العناصر هي المرسل IR Emitter والمستقبل IR Receiver اللذان يعملان بالاعتماد على الأشعة تحت الحمراء.
- المرسل IR Emitter: عبارة عن عنصر إلكتروني يشبه الليد من حيث الشكل، ولكن يختلف في الوظيفة، حيث عند تغذيته بالجهد الكهربائي المناسب، يرسل أشعة تحت الحمراء غير المرئية للعين البشرية
- المستقبل IR Receiver: عبارة عن عنصر إلكتروني يشبه المرسل من حيث الشكل ولكن يعاكسه في الوظيفة ويستخدم في استقبال واكتشاف الأشعة تحت الحمراء ويحولها إلى إشارة كهربائية
- مضخم عملياتي Op-Amp: عبارة عن عنصر إلكتروني وظيفته تضخيم الإشارة الكهربائية الموجود على أطراف لمستقبل IR Receiver وتحويلها من إشارة تشابهية إلى إشارة رقمية LOW و HIGH
- مقاومة متغيرة: تكون على شكل يشبه البرغي، وظيفتها معايرة مجال المسافة التي يعمل عندها الحساس
- عناصر إلكترونية أخرى: مثل الليدات والمقاومات والمكثفات الإلكترونية
آلية عمل حساس الأشعة تحت الحمراء Infrared Sensor
يعمل هذا الحساس بطريقة بسيطة جدًا، وذلك بالاعتماد على انعكاس الضوء حيث يرسل الليد المرسل IR Emitter إشارةً تتكون من أشعة تحت الحمراء Infrared، وفي حال وجود أي حاجز أو جسم أمام الحساس تنعكس هذه الإشارة وتعود ليستشعرها الليد المستقبل IR Receiver ويحولها إلى إشارة كهربائية، ومن ثم تدخل هذه الإشارة لدارة تحويل رقمية لتعالج وتصبح مناسبة للتعامل معها مع لوحة الأردوينو أو أي متحكم آخر.
أقطاب حساس الأشعة تحت الحمراء Infrared Sensor
يحتوي حساس الأشعة تحت الحمراء IR Sensor على ثلاثة أقطاب وهي:
- القطب الأول من اليمين: هو قطب التغذية الموجب رمزه VCC ويوصل مع القطب 5v في لوحة الأردوينو
- القطب الثاني: هو قطب التغذية السالب رمزه GND ويوصل مع القطب الأرضي في لوحة الأردوينو
- القطب الثالث: هو قطب خرج الحساس رمزه OUT ويعطي إشارة LOW في حال وجود جسم أمامه وإشارة HIGH في حال عدم وجود جسم ويوصل هذا القطب مع أي قطب رقمي في لوحة الأردوينو
مواصفات حساس الأشعة تحت الحمراء
- جهد العمل: 3.3 الى 5 فولت
- تيار العمل: 20 مللي أمبير
- مجال الاستشعار: 2 الى 10 سم
- زاوية الاستشعار: 35 درجة
- حالة الخرج: LOW في حالة الانعكاس و HIGH في حالة عدم الانعكاس
ربط حساس الأشعة تحت الحمراء Infrared Sensor مع الأردوينو Arduino
سنبني تطبيقًا بسيطًا لفهم آلية استخدام الحساس مع لوحة الأردوينو أونو Arduino Uno، حيث وظيفة هذا التطبيق هو اكتشاف العوائق الموجودة أمام الحساس وتشغيل ليد في حال وجود أي جسم أمامه، ولتنفيذ التطبيق علينا اتباع الخطوات الآتية:
- وصل قطب التغذية الموجب للحساس Vcc مع القطب 5v في لوحة الأردوينو أونو
- وصل قطب التغذية السالب للحساس GND مع القطب GND في لوحة الأردوينو أونو
- وصل قطب خرج الحساس مع القطب رقم 3 في لوحة الأردوينو أونو
- لا نحتاج لتوصيل ليد خارجي لأننا سنستخدم الليد الموجود في لوحة الأردوينو أونو ويكون موصول داخليًا مع القطب رقم 13
الصورة الآتية توضح طريقة التوصيل:
الخطوة التالية هي كتابة الكود البرمجي للتطبيق.
سنضبط القطب رقم 13 الخاص بالليد في الدالة الرئيسية ()setup
كقطب خرج OUTPUT
، والقطب رقم 3 الخاص بالحساس كقطب دخل INPUT
، وذلك من خلال الدالة المدمجة ()pinMode
التي تأخذ وسيطين هما رقم القطب ونوع القطب وتكون إما خرج OUTPUT
أو دخل INPUT
.
أما في الدالة التكرارية ()loop
، فسنقرأ حالة للقطب الموصول معه خرج الحساس من خلال الدالة المدمجة ()digitalRead
التي تأخذ وسيطًا واحدًا وهو رقم القطب، وتعيد القيمة الفيزيائية الموجودة على القطب، ومن ثم سنتحقق من هذه القيمة من خلال العبارة الشرطية ()if
في حال كانت القيمة LOW
أي بحالة وجود جسم أمام الحساس، حيث سنشغل الليد LED الموصول على القطب رقم 13 من خلال الدالة المدمجة ()digitalWrite
التي تأخذ وسيطين هما رقم القطب وقيمة القطب، وذلك بإعطائه قيمة 1 منطقي أو HIGH
للتشغيل و 0 منطقي أو LOW
للإطفاء؛ أما في حال كانت القيمة HIGH
بمعنى أن حالة عدم وجود حاجز أمام الحساس، فسنطفئ الليد LED.
void setup(){ pinMode(13, OUTPUT); pinMode(3, INPUT); } void loop(){ if(digitalRead(3) == LOW){ digitalWrite(13, HIGH); } else{ digitalWrite(13, LOW); } }
بعد توصيل العناصر وكتابة الكود البرمجي في بيئة Arduino IDE، نصل كابل البرمجة مع لوحة أردوينو أونو والحاسب ومن ثم نذهب إلى بيئة البرمجية للأردوينو Arduino IDE لاختيار نوع لوحة الأردوينو ورقم المنفذ الموصل معه على الحاسب، وذلك من خلال القائمة العلوية Tools
ومن ثم Boards
لاختيار نوع اللوحة وPort
لاختيار رقم المنفذ، بعد ذلك نضغط على أيقونة Upload
لرفع الكود البرمجي على لوحة الأردوينو.
بعد رفع الكود البرمجي على لوحة الأردوينو أونو بنجاح، لا بد لنا من تمرير يدنا أمام الحساس بمسافة قريبة منه، وتكون أقل من 10 سم، وعندها نلاحظ إضاءة الليد LED الموجود في لوحة الأردوينو أونو Arduino Uno.
مخطط التوصيل لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
سنتبع الخطوات الآتية في عملية توصيل العناصر والأسلاك مع لوحة الأردوينو Arduino لتنفيذ فكرة المشروع:
- وصل أقطاب التغذية في لوحة الأردوينو أونو Arduino Uno مع لوحة توصيل التجارب BreadBoard، إذ يوصل القطب 5v في لوحة الأردوينو مع المسرى الموجب للوحة التجارب، والقطب GND في لوحة الأردوينو مع المسرى السالب للوحة التجارب من خلال أسلاك التوصيل
-
تثبيت شاشة العرض ذات السبع أجزاء Seven Segment Display على لوحة توصيل التجارب BreadBoard ثم صل أقطاب الشاشة مع المقاومات الإلكترونية ولوحة الأردوينو Arduino بالترتيب التالي:
- وصل الرِّجل ذات الرمز A من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 2 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز B من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 3 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز C من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 4 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز D من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 5 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز E من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 6 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز F من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 7 في لوحة الأردوينو
- وصل الرِّجل ذات الرمز G من الشاشة مع الرِّجل الأولى للمقاومة، ووصل الرِّجل الثانية للمقاومة مع القطب رقم 8 في لوحة الأردوينو
- وصل الرِّجل المشتركة CO من الشاشة مع القطب السالب GND في لوحة الأردوينو
- وصل قطب التغذية الموجب Vcc لحساس الأشعة تحت الحمراء IR Sensor الأول والثاني مع المسرى الموجب للوحة التجارب BreadBoard
- وصل قطب التغذية السالب GND لحساس الأشعة تحت الحمراء IR Sensor الأول والثاني مع المسرى السالب للوحة التجارب BreadBoard
- وصل قطب الخرج OUT لحساس الأشعة تحت الحمراء IR Sensor الأول مع القطب رقم 9، والثاني مع القطب رقم 10 في لوحة الأردوينو أونو Arduino UNO
توضح الصورة الآتية مخطط التوصيل لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino:
الكود البرمجي لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
في بداية الكود البرمجي سنعرف عدة متغيرات خاصة بأقطاب العناصر الإلكترونية الموصولة مع لوحة الأردوينو أونو Arduino Uno، فكما رأينا في مخطط التوصيل، سنوصل أقطاب خرج الحساسات مع الأقطاب 9 و 10 في لوحة الأردوينو أونو Arduino Uno وسنخزنها في متغيرات من نوع int
؛ أما بالنسبة لأقطاب شاشة العرض ذات السبع أجزاء Seven Segment فستوصل على الترتيب مع الأقطاب 2 وحتى 8 وستخزَّن هذه الأقطاب داخل مصفوفة أحادية بحجم 7 عناصر من نوع int
.
int Inc_Sensor = 10; int Dec_Sensor = 9; int displayPins [7] = {2, 3, 4, 5, 6, 7, 8};
سنحتاج أيضًا لتعريف خمسة متغيرات أخرى، أولهم هو Number_Of_Visitors
من نوع int
وقيمة ابتدائية تساوي الصفر، وهو خاص بتخزين قيمة عدد الزوار لأن نوع القيم هنا ستكون من نوع عدد صحيح وضمن المجال من 0 وحتى 9؛ أما المتغيرات الأربعة الأخرى، فهي خاصة بقراءة وتخزين قيمة الحساسات الحالية والقيم السابقة لها.
int Number_Of_Visitors = 0; int Cur_Inc_Val = 0; int Cur_Dec_Val = 0; int Las_Inc_Val = 0; int Las_Dec_Val = 0;
كما تعلمنا في المقال السابق نستطيع عرض الأرقم على شاشة العرض ذات السبع أجزاء من خلال إعطاء أوامر التشغيل والإطفاء بشكل منفصل لكل ليد من ليدات الشاشة، ولكن هذه الطريقة ستستهلك أسطر برمجية كثيرة، فعند كل رقم نريد إظهاره على الشاشة، سنحتاج إلى 7 أسطر، بالتالي استهلاك كبير لذاكرة البرنامج Flash Memory في الأردوينو Arduino، ولذلك سنبني دالةً خاصةً تستقبل وسيطًا واحدًا وهو الرقم الذي نريد عرضه على الشاشة، وتعرض هذه الدالة الرقم بطريقة ديناميكية بسيطة وسهلة.
سنعرف داخل هذه الدالة مصفوفةً من نوع بايت byte
بحجم 10 عناصر لأنه لدينا عشرة أرقام من الرقم 0 إلى الرقم 9؛ وبداخل هذه المصفوفة سنكتب القيم الخاصة بتشغيل وإطفاء ليدات الشاشة بالنظام الثنائي binary system بنفس قيم الجدول السابق، وبعد ذلك سنستخدم حلقة تكرارية ()for للمرور على جميع عناصر المصفوفة []displayPins
التي تخزن أرقام أقطاب الشاشة وإعطاء أمر التشغيل أو الإطفاء المقابل للقطب من خلال المصفوفة []numbers
باستخدام الدالة المدمجة ()digitalWrite
.
وللوصول الصحيح للقيمة المقابلة لكل قطب من الشاشة نستخدم الدالة المدمجة ()bitRead
التي تأخذ وسيطين: الأول هو الرقم الذي نريد قراءة بت واحد منه، أما الثاني هو رقم البت حيث يبدأ من الرقم 0 للبت الأول من اليمين، وتعيد هذه الدالة قيمة هذا البت 1 أو 0.
void displayNumber(int num) { const byte numbers[10] = { 0B0111111, // 0 0B0000110, // 1 0B1011011, // 2 0B1001111, // 3 0B1100110, // 4 0B1101101, // 5 0B1111101, // 6 0B0000111, // 7 0B1111111, // 8 0B1101111 // 9 }; for (int i = 0; i < 7; i++) { digitalWrite(displayPins[i], bitRead(numbers[num], i)); } }
سنضبط الأقطاب الخاصة بحساسات الأشعة تحت الحمراء IR Sensors في الدالة الرئيسية ()setup
كأقطاب دخل INPUT
، والأقطاب الخاصة بالشاشة كأقطاب خرج OUTPUT
، وذلك من خلال الدالة المدمجة ()pinMode
.
void setup() { pinMode(Inc_Sensor, INPUT); pinMode(Dec_Sensor, INPUT); for (int i = 0; i < 7; i++) { pinMode(displayPins[i], OUTPUT); } }
من الممكن استخدام الطريقة التالية في آلية العمل داخل الدالة التكرارية ()loop
:
- قراءة قيمة الحساس الأول المسؤول عن استشعار زيادة عدد الزوار
- قراءة قيمة الحساس الثاني المسؤول عن استشعار نقصان عدد الزوار
- في حالة اكتشاف جسم أمام الحساس الأول، ستزيد قيمة المتغير الخاص بعدد الزوار بمقدار واحد
- في حالة اكتشاف جسم أمام الحساس الثاني، ستنقص قيمة المتغير الخاص بعدد الزوار بمقدار واحد
- عرض قيمة المتغير الخاص بعدد الزوار على شاشة العرض ذات السبع أجزاء Seven Segment Display
ولكن هناك مشكلة تقنية مع الطريقة السابقة، وهي أنه في حال وقوف الجسم أمام الحساس سواءً الأول أو الثاني، فستزداد أو تنقص قيمة المتغير الخاص بعدد الزوار أكثر من مرة، ولذلك سنتبع طريقةً تعلمناها في مشروع التحكم بالليد LED باستخدام مفتاح الضغط اللحظي Push Button والأردوينو Arduino، وهي التحقق من القيمة الحالية والسابقة لكل حساس، فإذا كانت القيمة الحالية للحساس الأول LOW
بمعنى حالة وجود جسم أمام الحساس، وكانت الحالة السابقة له HIGH
أي حالة عدم وجود جسم أمام الحساس، فعندها سنزيد قيمة المتغير الخاص بعدد الزوار بمقدار واحد؛ أما في حال كانت القيمة الحالية للحساس الأول LOW
وهي حالة وجود جسم أمام الحساس وكانت الحالة السابقة له أيضًا LOW
أي حالة وجود جسم أمام الحساس، فعندها سيكون الجسم ما يزال موجود أمام الحساس، وفي هذه الحالة لن نزيد قيمة المتغير الخاص بعدد الزوار، والأمر نفسه بالنسبة للحساس الثاني.
في بداية الدالة التكرارية ()loop
سنقرأ القيمة الحالية لكل من الحساس الأول والثاني من خلال الدالة المدمجة ()digitalRead
وسنخزنها في المتغيرات الخاصة بها Cur_Dec_Val
Cur_Inc_Val
.
void loop() { int Cur_Inc_Val = digitalRead(Inc_Sensor); int Cur_Dec_Val = digitalRead(Dec_Sensor);
سنتحقق بعد ذلك من القيمة الحالية والسابقة لحساس الأشعة تحت الحمراء IR Sensor الأول المسؤول عن زيادة قيمة المتغير الخاص بعدد الزوار وذلك من خلال العبارة الشرطية ()if، ففي حال كانت القيمة الحالية هي LOW
أي حالة وجود جسم أمام الحساس الآن والقيمة السابقة هي HIGH
أي عدم وجود جسم أمام الحساس سابقًا؛ فعندها ستزداد قيمة المتغير الخاص بعدد الزوار بمقدار واحد وفي حال أصبحت قيمة هذا المتغير أكبر من 9 لن تزداد قيمته.
if ((Cur_Inc_Val == LOW) && (Las_Inc_Val == HIGH)) { Number_Of_Visitors++; if ( Number_Of_Visitors > 9) Number_Of_Visitors = 9; }
سنتحقق أيضًا من القيمة الحالية والسابقة لحساس الأشعة تحت الحمراء IR Sensor الثاني المسؤول عن نقصان قيمة المتغير الخاص بعدد الزوار من خلال العبارة الشرطية ()if
في حال كانت القيمة الحالية هي LOW
والقيمة السابقة هي HIGH
، فعندها ستنقص قيمة المتغير الخاص بعدد الزوار بمقدار واحد؛ وفي حال أصبحت قيمة هذا المتغير أصغر من 0، فلن تنقص قيمته.
if ((Cur_Dec_Val == LOW) && (Las_Dec_Val == HIGH)) { Number_Of_Visitors--; if ( Number_Of_Visitors < 0) Number_Of_Visitors = 0; }
سنحدّث القيمة السابقة لكل من الحساس الأول والثاني للقيمة الحالة ومن ثم سنعرض قيمة عدد الزوار على شاشة العرض ذات السبع أجزاء من خلال استدعاء الدالة الخاصة ()displayNumber
التي كتبناها سابقًا وسنمرر المتغير Number_Of_Visitors
كوسيط لها، مع إضافة تأخير زمني صغير في النهاية بمقدار 50 مللي ثانية من خلال الدالة المدمجة ()delay
التي تأخذ وسيطًا واحدًا وهو قيمة التأخير بالمللي ثانية.
Las_Inc_Val = Cur_Inc_Val; Las_Dec_Val = Cur_Dec_Val; displayNumber(Number_Of_Visitors); delay(50); }
الكود البرمجي النهائي لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
بعد كتابة جميع أجزاء الكود السابقة في ملف واحد نحصل على الكود النهائي التالي للمشروع:
int Inc_Sensor = 10; int Dec_Sensor = 9; int displayPins [7] = {2, 3, 4, 5, 6, 7, 8}; int Number_Of_Visitors = 0; int Cur_Inc_Val = 0; int Cur_Dec_Val = 0; int Las_Inc_Val = 0; int Las_Dec_Val = 0; void displayNumber(int num) { const byte numbers[10] = { 0B0111111, // 0 0B0000110, // 1 0B1011011, // 2 0B1001111, // 3 0B1100110, // 4 0B1101101, // 5 0B1111101, // 6 0B0000111, // 7 0B1111111, // 8 0B1101111 // 9 }; for (int i = 0; i < 7; i++) { digitalWrite(displayPins[i], bitRead(numbers[num], i)); } } void setup() { pinMode(Inc_Sensor, INPUT); pinMode(Dec_Sensor, INPUT); for (int i = 0; i < 7; i++) { pinMode(displayPins[i], OUTPUT); } } void loop() { int Cur_Inc_Val = digitalRead(Inc_Sensor); int Cur_Dec_Val = digitalRead(Dec_Sensor); if ((Cur_Inc_Val == LOW) && (Las_Inc_Val == HIGH)) { Number_Of_Visitors++; if ( Number_Of_Visitors > 9) Number_Of_Visitors = 9; } if ((Cur_Dec_Val == LOW) && (Las_Dec_Val == HIGH)) { Number_Of_Visitors--; if ( Number_Of_Visitors < 0) Number_Of_Visitors = 0; } Las_Inc_Val = Cur_Inc_Val; Las_Dec_Val = Cur_Dec_Val; displayNumber(Number_Of_Visitors); delay(50); }
محاكاة لمشروع نظام قياس عدد الزوار باستخدام الأردوينو Arduino
تعرفنا في المشاريع السابقة على منصة وكوي Wokwi التي تتيح لنا إمكانية محاكاة لوحة الأردوينو ومجموعة متنوعة من العناصر الإلكترونية؛ ولكن على الرغم من هذا التنوع إلا أنها لا تحتوي على جميع العناصر الموجودة في الواقع، فضمن هذه العناصر، حساس الأشعة تحت الحمراء الذي لم يتم إضافته في المنصة حتى الآن، ولكن نستطيع عمل محاكاة لفكرة المشروع مع تعديل بسيط يكمن في استبدال حساس الأشعة تحت الحمراء IR Sensor بمفتاح الضغط اللحظي Push Button، فكلاهما يستخدمان كعنصر دخل رقمي مع الأردوينو، والإختلاف بينهما أن الحساس هو عنصر إلكتروني يعمل تلقائيًا عند وجود جسم أمامه بينما المفتاح هو عنصر ميكانيكي يحتاج للضغط عليه لكي يعمل.
سنتبع نفس الخطوات التي تعلمناها في مقالٍ التحكم بتشغيل وإطفاء ليد LED باستخدام الأردوينو Arduino للوصول الى الصفحة الخاصة بمحاكاة مشروعك على موقع وكوي Wokwi.
سنضيف الآن العناصر الإلكترونية اللازمة للمشروع، والمتمثللة في كل من Seven Segment و Push Button و Resistors و BreadBoard.
غيّر قيم مقاومات الشاشة إلى 220 أوم من خلال الضغط عليها فتظهر لك نافذة في الأعلى تمكنك من تغير القيمة والواحدة.
بالطريقة نفسها يمكننا تغيير نوع الشاشة إلى Anode أو Cathode، كما يمكننا تغيير لونها أيضًا من خلال الضغط عليها، حيث ستظهر لنا نافذة بالأعلى نستطيع من خلالها تحديد النوع.
بعد ذلك نرتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الآتي:
نكتب الكود البرمجي في الجزء الخاص به ثم شغل المحاكاة، ونلاحظ الحالات الآتية:
- عند بداية التشغيل، ستُعرض القيمة الإبتدائية لمتغير الخاص بعدد الزوار وهي 0 على شاشة العرض ذات السبع أجزاء ومن ثم بانتظار مرور جسم أمام حساس الأشعة تحت الحمراء الأول الخاص بباب الدخول
- ستزداد قيمة المتغير الخاص بعدد الزوار بمقدار واحد وتتحدث القيمة المعروضة على الشاشة عند مرور جسم أمام حساس الأشعة تحت الحمراء الأول، ويجب هنا الضغط على مفتاح الضغط اللحظي الأول في المحاكاة
- ستنقص قيمة المتغير الخاص بعدد الزوار بمقدار واحد وتتحدث القيمة المعروضة على الشاشة عند مرور جسم أمام حساس الأشعة تحت الحمراء الثاني عند الضغط على مفتاح الضغط اللحظي الثاني في المحاكاة
- في حال وقوف الجسم إمام الحساس الأول أو الثاني، لن تتغير قيمة المتغير الخاص بعدد الزوار إلا مرة واحدة.
الخلاصة
تعلمنا في هذا المقال خطوات تصميم وتنفيذ مشروع نظام لقياس عدد الزوار باستخدام حساس الأشعة تحت الحمراء IR Sensor الذي تعرفنا على بنيته وآلية عمله وكيفية استخدامه مع الأردوينو Arduino، بالإضافة إلى كيفية توصيل العناصر مع بعضها وكتابة الكود الخاص ببرمجة الأردوينو باستخدام بيئة التطوير المتكاملة IDE الخاصة به لتنفيذ المشروع، وعمل محاكاة لآلية عمل المشروع من خلال منصة وكوي Wokwi.
نشجعكم لتجربة بناء هذا المشروع والتطوير عليه للحصول على تجربة عملية مفيدة وممتعة.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.