ستتعلم في هذا المقال كيفية إنشاء لعبة حسية تفاعلية، لتخفيف التوتر وتحسين مستوى تركيز الفرد، أو لتوفير وسيلة للتواصل مع الآخرين.
ستعمل في هذا المشروع على:
- توظيف مهاراتك لتصميم وتنفيذ آلة حسية يتفاعل معها المستخدم.
- استخدام عناصر دخل إلكترونية، مثل الأزرار buttons والمقاومات المتغيرة potentiometers للتحكم بعمل عناصر خرج، مثل مصابيح الليد LED والأجراس buzzers.
- تحسين آلتك بناءً على ملاحظات المستخدمين.
معلومة: تدفع الألعاب الحسية المستخدمين على الاستمرار في استخدامها والتفاعل معها، ومنها ألعاب النقر المتكرر fidget toys التي تساعد في تخفيف التوتر وتحسين مستوى تركيز الفرد، وأيضًا الألعاب الحسية التكيُّفية التي توفر وسيلة للأشخاص ذوي الإعاقات الجسدية للتواصل مع الآخرين. قد تحفز الألعاب الحسية جميع الحواس أو تركز فقط على إحداها.
سيعتمد المقال على ملف المشروع codes.zip لذا يمكنك تحميله وبدء العمل.
الدليل الموجز لإنشاء لعبة إلكترونية تفاعلية تحفز الحواس
إليك شرحًا مختصرًا عن أهداف هذا المشروع:
- استخدام عناصر دخل وخرج إلكترونية متنوعة.
- إنشاء لعبة تفاعلية متينة تشد المستخدمين.
- توفير بيئة عمل وتجربة استخدام مريحة.
- تصفير الإعدادات بناءً على مدخلات المستخدمين، أو بعد مدة زمنية معينة.
- تصميم اللعبة وفق نمط أو موضوع معين.
معلومة: يُعنى علم الهندسة البشرية Ergonomics بتحسين الطريقة التي يتفاعل فيها البشر مع البيئة المحيطة بهم وإيجاد حلول للمشكلات التي قد تواجههم، وسنحصل عند تطبيقه على أدوات سهلة الاستخدام ومريحة.
متطلبات المشروع
يتطلب المشروع توفر العتاد الآتي:
- لوحة حاسوب راسبيري باي بيكو Raspberry Pi Pico مع أرجل مثبتة عليها.
- كبل USB لنقل البيانات ذو نهايات من النوع USB A و micro USB.
- عناصر إلكترونية وأسلاك توصيل.
أما من ناحية البرمجيات، فلا بد من توفر الآتي:
- برنامج ثوني Thonny: وهو البيئة البرمجية التي سنستخدمها لكتابة الشيفرة بلغة بايثون.
تثبيت برنامج Thonny
سنعرض في الآتي طريقة تثبيت برنامج ثوني Thonny في أنظمة التشغيل المختلفة.
تثبيت برنامج Thonny على نظام تشغيل راسبيري باي
يأتي برنامج ثوني Thonny مثبتًا مع نظام تشغيل راسبيري باي، المعروف سابقًا براسبيان Raspbian، لكن قد تحتاج إلى تحديثه. انقر على الأيقونة في الزاوية العلوية اليسرى من الشاشة لفتح نافذة الطرفية Terminal، أو اضغط المفاتيح التالية معًا Ctrl+Alt+T. ثم اكتب الأمر التالي لتحديث نظام التشغيل وبرنامج Thonny:
sudo apt update && sudo apt upgrade -y
تثبيت برنامج Thonny على أنظمة التشغيل الأخرى
يمكنك تثبيت ثوني Thonny على الحواسيب العاملة بنظام تشغيل لينكس، أو ويندوز، أو ماك، وذلك من الموقع الرسمي thonny.org. انقر على رابط التنزيل الموافق لنظام تشغيل حاسوبك من الزاوية العلوية اليمنى في الموقع، ثم انقر على الملفات بعد تنزيلها، وقد تظهر لك الرسالة التالية على نظام ويندوز:
انقر على خيار المزيد من المعلومات "More info" ثم على التشغيل على أي حال "Run anyway".
التعرف على واجهة برنامج Thonny
عند فتح Thonny ستظهر لك الواجهة التالية:
يمكنك الكتابة بلغة بايثون في النافذة الرئيسية الكبيرة، ثم النقر على زر التشغيل الأخضر Run للتنفيذ، ستظهر لك رسالة لحفظ الملف قبل تشغيله.
اكتب الأمر التالي وشغّله:
print('Hello World!')
تغيير السمة والخط
يمكنك التحكم بلون الخط وحجمه وتغيير السمة المُستخدمة في واجهة البرنامج، وذلك بالنقر على قائمة الأدوات Tools من الشريط أعلى الشاشة، ثم النقر على خيارات Options، ثم انقر بعدها على نافذة الخط والسمة Theme & Font واختر نوع الخط والسمة التي تفضلها من النافذة المنسدلة ثم انقر على زر موافق OK عند الانتهاء.
ننصحك باختيار الخطوط البسيطة الواضحة والابتعاد عن الخطوط المزخرفة أو المشابهة لخط اليد لأنها قد تجعل القراءة أصعب.
إعداد مكتبة picozero
سنعمل في هذه الخطوة على إعداد مكتبة picozero وتوصيل لوحة راسبيري باي بيكو وإعداد برنامج مايكرو بايثون.
أولًا، صِل الطرف الصغير لكبل USB إلى لوحة راسبيري باي والطرف الآخر إلى حاسوبك لتتمكن من برمجة اللوحة عن طريقه.
ثانيًا، افتح محرر Thonny، ولاحظ ما هو الإصدار المستخدم من بايثون بقراءة النص الموجود في الزاوية السفلية اليمنى من الشاشة، انقر على النص واختر "MicroPython (Raspberry Pi Pico)"، إذا لم يكن هذا الخيار محددًا. سيطالبك Thonny بتثبيت برنامج MicroPython على حاسوب راسبيري باي بيكو إذا لم تستخدمه مسبقًا، فقط انقر على زر التثبيت Install.
ثالثًا، أضف حزمة بيكو زيرو picozero من خلال النقر على قائمة الأدوات Tools من شريط القوائم في برنامج Thonny، ثم النقر على خيار إدارة الحزم Manage Packages.
ثالثًا، اكتب "picozero"، ثم انقر على زر البحث Search on PyPi.
رابعًا، انقر على picozero من نتائج البحث ثم انقر على زر التثبيت Install.
استلهم أفكارك
اطلع على المشاريع التالية واستلهم منها بعض الأفكار لصنع آلتك التفاعلية:
مشروع الأضواء الليلية
شغّل الفيديو، وشاهد كيف أحدثنا ثقوبًا صغيرةً في ورقة سوداء اللون للحصول على سماء مرصّعة بالنجوم داخل غرفتك. استخدم مصباح الليد متعدد الألوان RGB LED للحصول على تأثير الوميض، واستخدم الأزرار buttons لتشغيل وإطفاء الأضواء. يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع والموجودة باسم "night_sky.py" من ملف المشروع codes.zip.
مشروع النحلة الطنانة
شغّل الفيديو ولاحظ أنه عند الضغط على أجنحة النحلة يصدر صوت طنين، إذ وضعنا ورق قصدير تحت الأجنحة وعند الضغط عليها تلامس قطعةً أخرى من القصدير، وهذا يجعل الجرس يصدر نغمةً ما، إذ يُصدر كل جناح صوتًا مختلفًا؛ كما أضفنا مقاومةً متغيرة للتحكم في مصباح ليد أزرق. يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع والموجودة باسم "The buzzy bee.py" من ملف المشروع codes.zip.
مشروع السيف المضيئ
شغّل الفيديو ولاحظ كيف يضيء نصل السيف عند الضغط على الزر ويصدر الجرس الإلكتروني صوت طنين خافت، وعند تدوير قرص المقاومة المتغيرة يتغير لون النصل وحِدّة الطنين؛ ولإطفاء السيف علينا تدوير قرص المقاومة بالاتجاه المعاكس. يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع والموجودة باسم "saber.py" من ملف المشروع codes.zip.
مشروع الشمعة الإلكترونية
استخدمنا في هذا المشروع مصباح ليد متعدد الألوان RGB LED يضيء باستمرار، وعند النفخ على الشمعة ينطفئ المصباح كما شعلة اللهب الحقيقية؛ حيث يؤدي النفخ إلى تلامس قطعتين من ورق القصدير فتنطفئ الشعلة مدةً قصيرةً، ثم تعود للعمل بعدها. يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع والموجودة باسم "candle.py" من ملف المشروع codes.zip.
إعداد فكرة اللعبة
يجب عليك وضع خطة للعبتك وكيف سيتفاعل اللاعب معها، لذلك خطط عن طريق التفكير، أو الكتابة والرسم، أو عن طريق التعديل وإصلاح بعض أجزاء اللعبة، فالخيار متروك لك.
تحديد غرض اللعبة
فكر مليًّا في الهدف من اللعبة التي ستصممها، ما الغرض منها، هل تود تعريف طفل ما على الأصوات والأشكال؟ أم تريدها وسيلةً لتخفيف التوتر عن طريق الضغط على الأزرار وسماع الأصوات الموافقة لكل زر؟ أم تود تصميم أداة لمساعدة الأشخاص على التواصل والتعبير عن احتياجاتهم؟
تحديد الجمهور
فكر مليًا في الجمهور المستهدف من اللعبة، من هم؟ هل تود تصميم اللعبة لتناسب احتياجات صديق ما، أو أحد أفراد العائلة، أو أحد الصفوف الدراسية، أو الأشخاص الذين يمارسون هواية ما؟ كما يمكنك استهداف جمهور أحد الموسيقيين، أو أن تصمم اللعبة لنفسك.
تحديد مميزات اللعبة
فكر مليًا في العناصر التي تود استخدامها في لعبتك؛ إذ تحتوي لوحة راسبيري باي بيكو على ثمانية أرجل أرضية GND، لذا يمكنك توصيل ثمانية عناصر فقط، وقد تستطيع توصيل أكثر من ثمانية عناصر إذا كان من الممكن أن يشترك بعضها برجل الأرض GND.
عليك أخذ النقاط التالية في الحسبان عند التخطيط للعبتك:
- تُشَغّل مكبرات الصوت Speakers كل نغمة على حدى، لذلك ستحتاج لعدة مكبرات صوت لتشغيل عدة نغمات في نفس الوقت.
- توجد رجل تغذية واحدة ذات جهد 3 فولت على لوحة بيكو؛ أي يمكنك استخدام مقاومة متغيرة واحدة، كما أنه يوجد حدٌّ لقيمة التيار الذي توفره لوحة بيكو.
إليك بعض الاقتراحات لعناصر الدخل والخرج التي يمكنك استخدامها معًا:
- مقاومة متغيرة واحدة وجرس إلكتروني واحد.
- أربعة أزرار جاهزة وجرس إلكتروني واحد.
- ثمانية مبدلات يدوية الصنع وجرس إلكتروني واحد.
- مقاومة متغيرة واحدة وجرسان، وزران.
- عدة أزرار وأجراس لعزف عدة نغمات في نفس الوقت.
يمكنك استخدام ما يزيد عن ثمانية عناصر، ولكن عليك حينها استخدام رجل أرضية مشتركة GND.
حدد هل تود استخدام الأزرار ومقاومة متغيرةً كعناصر دخل؟ أم تريد استخدام قواطع يدوية الصنع؟ وهل تريد عزف صوت معين، أم لحنًا ما أو عدة ألحان؟ هل تريد استخدام مصباح ليد ذو لون واحد؟ أم تفضل استخدام المصباح متعدد الألوان؟
اعتماد التصميم الخارجي للعبة
حدد كيف تريد أن يبدو الشكل الخارجي للعبة:
- هل تريد اعتماد تصميم موجود مسبقًا، مثل شكل المكعب أو المفرقعات؟
- هل تفضل اعتماد موضوع برنامجك التلفزيوني أو سلسلتك المفضلة من القصص المصورة، أو حتى أغنيتك المفضلة؟
- هل تريد صنع غلاف خارجي للعبة من صناديق الورق المقوى، أو من القماش، أو البلاستيك؟
الآن، حضّر العناصر التي ستحتاجها لتنفيذ لعبتك قبل البدء، من عناصر دخل وخرج إلكترونية، وأسلاك توصيل، ولوحة بيكو، واختبر سلامة اللوحة عن طريق توصيلها بحاسوبك والتحقق من عمل مصباح الليد الموجود على اللوحة، باستخدام الشيفرة التالية:
from picozero import pico_led from time import sleep pico_led.on() sleep(1) pico_led.off()
تنفيذ اللعبة واختبارها
حان الآن وقت إعداد لعبتك وتنفيذها.
تذكر أنك تصنع لعبتك الخاصة وفقًا لما تهواه وتراه مناسبًا لك، لذا ليس عليك التقيد بالعناصر المقترحة في مقالنا، اختر منها ما تريد. قد تجد في أمثلتنا أن إحدى الأرجل مستخدمة لغرض ما، عندها استخدم رجلًا عامة أخرى ورجلًا أرضية، واحرص على تدوين أرقام الأرجل المستخدمة عند كتابة الشيفرة.
إليك تذكرةً ببعض المهارات التي تعلمناها والتي ستفيدك في إنشاء لعبتك:
توصيل عناصر الخرج
استخدام رجل أرضية مشتركة
تحتوي لوحة بيكو على ثمانية أرجل أرضية GND، لذلك لاستخدام ما يزيد عن ثمانية عناصر إلكترونية عليك إعادة استخدام إحدى الأرجل الأرضية، وستحتاج لما يلي:
- سلك توصيل نوع دبوس- مقبس.
- رقائق قصدير، وشريط لاصق ناقل، أو أي مادة ناقلة للتيار الكهربائي.
- شريط لاصق.
أولًا، أنشئ شريطًا من ورق القصدير، أو من أي مادة ناقلة.
ثانيًا، استخدم الشريط اللاصق لتوصيل سلك أحد الأرجل الأرضية مع شريط القصدير، كما يلي:
ثالثًا، صِل القطب الموجب للعنصر الأول مع أحد الأرجل العامة GP على لوحة بيكو، والقطب السالب للعنصر مع شريط القصدير.
رابعًا، لتوصيل المزيد من العناصر، صِل القطب الموجب للعنصر مع إحدى أرجل الأغراض العامة GP، والقطب السالب مع شريط القصدير.
توصيل مصابيح الليد ذات اللون الواحد
لتوصيل مصباح ليد واحد ستحتاج إلى ما يلي:
- لوحة راسبيري باي بيكو.
- مصباح ليد باللون الذي تفضله.
- مقاومة.
- سلكي توصيل نوع مقبس- مقبس.
يجب توصيل مقاومة مع الرجل الموجبة الطويلة لمصباح الليد، وتوصيلها مع الرجل GP13 على لوحة بيكو. وتوصيل الرجل السالبة للمصباح مع أقرب رجل أرضية، كما هو موضح في المخطط التالي:
أما لتوصيل عدة مصابيح ليد ذات اللون الواحد، ستحتاج إلى ما يلي:
- لوحة راسبيري باي بيكو.
- عدة مصابيح ليد باللون الذي تفضله.
- مقاومة لكل مصباح.
- سلكي توصيل نوع مقبس- مقبس لكل مصباح.
يجب توصيل مقاومة مع الرجل الموجبة الطويلة لكل مصباح ليد؛ وتوصيل الرجل الموجبة للمصباح الأول مع الرجل GP13 على لوحة بيكو والسالبة مع أقرب رجل أرضية GND؛ وتوصيل الرجل الموجبة للمصباح الثاني مع الرجل GP8، والسالبة مع أقرب رجل أرضية GND؛ وتوصيل الرجل الموجبة للمصباح الثالث مع الرجل GP5، والسالبة مع أقرب رجل أرضية GND، كما هو موضح في المخطط التالي:
إسناد مصابيح ليد إلى رجل معينة أو عدة أرجل على اللوحة
استخدم الشيفرة التالية لإسناد مصباح وحيد إلى الرجل الموصول معها على لوحة بيكو:
from picozero import LED led = LED(13)
أما لإسناد عدة مصابيح ليد إلى أرجل لوحة بيكو: استورد تابع المصباح LED
من مكتبة picozero
، ثم استخدم الشيفرة التالية لإسناد المصابيح إلى الأرجل الموصولة معها على لوحة بيكو:
from picozero import LED led_1 = LED(13) led_2 = LED(8) led_2 = LED(5)
ننصحك بتسمية المتغيرات بأسماء تدل على عملها، كأن تسمّي المصباح المسؤول عن تشغيل المصباح باللون المسؤول عنه، كما يلي:
red_led = LED(13) green_led = LED(8) pink_led = LED(5)
إضافة الشيفرة اللازمة لتشغيل مصباح ليد واحد أو عدة مصابيح
إليك الدالة اللازمة لتشغيل المصباح:
def excited(): # دالة تشغل اللون الموافق لمزاجك purple.on() # شغّل اللون البنفسجي
أما الشيفرة اللازمة لتشغيل عدة مصابيح فهي على النحو التالي:
def excited(): # شغّل اللون الموافق لشعورك بالحماس purple.on() # شغّل المصباح البنفسجي blue.off() # أطفئ المصباح الأزرق def worried(): # شغّل اللون الموافق لشعورك بالقلق purple.off() # أطفئ المصباح البنفسجي blue.on() # شغّل المصباح الأزرق
توصيل مصابيح الليد متعددة الألوان
ستحتاج لتوصيل مصباح ليد متعدد الألوان إلى ما يلي:
- لوحة راسبيري باي بيكو.
- مصباح ليد متعدد الألوان ذو مهبط مشترك.
- ثلاث مقاومات.
- أسلاك توصيل نوع مقبس- مقبس (عدد 8).
يجب عليك توصيل مقاومة مع الأرجل الثلاثة الطويلة لمصباح الليد، أما الرجل الطويلة فهي رجل الأرضية ولا تحتاج إلى مقاومة.
معلومة: لاحظ أنه لمصباح الليد متعدد الألوان أربعة أرجل، لذلك أمسك المصباح بحيث تكون الرجل الأرضية هي ثاني رجل من اليسار، وبحيث يصبح ترتيب الأرجل على النحو التالي: الرجل المسؤولة عن اللون الأحمرRed، ثم الرجل الأرضية GND، ثم الرجل المسؤولة عن اللون الأخضرGreen، فالأزرق Blue، وذلك ليسهُل عليك تذكر وظيفة كل رجل.
صِل أرجل مصباح الليد وفقًا لما يلي:
- صِل الرجل المسؤولة عن اللون الأحمرR مع الرجل GP1 على لوحة بيكو.
- صِل الرجل الأرضية GND مع رجل الأرض GND على لوحة بيكو.
- صِل الرجل المسؤولة عن اللون الأخضرG مع الرجل GP2 على لوحة بيكو.
- صِل الرجل المسؤولة عن اللون الأزرق B مع الرجل GP3 على لوحة بيكو.
لإسناد مصباح الليد متعدد الألوان إلى أرجل لوحة بيكو: استورد تابع المصباح متعدد الألوان RGBLED
من مكتبة picozero
، ثم استخدم الشيفرة التالية لإسناد المصباح إلى الأرجل الموصول معها على لوحة بيكو:
from picozero import RGBLED rgb = RGBLED(red = 1, green = 2, blue = 3)
استخدم الدالة اللازمة لتشغيل مصباح متعدد الألوان كما هو موضح في الشيفرة التالية:
def happy(): # الشعور بالسعادة rgb.color = (0, 255, 0) # شغّل اللون الموافق لشعورك بالسعادة def sad(): # الشعور بالحزن rgb.color = (255, 0, 0) # شغّل اللون الموافق لشعورك بالحزن
تمثيل الألوان بصيغة RGB:
يمكننا تمثيل الألوان بصيغة يفهمها الحاسوب وذلك بالتعبير عن نسبة ما يحتويه اللون من اللون الأحمر والأخضر والأزرق، إذ تخزن هذه القيم في بايت (ثمانية بتات) وتكون قيمتها من 0 إلى 255.
إليك جدولًا يوضح بعض القيم اللونية:
اللون | الأحمر | الأخضر | الأزرق |
---|---|---|---|
أحمر | 255 | 0 | 0 |
أخضر | 0 | 255 | 0 |
أزرق | 0 | 0 | 255 |
أصفر | 255 | 255 | 0 |
أرجواني | 255 | 0 | 255 |
سماوي | 0 | 255 | 255 |
كما يمكنك الاستعانة بمنتقي الألوان من موقع w3schools للحصول على القيم الموافقة للون الذي تريده.
توصيل مكبرات الصوت والأجراس الإلكترونية
ستحتاج لتوصيل جرس إلكتروني واحد مع لوحة بيكو إلى سلكي توصيل نوع مقبس- مقبس. ابدأ بوصل الرجل الطويلة الموجبة للجرس مع الرجل GP5 على لوحة بيكو، وصِل الرجل السالبة مع أقرب رجل تأريض GND.
لمعرفة الرجل الموجبة للجرس، ابحث عن الرجل الأطول، أو عن إشارة الموجب + أعلى الجرس.
وتكون الشيفرة اللازمة لتوصيل جرس واحد على النحو التالي:
from picozero import Speaker speaker = Speaker(5)
أما لتوصيل جرسين إلكترونيين مع لوحة بيكو لخلق تأثير الصوت المجسم ستحتاج إلى أربعة أسلاك توصيل نوع مقبس- مقبس.
أولًا، صِل الرجل الطويلة الموجبة للجرس الأول مع الرجل GP5 على لوحة بيكو، وصِل الرجل السالبة مع أقرب رجل تأريض GND، ثم صِل الرجل الموجبة للجرس الثاني مع الرجل GP10 على لوحة بيكو، والرجل السالبة مع أقرب رجل تأريض GND.
وتكون الشيفرة اللازمة لتوصيل جرسين على النحو التالي:
from picozero import Speaker speaker_1 = Speaker(5) speaker_2 = Speaker(10)
ننصحك بتسمية المتغيرات Variables بأسماء تدل على وظيفتها، مثلًا عند إسناد صوت الطبل للمتغير Speaker_1
فسمّه drum_beat
.
ستحتاج لتوصيل السمّاعات مع لوحة بيكو إلى وصلة ذات نهاية بقطر 3 أو 5 مم (وليس وصلة USB)، وثلاثة مشابك تثبيت، وإلى اتباع الخطوات التالية:
1.صِل أحد المشابك مع أحد أرجل الأرض GND القريبة، وصِل المشبكين الآخرين مع الرجل GP5 والرجل GP10، كما هو موضح في الصورة أدناه.
- صِل نهاية المشبك الأول الموصول مع الرجل GP5، مع نهاية وصلة السمّاعات.
- صِل نهاية المشبك الثاني الموصول مع الرجل GP10،مع منتصف وصلة السمّاعات.
- صِل نهاية المشبك الموصول مع رجل الأرض GND مع جذر وصلة السمّاعات.
معلومات مفيدة يجب معرفتها عن الصوت
دعنا نطلع على بعض المعلومات المفيدة عن الأصوات قبل كتابة الشيفرة.
النغمات المتاحة: تُوفر لنا مكتبة picozero ثمان وثمانين علامةً موسيقية، تتبع التدوين الغربي للموسيقا وتشمل جميع العلامات الموجودة في لوحة مفاتيح موسيقية كاملة الحجم.
إليك بعض العلامات المُتاحة:
- b0
- c1
- c#1
- d1
- d#1
- e1
- f1
- f#1
طول النغمة: توجد عدة طرق لتحديد طول النغمة: أولًا، تحديد طول نغمة واحدة باستخدام القيم، إذ يمكنك تحديد مدة النغمة الواحدة بإدخال قيمة في حقل الوسيط الثاني في دالة العزف:
speaker.play(c_note, 0.1) # اعزف النغمة لمدة 0.1 ثانية
ستُعزَف النغمة C في مثالنا لمدة 0.1 ثانية.
ثانيًا، تحديد طول نغمة واحدة باستخدام الثوابت، إذ يمكنك تحديد مدة النغمة الواحدة بالتصريح عن أحد الثوابت في حقل الوسيط الثاني في دالة العزف بدلًا عن القيمة، وتعريف هذا الثابت كما يلي:
BEAT = 1 # BEAT تعريف الثابت speaker.play(c_note, BEAT) # اعزف النغمة لمدة ثانية واحدة
لاحظ أنه يمكننا استخدام الثابت BEAT
لتحديد طول أي نغمة.
ثالثًا، تحديد طول مجموعة من النغمات باستخدام القيم؛ فعند عزف لحن ما، يُفضل تخزين النغمات وطول كل منها في قائمة list، كما في مثالنا التالي، إذ خزّنا كل نغمة مع طولها في قائمة، وجمعنا النغمات الثلاث في قائمة:
my_tune = [ ['d5', 1], ['d#5', 0.5], ['f5', 1.2]] # قائمة بالنغمات وطول كل منها
احرص على كتابة النغمة ضمن علامتي اقتباس ' '
.
رابعًا، تحديد طول مجموعة من النغمات باستخدام الثوابت: ابدأ أولًا بتحديد طول النغمة الذي تريده باستخدام الثابت BEAT
، اخترنا في مثالنا القيمة 0.4، ثم صرّح عن النغمات التي تود عزفها في قائمة ضمن علامتي ' '
واستخدم الثابت BEAT
لتحديد طول النغمات:
BEAT = 0.4 # طول النغمة الواحدة my_tune = [ ['d5', BEAT], ['d#5', BEAT / 2], ['f5', BEAT * 1.5]] # قائمة بالنغمات وطول كل منها
يمكنك التحكم بعدد النغمات في الدقيقة BPM عن طريق تقسيم الثابت BEAT
على عدد ما للحصول على نغمات أقصر، مثلًا 2 / BEAT
، أو مضاعفته بضربه بعدد ما للحصول على نغمات أطول، مثلًا BEAT * 1.5
- استخدام الأرقام عوضا عن النغمات: يمكنك الاستعاضة عن النغمات باستخدام قيم الترددات الموافقة لها، والتي تتراوح بين القيمة 150 إلى 10000، إليك المثال التالي لعزف نغمة ذات التردد 523 لثانية واحدة:
speaker.play(523, 1) # اعزف النغمة ذات التردد 523 لثانية واحدة
-
تحويل المقطوعات الموسيقية إلى نغمات: تُتيح لنا مكتبة "picozero" عزف المقطوعات الموسيقية الشهيرة واستخدامها في مشاريعنا، إذ تُستخدم الأحرف الإنجليزية للتعبير عن العلامات الموسيقية، وتستخدم الأرقام للتعبير عن موقع العلامة في السلم الموسيقي الكبير.
على سبيل المثال، توجد العلامة C الوسطى في منتصف السلم الموسيقي ويعبر عنها بالرمز C4، وتزداد الأرقام المعبرة عن العلامة كلما صعدنا في السلم الكبير، وتنقص عند النزول.
تحتوي المقطوعة الموسيقية علامات حادة يُعَبر عنها بالرمز # وتدعى "دييز". في مثالنا أدناه، توجد عدة علامات موسيقية حادة، أولها العلامة C الحادة والتي يرمز لها c#4.
وقد تحتوي المقطوعة الموسيقية على علامات بسيطة يُشار إليها بالرمز ♭ وتدعى "بيمول"، لكن سنشير إليها في مشروعنا بالرمز # لعدم احتواء مكتبة picozero
على شيفرة خاصة للتعبير عن العلامات البسيطة، وعلينا النزول نصف درجة في السلم الموسيقي للتحويل من علامة بسيطة إلى حادة.
إليك الأمثلة التالية:
- تتحوّل العلامة البسيطة D إلى C حادة أو c#4.
- تتحوّل العلامة البسيطة E إلى D حادة أو d#4.
- تتحوّل العلامة البسيطة G إلى F حادة أو f#4.
- تتحوّل العلامة البسيطة A إلى G حادة أو g#4.
أمثلة عن بعض الشيفرات الموسيقية
الشيفرة اللازمة لعزف علامة موسيقية واحدة
إليك مثالًا عن الشيفرة اللازمة لعزف العلامة C الوسطى لمدة نصف ثانية:
def c_note(): speaker.play('c4', 0.5) # اعزف العلامة لمدة نصف ثانية
الشيفرة اللازمة لعزف لحن موسيقي
خزّن النغمات وطول كل منها في قائمة للحصول على لحن ما ، ثم شغّل اللحن باستخدام الدالة play
:
BEAT = 0.4 liten_mus = [ ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['d6', BEAT], ['a#5', BEAT], ['d5', BEAT], ['f5', BEAT], ['d#5', BEAT], ['d#5', BEAT], ['c5', BEAT / 2],['d5', BEAT / 2], ['d#5', BEAT], ['c6', BEAT], ['a5', BEAT], ['d5', BEAT], ['g5', BEAT], ['f5', BEAT], ['f5', BEAT], ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['g5', BEAT], ['a5', BEAT], ['a#5', BEAT], ['a5', BEAT], ['g5', BEAT], ['g5', BEAT], ['', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT / 2], ['d6', BEAT / 2], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT / 2], ['g5', BEAT / 2], ['a5', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT], ['f5', BEAT], ['f5', BEAT], ['f5', BEAT / 2], ['d#5', BEAT / 2], ['d5', BEAT], ['f5', BEAT], ['d6', BEAT], ['d6', BEAT / 2], ['c6', BEAT / 2], ['b5', BEAT], ['g5', BEAT], ['g5', BEAT], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT], ['f5', BEAT], ['d6', BEAT], ['a5', BEAT], ['a#5', BEAT * 1.5] ] def play_liten_mus(): speaker.play(liten_mus)
الشيفرة اللازمة لتوليد تأثيرات صوتية مختلفة باستخدام الترددات
يمكننا توليد تأثيرات صوتية ممتعة، أو مزعجة، وذلك بعزف نغمات قصيرة ذات ترددات مختلفة، إذ أنه كلما تغير التردد تختلف العلامة الموسيقية التي نسمعها وتختلف نغمتها.
إليك الشيفرة التالية التي ترتفع فيها الترددات تدريجيًا لخلق صوت مبهج:
def win(): # ترددات متزايدة for i in range(2000, 5000, 100): speaker.play(i, 0.05) # اعزف النغمة لمدة قصيرة جدًا
أما المثال التالي فخفضنا فيه الترددات تدريجيًا لتوليد صوت زقزقة العصافير:
def chirp(): # توليد صوت زقزقة العصافير for _ in range(2): # ترددات متناقصة for i in range(5000, 2999, -100): speaker.play(i, 0.02) # اعزف النغمة لمدة قصيرة جدًا sleep(0.2)
غَيّر الترددات المستخدمة في حلقة التكرار for
واستخدم الترددات ضمن المجال من 150 إلى 10000.
الشيفرة اللازمة لتوليد ضجيج أبيض من صوت قرع الطبل
إليك الشيفرة التالية:
from picozero import Speaker from time import sleep from random import randint speaker = Speaker(5) for i in range(100): speaker.play(randint(500, 5000), duration=None) sleep(0.001) speaker.stop() sleep(0.5)
الشيفرة اللازمة لعزف النغمات بصورة متكررة
أنشئ قائمةً بالنغمات التي تريد عزفها وطول كل منها للحصول على لحن ما، ثم استخدم حلقة تكرار for
لتشغيل اللحن نغمةً نغمة، أو علامةً علامة باستخدام الدالة play
:
BEAT = 0.4 liten_mus = [ ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['d6', BEAT], ['a#5', BEAT], ['d5', BEAT], ['f5', BEAT], ['d#5', BEAT], ['d#5', BEAT], ['c5', BEAT / 2],['d5', BEAT / 2], ['d#5', BEAT], ['c6', BEAT], ['a5', BEAT], ['d5', BEAT], ['g5', BEAT], ['f5', BEAT], ['f5', BEAT], ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['g5', BEAT], ['a5', BEAT], ['a#5', BEAT], ['a5', BEAT], ['g5', BEAT], ['g5', BEAT], ['', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT / 2], ['d6', BEAT / 2], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT / 2], ['g5', BEAT / 2], ['a5', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT], ['f5', BEAT], ['f5', BEAT], ['f5', BEAT / 2], ['d#5', BEAT / 2], ['d5', BEAT], ['f5', BEAT], ['d6', BEAT], ['d6', BEAT / 2], ['c6', BEAT / 2], ['b5', BEAT], ['g5', BEAT], ['g5', BEAT], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT], ['f5', BEAT], ['d6', BEAT], ['a5', BEAT], ['a#5', BEAT * 1.5] ] for note in liten_mus: speaker.play(note)
الشيفرة اللازمة لعزف عدة نغمات متزامنة
إذا أردت عزف لحن ما مثلًا، وتشغيل لحن أو تأثير صوتي آخر بالتزامن معه، فيمكنك ذلك بوضع wait=False
في حقل الوسيط الثاني للدالة play
.
في مثالنا التالي، أنشأنا قائمةً بالنغمات التي نريد عزفها وطول كل منها، ثم عرّفنا اللحن الآخر المزعج، الذي سينطلق بالتزامن مع اللحن الأول عند الضغط على الزر، وسيتوقف معه عند إيقاف الشيفرة:
BEAT = 0.4 liten_mus = [ ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['d6', BEAT], ['a#5', BEAT], ['d5', BEAT], ['f5', BEAT], ['d#5', BEAT], ['d#5', BEAT], ['c5', BEAT / 2],['d5', BEAT / 2], ['d#5', BEAT], ['c6', BEAT], ['a5', BEAT], ['d5', BEAT], ['g5', BEAT], ['f5', BEAT], ['f5', BEAT], ['d5', BEAT / 2], ['d#5', BEAT / 2], ['f5', BEAT], ['g5', BEAT], ['a5', BEAT], ['a#5', BEAT], ['a5', BEAT], ['g5', BEAT], ['g5', BEAT], ['', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT / 2], ['d6', BEAT / 2], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT / 2], ['g5', BEAT / 2], ['a5', BEAT / 2], ['a#5', BEAT / 2], ['c6', BEAT], ['f5', BEAT], ['f5', BEAT], ['f5', BEAT / 2], ['d#5', BEAT / 2], ['d5', BEAT], ['f5', BEAT], ['d6', BEAT], ['d6', BEAT / 2], ['c6', BEAT / 2], ['b5', BEAT], ['g5', BEAT], ['g5', BEAT], ['c6', BEAT / 2], ['a#5', BEAT / 2], ['a5', BEAT], ['f5', BEAT], ['d6', BEAT], ['a5', BEAT], ['a#5', BEAT * 1.5] ] sound = [ [523, 0.1], [None, 0.1], [523, 0.4] ] def annoying_sound(): speaker2.play(sound, wait=False) # شغّل بالتزامن مع اللحن الأول button.when_pressed = annoying_sound try: speaker.play(liten_mus) finally: speaker.off() #أطفئ مكبر الصوت الأول عند إيقاف البرنامج speaker2.off() # أطفئ مكبر الصوت الثاني عند إيقاف البرنامج
توصيل عناصر الدخل
توصيل الأزرار مع لوحة بيكو
ستحتاج لتوصيل زر واحد مع لوحة بيكو إلى ما يلي:
- لوحة راسبيري بيكو.
- زر إلكتروني.
- سلكي توصيل نوع مقبس-مقبس.
صِل سلكي التوصيل مع أرجل الزر واستخدم الشريط اللاصق لتثبيتهما إن لزم الأمر، ثم صِل أحد السلكين مع الرجل GP18 والسلك الآخر مع أقرب رجل أرضية، لا يهمنا ترتيب توصيل الأسلاك إذ إنه لا توجد قطبية للزر.
لتوصيل عدة أزرار إلكترونية مع لوحة بيكو ستحتاج إلى ما يلي:
- لوحة راسبيري بيكو.
- أزرار إلكترونية.
- سلكي توصيل نوع دبوس-مقبس لكل زر.
توضح الصورة التالية طريقة توصيل ثلاثة أزرار مع لوحة بيكو، وإذا أردت توصيل زر رابع فما عليك سوى توصيله مع إحدى أرجل الأغراض العامة GP ورجل أرضية.
استخدم سلكي توصيل نوع دبوس- مقبس لتوصيل الزر الأول مع الرجل GP18 ومع أقرب رجل أرضية GND، ثم صِل الزر الثاني مع الرجل GP22، والثالث مع الرجل GP28 بنفس الطريقة.
-
استيراد تابع الزر Button من مكتبة picozero: إليك الشيفرة اللازمة لاستيراد تابع الزر
Button
من مكتبةpicozero
:
from picozero import Button
-
الشيفرة اللازمة لتوصيل زر إلكتروني واحد: لتوصيل زر إلكتروني علينا إسناده إلى الرجل الموصول معها على لوحة بيكو، كما يلي:
from picozero import Button button = Button(18)
-
الشيفرة اللازمة لتوصيل عدة أزرار إلكترونية: استورد تابع الزر
Button
من مكتبةpicozero
، ثم استخدم الشيفرة التالية لإسناد عدة أزرار إلى الأرجل الموصولة معها على لوحة بيكو:
from picozero import Button button_1 = Button(18) button_2 = Button(22) button_3 = Button(28)
ننصحك بتسمية المتغيرات بأسماء تدل على عملها، كأن تسمّي الزر المسؤول عن تشغيل المصباح الأحمر red_button
أو أي اسم آخر تراه مناسبًا.
-
تشغيل نغمة معينة عند الضغط على كل زر: يمكنك إضافة عدة أزرار يستدعي كل منها دالة صوتية مختلفة عند الضغط عليها، وذلك باستدعاء الدالة الموافقة عند الضغط على الزر عن طريق ذكر اسمها بدون استخدام الأقواس. كما في المثال التالي:
happy_button.when_pressed = happy sad_button.when_pressed = sad angry_button.when_pressed = angry
-
تشغيل النغمة التالية عند الضغط على الزر: عرّف متغيرًا ما، وليكن
option
، لتخزين النغمة الحالية فيه واستدعاء الدالة التالية، واحرص على مطابقة أسماء الدوال في الشيفرة للدوال التي استخدمتها في الفقرة السابقة:
option = 0 # خزّن النغمة الحالية في هذا المتغير def choice(): # استدعي الدالة الصوتية التالية وعدّل قيمة متغير التخزين global option if option == 0: energised() # دالة النغمة الأولى elif option == 1: calm() # دالة النغمة الثانية elif option == 2: focused() # دالة النغمة الثالثة elif option == 3: rgb.off() # انتقل إلى الخيار الثاني if option == 3: option = 0 else: option = option + 1 button.when_pressed = choice # استدعي الدالة التالية عند الضغط على الزر
توصيل المبدل مع لوحة بيكو والشيفرة اللازمة لذلك
-
توصيل مبدل يدوي الصنع أو زر مع لوحة بيكو: ستحتاج إلى سلكي توصيل نوع دبوس-مقبس. صِل أحدهما مع الرجل GP18 والسلك الآخر مع أقرب رجل أرضية، كما يلي:
ثم يمكنك صنع مبدّل يدوي، كما تعلمنا في مشروع سابق، وتوصيلها مع اللوحة وذلك بتوصيل النهاية الحرة للأسلاك مع الجزء الناقل من المبدّل، مثل النحاس أو ورق القصدير.
-
توصيل عدة قواطع يدوية أو أزرار مع لوحة بيكو: ستحتاج إلى سلكي توصيل نوع دبوس-مقبس لكل قاطعة تود توصيلها مع لوحة بيكو.
استخدم سلكي توصيل نوع دبوس- مقبس لتوصيل المبدّل الأول مع الرجل GP18 ومع أقرب رجل أرضية GND، ثم صِل المبدّل الثاني مع الرجل GP22 ومع أقرب رجل أرضية، والثالث مع الرجل GP28 ورجل الأرضية بنفس الطريقة، كما هو موضح في المخطط التالي:
لكتابة الشيفرة اللازمة لتوصيل المبدّل لا بُد من استيراد تابع المبدل Switch
من مكتبة picozero
كما هو موضح في الشيفرة التالية:
from picozero import Switch
استورد تابع المبدّل Switch
من مكتبة picozero
، ثم استخدم الشيفرة التالية لإسناد المبدّل إلى الرجل الموصولة معه على لوحة بيكو:
from picozero import Switch switch = Switch(18)
ولتوصيل عدة مبدّلات: استورد تابع المبدّل Switch
من مكتبة picozero
، ثم استخدم الشيفرة التالية لإسناد عدة مبدّلات إلى الأرجل الموصولة معها على لوحة بيكو:
from picozero import Switch switch_1 = Switch(18) switch_2 = Switch(22) switch_3 = Switch(28)
ننصحك بتسمية المتغيرات بأسماء تدل على عملها، كأن تسمّي القاطعة المسؤولة عن تشغيل المصباح الأحمر red_switch
أو أي اسم آخر تراه مناسبًا.
توصيل المقاومات المتغيرة مع لوحة بيكو
ستحتاج لتوصيل مقاومة متغيرة مع اللوحة إلى ما يلي:
- لوحة راسبيري بيكو.
- مقاومة متغيرة.
- أسلاك توصيل نوع مقبس-مقبس (عدد 3).
توجد للمقاومة المتغيرة ثلاثة أرجل: رجل الأرضية GND، ورجل تشابهية Analogue، ورجل التغذية 3V3، وعند تدوير قرص المقاومة المتغيرة إلى أقصى اليسار سيشير السهم إلى الرجل الأرضية GND، وعند تدويره إلى أقصى اليمين سيشير السهم إلى رجل التغذية 3V3، أما الرجل الوسطى للمقاومة فهي الرجل التشابهية التي تستمد منها لوحة بيكو القيم لقراءتها.
- صِل سلك توصيل ذو نهايات مقبس-مقبس مع كل من أرجل المقاومة الثلاث، ثبت التوصيلات بالشريط اللاصق إن لزم الأمر.
- صِل النهاية الحرة للسلك الموصول مع رجل المقاومة ذات الرقم 1 مع رجل الأرض GND الموجودة بين الرجلين GP21 وGP22.
- صِل رجل المقاومة الوسطى مع الرجل GP26_A0 على لوحة بيكو.
- صِل رجل المقاومة ذات الرقم 3 مع رجل التغذية 3V3.
-
استيراد تابع المقاومة المتغيرة Pot من مكتبة picozero: إليك الشيفرة اللازمة لاستيراد تابع المقاومة المتغيرة
Pot
من مكتبةpicozero
:
from picozero import Pot
وتكون الشيفرة اللازمة لتوصيل مقاومة متغيرة على النحو التالي:
from picozero import Pot dial = Pot(0) # Connected to pin A0 (GP_26)
عند استخدام مقاومة متغيرة للتحكم في الخرج، سنحتاج إلى تقسيم قيم المقاومة إلى أجزاء متساوية. كأن نستخدم التابع dial.value
للحصول على قيم تتراوح بين 0 و 1، كما يمكننا ضرب القيمة ب 100 للحصول على نسبة مئوية؛ فإذا كان لديك خمس قيم يمكنك التحقق ما إذا كانت القيمة أقل من 20 أو 40 أو 60 أو 80 أو 100؛ أما إذا كان لديك ثلاث قيم يمكنك تقسيم القراءات للتحقق ما إذا كانت القيمة أقل من 33 أو 66 أو 100.
إليك المثال التالي:
while True: mood = dial.value * 100 # تحويل إلى نسبة مئوية print(mood) if mood < 20: happy() elif mood < 40: good() elif mood < 60: okay() elif mood < 80: unsure() else: unhappy() sleep(0.1)
الآن، شغّل دارتك وتحقق أن جميع عناصر الدخل والخرج تعمل كما يجب، واستعن بفقرة تصحيح الأخطاء أدناه إذا واجهتك أي مشكلة.
تصميم الهيكل الخارجي
تثبيت العناصر داخل الورق المقوى أو البلاستيك
بإمكانك تثبيت مصابيح الليد أو الأجراس أو المقاومات المتغيرة داخل قطع من الورق المقوى أو البلاستيك، وذلك بصنع ثقوب وإدخال العناصر وأسلاك التوصيل فيها، كما هو موضح:
افصل الأسلاك عن العنصر، ثم أدخله في الثقب الذي أحدثته، ثم أعد توصيل الأسلاك. ستحتاج إلى استخدام أداة حادة لإحداث ثقب في المواد البلاستيكية. اطلب مساعدة أحد البالغين إذا لزم الأمر، واحرص على تذكر ما هي أرقام الأرجل الموصولة مع الأسلاك.
استخدم الشريط اللاصق لتثبيت العناصر في مكانها.
تبديد الضوء المنبعث من مصباح الليد
نحصل عند تبديد ضوء مصباح الليد، أو نشره، على تأثير لطيف، وخاصة عند استخدام مصابيح الليد الشفافة، ذات اللون الواحد أو متعددة الألوان، وذلك بوضع المصباح خلف ورقة رقيقة أو شفافة، أو خلف شريط لاصق شفاف، مما سيجعل الضوء ينتشر على مساحة أوسع وبسطوع أقل، فيصبح أكثر راحةً للعين.
كما يمكنك توجيه الضوء في اتجاه معين باستخدام ورقة بيضاء، وذلك لتحصل على أكبر قدر ممكن من الضوء.
تثبيت أسلاك التوصيل باستخدام الشريط اللاصق
يمكنك تثبيت أسلاك التوصيل باستخدام الشريط اللاصق، وإزالة الشريط اللاصق فيما بعد بكل سهولة لإعادة استخدام العناصر عند الحاجة.
استخدام سكين الحرف
تُعد سكاكين الحرف Crafts مفيدةً عند صنع الحرف اليدوية، لكن يجب أن تكون حذرًا جدًا عند استخدامها لأنها حادة جدًا ويمكن أن تسبب جروحًا وإصابات. احرص على وجود شخص بالغ عند استخدامك للسكاكين، أو اطلب منه استخدامها عوضًا عنك، كما ننصحك باستخدام لوح القص لحماية الأسطح، أو باستخدام لوح التقطيع الخشبي المتوفر في كل المطابخ.
توصيل الأسلاك ببعضها
قد تحتاج إلى أسلاك توصيل طويلة جدًا لتوصيل مصابيح الليد مع أرجل لوحة بيكو، أو يمكنك وصل الأسلاك ببعضها للحصول على سلك طويل، وذلك عبر توصيل سلك ذو نهايات دبوس-مقبس مع سلك ذو نهايات مقبس-مقبس للحصول على سلك مقبس-مقبس طويل جدًا، ويُطلق على هذه الطريقة اسم سلسلة الأقحوان daisy chaining.
ننصحك باستخدام سلكين لهما اللون نفسه ليسهل تتبع السلك ومعرفة العنصر الموصول معه.
تكمن مشكلة هذه الطريقة في أن الأسلاك قد تنفصل عن بعضها، ولذلك ينصح بلصقها بقطعة صغيرة من الشريط اللاصق.
إنشاء مبدل فوري يعمل عند الإسقاط
ستحتاج لإنشاء مبدّل فوري Drop switch ما يلي:
- لوحة راسبيري بيكو.
- سلكي توصيل نوع دبوس-مقبس.
- ورق قصدير.
- شريط لاصق.
أولًا، أنشئ شريطين من ورق القصدير، أو من أي مادة ناقلة.
ثانيًا، ثبت سلكي التوصيل مع شريطي القصدير باستخدام الشريط اللاصق، كما يلي:
ثالثًا، الصق قطعةً من القصدير أسفل المجسم الذي ستضعه فوق شريط القصدير لإغلاق المبدّل. احرص على أن تكون قاعدة المجسم واسعةً بما يكفي لتوفير تماس بين سطحي القصدير.
رابعًا، صِل النهايات الحرة للسلكين مع لوحة بيكو وأسقط المجسم لإغلاق المبدّل.
إنشاء قاطعة يدوية تعمل عند السحب
إليك ما سنحتاج إليه:
- مقص.
- ورق مقوى.
- رقائق القصدير.
- غراء وشريط لاصق.
- شرائط ملونة وورق ملون.
- قلم رصاص ومسطرة (اختياري).
أولًا، قُصَّ الورق المقوى إلى ثلاثة مستطيلات متساوية الحجم.
ثانيًا، قُصَّ مستطيلًا صغيرًا في منتصف المستطيل الأول، واحتفظ به لاستخدامه لاحقًا.
ثالثًا، قُصَّ قطعًا من ورق القصدير بحجم المستطيلات الكبيرة، ثم الصقها عليها باستخدام الغراء، واحرص على عدم وضع الغراء على الوجه الخارجي لورق القصدير حتى لا تتأثر التوصيلات لاحقًا.
رابعًا، قُصَّ أطراف المستطيل الصغير للحصول على شكل مدبب أو بشكل حرف V، ثم قلّم الأطراف بمقدار بضع ملميترات كي يتسع المستطيل الصغير في الفتحة.
خامسًا، غلّف المستطيل الصغير بكامله بورق القصدير، واحرص على استخدام ورقة قصدير واحدة، إذ ستسمح هذه القطعة بمرور التيار عند إغلاق المبدّل.
سادسًا، استخدم الشريط اللاصق لتثبيت على الوجه العلوي للمستطيلات.
احرص على أن يكون الدبوس المعدني للسلك ملامسًا لورق القصدير، وأن يكون الجزء البلاستيكي الأسود ملامسًا لحافة المستطيل.
سابعًا، أضف مزيدًا من الشريط اللاصق لتثبيت السلك ومنع انفكاكه عن طريق الخطأ.
ثامنًا، ادهن بعض الغراء على المستطيل الذي فرّغنا منتصفه (الموجود في يسار الصورة) والصقه مع المستطيل المغطى بالقصدير (يمين الصورة)، واحرص على ألا تتلامس طبقتي القصدير الموجودة على حواف المستطيلات، قُصّها إذا لزم الأمر:
أصبح المبدّل جاهزًا للاستخدام في مشروعك.
تثبيت الأسلاك والعناصر باستخدام الشريط اللاصق
يمكنك تثبيت العناصر مع أسلاك التوصيل، أو تثبيتها في مكانها باستخدام الشريط اللاصق، وإزالة الشريط اللاصق بكل سهولة لإعادة استخدام العناصر فيما بعد:
أخيرًا، اختبر المشروع بعد انتهائك من تنفيذ التصميم الخارجي، واعرضه على أفراد العائلة أو الأصدقاء للحصول على ملاحظاتهم، وقرر هل تود إجراء أي تعديل؟
تصحيح الأخطاء
قبل التعرف على المشاكل التي قد تواجهك عند تنفيذ المشروع وكيفية إصلاحها، عليك أولًا التحقق من سلامة لوحة بيكو:
التحقق من سلامة لوحة بيكو باستخدام مصباح الليد
استخدم مصباح الليد الموجود على لوحة بيكو للتحقق من سلامة اللوحة، وذلك بجعل المصباح يومض عند تشغيل الشيفرة بإضافة الشيفرة التالية في البداية:
from picozero import pico_led from time import sleep pico_led.on() sleep(2) pico_led.off()
تصحيح الأخطاء الموجودة في الشيفرة
- تحقق من وجود أي رسائل خطأ في نافذة صدفة Thonny وتحقق من محتواها، إن وجدت.
- راجع الشيفرة التي كتبتها وتحقق من خلوها من الأخطاء، مثل نسيان علامة : مثلًا، أو وجود مسافة بادئة دون الحاجة لها.
-
تأكد من استيراد توابع العناصر التي ستستخدمها في مشروعك من مكتبة
picozero
مثل تابع مصباح الليدRGBLED
أو الزرButton
. -
استخدم تعليمة الطباعة
print
لإضافة شرح مختصر عند كل خطوة، مثل(البدء)print
أو(ضبط المصباح على اللون الأخضر)print
.
لا تعمل بعض العناصر الإلكترونية كما يجب
- تأكد أن جميع العناصر متصلة ببعضها جيدًا، وتحقق من ثبات نقاط توصيل الأسلاك مع اللوحة ومع العناصر.
- تأكد أن أرقام الأرجل المستخدمة في الشيفرة مطابقة لأرقام الأرجل الموصولة مع مصباح الليد، وتأكد من إعادة وصل الأرجل في حال فصلتها عند العمل على تصميم شكل الآلة الموسيقية.
- تحقق من وصل العناصر وفق القطبية الصحيحة، إذ قد تحتوي بعض العناصر على قطب موجب + وآخر سالب -.
- في حال تحققت من جميع النقاط السابقة ولا زالت آلتك لا تعمل، فجرّب تبديل العناصر الإلكترونية بأخرى جديدة.
لا يحدث شيء عند تشغيل الشيفرة
- تأكد أن جميع العناصر متصلة ببعضها جيدًا، وأنها موصولة مع الأرجل الصحيحة على اللوحة.
- تحقق من صدفة Thonny عند تشغيل الشيفرة؛ لربما نسيت نسيت تعريف بعض الدوال أو المتغيرات، أو قد تكون نسيت تعديل الشيفرة لتتناسب مع مشروعك.
-
تحقق من صحة الشيفرة التي كتبتها، واستخدم تابع الطباعة
print
لإيضاح عمل الشيفرة. - تحقق أنك استدعيت الدوال في الشيفرة.
إليك مثالًا عن طريقة استدعاء الدالة، إذا عرفنا الدالة happy
أولًا، ثم استدعيناها عن طريق التصريح عن اسمها (بدون وسطاء داخل الأقواس):
def happy(): # الدالة الأولى rgb.color = (0, 255, 0) # اللون الموافق للدالة الأولى def sad(): # الدالة الثانية rgb.color = (255, 0, 0) # اللون الموافق للدالة الثانية happy()
لا يضيء مصباح الليد عند استدعاء الدالة المسؤولة عن تشغيله
تأكد من مطابقة الأرجل الموصول معها المصباح على لوحة بيكو للأرجل المسند إليها في الشيفرة.
لا يضيء مصباح الليد باللون الصحيح
تحقق من الشيفرة التي كتبتها وأن القيم اللونية مطابقة للون المستخدم، واستخدم منتقي الألوان التالي للتحقق من اللون المستخدم.
لا تصدر النغمات أو أن صوتها مختلف عن الصوت المطلوب
من غير المرجح أن تكون المشكلة في الشيفرة التي كتبتها، بما أنها كانت سليمةً قبل تنفيذ التصميم الخارجي للعبة، لذا عليك التحقق من التوصيلات والعناصر.
- تأكد من توصيل العناصر مع الأرجل الصحيحة، ستجدها في بداية الشيفرة.
- تأكد أن جميع العناصر موصولة مع بعضهًا جيدًا، واستخدم الشريط اللاصق لإحكام تثبيت العناصر.
- تأكد من عدم تغطية العناصر الناقلة في دارتك، مثل ورق القصدير بالغراء أو الشريط اللاصق.
وذلك للمشاكل الآتية:
-
يتأخر عزف النغمة عند الضغط على زر ما: عند استخدام أحد الأحداث events مثل حدث الضغط
when_pressed
لتشغيل دالة ما، فإن هذه الدالة ستُنفَذ حتى انتهائها وستمنع تشغيل أي شيء آخر في الشيفرة.
sound = [ [523, 0.1], [None, 0.1], [523, 0.4] ] def annoying_sound(): speaker.play(sound, wait=False) # لا تؤخر تشغيل الشيفرة button.when_pressed = annoying_sound
- طول الأسلاك غير مناسب: إذا وجدت أن الأسلاك التي استخدمتها لا تفي بالغرض المطلوب بسبب قصر طولها، فما عليك إلا زيادة طولها، وفقًا لما تعلمناه في فقرة توصيل الأسلاك ببعضها.
- لا تثبُت الأسلاك والعناصر في مكانها: قد تكون بعض التوصيلات أمتن من غيرها، لذا ننصحك باستخدام الشريط اللاصق لإحكام تثبيت الأسلاك.
حاول حل المشاكل الأخرى التي قد تواجهك عند التنفيذ وشاركنا طريقة الحل في منصة حسوب IO أو في أكاديمية حسوب.
ترقية المشروع
يمكنك ترقية مشروعك حين يتسنى لك ذلك، بإضافة مزيد من عناصر الدخل والخرج عليه، وتحسين تصميمه الخارجي، ولا تنسى اختباره مع الأصدقاء والعائلة لتحسين تجربة الاستخدام وفقًا لآرائهم، واطّلع على المشاريع التي أوردناها في مقدمة المقال لتستلهم منها بعض الأفكار.
استخدمنا في النسخة الأصلية لمشروع الأضواء الليلية مصباح ليد متعدد الألوان وأحدثنا ثقوبًا صغيرةً في ورقة ليخرج منها الضوء ونحصل على تأثير مشابه لسماء مرصّعة بالنجوم، وأضفنا زرًا تشغيل وإطفاء المصباح.
شاهد الفيديو ولاحظ كيف عملنا على ترقية المشروع بإضافة مصباح آخر متعدد الألوان لزيادة السطوع، ونشرنا الضوء على نطاق أوسع بوضع المصباح ضمن غلاف بلاستيكي شفاف، واستبدلنا الورق المقوى ذو الثقوب بمجسم ذي اثني عشر وجهًا، وحفرنا على كل وجه رمزًا لأحد الأبطال الخارقين في الرسوم المتحركة.
الخاتمة
تهانينا، فقد أتممت مشروع تصميم وتنفيذ لعبة حسية تفاعلية باستخدام لوحة راسبيري باي بيكو.
إذا واجهت مشاكلًا عند تنفيذ هذا المشروع فيمكنك الحصول على الدعم والمساعدة عبر إضافة سؤالك في قسم الأسئلة والأجوبة في أكاديمية حسوب.
ترجمة -وبتصرف- للمقال Sensory gadget من الموقع الرسمي لراسبيري باي.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.