الدرس الأول إعداد بيئة تطوير الأردوينو (٢)
انظر إلى الشكل 4.10 لتوصيل الأردوينو. خذ سلكاً من طرف الأرضي المكتوب عليه GND في لوحة الأردوينو، وصله بالعمود السالب في لوحة توصيل الدوائر الصغيرة، واجعل لون السلك أسود كما يظهر في الخطوة الأولى. الآن، ابحث عن المقاومة من مكتبة المكونات وضعها في اللوحة كما في الخطوة الثانية. بعد ذلك، صل الطرف الرقمي 12 في الأردوينو بالطرف الأول للمقاومة باستخدام سلك لونُه أحمر كما يظهر في الخطوة الثالثة. هذه الخطوات تنظم التيار الكهربائي القادم من المنفذ الرقمي عبر المقاومة بحماية تامة قبل وصوله إلى الدايود المشع للضوء الذي سنضيفه لاحقاً.
يقوم هذا الدرس على إعداد بيئة تطوير الأردوينو باستخدام لغة بايثون وبروتوكول Firmata ومكتبة PyFirmata للتحكم في اللوحة والمكونات الإلكترونية كالدايودات المشعة للضوء. الفكرة الأساسية هي ربط الحاسوب بلوحة الأردوينو لتنفيذ أوامر برمجية ترسل إشارات رقمية تفاعلية. انظر إلى طريقة توصيل الدايود الخارجي بالطرف الرقمي 12 والمقاومة والمبدد الأرضي GND، بينما يتصل الدايود المدمج بالطرف 13. كمثال سريع، لكتابة برنامج يومض فيه الدايودان بالتعاقب، تكتب أمر الاستيراد import pyfirmata وimport time، ثم تحدد منفذ الاتصال مثل COM4، وتنشئ حلقة تكرارية while True ترسل إشارة مرتفعة HIGH عبر external_led.write(1) وإشارة منخفضة LOW عبر internal_led.write(0) ثم تستخدم أمر time.sleep(1) لفصل زمني قدره ثانية واحدة قبل عكس الحالة تماماً لتشغيل وميض مستمر.
الفكرة الأساسية
تعتمد فكرة الدرس على ربط لوحة الأردوينو بجهاز الحاسوب للتحكم في المكونات الإلكترونية المتصلة بها باستخدام لغة بايثون. لا تقتصر البرمجة هنا على لغة سي بلس بلس، بل يتيح استخدام بروتوكول Firmata ومكتبة PyFirmata إرسال واستقبال الأوامر البرمجية مباشرة بين بايثون والأطراف الرقمية والتناظرية للوحة الأردوينو.
الشرح
لكي يتفاهم الحاسوب مع الأردوينو عبر بايثون، يجب اتباع خطوات محددة. ابدأ بفتح برنامج بايتشارم وإنشاء ملف بايثون جديد، ثم استورد المكتبات الضرورية بكتابة import pyfirmata وimport time. بعد ذلك، قم بإعداد منفذ الاتصال عبر متغير مثل communication_port = 'COM4'. أنشئ الاتصال الفعلي بتعريف board = pyfirmata.Arduino(communication_port) ثم تفعيل التكرار عبر it = pyfirmata.util.Iterator(board) وتثبيته بـ it.start(). لتعريف الأطراف، استخدم دالة get_pin لتحديد الأطراف الرقمية، مثل external_led = board.get_pin("d:12:o") للطرف الخارجي، وinternal_led = board.get_pin("d:13:o") للطرف الداخلي، حيث يشير الحرف d إلى الرقمي وo إلى المخرج. في حلقة التكرار اللانهائية while True، يمكنك إرسال إشارات باستخدام دالة write، حيث تعني القيمة 1 إشارة مرتفعة HIGH لتشغيل الدايود، وتعني القيمة 0 إشارة منخفضة LOW لإطفائه. ولعمل فارق زمني بين الأوامر، تستخدم دالة time.sleep(1) لتأخير التنفيذ ثانية واحدة.
مثال محلول خطوة بخطوة
المطلوب برمجة دايودين مشعين للضوء ليومضا تلو الآخر بفارق زمني ثانية واحدة، بحيث يتصل الأول بالطرف الرقمي 12 والثاني بالدايود المدمج على الطرف الرقمي 13. الخطوة الأولى: توصيل الدايود الخارجي بلوحة التوصيل الصغيرة Breadboard مع مقاومة موصلة بالطرف الرقمي 12 وبالعامود السالب للوحة وتوصيل الطرف الأرضي GND بالعامود السالب. الخطوة الثانية: كتابة أوامر الاستيراد في بايتشارم: import pyfirmata import time الخطوة الثالثة: إعداد منفذ الاتصال وإنشاء كائن اللوحة: communication_port = 'COM4' board = pyfirmata.Arduino(communication_port) it = pyfirmata.util.Iterator(board) it.start() الخطوة الرابعة: تعيين الأطراف: external_led = board.get_pin("d:12:o") internal_led = board.get_pin("d:13:o") الخطوة الخامسة: كتابة منطق التشغيل والوميض داخل حلقة تكرارية: while True: external_led.write(1) internal_led.write(0) time.sleep(1) external_led.write(0) internal_led.write(1) time.sleep(1) عند تشغيل البرنامج، يضيء الدايود الخارجي بينما ينطفئ الدايود المدمج لمدة ثانية، ثم ينعكس الوضع تماماً في الثانية التالية.
أخطاء شائعة
- كتابة اسم منفذ الاتصال بشكل خاطئ، مثل كتابة منفذ غير مستخدم بدلاً من COM4 الصحيح.
- نسيان تشغيل مكرر التكرار عبر الأمر it.start() مما يوقف استقبال البيانات بشكل صحيح.
- الخلط بين إرسال القيمة 1 و0 في دالة write، مما يؤدي إلى عدم تشغيل الدايود المطلوب.
- توصيل أسلاك الدايود أو المقاومة في نقاط خاطئة على لوحة التوصيل الصغيرة Breadboard.
سؤالان للتدريب مع الإجابة
السؤال الأول: ما وظيفة التعليمتين البرمجيتين الآليتين؟ pin = board.get_pin("a:4:p") pin.write(0.75) الإجابة: تعين التعليمة الأولى الطرف التناظري رقم 4 كمخرج لتضمين عرض النبضة وتخزينه في المتغير pin، بينما ترسل التعليمة الثانية قيمة إخراج تناظرية بنسبة سبعين بالمئة وخمسة من المئة (0.75) إلى ذلك الطرف. السؤال الثاني: لماذا يتم استخدام مكتبة PyFirmata عند برمجة الأردوينو؟ الإجابة: لتوفير بيئة تسمح للبرامج المكتوبة بلغة بايثون بالاتصال المباشر بلوحة الأردوينو والتحكم في أطرافها الرقمية والتناظرية وإرسال الإشارات لها.