دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon

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

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

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

المُكوّنات المطلوبة

للبدء ، ستحتاج إلى الأشياء التالية:

  • جهاز Raspberry Pi.
  • بطاقة microSD تم عمل فلاش لنظام التشغيل Raspbian OS عليها.
  • 4 × مصابيح LED بألوان مُختلفة.
  • 4 × مقاومات كهربائية (أي شيء من 220 أوم إلى 1 كيلو أوم).
  • 4 × أزرار.
  • 1 × لوح التجارب.
  • كبلات التوصيل لربط كل شيء.

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

إذا لم تكن قد قمت بإعداد Raspberry Pi من قبل ، فيمكنك تعلم كيفية تجهيز كل شيء لهذا البرنامج التعليمي في دليل المبتدئين لـ Raspberry Pi.

ستكتب كود Python في هذا البرنامج التعليمي ، ويُمكنك استخدام أي مُحرّر نصوص لكتابته ، ولكن قد تجد مُحرّر كود أسهل. يوجد العديد منها مثبت بالفعل على نظام Raspberry Pi OS ، وقد تم تصميم Thonny ليكون سهلًا بالنسبة للمبتدئين. أيًا كان ما تستخدمه ، ستحتاج إلى أن تكون قادرًا على حفظ التعليمات البرمجية وتشغيلها لاتباع هذا البرنامج التعليمي.

الشروع في العمل مع لوح التجارب

يحتوي Raspberry Pi على صفين من دبابيس الإدخال/الإخراج للأغراض العامة (GPIO). تسمح لك هذه الدبابيس بتوصيل المُكوّنات الخارجية المُختلفة بـ Raspberry Pi. ترسل بعض الدبابيس معلومات ، بينما تُوفر أخرى الطاقة ، وبعضها يُؤرض أجهزتك الإلكترونية.

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

سنبدأ بإضافة مصباح LED إلى لوح التجارب الخاص بنا.

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

سيوفر الدبوس بعض الطاقة إلى لوح التجارب ويسمح لـ Raspberry Pi بالتواصل مع المُكوّنات الموجودة على اللوحة. ثم قم بتوصيل الدبوس رقم التعريف 6 على Pi بالمسلك الأرضي للوح التجارب. سيُؤدي هذا إلى تأريض اللوحة ويسمح بإنشاء دوائر كهربائية.

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

الطاقة القادمة من Raspberry عالية جدًا لتوصيل LED مباشرةً. يؤدي استخدام المقاوم الكهربائي إلى خفض مستوى الطاقة ومنع احتراق مؤشر LED. قم بتوصيل أحد جانبي المقاوم الكهربائي بنفس الخط الذي تم توصيل دبوس GPIO به والنهاية بالجانب الآخر من اللوحة. ثم ضع الجانب الإيجابي من LED بعد المقاوم الكهربائي. يُمكن توصيل الطرف السالب لمصباح LED مباشرةً بالجانب السالب. يجب أن تبدو النتيجة النهائية مثل الرسم البياني أعلاه. تحقق من الأسلاك الخاصة بك بدقة وقم بتشغيل Pi. يجب أن يُضيء المصباح.

الآن ، لقد أنشأت دائرة باستخدام Raspberry Pi الخاص بك يُمكنك التحكم فيها باستخدام الكود البرمجي.

استخدام كود Python للتحكم في المصابيح

يأخذك هذا البرنامج التعليمي خلال التعليمات البرمجية من خلال الخطوات ، ولكن إذا كنت تُريد الرجوع إلى الكود النهائي في أي وقت ، فهو مُتاح على Pastebin.

في الوقت الحالي ، تذهب الطاقة إلى مصباح LED ، لكننا نريد التحكم متى يتم تشغيله وإيقافه. سيسمح لنا كود Python التالي بالتحدث إلى اللوحة.

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
GPIO.setup(red, GPIO.OUT)
GPIO.output(red, GPIO.LOW)

الأسطر القليلة الأولى هي التي تُحدد الأمور. يتم استيراد مكتبة Raspberry Pi GPIO. حيث يُتيح لنا as GPIO الإشارة إلى المُتغيّر RPi.GPIO على أنه GPIO لتوفير القليل من الكتابة. تم تكوين وضع دبوس GPIO على BOARD. لا يتعين عليك استخدام هذا الإعداد ، ولكن قد يكون من الأسهل الرجوع إلى الدبابيس بترتيبها في صفوف GPIO.

أخيرًا ، قمنا بتعيين التحذيرات على false. سيؤدي هذا إلى إيقاف التحذيرات غير الضرورية.

تتحكم الأسطر الثلاثة الأخيرة في مصباح LED. يتم توصيل مؤشر LED الأحمر بطرف GPIO 18. بدلاً من تذكر ذلك ، سيُخزن المُتغيّر red المكان. بعد ذلك ، يُخبر GPIO.setup برنامجنا بأن  يُرسل المعلومات إلى الدبوس الأحمر. أخيرًا ، قمنا بتعيين GPIO.output على الدبوس الأحمر على low. عند تشغيل هذا البرنامج ، سينطفئ الضوء. لإعادة تشغيله ، قم بتبديل GPIO.LOW إلى GPIO.HIGH ، وقم بتشغيل البرنامج مرة أخرى.

احفظ الكود ، وانقر فوق تشغيل لرؤيته أثناء العمل. إذا لم يكن هناك زر تشغيل في مُحرّر التعليمات البرمجية ، فاحفظه بأي اسم (myfilename) وقم بتشغيل الأمر python myfilename.py في نافذة Terminal. ستحتاج إلى الانتقال إلى نفس الدليل مثل ملف Python الجديد أولاً.

إضافة أكثر من مصباح LED

لإنشاء لعبة Simon ، نحتاج إلى أربعة مصابيح بألوان مُختلفة. يُمكن استخدام نفس الخطوات التي استخدمتها لإعداد مصباح LED الأحمر لإعداد الثلاثة الأخرى. يجب أن تبدو الأسلاك الخاصة بك مثل الرسم التخطيطي أدناه:

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

يجب أن يبدو الكود الخاص بك على النحو التالي:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
yellow = 22
green = 24
blue = 26
GPIO.setup(red, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(blue, GPIO.OUT)
GPIO.output(red, GPIO.HIGH)
GPIO.output(yellow, GPIO.HIGH)
GPIO.output(green, GPIO.HIGH)
GPIO.output(blue, GPIO.HIGH)

بمجرد اختبار مصابيح LED ، اضبط GPIO.output على GPIO.LOW لإيقاف تشغيل كل مصباح LED مرة أخرى.

على الرغم من أن لون الأسلاك التي تستخدمها لا يهم ، حاول استخدام الألوان التي لها معنى لمساعدتك على قراءة مُحتويات اللوحة بشكل أسهل. على سبيل المثال ، غالبًا ما تستخدم الأسلاك السوداء للأسلاك الأرضية. في هذه الدائرة ، قد ترغب في مطابقة لون السلك مع لون ضوء LED.

التحكم في المصابيح بأزرار

ابدأ بإضافة زر إلى لوحتك. سيحتاج الزر إلى الاتصال بكل من الموصل الأرضي ودبوس GPIO. يجب أن تبدو الدائرة الكهربائية بالشكل التالي:

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

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

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

نحتاج الآن إلى كود يتحقق لمعرفة ما إذا تم الضغط على الزر أم لا.

game = True
while game:
 redButtonState = GPIO.input(32)
 if redButtonState == 0:
 GPIO.output(red, GPIO.HIGH)
 time.sleep(1)
 GPIO.output(red, GPIO.LOW)

نريد أن يستمر برنامجنا في التحقق من الضغط على الزر ، لذلك يجب استخدام أمر التكرار while. نظرًا لأن التكرار لن يكون خاطئًا (false) أبدًا ، فإن الكود يستمر في العمل والتحقق من الزر حتى نُنهي البرنامج يدويًا بالضغط على زر التوقف أو باستخدام اختصار لوحة المفاتيح Ctrl + C.

بعد ذلك ، لتسهيل الإشارة إلى الإدخال الذي يرسله لنا دبوس GPIO ، نقوم بحفظ هذه المعلومات في المُتغيّر redButtonState. إذا تغير إدخال الزر لدينا إلى 0 ، فنحن نعلم أنه تم الضغط على الزر.

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

بمجرد تشغيل زر واحد ، يُمكنك إضافة ثلاثة أزرار أخرى ، واحد لكل مصباح LED. يجب أن يبدو الكود الخاص بك على النحو التالي:

import random 
import time
import RPi.GPIO as GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings(False)
red = 18
yellow = 22
green = 24
blue = 26
GPIO.setup(red, GPIO.OUT)
GPIO.setup(yellow, GPIO.OUT)
GPIO.setup(green, GPIO.OUT)
GPIO.setup(blue, GPIO.OUT)
GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) 
game = True 
while game:
 redButtonState = GPIO.input(32)
 if redButtonState == 0:
 GPIO.output(red, GPIO.HIGH)
 time.sleep(1)
 GPIO.output(red, GPIO.LOW)
 
 yellowButtonState = GPIO.input(36)
 if yellowButtonState == 0: 
 GPIO.output(yellow, GPIO.HIGH)
 time.sleep(1) 
 GPIO.output(yellow, GPIO.LOW)
 greenButtonState = GPIO.input(38)
 if greenButtonState == 0:
 GPIO.output(green, GPIO.HIGH)
 time.sleep(1)
 GPIO.output(green, GPIO.LOW)
 blueButtonState = GPIO.input(40)
 if blueButtonState == 0:
 GPIO.output(blue, GPIO.HIGH)
 time.sleep(1)
 GPIO.output(blue, GPIO.LOW)

ويجب أن يبدو لوح التجارب مثل هذا الرسم التوضيحي:

دليل المبتدئين إلى استخدام Raspberry Pi مع لوح التجارب لإنشاء لعبة Simon - Raspberry Pi شروحات

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

إنشاء اللعبة

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

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

إنشاء النمط

هذه الخطوة بسيطة إلى حد ما. مصفوفة واحدة ستحمل نمط الضوء الخاص بنا (pattern). ستقوم مصفوفة ثانية بتخزين دبابيس GPIO لمصابيحنا (lights). في كل تكرار للعبة ، ستتم إضافة ضوء عشوائي جديد إلى نهاية مجموعة الأنماط. سنستخدم الدالة random.randint () لاختيار رقم بين 0 و 3 ، والذي يمثل 4 مصابيح LED.

pattern = []
lights = [red, yellow, green, blue]
while game:
 pattern.append(random.randint(0,3))

بعد ذلك ، علينا أن نضيء الأضواء لإظهار النمط.

while game:
 pattern.append(random.randint(0,3))
 
 for x in pattern:
 GPIO.output(lights[x], GPIO.HIGH)
 time.sleep(1)
 GPIO.output(lights[x], GPIO.LOW)
 time.sleep(0.5)

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

الحصول على مُدخلات اللاعب

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

for x in pattern:
 
 waitingForInput = True
 
 while waitingForInput:
 redButtonState = GPIO.input(32)
 yellowButtonState = GPIO.input(36)
 greenButtonState = GPIO.input(38)
 blueButtonState = GPIO.input(40)
 
 if redButtonState == 0:
 GPIO.output(red, GPIO.HIGH)
 waitingForInput = False
 time.sleep(1)
 GPIO.output(red, GPIO.LOW)
 
 if yellowButtonState == 0:
 GPIO.output(yellow, GPIO.HIGH)
 waitingForInput = False
 time.sleep(1)
 GPIO.output(yellow, GPIO.LOW)
 
 if greenButtonState == 0:
 GPIO.output(green, GPIO.HIGH)
 waitingForInput = False
 time.sleep(1)
 GPIO.output(green, GPIO.LOW)
 
 if blueButtonState == 0:
 GPIO.output(blue, GPIO.HIGH)
 waitingForInput = False
 time.sleep(1)
 GPIO.output(blue, GPIO.LOW)

معظم الكود أعلاه يُعيد استخدام الكود الذي كتبناه لاختبار الأزرار.

التحقق من مدخلات اللاعب

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

if redButtonState == 0:
 GPIO.output(red, GPIO.HIGH)
 waitingForInput = False
 if x != 0:
 game = False
 time.sleep(1)
 GPIO.output(red, GPIO.LOW)

المُتغيّر x من تكرار for لديه رقم الضوء التالي. يوجد ضوء LED الأحمر في الموضع الأول ، أو رقم 0. إذا ضغط اللاعب على زر LED الأحمر عندما يكون لدينا 0 في نمطنا ، فإنه على حق! إذا لم يكن كذلك ، فإنه يخسر في اللعبة. سيؤدي تكوين المُتغيّر game على false إلى إيقاف حلقة اللعبة وإنهاء البرنامج.

تهانينا! لقد أنشأت لعبة من الصفر!

إنشاء لعبة يُضيف المزيد من التعليمات البرمجية إلى هذا المشروع أكثر من مجرد إضافة مصابيح LED والأزرار. العمل من أجل مشروع نهائي يُمكنك إظهاره لأصدقائك وعائلتك يمكن أن يساعدك في الحفاظ على دوافعك.

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

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

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