Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Hallo Macher, Ich bin Tahir Miriyev, Absolvent 2018 der Middle East Technical University, Ankara/Türkei. Ich habe Angewandte Mathematik als Hauptfach studiert, aber ich habe es immer geliebt, Dinge zu machen, besonders wenn es um Handarbeit mit Elektronik, Design und Programmierung ging. Dank eines einzigartigen Kurses zum Thema Prototyping, der an unserer Abteilung für Industriedesign angeboten wird, hatte ich die Möglichkeit, etwas wirklich Interessantes zu machen. Das Projekt kann als Semesterprojekt behandelt werden, das für die Dauer eines ganzen Semesters (4 Monate) dauert. Die Studierenden hatten die Aufgabe, einen kreativen Ansatz zu finden, um bereits bestehende Produkte/Demos zu entwerfen und ihre Ideen mit Arduino-Mikrocontrollern und -Sensoren zu verwirklichen. Ich dachte über Schach nach, und nachdem ich einige erfolgreiche Projekte recherchiert hatte, bemerkte ich, dass die Macher in früheren Projekten im Wesentlichen fertige Schachengines verwendeten (wo alle Züge jeder Figur im Kern programmiert waren), zusammen mit Raspberry Pi, einigen MUX 'es, LEDs und Reed-Schalter. In meinem Projekt entschied ich mich jedoch, jegliche externe Software im Sinne einer Schachengine loszuwerden und eine kreative Lösung für das Figurenerkennungsproblem zu finden, unter Verwendung von RFID-Lesegeräten, Hall-Effekt-Sensoren und Arduino Mega.
Schritt 1: Was ist ein Abbildungserkennungsproblem und wie ich es gelöst habe?
Um es einfach auszudrücken, nehmen Sie an, Sie haben ein Schachbrett mit einem "Gehirn" = Mikrocontroller, und Sie müssen Ihrem Brett klar machen, welche Figur Sie in der Hand gehalten haben und wo Sie sie platziert haben. Dies ist das Problem der Figurenerkennung. Die Lösung dieses Problems ist trivial, wenn Sie eine Schachengine haben, bei der alle Figuren auf ihren ursprünglichen Positionen auf dem Brett stehen. Bevor ich erkläre, warum das so ist, lassen Sie mich einige Bemerkungen machen.
Für diejenigen, die davon begeistert sind, wie die Dinge hier funktionieren, muss ich klarstellen, warum wir Reed-Schalter brauchen (oder in meinem Fall habe ich Hall-Effekt-Sensoren verwendet): Wenn Sie einen Magneten unter jedes Teil legen und es abheben ein Quadrat auf dem Brett (vorausgesetzt, dass sich unter jedem Quadrat ein Reed-Schalter befindet) aufgrund des Vorhandenseins/Nichtvorhandenseins des Magnetfelds über dem Sensor können Sie Ihrem Controller klar machen, ob auf dem Quadrat ein Stein steht/nicht steht. Es sagt dem Mikrocontroller jedoch immer noch nichts darüber aus, welches Stück genau auf dem Platz steht. Es sagt nur, dass sich auf einem Feld ein Stein befindet/keinen Stein. An dieser Stelle stehen wir vor einem Figurenerkennungsproblem, das mit einer Schachengine gelöst werden kann, bei der alle Figuren zu Beginn des Schachspiels auf ihre Ausgangspositionen gesetzt werden. Auf diese Weise "weiß" der Mikrocontroller von Anfang an, wo jedes Stück steht, mit allen Adressen im Speicher. Dies bringt uns jedoch eine große Einschränkung mit sich: Sie können nicht beliebig viele Steine wählen und zufällig irgendwo auf dem Brett platzieren und mit der Analyse des Spiels beginnen. Sie müssen immer von vorne beginnen, alle Steine sollten ursprünglich auf dem Brett sein, da der Mikrocontroller ihre Position nur so verfolgen kann, wenn Sie einen Stein angehoben und auf ein anderes Feld gelegt haben. Im Wesentlichen war dies das Problem, das ich bemerkte und auf das ich hinarbeiten wollte.
Meine Lösung war recht einfach, wenn auch kreativ. Ich habe einen RFID-Leser auf die Vorderseite einer Platine gelegt. Inzwischen habe ich nicht nur einen Magneten unter den Stücken angebracht, sondern auch einen RFID-Tag, wobei jedes Stück eine einzigartige ID hat. Bevor Sie also eine Figur auf ein beliebiges Quadrat stellen, können Sie das Stück zunächst nahe an den RFID-Leser halten und die ID lesen lassen, das Stück identifizieren, im Speicher ablegen und dann an beliebiger Stelle platzieren. Anstatt Reed-Schalter zu verwenden, habe ich zur Vereinfachung des Schaltungsdesigns Hall-Effekt-Sensoren verwendet, die ähnlich funktionieren, mit dem einzigen Unterschied, dass 0 oder 1 als digitale Daten an einen Mikrocontroller gesendet werden, was "da ist" bedeutet. bzw. "es gibt keine" Figur auf dem Feld. Ich habe auch LEDs hinzugefügt (leider nicht die gleiche Farbe, hatte keine), so dass beim Anheben des Stücks alle quadratischen Stellen leuchten, an denen ein angehobenes Stück platziert werden könnte. Betrachten Sie es als eine pädagogische Übung für Schachlerner:)
Abschließend möchte ich anmerken, dass das Projekt trotz der Tatsache, dass ich mehrere Techniken verwendet habe, einfach und verständlich bleibt, nicht tief ausgearbeitet oder zu kompliziert. Ich hatte nicht genug Zeit, um mit dem 8x8-Schachbrett fortzufahren (auch weil 64 Hall-Effekt-Sensoren in der Türkei teuer sind, habe ich alle Kosten im Zusammenhang mit dem Projekt übernommen), deshalb habe ich eine 4x4-Demoversion mit nur zwei getesteten Teilen gemacht: Pawn und Königin. Anstatt eine Schachengine zu verwenden, habe ich einen Quellcode für Arduino geschrieben, der alles generiert, was Sie im folgenden Video sehen werden.
Schritt 2: Wie die Dinge funktionieren
Bevor wir zur Schritt-für-Schritt-Erklärung übergehen, wie das Projekt durchgeführt wurde, denke ich, dass es besser wäre, sich ein anschauliches Video anzusehen und eine intuitive Vorstellung davon zu bekommen, wovon ich spreche.
Hinweis Nr. 1: Eine der roten LEDs (erste in der Reihe / von links nach rechts) ist durchgebrannt, egal.
Hinweis #2: Obwohl weit verbreitet, kann ich aus meiner Erfahrung sagen, dass die RFID-Technologie nicht die beste Idee für Heimwerkeranwendungen ist (natürlich wenn Sie Alternativen haben). Bevor alles funktionierte, habe ich viele Versuche unternommen, Schachfiguren in der Nähe des Lesers zu platzieren und zu warten, bis er die ID korrekt liest. Dafür sollte die serielle Schnittstelle eingerichtet werden, da die Art und Weise, wie der RFID-Leser die ID liest, nur Kopfschmerzen bereitet. Man sollte es selbst versuchen, um das Problem zu verstehen. Wenn Sie weitere Hilfe benötigen, senden Sie mir bitte eine E-Mail ([email protected]) oder fügen Sie Skype hinzu (tahir.miriyev9r1), damit wir ein Gespräch planen und die Dinge im Detail besprechen können, ich werde alles gründlich erklären.
Schritt 3: Werkzeuge und Komponenten
Hier ist die Liste aller Tools, die ich für das Projekt verwendet habe:Elektronische Komponenten:
- Steckbrett (x1)
- Omnidirektionale A1126LUA-T (IC-1126 SW OMNI 3-SIP ALLEGRO) Hall-Effekt-Sensoren (x16)
- Grundlegende 5 mm LEDs (x16)
- Überbrückungsdrähte
- 125 kHz RFID-Lesegerät und Antenne (x1)
- Arduino Mega (x1)
- RFID 3M-Tags (x2)
Andere Materialien:
- Plexiglas
- Hochglanzpapier
- kurze Planken (Holz)
- Acrylfarbe (dunkelgrün und creme) x2
- Dünner Karton
- 10 mm Rundmagnete (x2)
- Bauern- und Damenfiguren
- Lötkolben und Lötmaterialien
Schritt 4: Schaltpläne (Fritzing)
Schaltpläne sind ein bisschen kompliziert, ich weiß, aber die Idee sollte klar sein. Es war das erste Mal, dass ich Fritzing verwendet habe (übrigens sehr zu empfehlen), wahrscheinlich könnten Verbindungen genauer gezeichnet werden. Jedenfalls habe ich alles in den Schaltplänen notiert. Hinweis: Ich konnte das genaue Modell des RDIF-Readers unter den Komponenten in der Datenbank von Fritzing nicht finden. Das von mir verwendete Modell ist ein 125-kHz-RFID-Modul - UART. Auf Youtube finden Sie Tutorials zum Einstellen dieses Moduls mit Arduino.
Schritt 5: Prozess
Zeit zu erklären, wie die Dinge gemacht wurden. Bitte folgen Sie der Schritt-für-Schritt-Beschreibung:
1. Nehmen Sie einen 21x21 cm großen Karton, sowie etwas zusätzlichen Karton, um die Wände des oberen Teils des Brettes zu schneiden und zu kleben, um 16 Quadrate mit A B C D 1 2 3 4 aufgezählt zu machen. Da Karton dünn ist, können Sie in jedes Quadrat 16 Hall-Effekt-Sensoren mit je 3 Beinen und 16 LEDs mit je 2 Beinen stecken.
2. Nachdem Sie die Komponenten eingestellt haben, müssen Sie etwas löten, um die Beine von Hall-Effekt-Sensoren und LEDs an die Drahtbrücken zu löten. An dieser Stelle würde ich empfehlen, farbige Drähte geschickt auszuwählen, damit Sie nicht mit den + und - Beinen von LEDs, auch VCC-, GND- und PIN-Beinen von Hall-Effekt-Sensoren, verwechselt werden. Natürlich könnte man eine Platine mit Sensoren und sogar schon gelöteten LEDs vom Typ WS2812 drucken, aber ich entschied mich, das Projekt einfach zu halten und mehr "Handarbeit" zu machen. An dieser Stelle müssen Sie nur noch Kabel und Sensoren vorbereiten. In späteren Phasen können Sie nach dem Fritzing-Schema sehen, wo Sie das Ende jedes Drahts anbringen sollten. In Kürze werden einige von ihnen direkt zu den PINs auf dem Arduino Mega gehen (es gibt genug davon auf dem Arduino), andere zum Steckbrett und alle GNDs können an ein einziges Stück Kabel gelötet werden (was später eine gemeinsame Masse ergibt) sollte mit dem GND auf dem Arduino-Board verbunden werden. Ein wichtiger Hinweis hier: Hall-Effekt-Sensoren sind OMNIDIRECTIONAL, was bedeutet, dass es egal ist, welcher Pol eines Magneten in der Nähe des Sensors gehalten wird. Der Magnet ist nämlich (weiter als sagen wir 5 sm) vom Sensor entfernt.
3. Bereiten Sie einen ähnlichen 21x21 cm großen Karton vor und befestigen Sie den Arduino Mega und ein langes Steckbrett darauf. Sie können auch wieder 4 Wände beliebiger Höhe aus Karton zuschneiden und mit diesen beiden Lagen quadratischer Bretter 21x21 cm vertikal verkleben. Folgen Sie dann Fritzing Schematics, um die Dinge einzurichten. Sie können den RFID-Leser auch einstellen, nachdem Sie mit LEDs und Hall-Effekt-Sensoren fertig sind.
4. Testen Sie, ob alle LEDs und Sensoren funktionieren, indem Sie Signale mit Basiscodes senden. Vermeiden Sie diesen Schritt nicht, da Sie so testen können, ob alles richtig funktioniert, und zum weiteren Aufbau des Boards übergehen.
5. Bereiten Sie Bauer und Dame vor, indem Sie unten zwei Magnete mit einem Radius von 10 cm sowie runde RFID-Tags anbringen. Später müssen Sie die IDs dieser Tags vom Serial Screen auf der Arduino IDE lesen.
6. Wenn alles gut funktioniert, können Sie den Hauptcode starten und ausprobieren!
7 (wahlweise). Sie können mit Holz künstlerisch arbeiten, um Ihrer Demo ein natürlicheres Aussehen zu verleihen. Das liegt an Ihrem Willen und Ihrer Vorstellungskraft.
Schritt 6: Einige Fotos und Videos aus verschiedenen Phasen
Schritt 7: Quellcode
Wenn wir nun mit einem Prototyp fertig sind, können wir ihn mit dem folgenden Arduino-Code zum Leben erwecken. Ich habe versucht, so viele Kommentare wie möglich zu hinterlassen, um den Prozess der Codeanalyse verständlich zu machen. Um ehrlich zu sein, mag die Logik auf den ersten Blick etwas komplex erscheinen, aber wenn Sie tiefer in die Logik des Codes eintauchen, sieht sie umfassender aus.
Hinweis: Ähnlich wie beim echten Schachbrett habe ich Felder abstrakt als A1, A2, A3, A4, B1, …, C1, …, D1,.., D4 nummeriert. Im Code ist es jedoch nicht praktikabel, diese Notation zu verwenden. Daher habe ich Arrays verwendet und Quadrate als 00, 01, 02, 03, 10, 11, 12, 13, …, 32, 33 dargestellt.
Vielen Dank für Ihre Aufmerksamkeit! Testen Sie alles und schreiben Sie in die Kommentare über alle Arten von Fehlern, die ich übersehen habe, Verbesserungen, Vorschläge usw. Ich freue mich darauf, einige Meinungen über das Projekt zu hören.com) oder fügen Sie Skype hinzu (tahir.miriyev9r1), damit wir ein Gespräch planen und die Dinge im Detail besprechen können. Viel Glück!