Inhaltsverzeichnis:

Arduino und Touchpad Tic Tac Toe - Gunook
Arduino und Touchpad Tic Tac Toe - Gunook

Video: Arduino und Touchpad Tic Tac Toe - Gunook

Video: Arduino und Touchpad Tic Tac Toe - Gunook
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, November
Anonim
Arduino und Touchpad Tic Tac Toe
Arduino und Touchpad Tic Tac Toe

Oder eine Übung im Eingangs- und Ausgangs-Multiplexing und im Arbeiten mit Bits. Und eine Einreichung für den Arduino-Wettbewerb.

Dies ist eine Implementierung eines Tic-Tac-Toe-Spiels mit einem 3x3-Array zweifarbiger LEDs für ein Display, einem einfachen resistiven Touchpad und einem Arduino, um alles miteinander zu verbinden. Um zu sehen, wie es funktioniert, sehen Sie sich das Video an:Was dieses Projekt erfordert:Teile und Verbrauchsmaterialien Ein Perfboard (oder Stripboard) Neun zweifarbige LEDs, gemeinsame Kathode Neun identische Widerstände im Bereich von 100-220 Ohm Sechs identische Widerstände im Bereich 10 kOhm - 500 kOhm Ein einpoliger Doppelschalter Ein Bündel Kopfstifte Ein Bündel Elektrokabel Eine kleine quadratische Platte aus transparentem Acryl, ~ 1 mm dick, 8 cm seitlich Durchsichtiges Klebeband Schrumpfschläuche (optional) Alle oben genannten sind recht häufige Artikel, die Gesamtkosten sollten 20 USD nicht überschreiten. Werkzeuge Ein Arduino-Setup (Arduino Duemilanove, Arduino IDE, Computer, USB-Kabel) Übliche elektrische Werkzeuge (Multimeter, Lötpistole, Drahtschere, Drahtschneider) Alles, was mit Arduino zu tun hat zu finden unter https://www.arduino.cc. Auf mit dem Aufbau!

Schritt 1: Verdrahtung der LED-Matrix

Verdrahtung der LED-Matrix
Verdrahtung der LED-Matrix
Verdrahtung der LED-Matrix
Verdrahtung der LED-Matrix

Damit eine LED leuchtet, müssen beide Leitungen angeschlossen sein. Wenn wir jeder der 18 LEDs (9 rot, 9 grün) ein Paar Pins widmen würden, würden uns schnell die Pins auf dem Arduino ausgehen. Mit Multiplexing werden wir jedoch alle LEDs mit nur 9 Pins ansprechen können! Dazu werden die LEDs kreuzweise verdrahtet, wie in der ersten Abbildung gezeigt. Die LEDs sind in Dreierspalten gruppiert und ihre Kathoden sind in Sechserreihen gruppiert. Indem wir eine bestimmte Anodenleitung hoch und eine bestimmte Kathodenleitung niedrig einstellen und eine hohe Impedanz auf allen anderen Anoden- und Kathodenleitungen haben, können wir Wählen Sie aus, welche LED leuchten soll, da es nur einen möglichen Weg gibt, den der Strom nehmen kann. In der zweiten Abbildung zum Beispiel, wenn die grüne Anode 1 Zeile hoch und die Kathode 1 Zeile niedrig eingestellt wird, leuchtet die untere linke grüne LED auf. Der Strompfad wird in diesem Fall blau dargestellt. Aber was ist, wenn Sie mehr als eine LED auf verschiedenen Leitungen leuchten möchten? Wir werden die Beharrlichkeit der Vision nutzen, um dies zu erreichen. Durch die sehr schnelle Auswahl von LED-Linienpaaren entsteht die Illusion, dass alle ausgewählten LEDs gleichzeitig leuchten.

Schritt 2: LED-Matrix-Layout

LED-Matrix-Layout
LED-Matrix-Layout
LED-Matrix-Layout
LED-Matrix-Layout

Der folgende Schaltplan zeigt die physikalische Beschaltung der LEDs (G1-G9: grüne LEDs, R1-R9: rote LEDs). Dieses Diagramm gilt für einzelne rote und grüne LEDs. Wenn Sie zweifarbige rote / grüne LEDs mit gemeinsamer Kathode verwenden, müssen Sie nur ein Kathodenbein pro Rot / Grün-Paar verdrahten. Die roten und grünen Anodenleitungen gehen in die PWM-Pins des Arduino (Pins 3, 5, 6, 9, 10, 11 auf dem Duemilanove), so dass wir später Effekte wie Fading haben können. Die Kathodenleitungen gehen in die Pins 4, 7 und 8. Jede der Kathoden- und Anodenleitungen hat 100 Ohm-Widerstände zum Schutz.

Schritt 3: Adressierung der LED-Matrix

Für den Tic-Tac-Toe-Code müssen wir die folgenden Informationen über die LEDs speichern können: - ob eine LED leuchtet oder nicht - wenn sie leuchtet, ob sie rot oder grün ist Eine Möglichkeit besteht darin, den Status zu speichern in einem 9-Zellen-Array mit drei Ziffern zur Darstellung des Zustands (0 = aus, 1 = rot an, 2 = grün an). Jedes Mal, wenn wir die Zustände der LED überprüfen müssen, um beispielsweise zu überprüfen, ob eine Win-Bedingung vorliegt, müssen wir das Array durchlaufen. Dies ist eine praktikable Methode, aber ziemlich umständlich. Ein stromlinienförmigeres Verfahren wäre die Verwendung von zwei Gruppen von neun Bits. Die erste Gruppe von neun Bits speichert den Ein-Aus-Status der LEDs und die zweite Gruppe von neun Bits speichert die Farbe. Dann wird das Manipulieren der LED-Zustände einfach zu einer Sache von Bitarithmetik und Verschiebung. Hier ist ein funktionierendes Beispiel. Nehmen wir an, wir zeichnen unser Tic-Tac-Toe-Raster grafisch und verwenden zuerst 1s und 0s, um den Ein-Aus-Status darzustellen (1 ist an, 0 ist aus): 000 000 = Matrix mit LED unten links leuchtet 100 100 010 = Matrix mit Diagonale LEDs leuchten 001 Wenn wir die Zellen von unten links aufzählen, können wir die obigen Darstellungen als eine Reihe von Bits schreiben. Im ersten Fall wären das 100000000 und im zweiten Fall 001010100. Wenn wir uns diese als binäre Darstellungen vorstellen, dann kann jede Bitfolge zu einer einzigen Zahl zusammengefasst werden (256 im ersten Fall 84 im zweiten Fall). Anstatt also ein Array zu verwenden, um den Zustand der Matrix zu speichern, können wir einfach eine einzelne Zahl verwenden! Ebenso können wir die Farbe der LED auf die gleiche Weise darstellen (1 ist rot, 0 ist grün). Nehmen wir zunächst an, dass alle LEDs leuchten (der Ein-Aus-Status wird also durch 511 dargestellt). Die nachfolgende Matrix stellt dann den Farbzustand der LEDs dar: 010 grün, rot, grün 101 rot, grün, rot 010 grün, rot, grün Jetzt müssen wir bei der Anzeige der LED-Matrix nur noch jedes der Bits durchlaufen, zuerst im Ein-Aus-Zustand und dann im Farbzustand. Nehmen wir zum Beispiel an, unser Ein-Aus-Zustand ist 100100100 und der Farbzustand ist 010101010. Hier ist unser Algorithmus zum Aufleuchten der LED-Matrix: Schritt 1. Fügen Sie den Ein-Aus-Zustand bitweise mit einer binären 1 hinzu (dh bit Maskierung). Schritt 2. Wenn es wahr ist, leuchtet die LED. Führen Sie nun eine bitweise Addition des Farbzustands mit einer binären 1 durch. Schritt 3. Wenn es wahr ist, leuchten Sie die rote LED auf. Wenn es falsch ist, leuchten Sie die grüne LED auf. Schritt 4. Verschieben Sie sowohl den Ein-Aus-Zustand als auch den Farbzustand um ein Bit nach rechts (dh Bitverschiebung). Schritt 5. Wiederholen Sie die Schritte 1 - 4, bis alle neun Bits gelesen wurden. Beachten Sie, dass wir die Matrix rückwärts füllen - wir beginnen mit Zelle 9, dann gehen wir zurück zu Zelle 1. Außerdem werden die Ein-Aus- und Farbzustände als vorzeichenloser Integer-Typ (Wort) anstelle eines vorzeichenbehafteten Integer-Typs gespeichert. Das liegt daran, dass wir bei der Bitverschiebung, wenn wir nicht aufpassen, versehentlich das Vorzeichen der Variablen ändern können. Anbei der Code zum Aufleuchten der LED-Matrix.

Schritt 4: Konstruieren des Touchpads

Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads
Aufbau des Touchpads

Das Touchpad besteht aus einer dünnen Acrylplatte, die groß genug ist, um die LED-Matrix zu überlagern. Kleben Sie dann die Reihen- und Spaltendrähte mit durchsichtigem Klebeband auf die Acrylplatte. Durchsichtiges Klebeband wird auch als isolierender Abstandshalter zwischen den Drähten an den Kreuzungen verwendet. Verwenden Sie unbedingt saubere Werkzeuge, um zu verhindern, dass Fingerfett auf die klebrige Seite des Klebebands gelangt. Fingerabdruckflecken sehen nicht nur hässlich aus, sondern machen das Klebeband auch weniger klebrig. Schneiden Sie ein Ende jeder der Linien ab und löten Sie das andere Ende an einen längeren Draht. Löten Sie einen Widerstand in Reihe mit den Drähten, bevor Sie die Anschlüsse anlöten. Die hier verwendeten Widerstände sind 674k, aber jeder Wert zwischen 10k und 1M sollte in Ordnung sein. Die Verbindungen zum Arduino werden mit den 6 analogen Pins hergestellt, wobei die Pins 14-16 mit den Drahtgitterreihen verbunden sind und die Pins 17-19 mit. verbunden sind die Säulen.

Schritt 5: Das Touchpad - So funktioniert es

Das Touchpad - So funktioniert es
Das Touchpad - So funktioniert es
Das Touchpad - So funktioniert es
Das Touchpad - So funktioniert es

So wie wir einen Crossbar-Multiplexer verwendet haben, um eine LED-Matrix mit minimalen Pins einzurichten, können wir einen ähnlichen Crossbar-Multiplexer verwenden, um ein Berührungssensor-Array einzurichten, mit dem wir dann die LEDs aktivieren können. Das Konzept für dieses Touchpad ist einfach. Es ist im Wesentlichen ein Drahtgitter mit drei blanken Drähten, die in Reihen verlaufen, und drei blanken Drähten, die in Spalten über den Reihen verlaufen. An jedem Kreuzungspunkt befindet sich ein kleines Quadrat der Isolierung, das verhindert, dass sich die beiden Drähte berühren. Ein Finger, der den Schnittpunkt berührt, berührt beide Drähte, was zu einem großen, aber endlichen Widerstand zwischen den beiden Drähten führt. Über den Finger kann also ein kleiner, aber nachweisbarer Strom von einem Draht zum nächsten fließen. Um festzustellen, welcher Schnittpunkt gedrückt wurde, wurde folgende Methode verwendet: Schritt 1: Alle Spaltenleitungen auf OUTPUT LOW setzen. Schritt 2: Setzen Sie die Zeilenleitungen auf INPUT, wobei die internen Pullups aktiviert sind. Schritt 3: Nehmen Sie eine analoge Lesung auf jeder Zeilenleitung vor, bis der Wert unter einen bestimmten Schwellenwert fällt. Dies sagt Ihnen, in welcher Zeile sich der gedrückte Schnittpunkt befindet. Schritt 4: Wiederholen Sie die Schritte 1-3, aber jetzt mit den Spalten als Eingaben und den Zeilen als Ausgaben. Dies sagt Ihnen, welche Spalte der gedrückte Schnittpunkt ist. Um die Auswirkungen von Rauschen zu minimieren, wird eine Reihe von Messungen vorgenommen und dann der Durchschnitt gebildet. Das gemittelte Ergebnis wird dann mit einem Schwellenwert verglichen. Da diese Methode nur mit einem Schwellenwert prüft, ist sie nicht geeignet, um gleichzeitige Druckvorgänge zu erkennen. Da das Tic-Tac-Toe jedoch abwechselnd abläuft, reicht es aus, ein einziges Drücken abzulesen. Anbei eine Skizze, die die Funktionsweise des Touchpads veranschaulicht. Wie bei der LED-Matrix werden Bits verwendet, um darzustellen, welcher Schnittpunkt gedrückt wurde.

Schritt 6: Alles zusammenfügen

Alles zusammenfügen
Alles zusammenfügen

Nachdem alle einzelnen Komponenten fertig sind, ist es an der Zeit, sie alle zusammenzusetzen. Überlagern Sie das Drahtgitter auf der LED-Matrix. Möglicherweise müssen Sie die Pinnummerierungen im LED-Matrixcode neu anordnen, um ihn mit dem Drahtgittersensor zu synchronisieren. Befestigen Sie das Drahtgitter mit Befestigungselementen oder Klebstoffen Ihrer Wahl und kleben Sie es auf ein schönes Spielbrett. Fügen Sie einen Schalter zwischen Pin 12 und Masse des Arduino hinzu. Dieser Schalter dient zum Umschalten zwischen dem 2-Spieler-Modus und dem 1-Spieler-Modus (im Vergleich zum Mikrocontroller).

Schritt 7: Tic Tac Toe programmieren

Im Anhang ist der Code für das Spiel. Lassen Sie uns zunächst das Tic-Tac-Toe-Spiel im Zweispielermodus in seine verschiedenen Schritte unterteilen: Schritt 1: Spieler A wählt eine nicht gefüllte Zelle aus, indem er eine Kreuzung berührt. Schritt 2: Die LED für diese Zelle leuchtet mit der Farbe A. Schritt 3: Überprüfen Sie, ob Spieler A gewonnen hat. Schritt 4: Spieler B wählt eine nicht gefüllte Zelle aus. Schritt 5: Die LED für diese Zelle leuchtet mit Farbe B. Schritt 6: Überprüfen Sie, ob Spieler B gewonnen hat. Schritt 7: Wiederholen Sie 1-6, bis eine Gewinnbedingung vorliegt oder alle Zellen gefüllt sind. Lesen der Zellen:Das Programm wechselt zwischen dem Lesen des Rasters und der Anzeige der LED-Matrix. Solange der Gittersensor keinen Wert ungleich Null registriert, wird diese Schleife fortgesetzt. Wenn ein Schnittpunkt gedrückt wird, speichert die Variable Gedrückt die Position der gedrückten Zelle. Prüfen, ob die Zelle ungefüllt ist: Wenn eine Positionsablesung erhalten wird (Variable Gedrückt), wird diese mit dem aktuellen Zellenstatus (gespeichert in der Variablen GridOnOff) verglichen. mit bitweiser Addition. Wenn die Zelle Gedrückt nicht gefüllt ist, fahren Sie mit dem Aufleuchten der LED fort, andernfalls kehren Sie zum Lesen der Zellen zurück. Wechseln der Farben: Eine boolesche Variable, Turn, wird verwendet, um aufzuzeichnen, wer an der Reihe ist. Die bei der Auswahl einer Zelle gewählte LED-Farbe wird durch diese Variable bestimmt, die sich bei jeder Auswahl einer Zelle abwechselt. Prüfen auf eine Gewinnbedingung: Es gibt nur 8 mögliche Gewinnbedingungen, und diese werden als Wortvariablen in einem Array (winArray). Zwei bitweise Additionen werden verwendet, um die gefüllten Zellenpositionen eines Spielers mit den Gewinnbedingungen zu vergleichen. Wenn es ein Spiel gibt, zeigt das Programm eine Gewinn-Routine an, wonach es ein neues Spiel beginnt. Prüfung auf Unentschieden-Bedingung: Wenn neun Runden aufgezeichnet wurden und es immer noch keine Gewinn-Bedingung gibt, dann ist das Spiel ein Unentschieden. Danach werden die LEDs ausgeblendet und ein neues Spiel gestartet. Umschalten in den Einspielermodus: Steht der Schalter in der Ein-Position, geht das Programm in den Einspielermodus, wobei der menschliche Spieler zuerst startet. Am Ende des Zuges des menschlichen Spielers wählt das Programm einfach eine zufällige Zelle aus. Das ist natürlich nicht die klügste Strategie!

Schritt 8: Anmerkungen und weitere Verbesserungen

Hier ein Video, das den Einspielermodus zeigt, wobei das Programm völlig zufällige Züge spielt: Das hier gezeigte Programm ist nur eine minimale, nackte Version. Viele andere Dinge können damit getan werden: 1) Aufleuchten von drei LEDs gleichzeitigDer aktuelle Code zeigt nur eine LED gleichzeitig an. Mit der hier gezeigten Verdrahtung ist es jedoch möglich, alle an einer Kathodenleitung angeschlossenen LEDs gleichzeitig zum Leuchten zu bringen. Anstatt alle neun Positionen zu durchlaufen, müssen Sie nur die drei Kathodenleitungen durchlaufen.2) Verwenden Sie Interrupts, um die LEDs anzuzeigenJe nach LED-Anzeigeroutine und Verarbeitungsumfang können die LEDs ein gewisses Maß an anzeigen flackern. Durch die Verwendung von Interrupts kann das Timing der LEDs präzise gesteuert werden und würde zu einer flüssigeren Darstellung führen.3) Ein intelligenterer ComputerplayerDer aktuelle Code benötigt nur wenige kb, so dass für die Implementierung eines intelligenteren Computertaktiks einiges mehr übrig bleibt Zehe-Player. Hoffe, Sie haben es genossen, dieses instructable so viel zu lesen, wie ich Spaß daran hatte, daran zu arbeiten!

Empfohlen: