[3 طر ق] للتحكم في LED من خلال Switch بالاردوينو

مشروعنا اليوم عن برمجة الاردوينو لتشغيل LED والتحكم به من خلال المفتاح Switch. وسوف اقوم بعرض لك 3 طرق مختلفة للتحكم فيه، وذلك لتكتسب مزيد من الخبرة في برمجة الاردوينو. وهذا المشروع هو الثاني لنا بعد مشروع Blinking Led الذي نشرناه من فترة وجيزة.

وسوف تجد.. كل المشاريع التي تم نشرها والتي سوف يتم نشرها في قسم مشاريع الأردوينو.

في مشروعنا اليوم سوف نتكلم عن كيف تقوم ببرمجة الأردوينو بطرق مختلفة للتحكم في LED باستخدام Switch:

  • المشروع الأول: إضاءة LED بمجرد الضغط على الزر/المفتاح وإيقافه بمجرد التوقف عن ضغط الزر.
  • المشروع الثاني: إضاءة LED وإطفائه بمجرد الضغط على الزر.
  • مفتاح لتشغيل LED ومفتاح آخر لإيقافه.

 

المشروع الأول: إضاءة LED بمجرد الضغط على الزر/المفتاح وإيقافه

نبدأ بعرض المكونات التي سوف نحتاجها في المشروع، ثم توصيلها بـ لوح الاردوينو اونو.

 

توصيلات المشروع Hardware

المكونات المطلوبة

في هذا المشروع نحتاج إلى مجموعة مكونات وهي:

  • Arduino UNO
  • Breadboard
  • 1 × push Button switch
  • 1 × Red LED
  • 1 × 220Ω Resistor
  • 1 × 10kΩ Resistor

وفي الرسم التالي قمت بتوضيح لك توصيل المكونات مع لوح الاردوينو،..

مشروع التحكم في LED من خلال Switch بالاردوينو

 

شرح توصيلات المشروع

في الرسم كما موضح لقد قمت بتوصيل طرف الليد الموجب (+) مع المقاومة 220 اوم ثم وصلته بالـ Pin رقم 13 بلوح الأردوينو. والطرف السالب لليد قمت بتوصيله مباشرة بالـ Pin ال GND الموجودة بالاردوينو.

توصيل الليد بالاردوينو

 

 

واذا واجهت مشكلة في تحديد انهي طرف الموجب للـ LED وانهي طرف السالب، فالموضوع بسيط يوجد طرق كثيرة لتحديد أطراف الليد. ولكن سوف اوضح طريقتين منهم الأولة وهي من خلال شرائح الليد الداخلية، لو دققت جيداً في الليد وقربته منك سوف تجد شريحتين واحدة كبيرة والأخرى صغيرة كما موضح في الصورة السابقة. الشريحة الكبيرة هي الطرف السالب له، أما الشريحة الصغيرة فهي الطرف الموجب له.

الطريقة الثانية هي من خلال أطراف الـ LED. فعند شرائك ليد جديد سوف تجد طرف كبير والآخر صغير . الكبير يعبر عن الموجب والطرف الآخر الصغير فأنه يعبر عن السالب، اتمنى اكون قد وضحت لك الأمر.  ننتقل الى شرح توصيلات باقي المكونات، لقد انتهينا من توصيل الليد نأتي الى الـ Switch.

 

لقد قمت بتوصيل طرف من أطراف Switch بالـ Pin الـ 5V بالاردوينو. الطرف الثاني قمت بتوصيله بالـ pin رقم 2 للوح الاردوينو. وقمت بتوصيل الطرف الثاني للـ switch ايضاً بالمقاومة 10k أوم على التوالي مع pin ال GND للإردوينو.

الهدف.. من توصيل الـ switch او المفتاح بهذا الشكل هو أنه عندما يكون في حالته الأساسية (أي: غير مضغوط) يكون الجهد على الـ pin رقم 2 للإردوينو هو جهد GND أي يساوي 0V ويطلق على هذه الحالة LOW. وعندما يكون في حالته الثانية (أي: مضغوط) يصبح الجهد على pin رقم 2 للإردوينو هو جهد 5V ويطلق على هذه الحالة HIGH. وهذه هي الإشارات الرقمية التي سوف نقوم بإستخدامها مع الأردوينو، والتي بناءاً عليها سوف يقوم بتنفيذ أوامر معينة،.. مثل إضاءة الليد أو إطفائه.

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

 

خطوات البرمجة Programming

سوف نقوم بتوصيل الاردوينو بالكمبيوتر من خلال الكابل USB type A/B. ونقوم بفتح برنامج Arduino ثم نقوم بظبط الإعداد، وهي الخاصة بتعريف نوع الاردوينو: اتبع الخطوات التالية..

1 | UNO من نافذة البرنامج: اضغط في الشريط من فوق على Tools > Board > Arduino Genuino UNO

2 | الأمر الثاني اسم Port المستخدمة لتوصيل الاردوينو بالكمبيوتر. و تتأكد من انك مستخدم COM الصحيح: اضغط على Tools > Port

 

3 | بعد ذلك افتح مشروع جديد، من خلال الضغط في اعلى البرنامج على File > New project.

 

ثم ضع الكود التالي وهو كود مشروعنا اليوم..

الكود

const int LED = 13;
const int BUTTON = 2;
int ButtonState = 0;
void setup(){
  pinMode(LED,OUTPUT);
  pinMode(BUTTON,INPUT);
}

void loop(){
 ButtonState = digitalRead(BUTTON);
  if(ButtonState == HIGH){
    digitalWrite(LED,HIGH);
  }
    else{
     digitalWrite(LED,LOW);
    }
}

 

شرح أوامر البرنامج (الكود)

في الجزء الأول من الكود قمت بكتابة السطور التالية:

const int LED = 13;
const int BUTTON = 2;
int ButtonState = 0;

وده جزء اللي بكتب فيه الثوابت و المتغيرات. فمثلاً لما كتبت const int LED = 13; هنا انا بقول للمتحكم أو للإردوينو أن LED هي ثابت ويساوي 13 ولا يتغير..

ممكن تعتبرها انك بتُعيد تسمية رقم 13 بـ LED (وهو رقم المخرج pin الذي قمنا بتوصيل عليه الليد). والهدف منها هو استخدام LED أثناء كتابتي للبرنامج، وتسهيل عملية الكتابة ومراجعة الكود البرمجي. وإذا قمت بالاستغناء عن هذا الأمر وكتبت رقم 13 في البرنامج، فسوف يعمل بدون اي مشاكل.

والسطر الثاني ايضاً هو نفس الفكرة هو اني بعرف ثابت BUTTON وأنه يساوي 2.

اما في السطر الثالث فإنه يختلف عن السطرين الأولين. لأنه متغير وليس ثابت، بمعنى أنه سوف تتغير قيمته بقيم أخرى،.. وهتعرف كيف يتغير ولكن لما نتعرف على باقي الأوامر.

 

في الجزء الثاني من الكود هو الجزء الذي تقوم من خلاله بتعريف المداخل والمخارج ويبدأ بـ Void setup():

void setup(){
  pinMode(LED,OUTPUT);
  pinMode(BUTTON,INPUT);
}

في كتابة الكود البرمجي من المهم جداً انك تقوم بتحديد انهي الأطراف اللي هتكون دخل Input وانهي الأطراف اللي هتكون خرج Output. وده من خلال الأمر:

pinMode(pin number , state);

مكان pin number بنضع رقم الـ pin، مثلما فعلت عند كتابتي للكود، حيث قمت بكتابة LED وده لانها تعبر عن Pin رقم 13.
ومكان state بنضع حالة pin هل هي دخل Input مثل الـ Switch / Button. ولا هي خرج Output مثل الـ LED. وانا حددت أن الـ Switch / Button هيكون Input، لان المفتاح وظيفته انه يدخل اشارة رقمية يا اما قيمتها 5V يا اما 0V. لذلك هيكون Input. أما في حالة LED فأنا حددت انه هيكون Output لانه سوف يتم اخراج عليه جهد يا اما 5V ليضئ يا اما 0V ليطفئ. لذلك هيكون Output. ولاتنسى أن pinMode بيتكتب داخل الدالة:

void setup( ){here}

اتمنى تكون الجزئية ده واضحة بالنسبة لك.

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

void loop(){ }

والأوامر بتاعتنا هتكون كالتالي:

 ButtonState = digitalRead(BUTTON);
  if(ButtonState == HIGH){
    digitalWrite(LED,HIGH);
  }
   else{
     digitalWrite(LED,LOW);
    }

في أول أمر، قمت بكتابة ButtonState = digitalRead(BUTTON); اه معناه الكلام ده،.. لو تتذكر معي في الأول خالص كنت قد عرفت ثابت BUTTON بأنه يعبر عن الـ pin رقم 2، هنا انا استخدمت BUTTON بدلاً من ذكر رقم 2. ومن خلال الأمر digitalRead(BUTTON) فانا بقوله قم بقراءة القيمة اللي على الـ pin رقم 2. القيمة ده في حالتنا هتكون يا اما HIGH وده في حالة الـ Switch مضغوط يا اما LOW في حالة انه غير مضغوط. ولكن ماذا عن الجزء الثاني من الأمر؟.. وبقوله بعد كدا.. خزن لي قيمة هذه القراءة في متغير اسمه ButtonState.

ثم بعد ذلك..
لو كانت قراءتك للمدخل رقم 2 تساوي HIGH خرج على المخرج 13 (LED) قيمة HIGH ،.. وإن لم يكن.. اجعل قيمته LOW. ده اللي انا وضحته له من خلال الجملة الشرطية if ..else

  if(ButtonState == HIGH){
    digitalWrite(LED,HIGH);
  }
   else{
     digitalWrite(LED,LOW);
    }

والأمر digitalWrite هو المسئول عن تطبيق الخرج اذا كان خرج HIGH او خرج LOW. حيث نقوم بكتابة داخله رقم المخرج وهو 13 وتعبر عنه بـ LED والخرج المراد تطبيقه عليه وهو يا اما HIGH او LOW. ملحوظة: HIGH تعني 5V و LOW تعني 0V.

كدا انتهينا من شرح الكود لو فيه اي نقطة غير واضحة .. لا تترد في انك تكتبها في تعليق وهرد عليك مباشرة.

 

الفيديو التالي: هو تجربة عملية

الفيديو يحتوي على تجربة عملية للثلاث مشاريع شاهد فقط المشروع الأول، وعندما تكمل قراءة التعديلات في المشاريع الأخرى استكمل مشاهدة بقية الفيديو،.. مشاهدة ممتعة ?

 

المشروع الثاني: إضاءة LED وإطفائه بمجرد الضغط على الزر.

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

const int LED = 13;
const int BUTTON = 2;
int ButtonState = 0;

void setup(){
  pinMode(LED,OUTPUT);
  pinMode(BUTTON,INPUT);
}

void loop(){
 ButtonState = digitalRead(BUTTON);
  if(ButtonState == HIGH){
    digitalWrite(LED,HIGH);
    delay(100);
    digitalWrite(LED,LOW);
    delay(100);
  }
    else{
     digitalWrite(LED,LOW);
    }
}

التعديلات التي قمت بها للكود .. حددتها لك بخط ثقيل.
وهما ثلاث سطور الأول هو delay(100); ، وهذا الأمر وظيفته كما قلت لك انه بيأخر حالة الليد لفترة معينة بالملي ثانية وانا هنا كتبت 100 اي 100 ملي ثانية. ثم بعد ذلك كتبت الأمر الثاني وهو digitalWrite(LED,LOW); يعني خرج 0V على الليد يعني اقفله ثم انتظر 100 ملي ثانية.

تعالى نفسر.. تاني اللي حصل: الأردوينو سوف يبدأ بقراءة قيمة pin رقم 2 لو وجدها HIGH (المفتاح مضغوط) هينفذ الأوامر التي داخل الجملة الشرطية if؛ و الأوامر هي انه يشغل الليد لمدة 100 ملي ثانية ويطفئه لمدة 100 ملي ثانية.

ثم ينتقل الى الأمر else يجد أن شرط else لم يحقق؛ لأنه يشترط ان قراءة المدخل رقم 2 تكون LOW (المفتاح غير مضغوط) لكي يقوم بإطفاء الليد. ويرجع يكرر الاردوينو نفس الأوامر فتظهر لك النتيجة النهائية هي ان الليد يعمل ويطفئ بشكل متكرر طالما انك ضاغط على المفتاح، ولما ترفع اصبعك عنه سوف يطفئ تماماً.

“للتجربة العملية.. شاهد المشرع الثاني في الفيديو السابق”

 

المشروع الثالث: مفتاح لتشغيل الـ LED ومفتاح آخر لإيقافه

انتقل معك الى مشروعنا الثالث والأخير، .. والهدف منه ان احنا نقوم بتشغيل الليد بالSwitch لوحده ونقوم بغلقه من خلال Switch آخر. وقد وفرت لك توصيلات الدائرة وتوصيل المفتاح الثاني في الصورة التالية:

مفتاح لتشغيل الـ LED ومفتاح آخر لإيقافه

 

 

انا هنا.. وصلت مفتاح ثاني بنفس طريقة المفتاح الأول. ولكن قمت بتوصيل الطرف الثاني له بـ pin رقم 3 بالأردوينو. والتوصيلات الأخرى كما هي. نبدأ بأه نكتب البرنامج بتاعنا،..

const int LED = 13;
const int BUTTONon = 2;
const int BUTTONoff = 3;

void setup( ){
  pinMode(LED,OUTPUT);
  pinMode(BUTTONon,INPUT);
  pinMode(BUTTONoff,INPUT);
}

void loop(){
  if(digitalRead(BUTTONon) == HIGH){
    digitalWrite(LED,HIGH);
  }
    else if(digitalRead(BUTTONoff) == HIGH){
    digitalWrite(LED,LOW);
      }
}

انا هنا في الكود لو تلاحظ قمت ببعض التعديلات:

  1. غيرت ثابت وهو BUTTON الى BUTTONon وده للتمييز بينه وبين الSwitch الثاني الي قمنا بإضافته.
  2. قم بإضافة ثابت جديد وهو BUTTONoff ويعبر عن pin رقم 3، وحددته ايضاً في void setup على أنه Input. واعتقد انت فهمت يعني ايه input..
  3. اضفت أمر جديد وهو else if؛ وده امر بيسمحلي اضيف شرط تاني مع الشرط الأول if.

تعالى.. نفسر الكود
الاردوينو سوف يقوم في أول أمر الـ if بالتأكد إذا كان الشرط الموجود به متحقق ولا لا. وذلك من خلال قراءة الـ pin رقم 2 لو وجدها HIGH (المفتاح مضغوط) ينفذ الأمر الذي بداخل الجملة الشرطية وهو إخراج اشارة HIGH على الـ pin رقم 13 (إضاءة الليد).

ثم ينتقل الى الأمر الثاني وهو else if والتاكد اذا كان الشرط الموجود به متحقق ولا لا. وذلك من خلال قراءة الـ pin رقم 2 لو وجدها HIGH (المفتاح مضغوط) ينفذ الأمر اللي بداخلها وهو إخراج اشارة LOW على الـ pin رقم 13 (إطفاء الليد).

 

النتيجة النهائية هى أنك بمجرد الضغط على المفتاح الأول سوف يضيء الليد. وبمجرد الضغط على المفتاح الثاني سوف يطفئ الليد.

“للتجربة العملية.. شاهد المشرع الثالث في الفيديو السابق”

 

اتمنى اكون قد وُفقت .. في توضيح لك “طرق التحكم في LED من خلال Switch بالاردوينو”. اتمنى اكون قد قدمت لك قيمة حقيقية من خلال قراءتك لهذا الموضوع. واذا واجهت اي مشكلة او صعوبة في فهم أي جزئية لا تتردد في ترك استفسارك في التعليقات بالأسفل. واترك تعليق توضح لي مدى استفادتك من الشرح.…وتقدر تحصل على اخر المشاريع اول بأول على ايميلك من خلال الاشتراك في النشرة البريدية من هنا.. اتمنى لك التوفيق

التعليقات

أترك تعليق..

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.