البحث في الموقع
المحتوى عن 'دليل أردوينو'.
-
يعرفك هذا المقال كيفية بناء مشروع إلكتروني باستخدام لوحة الأردوينو 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 أربعة أرجل أو أطراف كما ذكرنا سابقًا، كل اثنين منها متصلة ببعضها داخليًا ويمكن اعتبارها رجلًا واحدة، ولتجنب الخطأ أو التشتت في التوصيل سنعتمد أن نأخذ الأرجل القُطريَّة (الأرجل المختلفة للمفتاح) دائمًا. صل الطرف الأول للمفتاح الأول 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 للإطفاء). تحقق هل المفتاح الأول S1 مضغوط؟ وهل المفتاح الثاني S2 غير مضغوط؟ في حال تحقق الشرطين معًا (استخدمنا المعامل المنطقي AND الذي يرمز له && لضرورة تحقق الشرطين معًا)، إذًا شغّل الليد في هذه الحالة. if ((button1stat == 0) && (button2stat == 1)) { digitalWrite(ledpin, HIGH); } إن لم يتحقق الشرط السابق، تحقق من الشرط الآتي: هل المفتاح الأول S1 غير مضغوط؟ وهل المفتاح الثاني S2 مضغوط؟ في حال تحقق الشرطين معًا، إذًا أطفئ الليد في هذه الحالة. else if ((button1stat == 1) && (button2stat == 0)) { digitalWrite(ledpin, LOW); } إن لم يتحقق أي من الشروط السابقة، تحقق من الشرط الآتي: هل المفتاح الأول S1 مضغوط؟ والمفتاح الثاني S2 مضغوط أيضًا؟ في حال تحقق الشرطين معًا، إذًا أطفئ الليد في هذه الحالة. else if ((button1stat == 0) && (button2stat == 0)) { digitalWrite(ledpin, LOW); } إن لم يتحقق أي من الشروط السابقة، تحقق من الشرط الآتي: هل المفتاح الأول 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)); } } محاكاة مشروع التحكم بالليد باستخدام مفتاح الضغط اللحظي اتبع الخطوات التي تعلمناها في مقالٍ سابق للوصول الى الصفحة الخاصة بمحاكاة مشروعك على موقع وكوي Wokwi .تستطيع الرجوع إليها من خلال مقال التحكم بتشغيل وإطفاء ليد LED باستخدام الأردوينو Arduino أضف العناصر الإلكترونية اللازمة للمشروع (مفاتيح Push Button، والليدات LEDs، والمقاومات Resistors، ولوحة التجارب BreadBoard). غيّر قيمة مقاومة الليد إلى 220 أوم من خلال الضغط عليها فتظهر لك نافذة في الأعلى تمكنك من تغير القيمة والواحدة. بالطريقة نفسها يمكنك تغير ألوان الليد والمفاتيح S1 و S2 من خلال الضغط عليها فتظهر لك نافذة بالأعلى تستطيع من خلالها اختيار اللون. رتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الذي عرضناه سابقًا. اكتب الكود البرمجي في الجزء الخاص به ثم شغل المحاكاة، ولاحظ الحالات الآتية: اضغط على المفتاح الأول S1 ستجد الليد يضيء (الحالة الأولى). أزل الضغط عنه ستجد ان الليد ما زال مضيئًا (الحالة الرابعة). الآن اضغط على المفتاح الثاني S2 ستجد أن الليد انطفئ (الحالة الثانية). أزل الضغط عنه ستجد أن الليد ما زال منطفئ (الحالة الرابعة). جرب إعادة الضغط على المفتاح الأول S1 لكي يضيء الليد ثم اضغط على المفتاحين معًا في وقت واحد سينطفئ الليد في هذه الحالة (الحالة الثالثة). الخلاصة تعلمنا في مقال اليوم خطوات تصميم وتنفيذ مشروع للتحكم بتشغيل وإطفاء ليد LED من خلال مفتاحين من نوع Push Button وهو المشروع الرابع في سلسلة دليل أردوينو التي تشرح بناء مجموعة من المشاريع الإلكترونية باستخدام الأردوينو Arduino، واستعرضنا أهم خطوات تنفيذ المشروع وتوصيل العناصر والأدوات والتعامل معها وكيفية كتابة الكود الخاص ببرمجة الأردوينو باستخدام بيئة التطوير المتكاملة (IDE) الخاصة به وعمل محاكاة للمشروع من خلال منصة وكوي Wokwi. اقرأ أيضًا المقال السابق: تخمين عدد مرات وميض الليد باستخدام الأردوينو Arduino التعرف على أساسيات الأردوينو وتجهيز بيئة العمل تثبيت أردوينو IDE ورفع الشيفرات على لوحة أردوينو بناء إشارة مرور باستخدام الأردوينو Arduino صنع قلب نابض باستخدام لوحة راسبيري باي بيكو
-
نستكمل في هذا المقال بناء المشروع الثالث من سلسلتنا التعليمية دليل أردوينو Arduino، سنتعلم في هذا المقال كيفية بناء مشروع إلكتروني تفاعلي من خلال تصميم وتنفيذ لعبة بسيطة لتخمين عدد مرات وميض ليد باستخدام لوحة أردوينو أونو Arduino Uno فكرة مشروع تخمين عدد مرات وميض الليد سنبني مشروعًا يحسب عدد مرات تشغيل وإطفاء ليد بفترات زمنية عشوائية ضمن مجال محدد عند الضغط على مفتاح الضغط اللحظي Push Button (سنشرحه لاحقًا في هذا المقال) بشكل مستمر، ويجب على المستخدم حساب أو تخمين هذا الرقم، في النهاية بعد إزالة الضغط عن المفتاح سيتوقف الليد عن الومض ويطبع عدد مرات تشغيل وإطفاء الليد على نافذة الاتصال التسلسلي Serial monitor. سنتبع تسلسل الخطوات الآتية في آلية عمل المشروع: فحص حالة المفتاح (مضغوط أم لا) وإذا كان مضغوطًا تنفذ الخطوات من 2 إلى 5 وإلا تكرر الخطوة 1. يضيء الليد لفترة زمنية عشوائية ضمن مجال محدد. ينطفئ الليد لفترة زمنية عشوائية ضمن مجال محدد. تزداد قيمة العداد بمقدار 1. فحص حالة المفتاح (مضغوط أم لا) وإذا كان مضغوطًا تكرر الخطوات من 2 إلى 5 وإلا ينتقل إلى 6 فحص قيمة العداد إذا كانت أكبر من 0 (ومض الليد مرة واحدة على الأقل) وإذا كان الشرط محققًا تنفيذ الخطوة 7 و 8 وإلا الرجوع إلى الخطوة 1. طباعة قيمة العداد. تصفير قيمة العداد. العناصر المستخدمة لمشروع تخمين عدد مرات وميض الليد العناصر التي سنستخدمها لعمل هذا المشروع هي: لوحة أردوينو أونو Arduino Uno. كابل البرمجة USB Cable. لوحة توصيل التجارب Breadboard. ليد LED. مفتاح الضغط اللحظي Push Button. مقاومة بقيمة 220 أوم. مقاومة بقيمة 10 كيلو أوم. مجموعة أسلاك توصيل من نوع Male to Male. ما هو مفتاح الضغط اللحظي Push Button عبارة عن مفتاح ميكانيكي لحظي عند الضغط عليه تتصل أطرافه معًا مما يؤدي إلى إغلاق الدائرة الكهربائية المتصلة به، وعند إزالة الضغط يعود إلى حالته الأولى، يمكن أن يستخدم كعنصر للتحكم بالتشغيل والإيقاف بإعطاء إشارة رقمية Digital إلى الأردوينو Arduino من خلال توصيل أحد أطرافه مع 5v أو GND والطرف الآخر مع إحدى أقطاب الأردوينو الرقمية. مثلًا وصَّلنا الطرف الأول للمفتاح مع 5v والطرف الثاني مع القطب رقم 2 للأردوينو Arduino وضغطنا على المفتاح في هذه الحالة عند قراءة قيمة القطب ستكون HIGH أو 1 منطقي. أو إذا كان الطرف الأول للمفتاح وصل مع GND بدلًا من 5v والطرف الثاني مع القطب رقم 2 للأردوينو Arduino فإنه عند الضغط على المفتاح ستكون قيمة القطب LOW أو 0 منطقي. ولكن نلاحظ أنه في حال عدم الضغط على المفتاح فإنه يعطي قيم خاطئة أو عشوائية وذلك لأنه عند عدم الضغط على المفتاح لا يوجد أي إشارة على قطب الأردوينو (1 منطقي HIGH أو 0 منطقي LOW) وتسمى هذه الحالة بالحالة العائمة أو حالة مقاومة عالية (High-Z or High impedance). نحل هذه المشكلة من خلال إضافة مقاومة رفع Pull-Up Resistor من خلال توصيل مقاومة بين قطب الأردوينو و5v (تكون القيمة الافتراضية للقطب في حال عدم الضغط على المفتاح هي HIGH أو 1 منطقي أما عند الضغط على المفتاح فتكون قيمته LOW أو 0 منطقي) أو إضافة مقاومة خفض Pull-Down Resistor من خلال توصيل مقاومة بين قطب الأردوينو والأرضي GND (تكون القيمة الافتراضية للقطب في حال عدم الضغط على المفتاح هي LOW أو 0 منطقي أما عند الضغط على المفتاح فستكون قيمته HIGH أو 1 منطقي). توضح الصورة الآتية حالة قطب الدخل في لوحة الأردوينو أونو Arduino Uno في حال استخدام مقاومة رفع مع مفتاح الضغط اللحظي Push Button أو بدونها. وتوضح الصورة الآتية طريقة توصيل مقاومة الرفع والخفض مع مفتاح الضغط اللحظي Push Button في لوحة الأردوينوأونو Arduino UNO مخطط التوصيل لمشروع تخمين عدد مرات وميض الليد اتبع الخطوات الآتية في عملية توصيل العناصر والأسلاك مع لوحة الأردوينو Arduino لتنفيذ فكرة المشروع: صل أقطاب التغذية في لوحة الأردوينو أونو Arduino Uno مع لوحة توصيل التجارب BreadBoard، إذ يوصل القطب 5v في لوحة الأردوينو مع المسرى الموجب للوحة التجارب، والقطب GND في لوحة الأردوينو مع المسرى السالب للوحة التجارب من خلال أسلاك التوصيل. صل الرِّجل الأطول (التي تمثل الطرف الموجب) لليد مع الرجل الأولى للمقاومة ذات القيمة 220 أوم، ثم الرجل الأخرى للمقاومة ذات القيمة 220 أوم مع القطب رقم 13 في لوحة الأردوينو أونو Arduino Uno. صل الرجل الأقصر (التي تمثل الطرف السالب) لليد مع المسرى السالب في لوحة توصيل التجارب BreadBoard. يوجد في مفتاح الضغط اللحظي Push Button أربعة أرجل أو أطراف كما ذكرنا سابقًا، كل اثنين منها متصلة ببعضها داخليًا ويمكن اعتبارها رجلًا واحدة، ولتجنب الخطأ أو التشتت في التوصيل سنعتمد أن نأخذ الأرجل القطرية (الأرجل المختلفة للمفتاح) دائمًا. ثبت المفتاح بشكل جيد في منتصف لوحة توصيل التجارب BreadBoard، بحيث يكون نصف المفتاح في الجزء الأيمن للوحة التجارب BreadBoard والنصف الثاني للمفتاح في الجزء الأيسر للوحة التجارب BreadBoard. صل الطرف الأول للمفتاح مع المسرى السالب للوحة التجارب BreadBoard، والطرف الثاني للمفتاح مع القطب رقم 2 في لوحة أردوينو أونو Arduino Uno. صل الطرف الأول للمقاومة ذات القيمة 10 كيلو أوم مع الطرف الثاني للمفتاح (المتصل مع القطب رقم 2 في لوحة الأردوينو أونو Arduino Uno). صل الطرف الثاني للمقاومة ذات القيمة 10 كيلو أوم مع المسرى الموجب للوحة توصيل التجارب BreadBoard. توضح الصورة الآتية مخطط التوصيل لمشروع تخمين عدد مرات وميض الليد: الكود البرمجي لمشروع تخمين عدد مرات وميض الليد نحتاج في البداية لتعريف متغيرات خاصة بأرقام أقطاب بالليد LED والمفتاح Push Button؛ فكما شرحنا في مخطط التوصيل سيوصل المفتاح مع القطب رقم 2 والليد مع القطب رقم 13، وبما أن هذه الأرقام صحيحة نخزنها في متغيرات من نوع int. int led = 13; int button = 2; شرحنا في فكرة المشروع أن الليد سيضيء وينطفئ لمدة زمنية عشوائية ولكن هذه المدة ضمن مجال محدد لذلك نخزن مجال القيم العشوائية الخاصة بالتأخير الزمني في متغيرات من نوع int وسنختار أقل مدة هي 100 مللي ثانية وأكثر مدة هي 500 مللي ثانية. int minDelay = 100; int maxDelay = 500; أخيرًا نحتاج إلى تعريف متغير من نوع int لتخزين قيمة العداد بقيمة ابتدائية 0. int count = 0; سنفعّل واجهة الاتصال التسلسلية Serial Communication داخل الدالة الرئيسية ()setup في البداية من أجل عرض قيمة العداد على نافذة الاتصال التسلسلي Serial Monitor الموجودة في بيئة الأردوينو البرمجية Arduino IDE وذلك من خلال التابع ()Serial.begin الذي تأخذ وسيطين: الأول أساسي وهو سرعة نقل البيانات Baud rate بمعدل بت في الثانية وسنختار 9600، والثاني اختياري خاص بضبط الإعدادات config الأخرى لواجهة الاتصال ويمكن تركه فارغًا حيث يأخذ الضبط الافتراضي في هذه الحالة. سنضبط بعدها القطب الخاص بالليد كقطب خرج OUTPUT والقطب الخاص بالمفتاح كقطب دخل INPUT من خلال الدالة المدمجة ()pinMode التي تأخذ وسيطين: الأول رقم القطب (الذي خُزن في المتغير) والثاني نوع القطب (إما خرج وإما دخل) void setup() { Serial.begin(9600); pinMode(led, OUTPUT); pinMode(button, INPUT_PULLUP); } سنعرف في الدالة التكرارية ()loop في البداية متغيرًا خاصًا بتخزين قيمة القطب الموصول مع المفتاح بعد قراءتها من خلال الدالة ()digitalRead التي تأخذ وسيطًا واحدًا وهو رقم القطب وتعيد القيمة الفيزيائية الموجودة على القطب، وبما أن المفتاح موصول مع مقاومة رفع خارجية ستكون قيمة القطب LOW أو 0 منطقي في حالة الضغط على المفتاح وHIGH أو 1 منطقي عند إزالة الضغط عن المفتاح. int buttonStat = digitalRead(button); سيومض الليد وتزداد قيمة العداد باستمرار ولكن بشرط استمرار الضغط على المفتاح؛ لذلك سنستخدم الحلقة التكرارية ()while والشرط الذي سنضعه هو أن تكون قيمة المتغير buttonStat هي 0. while (buttonStat == 0) { } سيضيء الليد وينطفئ داخل هذه الحلقة بتأخير زمني عشوائي ويتم التحكم بقيمة القطب من خلال الدالة ()digitalWrite التي تأخذ وسيطين: الأول رقم القطب (الذي خُزن في المتغير) والثاني حالة أو قيمة القطب (إما 1 منطقي HIGH للتشغيل وإما 0 منطقي LOW للإطفاء). لتحقيق التأخير الزمني نستخدم الدالة ()delay التي تحقق انتظار أو تأخير زمني في مكان كتابتها في الكود ويُكتب الزمن داخلها بواحدة المللي ثانية "ms" وللحصول على قيمة عشوائية نستخدم الدالة ()random التي يمكن أن تأخذ وسيطين الأول أقل قيمة والثاني أكبر قيمة وتعيد قيمة عشوائية ضمن هذا المجال. digitalWrite(led, HIGH); delay(random(minDelay, maxDelay)); digitalWrite(led, LOW); delay(random(minDelay, maxDelay)); اكتملت مرة واحدة من تشغيل وإطفاء الليد في هذه الحالة لذلك سنزيد قيمة العداد count بمقدار 1، ومن ثَم سنحتاج إلى قراءة حالة المفتاح مرة أخرى كي لا تصبح الحلقة التكرارية غير منتهية فإذا تمت إزالة الضغط عن المفتاح سيخرج البرنامج من هذه الحلقة ويكمل تنفيذ باقي البرنامج. count++; buttonStat = digitalRead(button); ليصبح الكود الخاص بالحلقة التكرارية ()while: while (buttonStat == 0) { digitalWrite(led, HIGH); delay(random(minDelay, maxDelay)); digitalWrite(led, LOW); delay(random(minDelay, maxDelay)); count++; buttonStat = digitalRead(button); } سنطبع قيمة العداد count على نافذة الاتصال التسلسلي إن تحقق الشرط أن العداد count لا يساوي الصفر (المفتاح ضغط والليد اشتغل وانطفأ مرة واحدة على الأقل) وسبب استخدام هذا الشرط هو تجنب طباعة رقم 0 باستمرار في حالة عدم الضغط على المفتاح. if (count != 0) { } بعد التأكد من أن قيمة العداد ليست صفرًا سنطبع العبارة ":Number of blinking" من خلال الدالة المدمجة ()Serial.print ونضع البيانات التي نريد طباعتها داخل الأقواس وبما أننا نريد طباعة نص نكتبه ضمن علامتي تنصيص " " وبجانبه نريد طباعة عدد مرات الوميض ثم النزول إلى سطر جديد؛ لذلك سنستخدم التابع ()Serial.println الذي يطبع البيانات ثم ينتقل إلى سطر جديد. وفي النهاية نصفر قيمة العداد كي يبدأ العد من الصفر إذا ضُغط على المفتاح مرة أخرى. if (count != 0) { Serial.print("number of blinking: "); Serial.println(count); count = 0; } تحسين الكود البرمجي للمشروع من أكثر المشكلات التي تواجه المطورين في المشاريع الضخمة هي استهلاك ذاكرة البرنامج بشكل مفرط ولعل أهم أسباب هذه المشكلة هو العدد الكبير للمتغيرات الموجودة في الكود، ونلاحظ أن لدينا في هذا المشروع المتغيرات الآتية: led وbutton وminDelay وmaxDelay التي لم نعدل على القيمة المخزنة فيها مطلقًا خلال الكود على عكس المتغيرات الأخرى count buttonStat التي تتغير قيمها. لهذا نستطيع الاستغناء عن المتغيرات التي لا نحتاج للتعديل عليها مثل led وbutton و minDelay وmaxDelay من أجل تقليل استهلاك ذاكرة البرنامج، واستبدال هذه المتغيرات بالماكرو Macro وهو عبارة عن طريقة لتعريف مجموعة من التعليمات البرمجية التي يمكن استخدامها مرارًا وتكرارًا في البرنامج دون استهلاك ذاكرة البرنامج، ويعرف الماكرو باستخدام الموجهات Directives وتبدأ بالكلمة المفتاحية define# ثم اسم الماكرو وبعدها القيمة الخاصة به مثال لاستبدال المتغيرات السابقة: #define led 13 #define button 2 #define minDelay 100 #define maxDelay 500 لاحظ الفرق بين حجم استهلاك ذاكرة البرنامج في كلا الحالتين الأولى هي عند استخدام المتغيرات والثانية هي عند استبدالها بالماكرو ويمكن أن يكون الماكرو بسيطًا كاستبدال نص معين أو أرقام ويمكن أن يكون معقدًا أكثر مثل ماكرو الدالة، للاطلاع أكثر على الماكرو وأنواعه من خلال مقال الماكرو Macro والمعالج المسبق Preprocessor في لغة سي C. رأينا سابقًا مشكلة الحالة العائمة floating الخاصة بالمداخل الرقمية Digital Input عندما لا يكون هناك قيمة محددة عليها واستطعنا حل هذه المشكلة من خلال التعرف على مفهوم مقاومة الرفع والخفض واستخدمنا مقاومة رفع خارجية في مشروعنا مع مفتاح الضغط اللحظي Push Button. تدعم بعض المتحكمات ومن بينها لوحات الأردوينو وجود مقاومة رفع داخلية نستطيع تفعيلها برمجيًا أثناء ضبط نوع القطب من خلال الدالة المدمجة ()pinMode التي نمرر لها رقم القطب ونوعه كما ذكرنا سابقًا وقد تعرفنا على حالتين لنوع القطب إما أن يكون خرج OUTPUT وإما دخل INPUT ولكن هناك حالة ثالثة وهي دخل مع تفعيل مقاومة رفع داخلية INPUT_PULLUP وبهذه الحالة نستطيع الإستغناء عن مقاومة الرفع الخارجية والتقليل من التوصيلات والعناصر التي قد تسبب تعقيدًا في تنفيذ المشروع للبعض بحل برمجي بسيط pinMode(button, INPUT_PULLUP); يصبح الكود البرمجي النهائي للمشروع: #define led 13 #define button 2 #define minDelay 100 #define maxDelay 500 int count = 0; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); pinMode(button, INPUT_PULLUP); } void loop() { int buttonStat = digitalRead(button); while(buttonStat == 0){ digitalWrite(led, HIGH); delay(random(minDelay, maxDelay)); digitalWrite(led, LOW); delay(random(minDelay, maxDelay)); count++; buttonStat = digitalRead(button); } if(count !=0){ Serial.print("number of blinking: "); Serial.println(count); count = 0; } } محاكاة لمشروع تخمين عدد مرات وميض الليد اتبع الخطوات التي تعلمناها في المقال السابق للوصول الى الصفحة الخاصة بمحاكاة مشروعك على موقع وكوي Wokwi .تستطيع الرجوع إليها من خلال مقال التحكم بتشغيل وإطفاء ليد LED باستخدام الأردوينو Arduino أضف العناصر الإلكترونية اللازمة للمشروع وهي Push Button LEDs و Resistors و BreadBoard. غير قيمة مقاومة الليد إلى 220 أوم ومقاومة المفتاح إلى 10 كيلو أوم (في حال استخدام مقاومة خارجية) من خلال الضغط عليها فتظهر لك نافذة في الأعلى تمكنك من تغير القيمة والواحدة. بالطريقة نفسها يمكنك تغير ألوان الليد والمفتاح من خلال الضغط عليها فتظهر لك نافذة بالأعلى تستطيع من خلالها اختيار اللون. رتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الذي عرضناه سابقًا. اكتب الكود البرمجي في الجزء الخاص به، ثم شغل المحاكاة، اضغط على المفتاح سيبدأ الليد بالوميض حاول أن تركز في عدد مرات تشغيل وإطفاء الليد انتظر قليلًا ثم أزل الضغط عن المفتاح سيظهر لك عدد مرات وميض الليد في الاسفل، هل استطعت تخمينها بشكل صحيح؟ الخلاصة شرحنا في هذا المشروع طريقة بناء مشروع لقياس وتخمين عدد مرات وميض الليد عند الضغط عليه باستخدام لوحة الأردوينو، واستعرضنا كيفية بناء المشروع وتوصيل العناصر والأدوات، بما في ذلك الأردوينو، الليد، المقاومات والمفتاح، بالإضافة إلى كيفية كتابة الكود الخاص ببرمجة الأردوينو باستخدام بيئة التطوير المتكاملة (IDE) الخاصة به وعمل محاكاة للمشروع من خلال منصة وكوي Wokwi وكيفية مواجهة المشاكل وحلها وتحسين المشروع للأفضل. اقرأ أيضًا المقال السابق: بناء إشارة مرور باستخدام الأردوينو Arduino أداة التهيئة في راسبيري باي تجميع راسبيري باي والتحضير لاستخدامه جولة في نظام تشغيل راسبيري باي
-
بعد أن أنشأنا أول مشروع بسيط لنا باستخدام لوحة أردوينو في المقال السابق، سنوظف ما تعلمناه حول التعامل مع الأقطاب الرقمية Digital Pins وكتابة التعليمات البرمجية لضبط نوع القطب وإعطاء أوامر التشغيل والإيقاف إليه وتوصيل العناصر على لوحة التجارب BreadBoard وربطها مع أقطاب لوحة أردوينو ونطور مشروعنا الثاني وهو مشروع يحاكي إشارة المرور. فكرة المشروع الهدف من هذا المشروع هو التحكم بإشارة مرور بسيطة مثل التي نراها في الطرقات والتي تحتوي على ثلاثة ليدات، أحمر وبرتقالي وأخضر، إذ تكون خطوات التشغيل بالشكل الآتي: يضيء الليد الأخضر في البداية وتنطفئ باقي الليدات لمدة زمنية محددة (5 ثوان). ينطفئ الليد الأخضر ويضيء الليد البرتقالي بشكل ومضات مرات عدة بفترات قصيرة (0.5 ثانية). يضيء الليد الأحمر وتنطفئ باقي الليدات لمدة زمنية محددة (5 ثوان). تتكرر عملية تشغيل وإطفاء الليد البرتقالي مرات عدة ( الخطوة نفسها رقم 2). إعادة تكرار الخطوات باستمرار بدءًا من الخطوة رقم 1. العناصر المستخدمة العناصر التي سنستخدمها لعمل هذا المشروع هي كالتالي: لوحة أردوينو أونو Arduino Uno. كابل البرمجة USB Cable. لوحة توصيل التجارب Breadboard. ليد أحمر RED LED. ليد أخضر GREEN LED. ليد برتقالي ORANGE LED. ثلاث مقاومات بقيمة 220 أوم. مجموعة أسلاك توصيل من نوع Male to Male. مخطط توصيل مشروع إشارة مرور باستخدام أردوينو لتنفيذ فكرة المشروع، اتبع الخطوات الآتية لتوصيل العناصر والأسلاك مع لوحة الأردوينو Arduino : صل أقطاب التغذية في لوحة الأردوينو أونو Arduino Uno مع لوحة توصيل التجارب BreadBoard، إذ يوصل القطب 5v في لوحة الأردوينو مع المسرى الموجب للوحة التجارب، والقطب GND في لوحة الأردوينو مع المسرى السالب للوحة التجارب من خلال أسلاك التوصيل. صل الرِّجل الأطول (التي تمثل الطرف الموجب) لليد الأخضر مع الرجل الأولى للمقاومة، ثم الرجل الأخرى للمقاومة مع القطب رقم 9 في لوحة الأردوينو أونو Arduino Uno. صل الرِّجل الأقصر (التي تمثل الطرف السالب) لليد الأخضر مع المسرى السالب في لوحة توصيل التجارب BreadBoard. كرر الخطوتين السابقتين بالطريقة ذاتها لليد البرتقالي والليد الأحمر ولكن مع تغيير أرقام الأقطاب في لوحة الأردوينو أونو Arduino Uno إلى القطب رقم 10 لمقاومة الليد البرتقالي والقطب رقم 11 لمقاومة الليد الأحمر. لترتيب التوصيل بصورة أفضل يمكنك توصيل الرِّجل الأقصر (التي تمثل الطرف السالب) لليد الأول مع الرِّجل الأقصر من الليدات الأخرى، ثم توصيل إحداها بالمسرى السالب في لوحة توصيل التجارب BreadBoard لأنها تشترك جميعًا بالنقطة ذاتها وفي النهاية النتيجة واحدة. توضح الصورة الآتية مخطط التوصيل: الكود البرمجي لمشروع إشارة المرور في البداية نحتاج لتعريف ثلاثة متغيرات من نوع عدد صحيح int تحتوي على رقم القطب الموصول مع كل ليد في لوحة Arduino Uno حيث سنوصلها مع الأقطاب 9 لليد الأخضر و 10 لليد البرتقالي و 11 لليد الأحمر كما وضحنا ذلك في جزء مخطط التوصيل، وبما أننا نريد استخدام هذه المتغيرات في أي جزء من الكود سنعرفها في البداية كمتغيرات عامة خارج الدالتين الرئيسية والتكرارية كما يلي. int Green_Led = 9; int Orange_Led = 10; int Red_Led = 11; الآن، سنضبط داخل الدالة الرئيسية الأقطاب الخاصة بالليدات التي خُزّنت أرقامها ضمن متغيرات كأقطاب خرج من خلال الدالة المدمجة ()pinMode التي تأخذ معاملين الأول رقم القطب (الذي خُزن في المتغير) والثاني نوع القطب (إما خرج وإما دخل) وفي حالتنا هذه الأقطاب جميعها خرج OUTPUT. void setup() { pinMode(Red_Led, OUTPUT); pinMode(Orange_Led, OUTPUT); pinMode(Green_Led, OUTPUT); } وبما أننا نحتاج لتشغيل المشروع باستمرار لذلك سنكتب التعليمات البرمجية الخاصة بأوامر التحكم بالتشغيل والإطفاء الخاصة بالليدات في الدالة التكرارية ()void loop التي تنفذ الكود البرمجي الموجود داخلها بشكل متكرر. void loop() { } ذكرنا سابقًا أننا سنشغل القطب الخاص بالليد الأخضر في البداية ونطفئ الأقطاب الخاصة بالليدات الأخرى (الأحمر والبرتقالي) بتأخير زمني 5000 مللي ثانية أي بمقدار 5 ثوان، وللتحكم بإشارة خرج أقطاب الليدات برمجيًا سنستخدم الدالة المدمجة ()digitalWrite التي تأخذ معاملين أيضًا: الأول رقم القطب (الذي خُزن في المتغير) والثاني حالة أو قيمة القطب (إما 1 منطقي HIGH وإما 0 منطقي LOW) وفي حالتنا هذه سيأخذ القطب الخاص بالليد الأخضر القيمة HIGH لأننا نريد تشغيله وستأخذ الأقطاب الخاصة بالليدات الأخرى (الأحمر والبرتقالي) القيمة LOW، ولتحقيق التأخير الزمني نستخدم الدالة المدمجة ()delay كما يلي: digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, HIGH); delay(5000); سنشغل الليد البرتقالي ثم نطفئه بشكل متكرر مرات عدة وبتأخير زمني قصير (0.5 ثانية بعد كل عملية تشغيل أو إطفاء) ليحاكي النموذج الحقيقي لإشارة المرور، ولتنفيذ ذلك برمجيًا نستدعي الدالة ()digitalWrite حيث سيأخذ القطب الخاص بالليد البرتقالي القيمة HIGH وستأخذ الأقطاب الخاصة بالليدات الأخرى (الأحمر والأخضر) القيمة LOW لأننا نريد تشغيل الليد البرتقالي بالبداية، وبالطريقة نفسها نستخدم الدالة ()digitalWrite مع تغيير قيمة القطب الخاص بالليد البرتقالي إلى القيمة LOW لأننا نريد إطفاءه. ونستدعي دالة التأخير الزمني()delay بين كل عملية تشغيل وإطفاء أو العكس بمقدار نصف ثانية أو 500 مللي ثانية، بهذه الطريقة نحقق وميض الليد البرتقالي مرة واحدة، وبتكرار الكود مرات عدة نحصل على الوظيفة المطلوبة. digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, HIGH); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, HIGH); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, HIGH); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, LOW); delay(500); سيضيءالقطب الخاص بالليد الأحمر في النهاية وتنطفئ الأقطاب الخاصة بالليدات الأخرى (الأخضر والبرتقالي) بتأخير زمني 5000 مللي ثانية أي بمقدار 5 ثوان، لذا نستدعي الدالة()digitalWrite حيث سيأخذ القطب الخاص بالليد الأحمر القيمة HIGH لأننا نريد تشغيله وستأخذ الأقطاب الخاصة بالليدات الأخرى (الأخضر والبرتقالي) القيمة LOW، ونستدعي الدالة المدمجة ()delay بقيمة 5000 لتحقيق تأخير الزمني بمقدار 5 ثوان. digitalWrite(Red_Led, HIGH); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, LOW); delay(5000); تحسين الكود البرمجي لمشروع إشارة مرور كما تلاحظ فإننا نكرر التعليمات البرمجية الخاصة بالتحكم بتشغيل وإطفاء الليد البرتقالي ثلاث مرات في الكود السابق، وفي كل مرة نعيد كتابة التعليمات البرمجية الخاصة بذلك، ويمكن اختصار الكود خلال كتابة التعليمات مرة واحدة فقط داخل حلقة تكرارية for بمتغير i تبدأ قيمته من 1 وتزداد بمقدار 1 في كل مرة حتى تصبح مساوية لـ 3 (تكرار تنفيذ ما بداخل الحلقة ثلاث مرات) ويصبح الكود الخاص بهذا الجزء: for (int i = 1; i <= 3; i++) { digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, HIGH); digitalWrite(Green_Led, LOW); delay(500); digitalWrite(Red_Led, LOW); digitalWrite(Orange_Led, LOW); digitalWrite(Green_Led, LOW); delay(500); } لاحظ أننا في كل مرة نتحكم بالأقطاب الثلاثة بالترتيب نفسه Red_Led ثم Orange_Led ثم Green_Led، يمكننا القيام بذلك بتعليمة برمجية واحد فقط بدلًا من أن نكتب ثلاث تعليمات برمجية خاصة بالتحكم بتشغيل وإطفاء هذه الليدات في كل مرة من خلال كتابة دالة باسم ()ROG_LED (أو أي اسم مناسب تريده) تأخذ ثلاثة معاملات، يمثل كل معامل حالة قطب من أقطاب الليدات الثلاثة وتكون بالترتيب الآتي: معامل حالة قطب الليد الأحمر Red_Stat، ومعامل حالة قطب الليد البرتقالي Orange_Stat، ومعامل حالة قطب الليد الأخضر Green_stat وبداخل هذه الدالة سنكتب التعليمات البرمجية التي تتحكم بتشغيل وإطفاء هذه الليدات مرة واحدة فقط وبقيمة الوسيط الخاص بكل ليد ذاتها. void ROG_LED(int Red_Stat, int Orange_Stat, int Green_stat) { digitalWrite(Red_Led, Red_Stat); digitalWrite(Orange_Led, Orange_Stat); digitalWrite(Green_Led, Green_stat); } يصبح الكود النهائي للمشروع كما يلي: int Red_Led = 11; int Orange_Led = 10; int Green_Led = 9; void ROG_LED(int Red_Stat, int Orange_Stat, int Green_stat) { digitalWrite(Red_Led, Red_Stat); digitalWrite(Orange_Led, Orange_Stat); digitalWrite(Green_Led, Green_stat); } void setup() { pinMode(Red_Led, OUTPUT); pinMode(Orange_Led, OUTPUT); pinMode(Green_Led, OUTPUT); } void loop() { // Green Light ROG_LED(LOW, LOW, HIGH); delay(5000); // Orange Light for (int i = 1; i <= 3; i++) { ROG_LED(LOW, HIGH, LOW); delay(500); ROG_LED(LOW, LOW, LOW); delay(500); } // Red Light ROG_LED(HIGH, LOW, LOW); delay(5000); } محاكاة المشروع: سننفذ المحاكاة باستخدام منصة ووكوي Wokwi باتباع الخطوات التي شرحناها في المقال السابق للوصول الى الصفحة الخاصة بمحاكاة المشروع كما توضح الصورة التالية: بعدها أضف العناصر الإلكترونية اللازمة للمشروع مثل لوحة التجارب BreadBoard، والليدات LEDs، والمقاومات Resistors. غيّر قيمة المقاومات إلى 220 أوم من خلال الضغط عليها فتظهر لك نافذة تمكنك من تغير القيمة والواحدة. يمكنك الطريقة نفسها تغير ألوان الليدات من خلال الضغط عليها فتظهر لك نافذة تستطيع من خلالها اختيار لون الليد. رتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الذي عرضناه سابقًا. اكتب الكود البرمجي في الجزء الخاص به، ثم شغل المحاكاة، ستجد أن الليدات تعمل بالترتيب الذي ذكرناه في وصف المشروع. الخلاصة تعلمنا في هذا المقال بناء المشروع الثاني في سلسلة دليل أدوينو وهو إشارة مرور بسيطة بعدة خطوات سهلة بدءًا من فهم فكرة المشروع ووصولًا إلى كتابة الكود البرمجي الخاص به، مع تعلم كيفية التفكير في تحسين وتطوير الكود، وسنستكمل في المقالات القادمة بناء المزيد من المشاريع الإلكترونية المفيدة ونتعلم من خلالها أفكارًا جديدة. اقرأ أيضًا المقال السابق: مشروع التحكم بتشغيل وإطفاء ليد LED باستخدام الأردوينو Arduino تصميم لعبة السلك والحلقة باستخدام برنامج سكراتش وحاسوب راسبيري باي تنفيذ مصباح ليد ثلاثي الأبعاد باستخدام سكراتش ولوحة راسبيري باي صنع آلة موسيقية باستخدام سكراتش وحاسوب راسبيري باي
-
بعد أن تعلمنا في المقال السابق مجموعة من المعلومات والمفاهيم الأساسية حول لوحات أردوينو وأنواعها ومكوناتها وبيئة برمجتها، سنتعلم في هذا المقال كيفية بناء أول مشروع باستخدام هذه اللوحة، وهو التحكم بتشغيل وإطفاء ليد LED. يعد هذا المشروع من المشاريع الأساسية والمهمة للمبتدئين في عالم الأردوينو، فمن خلاله تتعلم كيفية التعامل مع لوحة الأردوينو، وتوصيل العناصر البسيطة وربطها مع اللوحة، بالإضافة إلى فهم البنية البرمجية الأساسية لأي مشروع، وكيفية استخدام التعليمات البرمجية الأساسية. فكرة المشروع تعتمد فكرة المشروع على توصيل ليد LED على إحدى الأقطاب الرقمية Digital Pins في لوحة أردوينو أونو Arduino Uno، والتحكم في طريقة عمله، يُضبط القطب كقطب خرج OUTPUT، ثم يُشغل الليد لمدة ثانية واحدة وبعدها يوقف لمدة ثانية أخرى وتتكرر هذه العملية باستمرار. يمكن ربط هذه الفكرة بمثال بسيط لا بد أنك رأيته سابقًا في مكان ما، فهو يستخدم في الساعات الرقمية، إذ يوجد فيها شريحتان من الليدات تفصل بين أرقام الثواني والدقائق والساعات، وتومض بشكل متكرر كل ثانية. العناصر المستخدمة سنحتاج مجموعة من العناصر الضرورية لعمل هذا المشروع، وهي: لوحة أردوينو أونو Arduino Uno. كابل البرمجة USB Cable. لوحة توصيل التجارب Breadboard. ليد LED. مقاومة بقيمة 220 أوم. مجموعة أسلاك توصيل من نوع male to male. ما هي لوحة التجارب Breadboard لوحة التجاري هي لوحة مسطحة مصنوعة من البلاستيك، تحتوي على ثقوب متصلة ببعضها البعض بشكل أفقي أو رأسي بواسطة مسارات معدنية من الداخل. تُستخدم في توصيل العناصر الإلكترونية والأسلاك ببعضها البعض وبناء المشاريع والتجارب الإلكترونية دون الحاجة إلى عملية اللحام، مما يجعلها قابلة لإعادة الاستخدام ومن السهل تغيير مكوناتها. تتصل الثقوب متصلة ببعضها بشكل رأسي في المسارات الجانبية على الأطراف وتوصل عليها أقطاب التغذية غالبًا، لذلك يوجد مساران في كل طرف: الأول للقطب الموجب والآخر للقطب السالب. أما باقي الثقوب فتكون متصلة ببعضها بشكل أفقي وتُستخدم لإدخال العناصر الإلكترونية وتوصيلها ببعضها البعض، كما يوجد فراغ في المنتصف يقسم اللوحة إلى قسمين متناظرين ويسمح بتركيب الدوائر المتكاملة integrated circuit. مخطط توصيل المشروع Circuit Diagram سنوضح طريقة توصيل المشروع من خلال مجموعة من النصائح والخطوات البسيطة التي ستساعدك بإنجاز مشروعك بطريقة سهلة، اتبع الخطوات الآتية لتوصيل المشروع: صل أقطاب التغذية دائمًا بلوحة التجارب أولًا، فسوف تساعدك هذه الخطوة كثيرًا في أي مشروع، ويمكنك الحصول على التغذية من أقطاب الطاقة Power Pins في لوحة الأردوينو التي تحدثنا عنها في المقال السابق، صل القطب 5v مع المسرى الموجب للوحة التجارب والقطب GND مع المسرى السالب للوحة التجارب من خلال الأسلاك. صل الرِّجل الأطول للِّيد (التي تمثل الطرف الموجب) مع القطب رقم 13 في لوحة الأردوينو أونو Arduino Uno. صل الرِّجل الثانية للِّيد (التي تمثل الطرف السالب) مع الرجل الأولى للمقاومة (لا توجد قطبية للمقاومة، لذلك لا يوجد فرق إذا عكسنا بين الرجل الأولى والرجل الثانية). صل الرِّجل الأخرى للمقاومة مع المسرى السالب في لوحة التجارب. توضح الصورة التالية مخطط التوصيل: الكود البرمجي للتحكم بتشغيل وإطفاء ليد LED يجب أن يحتوي أي كود بلغة الأردوينو على دالتين، الأولى()void setup ينفذ ما بداخلها مرة واحدة فقط عند بداية التشغيل وسنسميها الدالة الرئيسية لسهولة الشرح، وبعدها ينتقل لتنفيذ ما بداخل الدالة الثانية ()void loop بشكل متكرر، وسنسميها الدالة التكرارية. void setup() { } void loop() { } تُضبط الأقطاب والطرفيات الخاصة بلوحة الأردوينو في الدالة الرئيسية، ففي مثالنا هذا سنضبط القطب رقم 13 على أنه قطب خرج OUTPUT من خلال الدالة المدمجة ()pinMode التي تأخذ معاملين: الأول يمثل رقم القطب والثاني نوع القطب (خرج أو دخل) فتصبح الدالة الرئيسية بالشكل الآتي: void setup () { pinMode(13, OUTPUT); } ملاحظة: توفر نواة أردوينو Arduino core مجموعة من الدوال المدمجة التي تتميز بأنها سهلة الفهم والاستخدام مما يجعل عملية البرمجة وتطوير المشاريع الإلكترونية أبسط وأكثر كفاءة وفعالية في الكثير من الأوقات كما أنها توفر الوقت والجهد على المبرمجين بتجنب إعادة كتابة الأكواد الشائعة والمستخدمة بكثرة من خلال استخدام هذه الدوال المبنية مسبقًا، مما يساعدهم على التركيز للإبداع والابتكار. يمكنك الاستزادة أكثر والإطلاع على جميع التوابع المدمجة التي توفرها نواة أردوينو من خلال زيارة توثيق أردوينو على موسوعة حسوب، أو الاطلاع على المرجع الرسمي Arduino Reference. وبما أننا نريد تشغيل وإطفاء الليد بشكل متكرر ومستمر لذلك سنكتب أمر التشغيل والإطفاء في الدالة()loop ونتحكم بالتشغيل والإطفاء من خلال الدالة ()digitalWrite التي تأخذ أيضًا معاملين: يمثل المعامل الأول رقم القطب، ويمثل الثاني حالة القطب (إما قيمة 1 منطقي HIGH، أو قيمة 0 منطقي LOW) void loop() { digitalWrite(13, HIGH); digitalWrite(13, LOW); } ولكن عند تجربة هذا الكود نجد أن الليد لا يومض بل يعمل بشكل مستمر، والسبب في ذلك أننا نشغل الليد ثم نطفئه بشكل مباشر وسريع بالتالي لا نلاحظ عملية الومض، في هذه الحالة علينا استخدام الدالة ()delay التي تضيف فترة انتظار أو تأخير زمني في موضع كتابتها في الكود ويمرر الزمن المطلوب لها بواحدة المللي ثانية ms. وبتعديل الكود السابق تصبح الدالة التكرارية على النحو التالي: void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } تحسين الكود البرمجي للتحكم بتشغيل وإطفاء ليد LED عند تجربة الكود السابق نجد أنه يعمل بشكل جيد كما هو مطلوب بالضبط، ولكن يمكن تحسينه أكثر، على فرض أنك تتحكم بحالة القطب من HIGH إلى LOW أو العكس عدة مرات خلال مشروعك، وتريد تغير رقم القطب لسبب ما كترتيب التوصيل ضمن الدارة أو استخدام هذا القطب في وظيفة أخرى خاصة به، ستحتاج في هذه الحالة لتعديل رقم القطب في كل تعليمة تغير فيها حالة القطب من HIGH إلى LOW أو العكس ضمن الكود. لهذا السبب، يجب تعريف متغير ثابت (بما أننا لن نعدل قيمة هذا المتغير أثناء تنفيذ الكود)، يحتوي هذا المتغير على رقم القطب وإذا اضطررنا لتغير رقم القطب فنغير قيمته في الكود مرة واحدة فقط ونُعرِّف المتغير في بداية الكود خارج التوابع ليكون متغيرًا عامًا global variable ونتمكن من استخدامه في أي مكان ضمن الكود. const int LED_PIN = 13; يصبح الكود النهائي للمشروع على النحو التالي: int LED_PIN = 13; void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); } محاكاة المشروع تعد ميزة المحاكاة مفيدة ومهمة في كثير من الأحيان لإجراء بعض التجارب أو المشاريع إضافة إلى أنها توفر الوقت والجهد. وتقدم منصة ووكوي Wokwi إمكانية محاكاة العديد من اللوحات الإلكترونية مثل لوحات الأردوينو Arduino ولوحات إي إس بي اثنان وثلاثين ESP32 ولوحات إس تي إم اثنان وثلاثين STM32 بالإضافة إلى العديد من الحساسات والعناصر والقطع الإلكترونية، يمكنك الاطلاع أكثر على القسم الخاص بتوثيق الموقع للمزيد من المعلومات حول المميزات والخدمات التي يقدمها، اتبع الخطوات الآتية لإنشاء ومحاكاة مشروعك من خلال هذه المنصة: بعد الدخول إلى موقع ووكوي Wokwi ستظهر لك في الواجهة الرئيسية اللوحات المختلفة التي تستطيع عمل محاكاة لها من خلال الموقع. اضغط على خيار Arduino، وانتظر انتهاء تحميل الصفحة ثم انزل قليلًا واختر لوحة أردوينو أونو Arduino Uno. ستظهر الصفحة الخاصة بمحاكاة مشروعك كما في الصورة التالية، الجزء الأيسر في الصورة خاص بكتابة الكود البرمجي، والجزء الأيمن خاص بإضافة العناصر الإلكترونية وتوصيل الدائرة الكهربائية. أضف العناصر الإلكترونية اللازمة للمشروع مثل لوحة توصيل التجارب BreadBoard، والليد LED، والمقاومة Resistor (ستلاحظ عند إضافة عنصر المقاومة ظهور نافذة تتيح لك تغير قيمتها، غيرها إلى 220 أوم). رتب العناصر على لوحة التجارب بالشكل الذي تراه مناسبًا، ثم صل العناصر بعضها ببعض حسب مخطط التوصيل الذي عرضناه سابقًا. أخيرًا اكتب الكود البرمجي في الجزء الخاص به، ثم شغل المحاكاة ستجد الليد يومض كل ثانية. تهانينا بهذا تكون قد أنجزت مشروعك الأول في أردوينو، ويمكنك بالطبع إجراء بعض التجارب والتعديلات على مشروعك مثل تغير زمن التأخير، أو تغير رقم القطب الخاص بالليد، أو إضافة أكثر من ليد LED. الخاتمة تعلمنا في هذا المقال بناء أول مشروع إلكتروني من خلال لوحة أردوينو بعدة خطوات بسيطة وتعرفنا على العديد من الخطوتات والنصائح المفيدة التي تساعد على محاكاة مشروعك وتنفيذه بطريقة صحيحة، وسنستكمل في المقالات القادمة رحلتنا هذه في عالم الأردوينو من خلال بناء المزيد من المشاريع الإلكترونية الممتعة الأكثر تقدمًا. اقرأ أيضًا المقال السابق: التعرف على أساسيات الأردوينو وتجهيز بيئة العمل أساسيات في عالم الإلكترونيات: التيار والجهد والعناصر الساكنة أساسيات في عالم الإلكترونيات: تشكيل الدوائر اﻹلكترونية والعناصر الفعالة مدخل إلى الدوائر المتكاملة Integrated Circuits والمتحكمات الصغرية Micro-processor بنية برنامج لغة سي C
-
هل سمعت بمصطلح أردوينو Arduino من قبل، وراودك الاهتمام بهذا المصطلح؟ سنشرح في هذا المقال عن لوحات أردوينو من خلال نظرة موسعة عنها وما هي الاختلافات بين أنواعها ومكوناتها الأساسية، بالإضافة إلى شرح كيفية تجهيز بيئة العمل للبدء برحلة ممتعة في عالم الأردوينو والمتحكمات وبناء المشاريع الإلكترونية من خلاله. هذا المقال هو جزء من سلسلة مقالات تعليمية حول الأردوينو وكيفية بناء المشاريع الإلكترونية من خلالها ويمكنك الوصول لكامل مقالات هذه السلسلة المنشورة تحت وسم دليل أردوينو. ما هي لوحة أردوينو Arduino هي لوحة إلكترونية تطويرية مفتوحة المصدر، طُورت لمساعدة المبتكرين والهواة في تعلم تصميم وتنفيذ المشاريع الإلكترونية بطريقة سهلة وبدون تعقيد. يمكن للمستخدم برمجة هذه اللوحة لتنفذ وظيفة إلكترونية معينة كالتحكم بتشغيل أو إطفاء ليد LED وشدة إضاءته، أو قراءة قيم من حساسات مختلفة سواء أكانت رقمية Digital أو تشابهية Analog، أو حتى التحكم بشكل كامل بروبوت يقوم بعدة وظائف معًا، إضافة إلى العديد من المشاريع الأخرى. وتُبرمَج هذه اللوحة من خلال بيئة تطوير متكاملة Arduino IDE تستخدم بشكل أساسي لكتابة الأكواد والتعليمات البرمجية من خلالها ورفع الكود إلى اللوحة الإلكترونية وتنفيذه. ما هو المتحكم المصغر Microcontroller يعد المتحكم المصغر (أو المتحكم الصغري) من أهم المكونات الموجودة في لوحة الأردوينو، ويمكن تعريفه باختصار على أنه حاسوب مصغر يحوي العناصر الأساسية التي يحتويها الحاسوب مثل المعالج والذواكر وطرفيات الإدخال والإخراج موجودة جميعها في شريحة واحدة ولكن بحجم وإمكانيات محدودة جداً مقارنة مع الحواسيب الشخصية، ويمكنك التعرف أكثر عن المتحكمات الصغرية والدوائر المتكاملة من خلال مقال مدخل إلى الدوائر المتكاملة والمتحكمات الصغرية مميزات أردوينو من أهم المميزات التي قد تجعلك ترغب في استخدام الأردوينو في مشاريعك الإلكترونية هي أن منصة الأردوينو تملك مجتمع دعم كبير، وسوف تجد العديد من المشاريع والمصادر والمكتبات والأشخاص لمساعدتك وتبادل الأفكار والحلول حول المشاكل التي قد تواجهها خلال تنفيذ مشروعك، بالإضافة إلى العديد من المميزات الأخرى ومنها: سهولة الاستخدام: تستطيع البدء باستخدام لوحة الأردوينو وبرمجتها من خلال برنامج Arduino IDE بدقائق وببضعة خطوات بسيطة ولذلك تعد مناسبة جداً للمبتدئين والهواة. انخفاض التكلفة: تعتبر لوحات الأردوينو والعناصر والمجموعات التعليمية الخاصة بها غير مكلفة نسبيًا مقارنة مع المتحكمات الأخرى، بالإضافة الى أن البيئة البرمجية الخاصة ببرمجتها مجانية بشكل كامل. العمل على جميع الأنظمة: يمكنك تشغيل برنامج Arduino IDE على جميع أنظمة التشغيل مثل نظام ويندوز Windows أو لينكس Linux أو ماك أو إس Mac OS، مفتوحة المصدر: يمكنك الوصول إلى الأكواد المصدرية للأردوينو لمعرفة المزيد عن لغة البرمجة التي تعتمد عليها أو تعديلها والتطوير عليها، وكذلك الأمر بالنسبة لمخططات الدوائر الإلكترونية circuit diagram إذ يمكنك الاستفادة منها أو عمل لوحة أردوينو خاصة بك. المكتبات: يوجد العديد من المكتبات الموجودة في البيئة البرمجية Arduino IDE، بالإضافة الى العديد من المكتبات التي طورها أشخاص من جميع أنحاء العالم حيث يمكنك الاستفادة من هذه المكتبات عن طريق استخدام التوابع الموجودة فيها مباشرة، مما يوفر الوقت والجهد اللازمين لإعادة كتابة هذه التوابع من البداية. أنواع لوحات أردوينو والفروقات بينها تختلف لوحات الأردوينو عن بعضها بعدة عوامل تشمل بشكل أساسي شكل اللوحة وحجمها، وجهد العمل 5v أو 3.3v، وشريحة البرمجة الخاصة بنقل الكود من الحاسوب إلى المتحكم، ونوع المتحكم الرئيسي الذي يؤثر على مواصفات اللوحة مثل سرعة المعالج وعدد أقطاب الرقمية والتشابهية وبروتوكولات التواصل مع الطرفيات والمتحكمات الأخرى، ولتوضيح الفروقات بين لوحات الأردوينو سنصنف أشهر لوحات الأردوينو واستعراض مواصفات كل منها. لوحة أردوينو أونو Arduino Uno أشهر لوحات الأردوينو وأكثرها انتشاراً وتعد الخيار الأفضل لإجراء التجارب والنماذج الأولية للمشاريع وذلك بسبب ثمنها المنخفض وسهولة استخدامها، ومن أهم مواصفاتها: نوع المتحكم: Atmega328 عدد أقطاب الدخل والخرج: 22 عدد أقطاب إشارة PWM: تحتوي 6 عدد الأقطاب التشابهية: 6 سرعة المعالج: 16MHz جهد العمل: 5V حجم ذاكرة البرنامج Flash: تأتي بحجم 32KB حجم ذاكرة البيانات SRAM: تأتي بحجم 2KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 1KB لوحة أردوينو نانو Arduino Nano تشبه لوحة Arduino Uno من حيث المواصفات ولكن بحجم صغير وشكل مناسب للتركيب على لوحة التجارب BreadBoard وتعد أيضًا من الخيارات المفضلة للمطورين بسبب صغر حجمها وسعرها المنخفض، ومن أهم مواصفاتها: نوع المتحكم: ATmega328 عدد أقطاب الدخل والخرج: 22 عدد أقطاب إشارة PWM: تحتوي 6 عدد الأقطاب التشابهية: 8 سرعة المعالج: 16MHz جهد العمل: 5V حجم ذاكرة البرنامج Flash: تأتي بحجم 32KB حجم ذاكرة البيانات SRAM: تأتي بحجم 2KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 1KB لوحة أردوينو برو ميني Arduino Pro Mini نسخة مصغرة من لوحة Arduino Nano ومشابهة لها في بعض المميزات، ولكن تختلف بعدم وجود شريحة برمجة مدمجة مع اللوحة وتحتاج أداة منفصلة لبرمجتها تسمى USB-TTL وتوصل بها من خلال طرفية الاتصال التسلسلي UART وهي مناسبة للمشاريع التي تكون فيها المساحة محدودة وصغيرة ومن أهم مواصفاتها: نوع المتحكم: atmega328 عدد أقطاب الدخل والخرج: 14 عدد أقطاب إشارة PWM: تحتوي 6 عدد الأقطاب التشابهية: 6 سرعة المعالج: 8MHz/16MHz جهد العمل: 3.3V/5V حجم ذاكرة البرنامج flash: تأتي بحجم 32KB حجم ذاكرة البيانات SRAM: تأتي بحجم 2KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 1KB لوحة أردوينو ليوناردو Arduino Leonardo يختلف عن الأنواع السابقة بنوع المتحكم الموجود فيه ويحوي بروتوكول اتصال USB مدمج والذي يلغي الحاجة إلى وجود شريحة برمجة خاصة ويمكن استخدامه في تطبيقات الأجهزة التي تستخدم كمنفذ HID أو منفذ COM ومن أهم مواصفاته: نوع المتحكم: ATmega32U4 عدد أقطاب الدخل والخرج: 22 عدد أقطاب إشارة PWM: تحتوي 7 عدد الأقطاب التشابهية: 12 سرعة المعالج: 16MHz جهد العمل: 5V حجم ذاكرة البرنامج Flash: تأتي بحجم 32KB حجم ذاكرة البيانات SRAM: تأتي بحجم 2.5KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 1KB لوحة أردوينو مايكرو Arduino Micro تشبه لوحة Arduino Nano من حيث الشكل والحجم بالضبط ولكن من حيث المميزات والمواصفات فهي مماثلة للوحة Arduino Leonardo فهي تحوي المتحكم نفسه والإمكانيات نفسها ومن أهم مواصفاته: نوع المتحكم: ATmega32U4 عدد أقطاب الدخل والخرج: 20 عدد أقطاب إشارة PWM: تحتوي 7 عدد الأقطاب التشابهية: 12 سرعة المعالج: 16MHz جهد العمل: 5V حجم ذاكرة البرنامج flash: تأتي بحجم 32KB حجم ذاكرة البيانات SRAM: تأتي بحجم 2.5KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 1KB لوحة أردوينو ميغا Arduino mega يعد الأكبر من جميع اللوحات التي تحدثنا عنها ويستخدم في التطبيقات والمشاريع الكبيرة التي تتطلب عدداً كبيراً من الأقطاب وتحتاج حجم ذاكرة أكبر من الأنواع السابقة ومن أهم مواصفاته: نوع المتحكم: ATMEGA2560 عدد أقطاب الدخل والخرج: 54 عدد أقطاب إشارة PWM: تحتوي 15 عدد الأقطاب التشابهية: 16 سرعة المعالج: 16MHz جهد العمل: 5V حجم ذاكرة البرنامج Flash: تأتي بحجم 256KB حجم ذاكرة البيانات SRAM: تأتي بحجم 8KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 4KB لوحة أردوينو ليلي باد Arduino LilyPad صُمم هذا النوع من اللوحات بشكل خاص للمشاريع التي يمكن ربطها مع الملابس والأجهزة القابلة للإرتداء إذ يمكن خياطته بشكل مناسب وسهل مع القماش بسبب تصميمه الخاص والثقوب الموجودة فيه والتي تستخدم أيضا كأقطاب ومن أهم مواصفاته: نوع المتحكم: Atmega328/Atmega168 عدد أقطاب الدخل والخرج: 14 عدد أقطاب إشارة PWM: تحتوي 6 عدد الأقطاب التشابهية: 6 سرعة المعالج: 8MHz جهد العمل: 2.7V-5.5V حجم ذاكرة البرنامج Flash: تأتي بحجم 16KB حجم ذاكرة البيانات SRAM: تأتي بحجم 1KB حجم ذاكرة القراءة القابلة للبرمجة EEPROM: تأتي بحجم 512B كيف تختار اللوحة المناسبة لك تعتبر اللوحات السابقة من أشهر أنواع لوحات الأردوينو والأكثر انتشاراً واستخداماً. والآن بعد أن استعرضنا هذه الأنواع ومواصفاتها قد يأتي سؤال لذهنك: كيف أختار اللوحة المناسبة من بين كل هذه الأنواع العديدة؟ يعتمد اختيارك لنوع لوحة الأردوينو المناسبة على هدفك الرئيسي منها، فإذا كنت تبحث عن لوحة للتعلم فيجب أن تختار لوحة سهلة الاستخدام ومناسبة لعمل التجارب الإلكترونية وشائعة الاستخدام؛ لسهولة البحث عن المشاكل وإيجاد الحلول التقنية مثل لوحة أردوينو أونو التي سوف نعتمد عليها في هذه السلسلة التعليمية. أما إذا كنت تريد اختيار اللوحة المناسبة من أجل عمل مشروع إلكتروني فهناك عدة عوامل مثل: الميزانية المخصصة للمشروع، وعدد الأقطاب التي تحتاجها، وحجم الكود البرمجي، واستهلاك الذواكر، ودعم المكتبات البرمجية للوحة في حال استخدمت مكتبات في مشروعك، وكما يعد الحجم والشكل من العوامل المهمة في اختيار اللوحة المناسبة وضمان نجاح مشروعك والقدرة على تطويره بسلاسة. الفرق بين أردوينو Arduino وراسبيري باي Raspberry Pi إذا كنت قد بدأت حديثًا في عالم برمجة المتحكمات والأنظمة الرقمية، فقد تتساءل ما الاختلاف بين لوحة أردوينو Arduino ولوحة راسبيري باي Raspberry Pi، في الواقع كلاهما لوحتان رائعتان لإنجاز مشاريع إلكترونية مبتكرة وإبداعية، ولكن هناك بعض الاختلافات بينهما، دعنا نتعرف عليها. أردوينو Arduino: كما وضحنا سابقًا هي لوحة مبنية بالاعتماد على متحكمات مصغرة microcontrollers، والمتحكم هو حاسوب صغير مناسب لتشغيل برنامج واحد في كل مرة، وهو ملائم للمهام البسيطة مثل قياس درجة الحرارة أو تشغيل مجموعة من الليدات LED. راسبيري باي Raspberry Pi: هي عبارة عن حاسوب مبني بالاعتماد على معالج مصغر microprocessor يمكنه تشغيل عدة برامج معقدة في الوقت نفسه مثل أنظمة التشغيل. وقد تتساءل ماذا أختار بينهما؟ والجواب هو أن الخيار المناسب لك على نوع المشاريع التي تريد القيام بها فلوحة أردوينو مناسبة للمشاريع الإلكترونية الصغيرة والتعامل مع بيانات صغيرة نسبياً، أما لوحة راسبيري باي فمثالية للاستخدام مع المشاريع الكبيرة وتنفيذ عمليات الحوسبة المعقدة. المكونات الأساسية للوحة أردوينو أونو Arduino Uno بعد اختيار لوحة أردوينو أونو لشرح هذه السلسلة، سنتعرف في هذا الجزء أكثر على أجزاء هذه اللوحة ومكوناتها حتى نستطيع التعامل معها بسهولة ونتجنب حدوث أخطاء ومشكلات أثناء عمل المشاريع. منفذ البرمجة USB Programming Port نستطيع من خلال هذا المنفذ وصل لوحة أردوينو مع حاسوبك لنقل البيانات ورفع الكود البرمجي على اللوحة من خلال كابل البرمجة USB Cable، حيث يمكنك وصلها مع الحاسوب من خلال كابل من نوع USB A - USB B كما يمكنك تغذية لوحة أردوينو بالطاقة من خلال هذا المنفذ، وللعلم يمكن توصيل اللوحة مع أي مصدر تغذية من نوع DC وبجهد 5v (مثل شاحن الموبايل أو وحدة التغذية Power Bank) لأنه الجهد المناسب لعمل هذه اللوحة. مأخذ التغذية Power Connector يستخدم هذا المأخذ لتغذية لوحة أردوينو أونو بالطاقة الكهربائية بجهد يتراوح بين 7V و 12V، وعادة ما تُستخدم بطارية 9V أو مكيّف Adapter من 220V تيار متردد AC إلى 12V أو 9V تيار مستمر DC. منظم الجهد Voltage Regulator تتمثل وظيفة منظم الجهد في التحكم بالجهد المزود إلى لوحة أردوينو من خلال تنظيمه وتثبيت قيمته كي يتناسب مع الجهد المطلوب للوحة والعناصر الإلكترونية الأخرى المتصلة بها. الهزازة الكريستالية Crystal Oscillator الهزازة الكريستالية هي عنصر إلكتروني أساسي في لوحة أردوينو، حيث تستخدم لتوليد نبضات كهربائية بتردد محدد بدقة، هذه النبضات ضرورية لمعرفة كيفية حساب الوقت أثناء قيام اللوحة بتنفيذ التعليمات البرمجية وضمان تنفيذها بدقة. زر إعادة التشغيل Reset يستخدم هذا الزر لمقاطعة عمل المتحكم وإعادة تشغيله من البداية، ويتم ذلك من خلال طريقتين: إما بالضغط مباشرة على الزر الموجود في اللوحة، أو من خلال سلك بين قطب Reset وقطب الأرضي GND كما هو موضح بالصورة أعلاه. أقطاب الطاقة Power Pins تستخدم هذه الأقطاب لتغذية العناصر والوحدات الإضافية التي ستوصل مع لوحة الأردوينو مثلا الحساسات Sensors والليدات LEDs ووحدات العرض Display وغيرها من العناصر الأخرى وهي كالتالي: 3.3v قطب تغذية للعناصر بقيمة 3.3v. 5v قطب تغذية للعناصر بقيمة 5v. GND الأرضي ويعتبر القطب السالب ويستخدم لإكمال مسار الدارة الإلكترونية. Vin قطب دخل يمكن من خلاله تغذية الأردوينو من مصدر خارجي. الأقطاب التشابهية Analog Pins تحتوي لوحة أردوينو أونو على ستة أقطاب تشابهية مرقمة من A0 إلى A5 حيث أن حرف A هنا هو اختصار لكلمة Analog والني تعني تشابهي أو تماثلي، تقرأ هذه الأقطاب الإشارات التشابهية من الحساسات المختلفة مثل حساس الحرارة وحساس الرطوبة وتحولها إلى قراءة رقمية يمكن أن تُقرأ بدورها عن طريق المعالج المصغر microprocessor. المتحكم المصغر Microcontroller يعد المتحكم المصغر المتحكم الرئيسي للوحة، فهو بمثابة عقل الدارة ويتكون من شريحة إلكترونية صغيرة تحتوي على وحدة المعالجة المركزية CPU، وذاكرة، ومجموعة من الدوائر الكهربائية المخصصة لإدخال البيانات ومعالجتها وإخراجها، وتحتوي كل لوحة أردوينو متحكمًا خاصًا بها يختلف من نوع لوحة إلى آخر. ليد مؤشر التشغيل وظيفة هذا الليد هي مراقبة حالة تشغيل اللوحة، ففي حالة تغذية اللوحة بمصدر طاقة كهربائية سيعمل الليد مباشرة ويضيء باللون الأخضر بشكل مستمر، وفي حالة عدم تغذية اللوحة لن يعمل. ليدات بروتوكول الاتصال UART تفيد في مراقبة حالة نقل البيانات، إذ تجد في لوحة الأردوينو هذه الكتابة "TX" و"RX" في مكانين مختلفين: الأول في الأقطاب 0 و1 المسؤولة عن الاتصال التسلسلي لإرسال واستقبال البيانات، والثاني في ليدات تحديد حالة إرسال البيانات واستقبالها، ففي حالة إرسال الأردوينو للبيانات سيضيء الليد الخاص بـ TX، وفي حالة استقبال البيانات يضيء الليد الخاص بـ RX. الأقطاب الرقمية Digital Pins تحتوي لوحة أردوينو أونو على 14 قطب رقمي يمكنك استخدامها كمداخل لتلقي البيانات أو مخارج لإرسال البيانات بشكل رقمي، حيث تعطي خرجين محددين إما 0 منطقي (يعادل 0 فولت)، وإما 1 منطقي (يعادل 5 فولت) كما يمكن استخدام الأقطاب التشابهية كأقطاب رقمية. قطب الجهد المرجعي AREF هو قطب لتحديد قيمة الجهد المرجعي المستخدم كمعيار أو موجه أجل تحويل الإشارة التشابهية Analog إلى رقمية Digital، ويكون ضمن مجال تغذية اللوحة ففي حال لوحتنا ستكون قيمة المجال من 0 إلى 5 فولت. لغة برمجة الأردوينو Arduino تعتمد لغة برمجة الأردوينو بشكل أساسي على لغتي C و ++C، إضافة إلى احتوائها على مجموعة كبيرة من المكتبات والدوال المبنية مسبقًا، ما يجعلها سهلة الاستخدام للمبتدئين وغير المبرمجين. تُبرمج المتحكمات الموجودة في لوحات الأردوينو باستخدام هذه اللغة للتفاعل مع الحساسات والمحركات والأجهزة والعناصر الأخرى المتصلة باللوحة. وتُستخدم بشكل واسع في مشاريع الروبوتات والأنظمة الذكية وإنترنت الأشياء. يمكنك التعرف بشكل أكبر على بنية لغة برمجة الأردوينو والدوال والتعليمات البرمجية المتوفرة فيها من خلال المرجع الرسمي على موقع الأردوينو Arduino Reference. تجهيز بيئة العمل البرمجية بعد أن تعرفنا على الأردوينو وما هي أنواع لوحات الأردوينو والأجزاء الرئيسية من لوحة أردوينو أونو Arduino UNO التي سوف نستخدمها في هذه السلسلة كما ذكرنا، علينا الآن تعلم كيفية إعداد بيئة العمل البرمجية. ففي هذا القسم، سنتعلم بخطوات سهلة، كيفية تثبيت البيئة البرمجية Arduino IDE على جهاز الحاسوب، وتجهيز اللوحة لاستقبال الكود البرمجي عبر كابل USB. تثبيت برنامج Arduino IDE 1.8 عملية تثبيت بسيطة جداً، كل ما عليك هو الذهاب إلى صفحة التحميل الخاصة بأردوينو لتظهر لك إصدارات مختلفة من برنامج Arduino IDE، حدد نسخة متوافقة مع نوع نظام التشغيل الخاص بك (Windows أو Mac-OS أو Linux) وبعد اكتمال تنزيل الملف فك ضغطه في المكان الذي تريده، وثبّت البرنامج مثل أي برنامج عادي والصور التالية توضح عملية التثبيت على نظام التشغيل ويندوز. بعد الانتهاء من التثبيتب ابحث في شريط البحث -الموجود بجانب قائمة ابدأ أسفل الشاشة- عن Arduino للعثور على البرنامج وتشغيله، كما ستجد أيقونة البرنامج على سطح المكتب لفتحه بسهولة، بعد فتح البرنامج ستظهر لك الواجهة التالية: المكان A يستخدم لتصليح الكود وفحصه من وجود الأخطاء. المكان B يستخدم لرفع الكود على لوحة الأردوينو. المكان C يستخدم لإنشاء مشروع جديد فارغ. المكان D يستخدم لفتح ملف محفوظ أو مثال جاهز. المكان E يستخدم لحفظ الملف. المكان F يستخدم لفتح نافذة العرض التسلسلي Serial Monitor. تمثل المنطقة رقم 1 المكان المخصص لكتابة الكود البرمجي والأوامر والتعليمات البرمجية. تمثل المنطقة رقم 2 المكان الذي يعرض معلومات عن استهلاك الذاكرة ورسائل الأخطاء. ربط لوحة أردوينو مع البرنامج في البداية عليك توصيل لوحتك مع الحاسوب من خلال كابل USB ثم فتح البرنامج Arduino IDE وبمجرد تشغيل البرنامج، سيكون أمامك خياران: إنشاء مشروع جديد فارغ من خلال الضغط على قائمة File في الأعلى، ثم New. فتح مثال جاهز من الأمثلة من خلال الضغط على قائمة File في الأعلى ثم الخيار Example ثم اختيار المثال الذي تريده. حاليًا سنستخدم المثال Blink الموجود في قسم Basics وهو عبارة عن مشروع بسيط يضيء ليد مدة زمنية معينة ويطفئه مدة زمنية معينة مع تكرار العملية بشكل مستمر. نحتاج الآن لتحديد نوع لوحة الأردوينو المستخدمة لتنفيذ المثال ورقم المنفذ الموصول عليه في الحاسوب: لتحديد نوع اللوحة من خلال الذهاب إلى قائمة Tools ومن ثم الخيار Board واختيار Arduino Uno. لتحديد رقم المنفذ من خلال الذهاب إلى قائمة Tools ومن ثَم الخيار Port واختيار المنفذ الخاص به (يمكنك معرفة رقم المنفذ الخاص بالأردوينو من خلال إزالة توصيله مع الحاسوب فستلاحظ أن هناك خيار اختفى فيكون هو المنفذ الصحيح). أخيراً يمكنك الضغط على اختصار رفع الكود في البرنامج، إذا نفذت الخطوات السابقة بشكل صحيح، انتظر بضع ثوان، وسترى مصابيح RX وTX تومض على اللوحة. في حالة نجاح التحميل، ستظهر رسالة "تم التحميل" أو "Done Uploading" في شريط الحالة وبعدها يبدأ الليد الموصول على القطب 13 في اللوحة بالوميض لفترة زمنية. وهكذا تكون قد تكون نفذت أول مشروع لك على الأردوينو بخطوات سهلة وبسيطة. الخلاصة تعرفنا في هذا المقال على العديد من المفاهيم المهمة في عالم الأردوينو والمتحكمات، واخترنا اللوحة المناسبة لتعلم التعامل مع لوحات أردوينو وهي لوحة Arduino Uno، واستعرضنا أهم مكونات وأجزاء هذه اللوحة وجهزنا بيئة العمل البرمجية، وتعرفنا على طريقة رفع الكود البرمجي إلى لوحة الأردوينو الخاصة بنا وطريقة تنفيذه، سوف نستكمل رحلتنا في المقال القادم وننفذ أول مشروع عملي يتحكم بتشغيل وإطفاء ليد ونشرح خطوات بناءه بالتفصيل. اقرأ أيضًا أساسيات في عالم الإلكترونيات: التيار والجهد والعناصر الساكنة أفضل لغات برمجة الروبوتات تعرف على جهاز راسبيري باي Raspberry Pi تعلم الذكاء الاصطناعي