اذهب إلى المحتوى

التحكم بالليد LED باستخدام مفتاح الضغط اللحظي Push Button والأردوينو Arduino


Mohammad Baher Karazeh

يعرفك هذا المقال كيفية بناء مشروع إلكتروني باستخدام لوحة الأردوينو Arduino للتحكم بتشغيل وإطفاء ليد LED من خلال استخدام اثنين من مفاتيح الضغط اللحظية Push Button الذي تعرفنا عليها في المقال السابق من سلسلتنا التعليمية لبناء المشاريع الإلكترونية باستخدام لوحات الأردوينو Arduino Board.

فكرة مشروع التحكم بالليد باستخدام مفتاح الضغط اللحظي والأردوينو

سنبني في هذا المشروع دائرة كهربائية بسيطة تستخدم مفتاحين من نوع Push Button للتحكم في تشغيل وإطفاء ليد بشكل دائم، فعند الضغط على المفتاح الأول (ونرمز له بالرمز S1) يضيء الليد، أما عند الضغط على المفتاح الثاني (ونرمز له بالرمز S2) فإن الليد سينطفئ، وفي حال الضغط على المفتاح الأول S1 والمفتاح الثاني S2 معًا وفي الوقت نفسه سينطفئ الليد أيضًا، وعند عدم الضغط على أي من المفتاحين S1 و S2 سيحافظ الليد على حالته السابقة سواء كان مضيء أو منطفئ، فنحصل بهذه الطريقة على تحكم دائم بالليد من خلال مفاتيح ضغط لحظية Push Button حتى عند إزالة الضغط عنها. يوضح لك الجدول الآتي جميع الحالات الممكنة للمفاتيح S1 و S2 ونتيجة تأثيرها على الليد LED

حالات الممكنة للمفاتيح

سنتعلم من هذا المشروع كيفية تطوير مهارات التفكير والتحليل البرمجية حيث سنستطيع من خلال الكود البرمجي استخدام مفتاح الضغط اللحظي Push Button الذي يعطي إشارة للأردوينو فقط عندما يكون مضغوط كمفتاح دائم Switch من خلال بعض المهارات البرمجية. يمكن توظيف فكرة هذا المشروع في المشاريع المستقبلية للتحكم في بدء وإيقاف عمل الكود البرمجي من خلال هذه المفاتيح، فالمفتاح الأول S1 سيستخدم لبدء عمل الكود أما المفتاح الثاني S2 سيستخدم لإيقاف عمل الكود.

العناصر المستخدمة للتحكم بالليد LED باستخدام مفتاح الضغط اللحظي Push Button والأردوينو Arduino

سنستخدم مجموعة من العناصر الإلكترونية والأدوات وهي:

  • لوحة أردوينو أونو Arduino Uno.
  • كابل البرمجة USB Cable.
  • لوحة توصيل التجارب Breadboard.
  • ليد LED.
  • مفتاحين من نوع Push Button.
  • مقاومة بقيمة 220 أوم.
  • مجموعة أسلاك توصيل من نوع Male to Male.

مخطط التوصيل لمشروع التحكم بالليد باستخدام مفتاح الضغط اللحظي والأردوينو

اتبع الخطوات الآتية في عملية توصيل العناصر والأسلاك مع لوحة الأردوينو Arduino لتنفيذ فكرة المشروع:

  • صل أقطاب التغذية في لوحة الأردوينو أونو Arduino Uno مع لوحة توصيل التجارب BreadBoard، إذ يوصل القطب 5v في لوحة الأردوينو مع المسرى الموجب للوحة التجارب، والقطب GND في لوحة الأردوينو مع المسرى السالب للوحة التجارب من خلال أسلاك التوصيل.
  • صل الرجل الأقصر (التي تمثل الطرف السالب) لليد مع الرجل الأولى للمقاومة ذات القيمة 220 أوم، ثم الرجل الأخرى للمقاومة ذات القيمة 220 أوم مع المسرى السالب في لوحة توصيل التجارب BreadBoard.
  • صل الرِّجل الأطول (التي تمثل الطرف الموجب) لليد مع القطب رقم 8 في لوحة الأردوينو أونو Arduino Uno.
  • ثبت المفتاحين الأول S1 والثاني S2 بشكل جيد في منتصف لوحة توصيل التجارب BreadBoard بحيث يكون نصف المفتاح في الجزء الأيمن للوحة التجارب BreadBoard والنصف الثاني للمفتاح في الجزء الأيسر للوحة التجارب BreadBoard.
  • يوجد في مفتاح الضغط اللحظي Push Button أربعة أرجل أو أطراف كما ذكرنا سابقًا، كل اثنين منها متصلة ببعضها داخليًا ويمكن اعتبارها رجلًا واحدة، ولتجنب الخطأ أو التشتت في التوصيل سنعتمد أن نأخذ الأرجل القُطريَّة (الأرجل المختلفة للمفتاح) دائمًا.
    أقطاب مفتاح الضغط اللحظي.jpg
  • صل الطرف الأول للمفتاح الأول S1 مع المسرى السالب للوحة التجارب BreadBoard، ثم صل الطرف الثاني للمفتاح الأول S1 مع القطب رقم 7 في لوحة الأردوينو أونو Arduino Uno.
  • صل الطرف الأول للمفتاح الثاني S2 مع المسرى السالب للوحة التجارب BreadBoard، ثم صل الطرف الثاني للمفتاح الثاني S2 مع القطب رقم 6 في لوحة الأردوينو أونو Arduino Uno.
  • سنفعل مقاومة الرفع الداخلية للمتحكم الموجود في لوحة الأردوينو Arduino برمجيًا؛ لذلك لا داعي لتوصيل مقاومات رفع Pull-Up أو مقاومات خفض Pull-Down مع مفاتيح الضغط اللحظية Push Button.

توضح الصورة الآتية مخطط التوصيل لمشروع التحكم بالليد باستخدام مفتاح الضغط اللحظي:

مخطط توصيل المشروع الرابع

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

سنربط الأقطاب التي سنستخدمها في المشروع مع أسماء خاصة من خلال الماكرو define# في بداية الكود، وذلك لسهولة التعديل عليها عند الحاجة، فكما هو موضح في مخطط التوصيل سيوصل الليد مع القطب رقم 8، المفتاح الأول S1 مع القطب رقم 7، والمفتاح الثاني S2 مع القطب رقم 6 في لوحة الأردوينو أونو Arduino UNO.

#define ledpin 8
#define button1pin 7
#define button2pin 6

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

سنضبط الأقطاب المستخدمة في المشروع في الدالة الرئيسية ()setup، وذلك من خلال الدالة المدمجة ()pinMode التي تأخذ وسيطين: الأول رقم القطب (الذي خُزن في المتغير) والثاني نوع القطب (إما خرج وإما دخل)، حيث أن قطب الليد ledpin سيكون خرج OUTPUT وأقطاب المفاتيح button1pin وbutton2pin ستكون أقطاب دخل مع تفعيل مقاومة رفع داخلية INPUT_PULLUP

void setup() {
  pinMode(ledpin, OUTPUT);
  pinMode(button1pin, INPUT_PULLUP);
  pinMode(button2pin, INPUT_PULLUP);
}

سنعرف في بداية الدالة التكرارية ()loop متغيرين: الأول button1stat خاص بتخزين قيمة القطب الموصول مع المفتاح الأول S1، والثانيbutton2stat خاص بتخزين قيمة القطب الموصول مع المفتاح الثاني S2، وذلك بعد قراءتها من خلال الدالة المدمجة ()digitalRead التي تأخذ وسيطًا واحدًا وهو رقم القطب وتعيد القيمة الفيزيائية الموجودة على القطب، وبما أن المفتاح موصول مع مقاومة رفع داخلية ستكون قيمة القطب LOW أو 0 منطقي في حالة الضغط على المفتاح وHIGH أو 1 منطقي عند إزالة الضغط عن المفتاح.

  int button1stat = digitalRead(button1pin);
  int button2stat = digitalRead(button2pin);

بعد الحصول على حالة المفاتيح (الأول S1 والثاني S2) هل هي مضغوطة أم لا (تحوي القيمة 0 في حالة الضغط والقيمة 1 في حالة عدم الضغط)، سنستخدم العبارات الشرطية if وelse if لفحص حالة المفاتيح والتحكم بتشغيل وإطفاء الليد بالطريقة المناسبة (حسب الجدول الموضح مسبقًا)، ويتم تشغيل وإطفاء الليد برمجيًا من خلال الدالة المدمجة ()digitalWrite التي تأخذ وسيطين: الأول رقم القطب (الذي خُزن في المتغير) والثاني حالة أو قيمة القطب (إما 1 منطقي HIGH للتشغيل وإما 0 منطقي LOW للإطفاء).

  1.  تحقق هل المفتاح الأول S1 مضغوط؟ وهل المفتاح الثاني S2 غير مضغوط؟ في حال تحقق الشرطين معًا (استخدمنا المعامل المنطقي AND الذي يرمز له && لضرورة تحقق الشرطين معًا)، إذًا شغّل الليد في هذه الحالة.
      if  ((button1stat == 0) && (button2stat == 1)) {
        digitalWrite(ledpin, HIGH);
      }
  2. إن لم يتحقق الشرط السابق، تحقق من الشرط الآتي: هل المفتاح الأول S1 غير مضغوط؟ وهل المفتاح الثاني S2 مضغوط؟ في حال تحقق الشرطين معًا، إذًا أطفئ الليد في هذه الحالة.
     else  if ((button1stat == 1) && (button2stat == 0)) {
        digitalWrite(ledpin, LOW);
      }
  3. إن لم يتحقق أي من الشروط السابقة، تحقق من الشرط الآتي: هل المفتاح الأول S1 مضغوط؟ والمفتاح الثاني S2 مضغوط أيضًا؟ في حال تحقق الشرطين معًا، إذًا أطفئ الليد في هذه الحالة.
      else  if ((button1stat == 0) && (button2stat == 0)) {
        digitalWrite(ledpin, LOW);
      }
  4. إن لم يتحقق أي من الشروط السابقة، تحقق من الشرط الآتي: هل المفتاح الأول S1 غير مضغوط؟ والمفتاح الثاني S2 غير مضغوط؟ في حال تحقق الشرطين معًا، حافظ على حالة الليد وذلك من خلال إعطاء قيمة لليد في الدالة المدمجة ()digitalWrite تساوي القيمة المقروءة على قطب الليد من الدالة المدمجة ()digitalRead التي تأخذ رقم القطب وتعيد قيمته الفيزيائية.
  else  if ((button1stat == 1) && (button2stat == 1)) {
    digitalWrite(ledpin, digitalRead(ledpin));
  }

الكود البرمجي النهائي لمشروع التحكم بالليد LED باستخدام مفتاح الضغط اللحظي والأردوينو

#define ledpin 8
#define button1pin 7
#define button2pin 6

void  setup() {
  pinMode(ledpin, OUTPUT);
  pinMode(button1pin, INPUT_PULLUP);
  pinMode(button2pin, INPUT_PULLUP);
}

void  loop()  {
  int button1stat = digitalRead(button1pin);
  int button2stat = digitalRead(button2pin);
  if  ((button1stat == 0) && (button2stat == 1)) {
    digitalWrite(ledpin, HIGH);
  }
  else  if ((button1stat == 1) && (button2stat == 0)) {
    digitalWrite(ledpin, LOW);
  }
  else  if ((button1stat == 0) && (button2stat == 0)) {
    digitalWrite(ledpin, LOW);
  }
  else  if ((button1stat == 1) && (button2stat == 1)) {
    digitalWrite(ledpin, digitalRead(ledpin));
  }
}

محاكاة مشروع التحكم بالليد باستخدام مفتاح الضغط اللحظي

الصفحة الخاصة بمحاكاة المشروع

  • أضف العناصر الإلكترونية اللازمة للمشروع (مفاتيح Push Button، والليدات LEDs، والمقاومات Resistors، ولوحة التجارب BreadBoard).

إضافة العناصر في موقع وكوي

  • غيّر قيمة مقاومة الليد إلى 220 أوم من خلال الضغط عليها فتظهر لك نافذة في الأعلى تمكنك من تغير القيمة والواحدة.

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

  • بالطريقة نفسها يمكنك تغير ألوان الليد والمفاتيح S1 و S2 من خلال الضغط عليها فتظهر لك نافذة بالأعلى تستطيع من خلالها اختيار اللون.

تغير لون الليد والمفتاح

  • رتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الذي عرضناه سابقًا.

  • اكتب الكود البرمجي في الجزء الخاص به ثم شغل المحاكاة، ولاحظ الحالات الآتية:

  1.  اضغط على المفتاح الأول S1 ستجد الليد يضيء (الحالة الأولى).
  2. أزل الضغط عنه ستجد ان الليد ما زال مضيئًا (الحالة الرابعة).
  3. الآن اضغط على المفتاح الثاني S2 ستجد أن الليد انطفئ (الحالة الثانية).
  4. أزل الضغط عنه ستجد أن الليد ما زال منطفئ (الحالة الرابعة).
  5. جرب إعادة الضغط على المفتاح الأول S1 لكي يضيء الليد ثم اضغط على المفتاحين معًا في وقت واحد سينطفئ الليد في هذه الحالة (الحالة الثالثة).

النتيجة النهائية لمحاكاة المشروع الرابع

الخلاصة

تعلمنا في مقال اليوم خطوات تصميم وتنفيذ مشروع للتحكم بتشغيل وإطفاء ليد LED من خلال مفتاحين من نوع Push Button وهو المشروع الرابع في سلسلة دليل أردوينو التي تشرح بناء مجموعة من المشاريع الإلكترونية باستخدام الأردوينو Arduino، واستعرضنا أهم خطوات تنفيذ المشروع وتوصيل العناصر والأدوات والتعامل معها وكيفية كتابة الكود الخاص ببرمجة الأردوينو باستخدام بيئة التطوير المتكاملة (IDE) الخاصة به وعمل محاكاة للمشروع من خلال منصة وكوي Wokwi.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...