علوم الحاسب

[سلسلة تعلم الأردوينو]:مدخل إلى برمجة لوحات الأردوينو

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

هذا المقال هو الدرس الأول من سلسلة تعلم الأردوينو، والذي سنقوم من خلاله بتوضيح أساسيات التعامل مع الأردوينو والذي نهدف من خلال إلى توضيح وتسليط الضوء على الأفكار والمفاهيم التالية:

  • بيئة التطوير Arduino IDE
  • أجزاء الشيفرة البرمجية الأساسية عند كتابة برنامج ما ضمن هذه البيئة.
  • استخدام المغارز الرقمية كمداخل / مخارج و إصدار الإشارات من خلالها . 

1. حول بيئة التطوير Arduino IDE

شكل نافذة بيئة التطوير البرمجية الخاصة بلوحات الأردوينو

توفر بيئة التطوير البرمجية الخاصة بأردوينو Arduino IDE توابع بسيطة يمكن عبرها تنفيذ العديد من المهام التي عادةً ما تتطلب كتابة العديد من التعليمات فيما لو تم استخدام لغة سي المعيارية أو توسعة سي المضمنة. تتميز بيئة التطوير البرمجية الخاصة بأردوينو بكونها مفتوحة المصدر، ويمكن استخدامها لبرمجة أي لوحة من لوحات الأردوينو. يمكن تحميل وتنصيب بيئة التطوير البرمجية الخاصة بأردوينو بشكلٍ مجانيّ مباشرةً من موقع أردوينو، والنسخة المستقرة التي يمكن تحميلها هي Arduino IDE 1.8.13، كما يمكن الاطلاع على الشيفرة المصدرية الخاصة ببرنامج Arduino IDE عبر منصة جيت-هاب.

يوجد أيضاً في الوقت الحالي إصدار تجريبي جديد لبيئة التطوير البرمجية الخاصة بلوحة الأردوينو، وهو Arduino IDE beta 2.0 والذي يمتلك محرر نصوص أكثر حداثة مع ميزات مثل الإكمال التلقائي للتعابير البرمجية والتنقل بين التعليمات وعرض تعاريف الأفعال والتصريحات والأهم وجود المصحح Debugger الذي يتيح معرفة أماكن حصول الخطأ أثناء تنفيذ البرنامج نفسه. يجب الإشارة إلى أن الإصدار الجديد من بيئة التطوير البرمجية الخاصة بأردوينو لا يزال بالنسخة التجريبية ما يعني توقع حصول مشكلات وأخطاء أثناء استخدامه. للحصول على النسخة التجريبية Arduino IDE beta 2.0 يمكنكم الضغط على الرابط التالي: Arduino IDE beta 2.0.

نافذة تظهر شكل النسخة التجريبية من بيئة التطوير الجديدة الخاصة بلوحات أردوينو – مصدر الصورة: مدونة أردوينو Photo Credit: Arduino Blog

2. تحميل وتنصيب بيئة التطوير Arduino IDE

يمكن تحميل بيئة التطوير Arduino IDE مباشرةً من موقع الأردوينو وبشكلٍ مجانيّ عبر الرابط التالي: Arduino IDE 1.8.13.

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

  • تحميل بيئة التطوير على شكل ملف تنفيذي: هذا هو الخيار الأول الذي يظهر ضمن قائمة Download Options، وهو يعني أنه سيتم تنصيب ملف بصيغة exe وتشغيله يتطلب امتلاك المستخدم صلاحيات المدير Administrator. عند تنصيب بيئة التطوير باستخدام هذا الخيار، يُفضل وأثناء خطوات تنصيب اختيار اللغة الإنجليزية.
  • تحميل بيئة التطوير على شكل ملف مضغوط: هذا هو الخيار الثاني لحواسيب ويندوز ضمن قائمة Download Options، وهو يعني تحميل ملف مضغوط بصيغة zip يتضمن كل المعلومات والبيانات التي تحتاجها بيئة التطوير للعمل على الحاسب، وهو خيار ممتاز في حال عدم وجود صلاحيات المدير (أي عدم إمكانية تشغيل ملف تنفيذي بصيغة exe). بهذه الحالة، وعند تنصيب بيئة التطوير بهذه الطريقة، فإن كل ما سيكون مطلوب إجراؤه هو فك ضغط الملف الذي تم تحميله ومن ثم تشغيل برنامج بيئة التطوير من داخله (يحمل اسم arduino).
  • تحميل بيئة التطوير من متجر التطبيقات Microsoft Store: يوجد نسخة من بيئة التطوير على شكل تطبيق App يمكن تحميلها من متجر التطبيقات الخاص بنظام تشغيل ويندوز. يمكن استخدام هذا الخيار مع حواسيب ويندوز العاملة بنظام تشغيل ويندوز 8.1 وما يليها فقط. بشكلٍ عام، لا يُنصح بتنصيب بيئة التطوير البرمجية من متجر Microsoft Store.
خيارات التحميل التي تظهر على الشاشة عند تحميل بيئة التطوير من موقع أردوينو

محرر الويب الخاص ببيئة تطوير الأردوينو

في حال لم يكن هنالك إمكانية لتنصيب بيئة التطوير البرمجية على الحاسب الشخصيّ، تتيح الأردوينو إمكانية استخدام محرر ويب لبيئة التطوير الخاص بها والذي يعمل أيضاً مع كافة لوحات الأردوينو الأخرى، كما أنها محدث بشكلٍ مستمر ويتضمن آخر الميزات الرسمية التي يتم توفيرها لبيئة التطوير. كل ما يجب القيام به لاستخدام محرر الويب هو إنشاء عضوية ضمن موقع أردوينو ومن ثم سيكون بالإمكان استخدام محرر الويب والميزات المختلفة التي يتيحها. من أجل استخدام محرر الويب الخاص ببيئة تطوير الأردوينو يمكنكم الضغط على الرابط التالي: Arduino Web Editor.

3. الخطوات الأولى – استكشاف أقسام بيئة التطوير Arduino IDE

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

  1. محرر النصوص: وهو القسم الخاص بكتابة الكود صاحب اللون الأبيض وهو الجزء الأكبر في واجهة البرنامج و الأكثر استخداما.
  2. جزء التحكم : وهو القسم صاحب اللون الأسود و الذي يحتوي معلومات حول عملية رفع الشيفرة البرمجية بحال تمت بشكل صحيح أو بحال احتواء الشيفرة البرمجية على أي أخطاء مع تحديده.
  3. شريط الأدوات : يحتوي على مجموعة من أدوات التحكم وهي:
    1. التحقق Verify: يتيح هذا الخيار إجراء تحقق من صحة النص البرمجيّ المكتوب وكذلك إجراء عملية بناء وترجمة من أجل توليد الملف القابل للرفع على لوحة الأردوينو
    2. الرفع Upload: من أجل رفع البرنامج على لوحة الأردوينو
    3. جديد New: من أجل إنشاء برنامج جديد
    4. فتح Open: والذي يتيح فتح برامج أخرى، أو فتح إحدى المكاتب البرمجية أو فتح أحد الأمثلة الموجودة سلفاً والتي تأتي مع لوحة الأردوينو
    5. حفظ Save: من أجل حفظ التغييرات والتعديلات التي تم تنفيذها على النص البرمجي
    6. النافذة التسلسلية Serial: من أجل عرض الأوامر التي يتم إرسالها عبر المنفذ التسلسلي. يتم تعريف هذه الأوامر ضمن النص البرمجيّ باستخدام توابع مثل ()Serial.print
  4. شريط القوائم : يحتوي على مجموعة من القوائم و أيضا سنتكلم عنها تباعا عند الحاجة لها. من أهم القوائم:
    • File  / ملف : تحتوي هذه القائمة على مجموعة من التبويبات أهمها :
      • New  / جديد : لإنشاء ملف جديد لكتابة الشيفرة البرمجية .
      • Open / فتح : لفتح ملف شيفرة برمجية سابق موجود في الحاسب .
      • Open recent / المفتوحة حديثا : نجد آخر الملفات التي قمنا بالتعديل عليها .
      • Examples / أمثلة : تحتوي على عدد كبير من المشاريع الجاهزة من كل المكاتب التي تم تضمينها .
      • Save / حفظ : لحفظ التعديلات ضمن الملف المفتوح .
      • Preferences / خصائص : من أجل ضبط العديد من خيارات المستخدم فيما يتعلق ببيئة التطوير، مثل
        • تغيير لغة المحرر .
        • ترقيم الأسطر .
        • تغيير حجم الخط .

ملاحظة: من أجل ضبط لغة بيئة برمجة الأردوينو يمكن اتباع الخطوات التالية:

  • ندخل من قائمة File  إلى تبويبة Preferences (خصائص)
  • ثم إلى لغة المحرر Editor Language ومن ثم اختيار اللغة المراد استخدامها

4. كتابة الشيفرة البرمجية باستخدام تعليمات الأردوينو بواسطة Arduino IDE

يمكن كتابة البرامج ضمن بيئة التطوير البرمجية الخاصة بلوحة الأردوينو باستخدام لغة سي بلس بلس، وهذا يعني أنه يمكن الاستفادة من العديد من خواص البرمجة كائنية التوجه OOP عند كتابة برامج الأردوينو. بشكلٍ عام، فإن البرنامج في بيئة الأردوينو يُعرف باسم “رسم Sketch” وهو يتكون من قسمين أساسيين:

  • تابع الإعداد ()setup
  • التابع التكراري ()loop
void setup() {
   // put your setup code here, to run once:
 }
 void loop() {
   // put your main code here, to run repeatedly:
 }

يتم استخدام تابع الإعداد من أجل التعليمات التي سيتم تنفيذها لمرة واحدة وهو مخصص من أجل ضبط إعدادات لوحة الأردوينو، أي إجراء أمور مثل:

  • تحديد نمط مغرز دخل / خرج
  • تهيئة حساسات معينة و معايرتها
  • رسالة ترحيبية باستخدام أي وسيلة إظهار .

بالنسبة للتابع التكراري فهو مستخدم من أجل التعليمات التي سيتم تنفيذها بشكل متواصل، وطالما أن لوحة الأردوينو متصلة بالطاقة، سيتم إعادة تنفيذ التعليمات المكتوبة بهذا القسم، ويمكن التعبير عن هذا القسم بلغات البرمجة المختلفة باستخدام الحلقة الشرطية اللانهائية while(1)، وهي تُعرف بهذا الاسم لأن شرط الحلقة محقق دوماً وبالتالي سيتم تنفيذ محتواها بشكلٍ تكراري على الدوام. يوضع ضمن هذا الجزء معظم أوامر البرنامج المراد تنفيذه , مثل : قراءة قيم حساس بشكل مستمر وإظهار النتيجة على النافذة التسلسلية أو على شاشة كريستال سائل LCD أو حتى باستخدام القطع السبع المضيئة Segment-7.

5. إصدار الإشارات الرقمية باستخدام الأردوينو أونو

نحتاج أولا لتحديد المغرز المراد استخدامه لإصدار إشارة رقمية (0/1) , و تحتوي لوحة الأردوينو أونو على 14 مغرز رقمي (0-13)  و 6 مغارز تماثلية (A0-A5) يمكن استخدامها أيضا كمداخل أو مخارج رقمية. عندما نريد توليد إشارة رقمية فهذا يعني أننا نتعامل مع احتمالين فقط: إما إشارة جهد عالي High أي واحد منطقي، أو إشارة جهد منخفض Low أي إشارة صفر منطقي. من أجل ذلك فإننا نحتاج دوماً لتنفيذ خطوتين أساسيتين:

  • تحديد نمط عمل الغرز، دخل أو خرج
  • كتابة قيمة الجهد المنطقي على المغرز، عالي أو منخفض
  1. تحديد نمط عمل المغرز: أو تهيئة المغرز، ويمكن إجراء ذلك عبر استخدام التابع ()pinMode ضمن تابع الإعداد ()setup كما يلي:
void setup()
{
// Arduino Function to Set pin direction, input or output 
pinMode(pin_num, Mode); 
}

حيث:

  • Pin_num : رقم المغرز المراد تحديد نمط عمله
  • Mode : (INPUT/OUTPUT) نمط عمل المغرز، أي أن يكون مخصصاً لإرسال إشارات خرج (OUTPUT) أو استقبال إشارات دخل (INPUT)

مثال-1: تهيئة المغرز 13 للعمل كمخرج رقمي.

void setup()
{
// Set Digital Pin Number 13 to work as output pin 
pinMode(13, OUTPUT); 
}

مثال-2: تهيئة المغرز 4 للعمل كمدخل رقمي.

void setup()
{
// Set Digital Pin Number 4 to work as input pin 
pinMode(4, INPUT); 
}

ملاحظة: عند تحديد نمط عمل المغرز سواء كان دخل أو خرج، يجب كتابة الكلمات المفتاحية OUTPUT و INPUT بالأحرف الكبيرة، حيث تميز لغة سي بلس بلس (لغة البرمجة الخاصة ببيئة أردوينو) بين نوع المحارف، وهذا يعني أن Output لا تمتلك نفس OUTPUT من وجهة نظر مترجم اللغة.

2. كتابة قيمة رقمية على المغرز: بعد أن تم تهيئة المغرز ليعمل كدخل أو خرج يمكن استخدام توابع الكتابة أو القراءة، وبهذه الحالة فإننا مهتمون بكتابة قيمة جهد رقمي على المغرز وهذا الأمر يتم باستخدام التابع ()digitalWrite كما يلي:

// Writing a value on a Digital Pin 
digitalWrite(pin_num, digital_level);
  • Pin_num : رقم مغرز الخرج الذي نريد إصدار الإشارة من خلاله
  • Signal  : (HIGH / LOW) الحالة الرقمية التي نريد إصدارها

مثال-1: كتابة قيمة جهد رقمي منخفض LOW على المغرز الرقمي 12

// Write LOW voltage level on Digital Pin 12 
digitalWrite(12, LOW); 

مثال-2: كتابة جهد رقمي مرتفع High على المغرز الرقمي 10

// Write HIGH voltage level on Digital Pin 10 
digitalWrite(10, HIGH); 

أما عن استخدام تعليمة القراءة من المغارز الرقمية سنشرحها باستخدام تدوينة خاصة .

6. مشروع بسيط: إضاءة ثنائي مُصدر للضوء باستخدام لوحة أردوينو أونو

من أجل توضيح الأفكار السابقة وفهم كيفية تنفيذها مع بعضها البعض، سنقوم بتنفيذ برنامج بسيط وهو إضاءة ثنائي مصدر للضوء (ليد LED) بحيث يُضيء المصباح لمدة نصف ثانية ويتوقف عن العمل لمدة نصف ثانية. من أجل تنفيذ هذا الأمر سنحتاج لتوليد تأخير زمني وهو ما يُمكن تنفيذه باستخدام تابع التأخير ()delay.

العتاد المستخدم

  • لوحة أردوينو أونو Arduino UNO، أو أي لوحة متوافقة معها .
  • لوحة تجريب إلكترونية.
  • أسلاك توصيل Jumper-Wire.
  • ديود ضوئي LED .
  • مقاومة أومية 220 أوم.

البرامج المستخدمة

  • بيئة التطوير الرسمية الخاصة بلوحات الأردوينو

توصيل العتاد

يتم توصيل الديود الضوئي مع المقاومة الأومية على المغرز الرقمي 13 وفق مخطط الدارة الآتي :

النص البرمجي

void setup() 
{
  // Set Digital Pin "13" as output
  pinMode(13, OUTPUT); 
}

void loop() 
{
  // Turn on the LED 
  digitalWrite(13, HIGH); 
  // Wait 500 ms 
  delay(500); 
  // Turn off the LED 
  digitalWrite(13, LOW); 
  // Wait 500 mas 
  delay(500); 
}
  • ملاحظة: استخدمنا تعليمة delay(duration) من أجل توليد تأخير زمني بمقدار 500 ميللي ثانية، حيث يمكن تحديد مدة التأخير الزمني مقاساً بواحدة الميللي ثانية عبر تمرير الوسيط duration إلى التابع ()delay.

الآن لنفحص الكود من وجود أي أخطاء نضغط من شريط الأدوات على الأداة verify / التحقق، وهذه الأداة تعمل على فحص الشيفرة البرمجية من وجود أي خطأ و تحدد مكانه ومن دون رفع الكود إلى المتحكم. بمعنى أعمق، مهمة هذه الأداةهي عملية بناء Build للملف التنفيذي، وهذا يعني عملية تحقق من صحة الكود ومن ثم ترجمته لتوليد الملف التنفيذي بلغة Hex والذي يكون جاهز للرفع للمتحكم Atmega328P الموجود داخل لوحة أردوينو أونو.

استخدام أداة التحقق Verify من أجل فحص النص البرمجي ومن ثم التأكد من خلوه من الأخطاء عبر الرسالة التي تظهر أسفل الشاشة

في حال خلو النص البرمجيّ من الأخطاء سيتم عرض جملة اكتملت الترجمة done compiling كما يظهر في الصورة السابقة.

6. رفع الشيفرة البرمجية إلى المتحكم

قبل عملية الرفع وبعد وصل اللوحة عن طريق كابل الـ USB يجب تحديد المنفذ التسلسلي المرتبطة فيه لوحة الأردوينو و نوع اللوحة و ذلك من خلال الخطوات التالية الموضحة في الصور أدناه :

  • تحديد نوع الأردوينو : أدوات  Tools > لوحة board > Arduino / Genuino Uno .
  • تحديد المنفذ : أدوات  Tools > منفذ port  > اختيار المنفذ المكتوب بجانبه Arduino uno .

 والآن بعد الانتهاء من تحديد نوع لوحة الأردوينو و تحديد المنفذ التسلسلي المتصلة فيه اللوحة يتم رفع الشيفرة البرمجية بالضغط على الأداة  upload / رفع  التي من خلالها يمكن الفحص و الرفع معا بعملية واحدة:

للتأكد من اكتمال رفع الشيفرة البرمجية تظهر الرسالة اكتمل الرفع / Done Uploading كما في الصورة السابقة. في حال حدثت مشكلة أثناء الرفع يرجى معاودة تطبيق الخطوات السابقة بشكل صحيح و التأكد من وصل اللوحة في منفذ الـ USB. بعد اكتمال رفع الكود إلى لوحة الأردوينو بشكلٍ صحيح وبدون مشاكل من المفترض أن يبدأ الثنائي المصدر للضوء المتصل بالمغرز الرقمي رقم 13 بالإضاءة بشكلٍ دوريّ، بحيث يعمل لمدة نصف ثانية ويتوقف عن العمل لمدة نصف ثانية. يمكن تجريب تغيير فترات التأخير الزمني لملاحظة كيفية استجابة المصباح المصدر للضوء لذلك.

7. خلاصة

  • يُدعى البرنامج في بيئة الأردوينو “رسم Sketch” وهو يتألف من تابع لإعداد وتهيئة المغارز الرقمية والطرفيات المختلفة، ومن تابع تكراري يتم ضمنه كتابة التعليمات المراد تنفيذها باستمرار
  • يمكن ضبط أحد مغارز الأردوينو للعمل كدخل وخرج ضمن تابع الإعداد عبر استخدام التعليمة pinMode
  • يمكن كتابة قيمة جهد رقمي على أحد مغازر الأردوينو باستخدام التعليمة digitalWrite
  • يمكن التحقق من صحة النص البرمجيّ عبر الأداة Verify ضمن بيئة الأردوينو، ويمكن التحقق من صحة النص البرمجيّ ورفع الكود إلى المتحكم مباشرةً باستخدام الأداة Upload
  • في حال وجود خطأ ضمن النص البرمجيّ لن يتم ترجمته وسيتم عرض رسالة خطأ ضمن قسم التحكم أسفل بيئة التحكم بالخاصة بلوحة الأردوينو

Mouhamad Hadid

مهندس في الالكترونيات و الاتصالات من جامعة دمشق مهتم بعالم الالكترونيات الرقمية و المتحكمات وأنظمة الـ IOT والتيار الخفيف.

مقالات ذات صلة

زر الذهاب إلى الأعلى