نظام الدماغ

في الآونة الأخيرة ، تكتسب أنواع مختلفة من الألعاب الفكرية شعبية: "ماذا؟ الى اين؟ متى؟ "،" Melotrek "،" حلقة الدماغ ". ولكن بالنسبة لبعض أنواع الألعاب ، لا يمكنك الاستغناء عن نظام خاص يتحكم في مسار اللعبة. هنا ، كجزء من مشروع الدورة ، قرروا محاولة إنشاء نظام الدماغ الخاص بهم.

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

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



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


  • اردوينو نانو
  • المتحدث
  • المصابيح 8 قطع.
  • 4 . 2
  • DIP-
  • :
  • 8 . – 100 ( )
  • 6 . – 10 ( )
  • 6 . – 1
  • 4 . – 470 DIP ( )
  • 5 . – ( )
  • – 6 . 1
  • Ethernet- 4 .
  • RJ-45 — 4.


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

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

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

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

بداية التطوير


بدأنا مع أبسط. تم تجميع دائرة تحتوي على صمام ثنائي على لوحة توصيل. عملت كل شيء! ننتقل. قمنا بتوصيل Arduino والأزرار ، عند الضغط ، تضيء الثنائيات. وهنا نواجه مشكلة الأزرار.



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



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



يتم اختيار وضع اللعبة باستخدام DIP-SWITCH:

  1. حلقة الدماغ
  2. ماذا؟ الى اين؟ متى؟
  3. Scrabble quartet، Troika، Own game (يعمل النظام بنفس الطريقة في هذه الألعاب)

جزء البرنامج


الكسل هو مفتاح النجاح.

بالتوازي مع تطور الدائرة ، تم كتابة الرمز. كان من الواضح أنه يجب التعامل مع الضغطات على الأزرار من خلال المقاطعات. بطرح حوالي 2 مقاطعة خارجية INT0 و INT1 ، شعرنا بالضيق ، لأنه حتى 6 أزرار لا تكفي مقاطعتان وسيتعين عليك زيادة عمق البت من خلال التسجيل. منذ أن وصلنا لأول مرة عبر الأجهزة ، كان كل شيء بالنسبة لنا معقدًا وغير مفهوم. بشكل عام ، لم نكن سعداء بهذه الحقيقة. لعدم الاعتقاد بأن مشكلتنا لا يمكن حلها بأي طريقة أخرى ، فقد صادفنا طلبات مقاطعة تغيير دبوس ، والتي كانت مثالية لمشروعنا. لا تسجيلات!

يمكنك التعرف على المقاطعات هنا .

في نظام الدماغ لدينا ، يتطابق زري SET و RESET مع الدبابيس D8 و D9 ، وأزرار المستخدم تتوافق مع A0-A3. لذلك ، قمنا بتعريف اثنين فقط من معالجات المقاطعة لكل من مجموعات المقاطعة المستخدمة.

  • ISR (PCINT0_vect) - للأزرار الرئيسية.
  • ISR (PCINT1_vect) - للأزرار المخصصة.

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

تقوم معالجات المقاطعة باستجواب الدبابيس واحدة تلو الأخرى لتحديد الزر الذي تم الضغط عليه. هذا الموقف هو أحد قيود هذه المقاطعات. يجب أن يستجيب نظام الدماغ لضغط الأزرار ، بحيث تتم مقارنة قيمة الدبوس بمستوى HIGH (أي تم الضغط على الزر) في معالج المقاطعة.

تكوين المقاطعات
ISR(PCINT0_vect) {
	noInterrupts();
	isPushed = false;
	if (digitalRead(ADMIN_BUTTON_SET) == HIGH ) {	
		gameMode->Set();
		Timer1.attachInterrupt(TimerInterrupt);
		gameMode->SetFalseStart(false);
	}
	if (digitalRead(ADMIN_BUTTON_RESET) == HIGH) {
		Timer1.stop();
		gameMode->Reset();
		gameMode->SetFalseStart(true);
	}
	interrupts();
}

ISR(PCINT1_vect){
	noInterrupts();	
	if (isPushed == false){
		for (int i = 0; i < ARRAY_SIZE(ARRAY_USER_BUTTON); i++){
			if (digitalRead(ARRAY_USER_BUTTON[i]) == HIGH){
				isPushed = gameMode->UserButtonPushed(ARRAY_LED[i]);
			}
		}		
	}	
	interrupts();
}


كل الكود هنا .

التثبيت


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



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





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

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

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

من أجل وصول إشارات "لا" إلى Arduino (عندما لا يكون الزر متصلاً على الإطلاق) في الوحدة الرئيسية ، تحتاج إلى وضع المقاوم القابل للسحب (من 10 كيلو أوم) على كل إخراج زر. مع وجود دائرة مفتوحة ، يمر تيار غير مرغوب فيه من خلال المقاوم إلى الأرض ، وعند إغلاقه بسبب المقاومة العالية للمقاوم ، ستنتقل الإشارة إلى اتصال الإدخال.

بعد حل هذه المشكلة ، نجحت.



ميزات وضع اللعبة


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

ميزات ماذا؟ الى اين؟ متى؟


بعد الضغط على Start ، تبدأ إشارة الصوت في الظهور. تنطلق إشارة صوتية بعد 50 و 60 ثانية. في الألعاب الأخرى ، يتم التقاط أزرار اللاعب فقط. بفضل راحة العمل مع Arduino ، يمكنك تنفيذ ألعاب أخرى: تغيير المؤقت ، تمكين البدء الخاطئ ، إلخ. يمكن تنفيذ ذلك عن طريق إضافة الرمز المناسب.




الخلاصة


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

شاركت أوكسانا كوزلوفا ومارينا بارديان في المشروع.

Source: https://habr.com/ru/post/ar394359/


All Articles