DIY

Wie man ein Arduino-angetriebenes LED-Matrix-Conway-Spiel des Lebens macht - DIY

Wie man ein Arduino-angetriebenes LED-Matrix-Conway-Spiel des Lebens macht - DIY

Kurze Bytes: Jedes Hobby hat seine eigenen Meilensteinprojekte wie die Einführung von Hello World in die Programmierung. Die Arduino-Community startet die Leute gerne mit dem blinkenden LED-Licht. Aber was könnten wir mit 64 LED-Lichtern in einer Matrix machen? Wir können alle möglichen Dinge wie Zahlen, Buchstaben und sogar einfache Bilder anzeigen. In diesem Artikel erfahren Sie, wie das geht und wie Conways Spiel des Lebens funktioniert.

Der Arduino hat in den letzten zehn Jahren eine explosive Popularität erfahren. Es stehen Tausende von Bibliotheken zur Verfügung. Es ist eine sehr gut dokumentierte Plattform und erstaunlich, um das Programmieren und Entwerfen von Elektronik zu lernen.

In diesem Artikel werden wir die Verwendung der LED-Treiber MAX7219 und MAX7221 mit der LedControl-Bibliothek, die sowohl in der Arduino IDE als auch auf Github zum Herunterladen und Installieren verfügbar ist, kurz behandeln und Conways Game of Life implementieren. Die beiden wichtigen Teile, die Sie dafür benötigen, sind einer der oben genannten LED-Treiber und eine kompatible LED-Matrix (zusätzlich zum Arduino und einigen Standard-Elektronikkomponenten natürlich). Sie können viele für sehr billig (weniger als 3 USD) in verschiedenen Online-Shops wie eBay, Banggood und AliExpress finden. Es ist jedoch sehr wichtig, die Beschreibung des Kaufs zu lesen, da viele davon als Kits geliefert werden, die zusammengebaut und verlötet werden müssen. Je nachdem, wo Sie wohnen, kann die Versandzeit einige Wochen betragen. Überprüfen Sie daher unbedingt die voraussichtliche Ankunftszeit für Ihre Region.

Ich habe die Quelle für dieses Projekt auf meinem (Baron) Github-Seite, also zögern Sie nicht, sie herunterzuladen, zu ändern, erneut zu veröffentlichen oder was auch immer Sie möchten. Es wird notwendig sein, mitzumachen, und es gibt viele Kommentare im Code auf Github, die nicht in diesem Artikel enthalten sind, nur weil es ein langer Artikel wäre und sie im eigentlichen Code viel effektiver sind, als zu versuchen, sie zusammenzudrücken in diesen Artikel.

Nach der Header-Datei und den Pin-Definitionen finden Sie eine Zeile, die möglicherweise keinen Sinn ergibt.

LedControl lc = LedControl (DIN, CLK, CS, 0);

Dadurch wird das LedControl-Objekt erstellt, das als Schnittstelle zu unserem LED-Treiber verwendet wird, indem die digitalen Eingangs-, Takt- und Chipsignalstifte bereitgestellt und die Anzahl der Geräte angegeben werden (sie können für eine große Anzeige in Reihe geschaltet werden). Das Steuerprotokoll zwischen dem LED-Treiber und dem Arduino ist SPI (Serial Peripheral Interface), aber darauf müssen wir nicht eingehen, da wir ein Objekt der LedControl-Klasse haben, um unsere Gebote für uns abzugeben.

Der nächste Teil, in der installieren() Funktion, ist meistens selbsterklärend, aber wir werden es aus Gründen der Klarheit behandeln.

lc.shutdown (0, false); lc.setIntensity (0, 8); lc.clearDisplay (0);

Der LED-Treiber wird beim ersten Einschalten heruntergefahren, daher müssen wir ihn anweisen, aufzuwachen, was in der ersten Zeile der Fall ist. Die zweite legt die Helligkeit fest, da wir nur eine einzige Anzeige verwenden. Der erste Parameter, die Adresse der Matrix, ist 0, und die Intensität sollte auf Sie eingestellt werden, was auch immer Sie bevorzugen, wobei der maximal gültige Wert 15 beträgt. Zuletzt löschen wir die Anzeige aller möglichen vorherigen Werte. Dies ist normalerweise kein Problem. Wenn Ihr Arduino jedoch aus irgendeinem Grund neu gestartet wird, leuchten möglicherweise unerwünschte LEDs.

Bevor wir mit der Programmierung beginnen, ist es wichtig zu verstehen, was Conways Spiel des Lebens ist und welche Regeln gelten. Das Spiel ist ein "Null-Spieler" -Spiel. Das bedeutet nur, dass der Spieler den Ausgangszustand auswählt, was wir zufällig tun, und dann die Regeln befolgt. Das Spiel des Lebens ist sehr einfach und hat nur vier Regeln:

  1. Jede lebende Zelle mit weniger als zwei lebenden Nachbarn stirbt, als ob sie durch Unterbevölkerung verursacht würde.
  2. Jede lebende Zelle mit zwei oder drei lebenden Nachbarn lebt für die nächste Generation weiter.
  3. Jede lebende Zelle mit mehr als drei lebenden Nachbarn stirbt wie durch Überbevölkerung.
  4. Jede tote Zelle mit genau drei lebenden Nachbarn wird wie durch Reproduktion zu einer lebenden Zelle.

- Wikipedia

Holen Sie sich Ihr eigenes Arduino Board und beginnen Sie noch heute mit dem Heimwerken

Zur Darstellung des Gitters verwenden wir zwei zweidimensionale Arrays. Da wir mit 8 × 8-Matrizen arbeiten, sind dies die Dimensionen, die wir auf unsere Arrays anwenden. Während Byte-Arrays im Speicher viel effizienter sind (und tatsächlich häufig in solchen Anwendungen verwendet werden), sind Boolesche Werte in einem Array viel einfacher zu ändern als Bits in einem Byte. Das Ändern von Bits innerhalb eines Bytes würde die Verwendung von erfordern bitweise Operationen, die die Dinge im Vergleich zu den einfachen booleschen Arrays ziemlich komplizieren würden. Das zweite Array ist, weil wir den nächsten Zustand aus dem aktuellen Zustand berechnen müssen, aber wenn wir den aktuellen Zustand ändern, erhalten wir nicht den gewünschten aufeinanderfolgenden Zustand.

Die nächsten beiden for-Schleifen dienen zum Initialisieren der cgrid Array mit zufälligen Werten und der ngrid Array mit falsch Werte. Es besteht eine Wahrscheinlichkeit von eins zu vier, dass die Zelle "lebt". Dazu wird eine Zufallszahl zwischen 0 und 3 generiert. Wenn die Zahl größer als 2 ist, lebt die Zelle.

Der Rest des Codes ist entweder einfach genug, um keine weitere Erklärung zu benötigen, oder enthält eine Erklärung im Code. Aber die displayGeneration () Funktion ist interessanter. Diese Funktion kann mit geringen Änderungen Byte-Arrays aufnehmen und direkt in die Matrix übertragen. Das lc.setColumn () Der Methodenaufruf benötigt tatsächlich ein Byte, da es das letzte Argument ist. Das erste ist die Adresse und die Spalte, die festgelegt wird. Wenn Sie dies verwenden und wie folgt einrichten, können Sie auf einfache Weise eine Funktion erstellen, die ein Acht-Elemente-Byte-Array, z. B. einen Buchstaben oder ein Bild, in der Matrix anzeigt.

void printByte (Byte ba [8]) for (int i = 0; i < 8; i++) lc.setRow(0,0,ba[i]); 

Sie können sehen, dass die verwendete Methode die ist setRow () Methode im Gegensatz zu der setColumn () Methode. Dabei wird das Byte einfach horizontal und nicht vertikal angewendet, sondern einfach um 90 Grad gedreht. Dies ist ein wichtiger Punkt, da die Ausrichtung Ihres Projekts nicht unbedingt mit meiner übereinstimmt. Darüber hinaus können Sie die Reihenfolge, in der die Bytes platziert werden, mithilfe von umkehren (7 - i) als zweites Argument, das die Ausgabe effektiv spiegelt. Dies ist eine sehr einfache Möglichkeit, die Ausgabe für Ihr Projekt richtig auszurichten.

Wenn Sie Text in Ihrer Matrix anzeigen möchten, können Sie 8 × 8-Matrixschriftarten online finden. Es ist jedoch sehr wichtig, die Gesamtmenge an RAM zu notieren, über die Ihr Mikrocontroller verfügt. Ich habe Uno für dieses Projekt verwendet und eine der Schriftarten enthielt Definitionen für die 128-Bit-Konfigurationen, die über den 7-Bit-ASCII-Standard hinausgehen. Das war zu viel für mein Uno (Das sind 8 Bytes x 256 = 2048 Bytes, das gesamte Uno Kapazität) und ich mussten die Hälfte des Satzes auf die ursprünglichen 128 ASCII-Definitionen einstellen, damit diese Schriftart funktioniert. Denken Sie also daran, dass Ihr Kilometerstand je nach Mikrocontroller variieren kann.

Nach kurzer Arbeit können Sie sich zurücklehnen und den faszinierenden Effekt des Spiels des Lebens auf Ihrem eigenen kleinen LED-Matrix-Display beobachten.

Gibt es noch andere Arduino-Projekte, die Sie gerne auf Fossbytes sehen würden? Lass es uns in den Kommentaren unten wissen.

Top 5 kostenlose Video-Streaming-Apps für den Fire TV Stick und Android-Geräte in den App Stores
Es gibt viele kostenlose Optionen zum Streamen von Videos auf den Fire TV Stick oder ein beliebiges Android-Gerät. Während Kodi und APKs sehr beliebt...
Beste Film- und TV-Show-Apps (APKs) für Android-Geräte und Fire TV Stick
Die App (APKs) für Android-Filme und Fernsehsendungen ist als Methode zum Streamen von Videos sehr beliebt geworden. Oft einfach als APK bezeichnet, ...
Test DBPOWER T20 LCD-Miniprojektor 1080P HD-Heimkino
Der DBPOWER T20 ist ein kleiner Miniprojektor, mit dem Videos oder Bilder auf einer ebenen Fläche wie einer Wand angezeigt werden können. Es ist ein ...