Gehirnsystem

In letzter Zeit werden verschiedene Arten von intellektuellen Spielen immer beliebter: „Was? Wo? Wann? “,„ Melotrek “,„ Gehirnring “. Bei einigen Arten von Spielen kann man jedoch nicht auf ein spezielles System verzichten, das den Spielverlauf steuert. Hier beschlossen sie im Rahmen des Kursprojekts, ihr eigenes Gehirnsystem aufzubauen.

Vorher waren wir noch nie auf Arduino oder etwas Hardware gestoßen, aber als wir uns anschauten, wie Freunde und Bekannte an der Universität Geräte leicht zusammenbauen können, wollten wir versuchen, unser eigenes Ding zu machen. Da wir weit genug von diesem Thema entfernt waren, wurde der Vorschlag, ein Gehirnsystem aufzubauen, von unserem Führer abgelehnt und sagte, dies wäre ein guter Anfang für uns. Überraschenderweise geschah dies.

Zunächst haben wir das Ziel festgelegt: Das Gehirnsystem sollte ein Audiosignal geben, das den Beginn der Zeit der Fragestunde und ein Signal für das Ende der Zeit der Fragestunde anzeigt, und dem Gastgeber auch die Bereitschaft des Spielers signalisieren, eine Antwort zu geben. Wenn ein Spieler eine Taste gedrückt hat, werden die verbleibenden Tasten blockiert. Es sollte auch die Möglichkeit geben, einen Spielmodus auszuwählen.



Erforderliche Komponenten


  • Arduino Nano
  • Sprecher
  • LEDs 8 Stk.
  • 4 . 2
  • DIP-
  • :
  • 8 . – 100 ( )
  • 6 . – 10 ( )
  • 6 . – 1
  • 4 . – 470 DIP ( )
  • 5 . – ( )
  • – 6 . 1
  • Ethernet- 4 .
  • RJ-45 — 4.


Es ist erwähnenswert, dass das System in 3 Blöcke unterteilt werden kann: das Hauptmodul, die Spielertasten (4 Teile) und die Verbindungskabel. Das System enthält 4 Player-Tasten. Wenn es dem Spieler gelungen ist, früher als die anderen zu drücken, leuchtet die LED auf seiner Taste auf.

Remote-Host. Wenn der Player eine Taste auf seiner Fernbedienung gedrückt hat, leuchtet die Diode, die der Taste des Players entspricht, am Hauptgerät auf. Dieses Modul wählt den Spielmodus aus. Der Präsentator verfügt über zwei Start- und Reset-Tasten. Je nach Spiel schalten sich diese Tasten ein und setzen den Timer zurück.

Arduino-Signale kommen von den Tasten. Wenn die Taste gedrückt wird, leuchtet die Diode auf der Taste und auf der Fernbedienung des Masters auf und das Tonsignal wird eingeschaltet. Dies ist das Hauptkonzept.

Die Tasten und die Masterkonsole sind über ein Ethernet-Kabel verbunden. Eine Taste geht auf den Boden, eine logische Einheit und ein Signal, das die LED ein- und ausschaltet, und eine Taste kommt von der Taste zum Hauptmodul und drückt die Taste.

Entwicklungsstart


Wir haben mit dem Einfachsten angefangen. Eine Schaltung, die eine Diode enthält, wurde auf einem Steckbrett zusammengebaut. Es hat alles geklappt! Wir gehen weiter. Wir haben Arduino und Tasten angeschlossen. Wenn diese gedrückt werden, leuchten die Dioden auf. Und hier stehen wir vor dem Problem des Klapperns der Knöpfe.



In den Tasten müssen Sie das Rattern des Signals entfernen, da das System sonst denkt, dass die Taste viele Male gedrückt wird. Für die Tasten der Spieler ist dies nicht sehr beängstigend, wir fangen immer noch den ersten Druck, aber auf der Taste des führenden Starts müssen Sie den Sprung loswerden, da Sie im Gehirnring wissen müssen, wie oft der Start gedrückt wird. Zu diesem Zweck sind der Schmitt-Trigger, der Kondensator und der Widerstand in der Tastenschaltung enthalten. Über Bounce können Sie hier lesen .



Sowohl die Tasten als auch das Hauptmodul verwenden LEDs. Aber 5V ist zu viel Spannung für sie. Um die Verbrennung von Dioden zu verhindern, sind daher Widerstände in Reihe geschaltet. Berechnen Sie den Widerstand des Widerstands kann hier . Aufgrund der Tatsache, dass alle LEDs gleich sind, benötigten wir 8 Widerstände mit jeweils 100 Ohm.



Der Spielmodus wird mit DIP-SWITCH ausgewählt:

  1. Gehirnring
  2. Was? Wo? Wann?
  3. Scrabble-Quartett, Troika, Eigenes Spiel (das System funktioniert in diesen Spielen genauso)

Software-Teil


Faulheit ist der Schlüssel zum Erfolg.

Parallel zur Entwicklung der Schaltung wurde Code geschrieben. Es war offensichtlich, dass das Drücken von Tasten über Interrupts erfolgen sollte. Wenn wir ungefähr 2 externe Interrupts INT0 und INT1 subtrahieren, waren wir verärgert, weil für bis zu 6 Tasten zwei Interrupts nicht ausreichen und Sie die Bittiefe durch das Register erhöhen müssen. Seit wir zum ersten Mal live auf Hardware gestoßen sind, war für uns alles kompliziert und unverständlich. Im Allgemeinen waren wir mit dieser Tatsache nicht sehr zufrieden. Da wir nicht glaubten, dass unser Problem nicht auf andere Weise gelöst werden kann, stießen wir auf Pin Change Interrupt Requests, die perfekt für unser Projekt waren. Keine Register!

Treffen Sie sich mit Unterbrechungen kann hier .

In unserem Gehirnsystem entsprechen die SET- und RESET-Tasten den Pins D8 und D9, und die Benutzertasten entsprechen A0-A3. Daher haben wir nur zwei Interrupt-Handler für jede der verwendeten Interrupt-Gruppen definiert.

  • ISR (PCINT0_vect) - für die Haupttasten.
  • ISR (PCINT1_vect) - für benutzerdefinierte Schaltflächen.

Interrupts können für jede Gruppe und jeden Pin einzeln definiert werden. Dies geschieht durch die Steuerregister und Masken, in denen die entsprechenden Werte eingestellt werden müssen. Weitere Informationen zum Festlegen und Auflösen von Interrupts finden Sie hier .

Interrupt-Handler fragen die Pins nacheinander ab, um festzustellen, welche Taste gedrückt wurde. Diese Situation ist eine der Einschränkungen dieser Interrupts. Das Gehirnsystem muss auf Tastendrücke reagieren, damit der Pin-Wert mit dem HIGH-Pegel (dh der Knopf wurde gedrückt) im Interrupt-Handler verglichen wird.

Interrupts konfigurieren
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();
}


Der gesamte Code ist hier .

Installation


Wir haben den Lötkolben zum ersten Mal gesehen und haben mit einer herkömmlichen Diode begonnen. Wir haben gelötet - die Diode hat Feuer gefangen! Dann wurden die Knöpfe gelötet. Es war ziemlich schwierig zu überprüfen, ob alles richtig gemacht wurde, da sich das Hauptmodul noch auf dem Steckbrett befand.



Die Haupttasten, Dioden und der Spielmodusschalter wurden verlötet. Dabei haben wir festgestellt, dass es möglich ist, mit einem Schmitt-Trigger auszukommen. Dann sollte es zum Hauptmodul übertragen werden, die Ausgänge der Tasten über ein Netzwerkkabel zu ihm bringen und die Signale von seinem Ausgang sollten dem Arduino zugeführt werden.





Im Allgemeinen war die Haupteinheit bereit. Trotzdem war er nicht mit den Knöpfen der Spieler verbunden. Wir haben die native Karte vom Router als Basis für die Haupteinheit verwendet, bei der es vorteilhaft war, RJ-45-Anschlüsse zu verwenden. Obwohl wir es etwas bereut haben, weil das Schneiden einer Platine und das Löten von Kontakten in der zweiten Runde keine angenehme Erfahrung ist. Aber alles lief ganz erfolgreich.

Wir haben einen weiß-orangefarbenen Leiter für die logische 1-Übertragung, einen orangefarbenen für die logische 0, ein weiß-grünes Signal zur Diode und ein grünes Tastensignal verwendet. Obwohl Sie jedes verwenden können, müssen Sie hauptsächlich überprüfen, welches Kabel verwendet wird, da es verschiedene Crimpoptionen gibt.

Jetzt waren das Hauptmodul und die Tasten verbunden und das System war fast fertig, aber es gab einen Fehler, der nicht auf dem Steckbrett war. Wenn die Taste nicht mit dem Hauptmodul verbunden war, glaubte das System, dass diese Taste gedrückt wurde. Im Internet haben wir eine Lösung gefunden - einen Pull-up-Widerstand.

Damit im Hauptmodul „Nein“ -Signale zu Arduino kommen (wenn die Taste überhaupt nicht angeschlossen ist), müssen Sie an jedem Tastenausgang einen Pulldown-Widerstand (ab 10 kOhm) anbringen. Bei einem offenen Stromkreis fließt ein unerwünschter Strom durch den Widerstand zur Erde, und wenn er aufgrund des hohen Widerstands des Widerstands geschlossen wird, geht das Signal zum Eingangskontakt.

Nachdem dieses Problem gelöst war, funktionierte es.



Spielemodus-Funktionen


Merkmale des Gehirnrings. Wenn der Start nicht gedrückt wurde, definiert das System den Tastendruck als Fehlstart. Wenn der Start zum ersten Mal gedrückt wird, wartet das System 20 Sekunden, bis die Tasten gedrückt werden. Nach einer gewissen Zeit gibt das System einen Alarm aus. Wenn das Team während dieser Zeit immer noch die richtige Antwort kennt und die Taste drückt, ertönt das entsprechende Signal und der Timer stoppt. In Übereinstimmung mit den Regeln sollten im Falle einer falschen Antwort andere Teams antworten können. Zu diesem Zweck startet der Timer nach einem zweiten Drücken auf den Start für 10 Sekunden. Die Reset-Taste setzt das System zurück und wird gedrückt, bevor die nächste Frage gelesen wird.

Eigenschaften Was? Wo? Wann?


Nach dem Drücken von Start ertönt ein Tonsignal. Nach 50 und 60 Sekunden ertönt ein akustisches Signal. In anderen Spielen werden nur die Tasten des Spielers erfasst. Dank der bequemen Arbeit mit Arduino können Sie andere Spiele implementieren: Ändern Sie den Timer, aktivieren Sie den Fehlstart usw. Dies kann durch Hinzufügen des entsprechenden Codes implementiert werden.




Fazit


Es funktioniert und Gott sei Dank. Da dies unsere erste Hardware-Erfahrung war, sind wir mit den Ergebnissen zufrieden. Und das nicht nur, weil alles auf einem Steckbrett verbunden war, sondern auch als fertig montiertes Gerät. Ein vollwertiges Gehirnsystem mit Modi, Spielern und einem Moderator wurde veröffentlicht. Als Verbesserung des Systems können Sie einen Ausgang für Lautsprecher hinzufügen, damit Sie an großen Turnieren teilnehmen können.
Das Arduino-Board war einfach und angenehm zu arbeiten. Im Internet gibt es genügend Informationen und einfache Tutorials zum Zusammenstellen nützlicher und interessanter Teile, die für eine ahnungslose Person nicht einfach sind. Dies kann durchaus zu einem Hobby werden.

Oksana Kozlova und Marina Bardiyan nahmen an dem Projekt teil.

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


All Articles