اذهب إلى المحتوى

تصميم وتنفيذ آلة موسيقية باستخدام لوحة راسبيري باي بيكو


أروى عفان

سنعمل في هذا المشروع على إنشاء آلة تصدر أصواتًا وموسيقى مختلفة باستخدام الأزرار buttons، والمبدّلات الإلكترونية switches، والمقاومات المتغيرة potentiometer.

لنحصل على آلة مشابهة لما يلي:

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

ستتعلم في هذا المشروع ما يلي:

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

معلومة: تملك الأصوات تأثيرًا على حالتنا النفسية، فقد تكون مهدئةً، أو مزعجةً، أو منشِطة، فعلى سبيل المثال، يجد بعض الأطفال الرُضع لآلة الضجيج الأبيض Whitenoise تأثيرًا مهدئًا يساعدهم على الاسترخاء والنوم؛ بينما يستخدم منسقو الأغاني DJs أجهزةً محمولة لتوليد النغمات، ويستخدم محبو الدُعابة أجهزةً تصدر تأثيرات صوتية لإضحاك الناس. ماذا عنك؟ هل توجد آلة صوتية تستخدمها يوميًا؟

متطلبات المشروع

عتاد:

  1. لوحة حاسوب راسبيري باي بيكو Raspberry Pi Pico مع أرجل مثبتة عليها.
  2. كبل USB لنقل البيانات ذو نهايات من النوع USB A و micro USB.
  3. مقاومات متغيرة potentiometer وأزرار buttons.
  4. جرس إلكتروني غير فعّال passive.
  5. أسلاك توصيل.
  6. بعض مستلزمات الأشغال اليدوية، مثل الورق المقوى، ورقائق القصدير، وشريط لاصق.
  7. مصباح ليد عادي أو متعدد الألوان RGB LED ذو مهبط مشترك common cathode، ومقاومات وأسلاك توصيل. (اختياري)
  8. جرس إلكتروني إضافي غير فعّال لخلق تأثير الصوت المجسم stereo. (اختياري)

برمجيات

  1. برنامج ثوني Thonny: وهو البيئة البرمجية التي سنستخدمها لكتابة الشيفرة بلغة بايثون.

تثبيت برنامج ثوني على نظام تشغيل راسبيري باي

يأتي برنامج ثوني مثبتًا مع نظام تشغيل راسبيري باي، المعروف سابقًا براسبيان Raspbian، لكن قد تحتاج إلى تحديثه. انقر على الأيقونة في الزاوية العلوية اليسرى من الشاشة لفتح نافذة الطرفية Terminal، أو اضغط المفاتيح التالية معًا Ctrl+Alt+T. ثم اكتب الأمر التالي لتحديث نظام التشغيل وبرنامج ثوني:

sudo apt update && sudo apt upgrade -y

تثبيت برنامج ثوني على أنظمة التشغيل الأخرى

يمكنك تثبيت ثوني على الحواسيب العاملة بنظام تشغيل لينكس، أو ويندوز، أو ماك، وذلك من الموقع الرسمي thonny.org انقر على رابط التنزيل الموافق لنظام تشغيل حاسوبك من الزاوية العلوية اليمنى في الموقع، ثم انقر على الملفات بعد تنزيلها، قد تظهر لك الرسالة التالية على نظام ويندوز:

تثبيت برنامج ثوني على أنظمة التشغيل

انقر على خيار المزيد من المعلومات "More info" ثم على التشغيل على أي حال "Run anyway".

التعرف على واجهة برنامج ثوني

ستظهر لك الواجهة التالية عند فتح ثوني:

واجهة برنامج ثوني

يمكنك الكتابة بلغة بايثون في النافذة الرئيسية الكبيرة، ثم النقر على زر التشغيل الأخضر Run للتنفيذ، ستظهر لك رسالة لحفظ الملف قبل تشغيله.

اكتب الأمر التالي وشغّله:

print('Hello World!')

تغيير السمة والخط

يمكنك التحكم بلون الخط وحجمه وتغيير السمة المُستخدمة في واجهة البرنامج، وذلك بالنقر على قائمة الأدوات Tools من الشريط أعلى الشاشة، ثم النقر على خيارات Options، ثم انقر بعدها على نافذة الخط والسمة Theme & Font واختر نوع الخط والسمة التي تفضلها من النافذة المنسدلة ثم انقر على زر موافق OK عند الانتهاء.

تغيير السمة والخط

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

إعداد مكتبة picozero

سنعمل في هذه الخطوة على إعداد مكتبة picozero وتوصيل لوحة راسبيري باي بيكو وإعداد برنامج مايكرو بايثون.

أولًا، صِل الطرف الصغير لكبل USB إلى لوحة راسبيري باي والطرف الآخر إلى حاسوبك لتتمكن من برمجة اللوحة عن طريقه.

إعداد مكتبة picozero

plug-in-pico.png

ثانيًا، افتح محرر ثوني، ولاحظ ما هو الإصدار المستخدم من بايثون بقراءة النص الموجود في الزاوية السفلية اليمنى من الشاشة، انقر على النص واختر "MicroPython (Raspberry Pi Pico)‎"، إذا لم يكن هذا الخيار محددًا. سيطالبك ثوني بتثبيت برنامج MicroPython على حاسوب راسبيري باي بيكو إذا لم تستخدمه مسبقًا، فقط انقر على زر التثبيت Install.

ثالثًا، أضف حزمة بيكو زيرو picozero من خلال النقر على قائمة الأدوات Tools من شريط القوائم في برنامج ثوني، ثم النقر على خيار إدارة الحزم Manage Packages.

خيار إدارة الحزم Manage Packages في برنامج ثوني

ثالثًا، اكتب "picozero"، ثم انقر على زر البحث Search on PyPi.

زر البحث Search on PyPi في برنامج ثوني

رابعًا، انقر على picozero من نتائج البحث ثم انقر على زر التثبيت Install.

استلهم أفكارك

اطلع على المشاريع التالية واستلهم منها بعض الأفكار لصنع آلتك الموسيقية:

  • لوحة العزف السحرية
   
           

باستخدام مبدّل فوري أنشئ مبدّلًا فوريًا drop switch بلصق قطعة قصدير على مجسم شخصية ما وضعها فوق ورق القصدير ليبدأ العزف السحري.

يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع باسم drop_switch_player.py ضمن الملف المرفق codes.zip.

  • آلة الإنذار
   
           

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

يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع باسم soundalarm.py ضمن الملف المرفق الذكور سابقًا والمتاح بنهاية المقال.

  • آلة موسيقية بسيطة
   
           

شغّل الفيديو ولاحظ كيف تتحكم المقاومة المتغيرة بسرعة عزف النغمة من الجرس الأول، أما عند الضغط على الزر فتَصدُر عدة نغمات قصيرة من الجرس الثاني.

يمكنك الاطلاع على الشيفرة اللازمة لتنفيذ هذا المشروع باسم dj_desk.py ضمن الملف المرفق.

تصميم الآلة الموسيقية

فكِّر في الغرض من آلتك الموسيقية؟ وما هي الآلية التي سيتبعها المستخدم للتحكم بأصوات الآلة؟

تصميم الآلة الموسيقية

أولًا، يجب عليك اختيار الآلة التي تود صنعها واختيار الغرض منها، ثم اختيار طريقة العزف، واختيار الجمهور المناسب لها، ويمكنك اختيار إحدى الاقتراحات التالية:

  • صنع محاكاة لآلة موسيقية ما.
  • صنع مشغل موسيقى.
  • صنع آلة لتوليد التأثيرات الصوتية. *صنع آلةٍ تولّد أنغامًا مهدئةً، أو مزعجة.

ثانيًا، عليك اختيار نوع الصوت الذي ستصدره الآلة، هل تريد:

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

عدد العناصر التي يمكن توصيلها مع لوحة راسبيري باي بيكو

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

عدد العناصر التي يمكن توصيلها مع لوحة راسبيري باي بيكو

عليك أخذ النقاط التالية في الحسبان عند التخطيط لآلتك:

  • تُشَغّل مكبرات الصوت Speakers كل نغمة على حدى، لذلك ستحتاج لعدة مكبرات صوت لتشغيل عدة نغمات في نفس الوقت.
  • توجد رجل تغذية واحدة ذات جهد 3 فولت على لوحة بيكو؛ أي يمكنك استخدام مقاومة متغيرة potentiometer واحدة، كما أنه يوجد حدٌّ لقيمة التيار الذي توفره لوحة بيكو.

إليك بعض الاقتراحات لعناصر الدخل والخرج التي يمكنك استخدامها معًا:

  • مقاومة متغيرة واحدة وجرس إلكتروني واحد.
  • أربعة أزرار جاهزة وجرس إلكتروني واحد.
  • ثمانية أزرار يدوية الصنع وجرس إلكتروني واحد.
  • مقاومة متغيرة واحدة وجرسان، وزران.
  • عدة أزرار وأجراس لعزف عدة نغمات في نفس الوقت.

ثالثًا، قرر ما هو عدد الأزرار والأجراس التي تريد استخدامها عند تصميم آلتك؟

العناصر التي يمكن توصيلها مع لوحة راسبيري باي بيكو

يمكن لآلتك أن تحتوي على:

  • جرس إلكتروني واحد.
  • جرسان لخلق تأثير الصوت المجسم، أو عزف النغمة وإيقاعها.
  • سمّاعات، وستحتاج حينها إلى ثلاثة دبابيس تثبيت أو ما يُعرف بمشابك التمساح Alligator Clips لتوصيل السمّاعات.
  • عدة أجراس إلكترونية.

رابعًا، اختر ما هي العناصر التي تريد استخدامها؟

العناصر المراد استخدامها في لوحة راسبيري باي بيكو

إليك بعض الاقتراحات:

  • زر أو عدة أزرار.
  • مقاومة متغيرة للتحكم بنغمة صوت الجرس وسرعة إيقاعه.
  • أزرار أو مبدّلات يدوية الصنع.

خامسًا، عليك اختيار الشكل الخارجي للآلة، وتحديد آلية توصيل عناصر الدخل والخرج معها.

تساعدك الإجابة على الأسئلة التالية في اختيار التصميم الخارجي:

  • هل تريد اعتماد تصميم مماثل لآلة موسيقية تقليدية، مثل البيانو مثلًا؟
  • صنع أزرار أو مبدّلات يدوية؟ وصنع هيكل خارجي للآلة؟
  • رسم مشهد ما واستخدام الأزرار لتوليد الأصوات.

لا بأس إذا لم يكن لديك تصورٌ واضحٌ لتصميم الآلة في ذهنك، إذ يمكنك التعديل على تصميمك عند البدء بصنعه.

إمكانية التعديل على التصميم عند البدء في تصنيعه

إضافة الأصوات

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

إضافة الصوت إلى مشروع راسبيري باي بيكو

توصيل الأجراس الإلكترونية والسماعات مع لوحة بيكو

سنعرض فيما يلي كيفية توصيل الأجراس الإلكترونية والسماعات مع لوحة بيكو.

توصيل جرس إلكتروني واحد مع لوحة بيكو

ستحتاج إلى سلكي توصيل نوع مقبس- مقبس socket-socket. صِل الرجل الطويلة،الموجبة للجرس الإلكتروني غير الفعّال مع الرجل GP5 على لوحة بيكو، وصِل الرجل السالبة مع أقرب رجل تأريض GND.

لمعرفة الرجل الموجبة للجرس، ابحث عن الرجل الأطول، أو عن إشارة الموجب + أعلى الجرس.

توصيل جرس إلكتروني واحد مع لوحة بيكو

توصيل جرسين لخلق تأثير الصوت المجسم stereo

ستحتاج لتوصيل جرسين إلكترونيين غير فعّالين مع لوحة بيكو إلى أربعة أسلاك توصيل نوع مقبس- مقبس.

أولًا، صِل الرجل الطويلة الموجبة للجرس الأول مع الرجل GP5 على لوحة بيكو، وصِل الرجل السالبة مع أقرب رجل تأريض GND، ثم صِل الرجل الموجبة للجرس الثاني مع الرجل GP10 على لوحة بيكو، والرجل السالبة مع أقرب رجل تأريض GND.

توصيل جرسين لخلق تأثير الصوت المجسم stereo

توصيل السماعات مع لوحة بيكو

ستحتاج لتوصيل السمّاعات مع لوحة بيكو إلى وصلة ذات نهاية بقطر 3 أو 5 مم (وليس وصلة USB)، وثلاثة مشابك تثبيت، وإلى اتباع الخطوات التالية:

1.صِل أحد المشابك مع أحد أرجل الأرض GND القريبة، وصِل المشبكين الآخرين مع الرجل GP5 والرجل GP10، كما هو موضح في الصورة أدناه.

  1. صِل نهاية المشبك الأول، الموصول مع الرجل GP5، مع نهاية وصلة السمّاعات.
  2. صِل نهاية المشبك الثاني، الموصول مع الرجل GP10،مع منتصف وصلة السمّاعات.
  3. صِل نهاية المشبك الموصول مع رجل الأرض GND مع جذر وصلة السمّاعات.

توصيل السماعات مع لوحة بيكو

استخدام رجل أرضية مشتركة

تحتوي لوحة بيكو على ثمانية أرجل أرضية GND، لذلك لاستخدام ما يزيد عن ثمانية عناصر إلكترونية عليك إعادة استخدام إحدى الأرجل الأرضية، وستحتاج لما يلي:

  • سلك توصيل دبوس- مقبس.
  • رقائق قصدير، وشريط لاصق ناقل، أو أي مادة ناقلة للتيار الكهربائي.
  • شريط لاصق.

أولًا، أنشئ شريطًا من ورق القصدير، أو من أي مادة ناقلة.

ثانيًا، استخدم الشريط اللاصق لتوصيل سلك أحد الأرجل الأرضية مع شريط القصدير كما يلي:

استخدام رجل أرضية مشتركة

ثالثًا،صِل القطب الموجب للعنصر الأول مع أحد الأرجل العامة GP على لوحة بيكو، والقطب السالب للعنصر مع شريط القصدير.

كيفية استخدام رجل أرضية مشتركة

رابعًا، لتوصيل المزيد من العناصر، صِل القطب الموجب للعنصر مع إحدى أرجل الأغراض العامة GP، والقطب السالب مع شريط القصدير.

الخطوة 4 لاستخدام رجل أرضية مشتركة

كتابة الشيفرة اللازمة لربط اللوحة مع الجرس

استورد تابع المكبر الصوتي Speaker من مكتبة picozero، ثم أسند أرقام أرجل لوحة بيكو مع الجرس الوحيد للتابع Speaker:

from picozero import Speaker

speaker = Speaker(5)

وتكون الشيفرة اللازمة لتوصيل جرسين على النحو التالي:

from picozero import Speaker

speaker_1 = Speaker(5)
speaker_2 = Speaker(10)

ننصحك بتسمية المتغيرات Variables بأسماء تدل على وظيفتها، مثلًا عند إسناد صوت الطبل للمتغير Speaker_1 فسمّه drum_beat.

كتابة الشيفرة اللازمة لإصدار الصوت

عرّف دالة الصوت بكتابة def قبل اسم الدالة، ثم اختر اسمًا مناسبًا ومعبرًا عن الصوت الذي ستصدره آلتك، فعلى سبيل المثال، إذا أردت أن تصدر آلتك صوتًا مزعجًا، فسمِّ دالة الصوت annoying_sound.

def sound_1(): # استبدل الدالة باسم دالتك

معلومة: موسيقا Chiptune الرُقاقة أو ما يُعرف بموسيقا الثمانية بتات، هي موسيقا صُنعية تُوَّلد بواسطة برمجة الرقائق المسؤولة عن إصدار الصوت في الحواسيب لتصدر أصواتًا ذات ترددات معينة، استعاضةً عن استخدام الآلات الموسيقية التقليدية. تجد هذا النوع من الموسيقا في ألعاب الفيديو ذات طراز الريترو Retro، وفي صالات الألعاب.

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

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

دعنا نطلع على بعض المعلومات المفيدة عن الأصوات قبل كتابة الشيفرة:

النغمات المتاحة

تُوفر لنا مكتبة "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): # decreasing frequency
        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() # أطفئ مكبر الصوت الثاني عند إيقاف البرنامج

الشيفرة اللازمة لاستدعاء دالة ما

لاستدعاء دالة ما عليك تعريفها أولًا، ثم التصريح عنها بكتابة اسمها. إليك المثال التالي الذي استدعينا فيه الدالة chirp:

def chirp(): # توليد صوت زقزقة العصافير
    for _ in range(2):
        for i in range(5000, 2999, -100):
            speaker.play(i, 0.02)
        sleep(0.2)

chirp()

مرحلة التنفيذ

أولًا، اكتب الشيفرة اللازمة لتشغيل آلتك الموسيقية، واحرص على عدم ترك مسافة قبل اسم الدالة عند استدعائها.

ثانيًا، شغّل الشيفرة للتحقق من عمل آلتك وإصدارها للأصوات، إذ قد يستمر صوت الجرس حتى بعد إيقاف الشفرة، لذلك عليك استعمال try و finally كي يتوقف صوت عند إيقاف الشفرة، كما في المثال التالي:

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] ]

try:
    for note in liten_mus:
        speaker.play(note)

finally:
    speaker.off() # أطفئ مكبر الصوت عند إيقاف البرنامج

تصحيح الأخطاء

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

from picozero import pico_led
from time import sleep

pico_led.on()
sleep(2)
pico_led.off()

تصحيح الأخطاء الموجودة في الشيفرة

  • تحقق من وجود أي رسائل خطأ في نافذة صدفة shell ثوني وتحقق من محتواها، إن وجدت.
  • راجع الشيفرة التي كتبتها وتحقق من خلوها من الأخطاء، مثل نسيان علامة :، أو وجود مسافة بادئة دون الحاجة لها.
  • تأكد من استيراد توابع العناصر التي ستستخدمها في مشروعك من مكتبة "picozero"، مثل تابع مصباح الليد RGBLED أو الزر Button.
  • استخدم تعليمة الطباعة print لإضافة شرح مختصر عند كل خطوة، مثل (البدء)print أو (ضبط المصباح على اللون الأخضر)print.

لا تعمل بعض العناصر الإلكترونية كما يجب

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

صوت النغمة مختلف عن الصوت المطلوب

تحقق من خلو الشيفرة التي كتبتها من الأخطاء وأنها مطابقة للشيفرة في مثالنا. عَدّل على النغمات ومدتها للحصول على الصوت المطلوب.

يتأخر عزف النغمة عند الضغط على زر ما

عند استخدام أحد الأحداث events مثل حدث الضغط when_pressed لتشغيل دالة ما، فإن هذه الدالة ستُنفَذ حتى انتهائها وستمنع تشغيل أي شيء آخر في الشيفرة. إذا أردت عزف لحن ما مثلًا من حدث ما، وتشغيل لحن أو تأثير صوتي آخر بالتزامن معه، فيمكنك ذلك بوضع wait=False في حقل الوسيط الثاني للدالة play:

sound = [ [523, 0.1], [None, 0.1], [523, 0.4] ]

def annoying_sound():
    speaker.play(sound, wait=False) # لا تؤخر تشغيل الشيفرة

button.when_pressed = annoying_sound

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

احرص على اتباع ما يلي عند كتابة الشيفرات اللازمة لإصدار النغمات الموسيقية، وعند اختبارها:

  • تعريف الدالة.
  • كتابة الشيفرة الصحيحة.
  • استدعاء الدالة.
  • اختبار الدالة.

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

التحكم بالأصوات

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

إنشاء وسيلة للمستخدم للتحكم في الأصوات

حدد أولًا ما هي عناصر الدخل التي تود استخدامها. إليك الاقتراحات التالية:

  • استخدام زر خاص بكل نغمة، أو لحن أو تأثير.
  • استخدام زر لتشغيل الصوت التالي.
  • استخدام سلكين نوع دبوس-مقبس وتوصيلهما إما مع مبدّل إلكتروني أو زر.
  • استخدام مقاومة متغيرة للتحكم بسرعة إيقاع النغمات.

ستحتاج استخدام سلكي توصيل نوع مقبس-مقبس لكل زر، وثلاثة أسلاك نوع مقبس-مقبس للمقاومة المتغيرة.

توصيل عناصر الدخل مع لوحة بيكو

سنشرح في الآتي كيفية توصل عناصر الدخل مع لوحة بيكو

توصيل زر إلكتروني واحد مع اللوحة

لتوصيل زر مع لوحة بيكو ستحتاج إلى ما يلي:

  • لوحة راسبيري بيكو.
  • زر إلكتروني.
  • سلكي توصيل نوع مقبس-مقبس.

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

توصيل زر إلكتروني واحد مع اللوحة

توصيل عدة أزرار مع اللوحة

ستحتاج لتوصيل عدة أزرار مع لوحة بيكو إلى ما يلي:

  • لوحة راسبيري بيكو.
  • أزرار إلكترونية.
  • سلكي توصيل نوع دبوس-مقبس لكل زر.

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

استخدم سلكي توصيل نوع دبوس- مقبس لتوصيل الزر الأول مع الرجل GP18 ومع أقرب رجل أرضية GND. ثم صِل الزر الثاني مع الرجل GP22، والثالث مع الرجل GP28 بنفس الطريقة.

توصيل عدة أزرار مع اللوحة

توصيل مقاومة متغيرة مع اللوحة

ستحتاج إلى ما يلي:

  • لوحة راسبيري بيكو.
  • مقاومة متغيرة.
  • أسلاك توصيل نوع مقبس-مقبس (عدد 3).

يوجد للمقاومة المتغيرة ثلاثة أرجل: رجل الأرضية GND، ورجل تشابهية Analogue، ورجل التغذية 3V3؛ وعند تدوير قرص المقاومة المتغيرة إلى أقصى اليسار سيشير السهم إلى الرجل الأرضية GND؛ وعند تدويره إلى أقصى اليمين سيشير السهم إلى رجل التغذية 3V3؛ أما الرجل الوسطى للمقاومة فهي الرجل التشابهية التي تستمد منها لوحة بيكو القيم لقراءتها .

توصيل مقاومة متغيرة مع اللوحة

  • صِل سلك توصيل ذو نهايات مقبس-مقبس مع كلٍ من أرجل المقاومة الثلاث، وثبّت التوصيلات بالشريط اللاصق إن لزم الأمر.
  • صِل النهاية الحرة للسلك الموصول مع رجل المقاومة ذات الرقم 1 مع رجل الأرض GND الموجودة بين الرجلين GP21 و GP22.
  • صِل رجل المقاومة الوسطى مع الرجل GP26_A0 على لوحة بيكو.
  • صِل رجل المقاومة ذات الرقم 3 مع رجل التغذية 3V3.

كيفية توصيل مقاومة متغيرة مع اللوحة

توصيل مبدل يدوي أو زر مع لوحة بيكو

ستحتاج إلى سلكي توصيل نوع دبوس-مقبس، وصِل أحدهما مع الرجل GP18 والسلك الآخر مع أقرب رجل أرضية، كما يلي:

توصيل مبدل يدوي أو زر مع لوحة بيكو

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

توصيل عدة مبدلات يدوية أو أزرار مع لوحة بيكو

ستحتاج إلى سلكي توصيل نوع دبوس-مقبس لكل مبدّل تود توصيله مع لوحة بيكو.

استخدم سلكي توصيل نوع دبوس- مقبس لتوصيل المبدّل الأول مع الرجل GP18 ومع أقرب رجل أرضية GND، ثم صِل المبدّل الثاني مع الرجل GP22 ومع أقرب رجل أرضية، والثالث مع الرجل GP28 ورجل الأرضية بنفس الطريقة، كما هو موضح في المخطط التالي:

توصيل عدة مبدلات يدوية أو أزرار مع لوحة بيكو

إسناد عناصر الدخل إلى أرجل معينة على اللوحة

علينا الآن إنشاء متغيرات لإسناد عناصر الدخل للأرجل الموصولة معها:

حالة زر واحد

استورد تابع الزر Button من مكتبة picozero، ثم استخدم الشيفرة التالية لإسناد الزر إلى الرجل الموصول معها على لوحة بيكو:

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 أو أي اسم آخر تراه مناسبًا.

حالة مبدل واحد

استورد تابع المبدّل 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 أو أي اسم آخر تراه مناسبًا.

حالة مقاومة متغيرة

استورد تابع المقاومة المتغيرة Pot من مكتبة picozero، ثم استخدم الشيفرة التالية لإسناد المقاومة المتغيرة إلى الرجل الموصولة معها على لوحة بيكو:

from picozero import Pot

dial = Pot(0) # Connected to pin A0 (GP_26)

الشيفرة اللازمة لتشغيل عناصر الدخل

الآن، عليك استدعاء الدوال اللازمة لتشغيل عناصر الدخل:

تشغيل نغمة معينة عند الضغط على كل زر

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

annoying_button.when_pressed = annoying_sound
calming_button.when_pressed = calming_sound
happy_button.when_pressed = happy_sound

تأكد من مطابقة أسماء الدوال في الشيفرة للدوال التي استخدمتها في مشروعك.

تشغيل النغمة التالية عند الضغط على الزر

عرّف متغيرًا ما، وليكن option، لتخزين النغمة الحالية فيه واستدعاء الدالة التالية، واحرص على مطابقة أسماء الدوال في الشيفرة للدوال التي استخدمتها في الفقرة السابقة:

option = 0 # خزّن النغمة الحالية في هذا المتغير

def choice(): # استدعي الدالة الصوتية التالية وعدّل قيمة متغير التخزين
    global option
    if option == 0:
        annoying_sound() # دالة النغمة الأولى
    elif option == 1:
        calming_sound() # دالة النغمة الثانية
    elif option == 2:
        happy_sound() # دالة النغمة الثالثة
    elif option == 3:
        rgb.off()

    # انتقل إلى الخيار الثاني
    if option == 3:
        option = 0
    else:
        option = option + 1

button.when_pressed = choice # نستدعي الدالة التالية عند الضغط على الزر

التحكم في سرعة عزف النغمة باستخدام المقاومة المتغيرة

استخدم الشيفرة التالية للتحكم في سرعة عزف النغمة:

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)
        sleep(dial.value) # ترك مدة قصيرة بين النغمات اعتمادًا على قيمة المقاومة المتغيرة

أخيرًا، شغّل الشيفرة وتحقق من عملها، وتأكد أنه بإمكانك التبديل بين النغمات عند النقر على الأزرار أو المبدّلات، وتغيير سرعة عزف النغمة باستخدام المقاومة المتغيرة.

تصحيح الأخطاء

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

from picozero import pico_led
from time import sleep

pico_led.on()
sleep(2)
pico_led.off()

تصحيح الأخطاء الموجودة في الشيفرة

  • تحقق من وجود أي رسائل خطأ في نافذة صدفة ثوني وتحقق من محتواها، إن وجدت.
  • راجع الشيفرة التي كتبتها وتحقق من خلوها من الأخطاء، مثل نسيان علامة :، أو وجود مسافة بادئة دون الحاجة لها.
  • تأكد من استيراد توابع العناصر التي ستستخدمها في مشروعك من مكتبة "picozero"، مثل تابع مصباح الليد RGBLED أو الزر Button.
  • استخدم تعليمة الطباعة print لإضافة شرح مختصر عند كل خطوة، مثل (البدء)print أو (ضبط المصباح على اللون الأخضر)print.

لا تعمل بعض العناصر الإلكترونية كما يجب

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

إعداد الهيكل الخارجي للآلة

سنعمل الآن على إعداد الهيكل الخارجي لآلتنا الموسيقية.

إعداد الهيكل الخارجي للآلة الموسيقية

أولًا، إليك بعض الأسئلة لتساعدك في اعتماد التصميم الخارجي لآلتك:

  • ما هي المواد التي تود استخدامها؟ هل جميعها متوفرة لديك؟
  • هل تود استخدام أزرار أو مبدّلات يدوية؟ ما هو غرض عملها؟
  • كيف ستثبت العناصر بحيث تكون متينة وسهلة الاستخدام؟

معلومة: يختص مهندسو الصوت Acoustic engineers بدراسة علم الصوت وتوفير أفضل تجربة للحضور والمستمعين. الآن، مهندسنا الصغير، حان دورك لتصميم آلتك الموسيقية بحيث تصدر أصواتًا عالية الجودة وتوفر تجربة ممتعة.

ثانيًا، جهّز المواد التي ستستخدمها لتنفيذ تصميمك. إليك بعض الاقتراحات:

  • الورق المقوى.
  • المواد البلاستيكية المعاد تدويرها.
  • ألعاب قديمة أو قطع الليغو Lego.
  • شريط لاصق.
  • كما يمكنك استخدام الطابعة ثلاثية الأبعاد إن توفر لك ذلك.

اطلب مساعدة أحد البالغين عند الحاجة لاستخدام المقص، أو مسدس السيليكون، أو سكين الحرف؛ واحرص على حفظ ملف الشيفرة، وتصغير نافذة ثوني عند البدء بتنفيذ التصميم؛ تجنبًا للنقر على لوحة المفاتيح والتعديل على الشيفرة دون قصد.

ثالثًا، ابدأ بصنع المبدّلات اليدوية والأزرار التي تود استخدامها، إذ ستحتاج إلى استخدام مادة ناقلة مثل ورق القصدير لتكون بمثابة نقطة الأرض GND وتوصيل الأرجل ذات الأغراض العامة GP معها، إذ يمكن للوحة بيكو التحسس لحالة الأرجل فيما إذا كان متصلة أم لا.

إنشاء مبدل فوري يعمل عند الإسقاط

ستحتاج لإنشاء مبدّل فوري Drop switch إلى ما يلي:

  • لوحة راسبيري بيكو.
  • سلكي توصيل نوع دبوس-مقبس.
  • ورق قصدير.
  • شريط لاصق.

أولًا، أنشئ شريطين من ورق القصدير، أو من أي مادة ناقلة.

ثانيًا، ثبّت سلكي التوصيل مع شريطي القصدير باستخدام الشريط اللاصق، كما يلي:

إنشاء مبدل فوري يعمل عند الإسقاط

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

كيفية إنشاء مبدل فوري يعمل عند الإسقاط

رابعًا، صِل النهايات الحرة للسلكين مع لوحة بيكو وأسقط المجسم لإغلاق المبدّل.

طريقة إنشاء مبدل فوري يعمل عند الإسقاط

إنشاء مبدل يدوي يعمل عند السحب

إليك ما سنحتاج إليه:

  • مقص.
  • ورق مقوى.
  • رقائق القصدير.
  • غراء وشريط لاصق.
  • شرائط ملونة وورق ملون.
  • قلم رصاص ومسطرة (اختياري).

إنشاء مبدل يدوي يعمل عند السحب

أولًا، قُصَّ الورق المقوى إلى ثلاثة مستطيلات متساوية الحجم.

الخطوة 1 لإنشاء مبدل يدوي يعمل عند السحب

ثانيًا، قُصَّ مستطيلًا صغيرًا في منتصف المستطيل الأول، واحتفظ به لاستخدامه لاحقًا.

الخطوة 2 لإنشاء مبدل يدوي يعمل عند السحب

ثالثًا، قُصَّ قطعًا من ورق القصدير بحجم المستطيلات الكبيرة، ثم الصقها عليها باستخدام الغراء، واحرص على عدم وضع الغراء على الوجه الخارجي لورق القصدير حتى لا تتأثر التوصيلات لاحقًا.

الخطوة 3 لإنشاء مبدل يدوي يعمل عند السحب

رابعًا، قُصَّ أطراف المستطيل الصغير للحصول على شكل مدبب أو بشكل حرف V، ثم قلّم الأطراف بمقدار بضع ملميترات كي يتسع المستطيل الصغير في الفتحة.

الخطوة 4 لإنشاء مبدل يدوي يعمل عند السحب

خامسًا، غلّف كامل المستطيل الصغير بورق القصدير، واحرص على استخدام ورقة قصدير واحدة، إذ ستسمح هذه القطعة بمرور التيار عند إغلاق المبدّل.

الخطوة 5 لإنشاء مبدل يدوي يعمل عند السحب

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

الخطوة 6 لإنشاء مبدل يدوي يعمل عند السحب

سابعًا، أضف مزيدًا من الشريط اللاصق لتثبيت السلك ومنع انفكاكه عن طريق الخطأ.

الخطوة 7 لإنشاء مبدل يدوي يعمل عند السحب

ثامنًا، ادهن بعض الغراء على المستطيل الذي فرّغنا منتصفه (الموجود في يسار الصورة) والصقه مع المستطيل المغطى بالقصدير (يمين الصورة). واحرص على ألا تتلامس طبقتي القصدير الموجودتين على حواف المستطيلات، وقُصّها إن لزم الأمر.

الخطوة 8 لإنشاء مبدل يدوي يعمل عند السحب

الخطوة 9 لإنشاء مبدل يدوي يعمل عند السحب

أصبح المبدّل جاهزًا للاستخدام في مشروعك.

استخدام سكين الحرف

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

استخدام سكين الحرف

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

ستجد الأرجل المستخدمة في بداية الشيفرة.

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

توصيل الأسلاك ببعضها

قد تحتاج إلى أسلاك توصيل طويلة جدًا لتوصيل مصابيح الليد مع أرجل لوحة بيكو، أو يمكنك وصل الأسلاك ببعضها للحصول على سلك طويل، وذلك عبر توصيل سلك ذو نهايات دبوس-مقبس مع سلك ذو نهايات مقبس-مقبس للحصول على سلك مقبس-مقبس طويل جدًا، وتدعى هذه الطريقة بسلسلة الأقحوان daisy chaining.

توصيل الأسلاك ببعضها

ننصحك باستخدام سلكين لهما اللون نفسه ليسهل تتبع السلك ومعرفة العنصر الموصول معه.

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

طريقة توصيل الأسلاك ببعضها

تثبيت العناصر داخل الورق المقوى أو البلاستيك

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

تثبيت العناصر داخل الورق المقوى أو البلاستيك

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

ميفية تثبيت العناصر داخل الورق المقوى أو البلاستيك

استخدم الشريط اللاصق لتثبيت العناصر في مكانها.

تثبيت العناصر مع أسلاك التوصيل

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

تثبيت العناصر مع أسلاك التوصيل

كيفية تثبيت العناصر مع أسلاك التوصيل

خامسًا، الآن بعد أن انتهيت من تنفيذ الهيكل الخارجي، عليك تشغيل الآلة والتحقق أنها تعمل كما ينبغي.

تصحيح الأخطاء

إليك بعض المشاكل التي قد تواجهك في هذه الخطوة وكيفية إصلاحها:

طول الأسلاك غير مناسب

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

لا تثبُت الأسلاك والعناصر في مكانها

قد تكون بعض التوصيلات أمتن من غيرها، لذا ننصحك باستخدام الشريط اللاصق لإحكام تثبيت الأسلاك.

ترقية المشروع

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

إليك بعض الاقتراحات:

  • اختبر أداء الآلة أمام جمهورك، ثم حدّد النقاط التي عليك تحسينها.
  • أضف مزيدًا من الأزرار وعناصر التحكم مثل المقاومات المتغيرة والمبدّلات.
  • أضف مزيدًا من البريق على آلتك باستخدام مصابيح الليد.
  • أضف مزيدًا من التحسينات على الهيكل الخارجي لآلتك.

إليك المشروع التالي

   
           

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

الخاتمة

تهانينا، فقد أتممت مشروع تصميم وتنفيذ آلة موسيقية باستخدام لوحة راسبيري باي بيكو.

ننصحك بتنفيذ مشروع تصميم وتنفيذ لعبة حسية تفاعلية باستخدام لوحة راسبيري باي بيكو ومقاومة متغيرة في خطوتك التالية.

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

ترجمة -وبتصرف- للمقال Sound machine من الموقع الرسمي لراسبيري باي.

الملف المرفق للمشروع: codes.zip.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...