Lichter Spiel mit Arduino
von einem Freund von mir inspiriert, Ich habe eine Schaltung auf Licht mit einer Matrix von LEDs entwickelt. Ist es möglich, dass der Pfarrer hat beantragt eine Votivkerze zu reparieren, bereits mit den Glühlampen vorgesehen. Wir haben die weißen LEDs in kleiner Macht zu bringen. Eine Taste oder ein Sensor zum Weitergeben von Münzen schaltet jeweils eine LED ein.
Beschreibung
Das hier vorgestellte Projekt es ist unprätentiös sein voll funktionsfähig, es ist Solo für Bildungszwecke. Tatsächlich könnten beim endgültigen Aufbau des Projekts einige Probleme zu lösen sein.
Der Prüfstandstest zeigt die Machbarkeit. Schließlich müssen bei der Implementierung Vorsichtsmaßnahmen getroffen werden, damit die Länge der Verbindungen nicht zu groß wird, oder dass l’ Die Stromversorgung wird durch Störungen gefiltert.
Die Entwicklung beinhaltet einen Arduino UNO V3, eine Reihe von LEDs von 6 Zeilen für 4 Spalte. Diese LEDs werden beim Multiplexen direkt vom Arduino angesteuert.
Das Programm alle’ Akt des Aktivierens eines Knopfes oder Erkennen des Durchgangs einer Münze, beginnt die LED in der folgenden Reihenfolge zu blinken. Wenn es keine gibt niemand aktiv, klar, das fängt beim ersten an.
In dem Video, die unter der unten angegebenen Adresse zu sehen ist, Es wurde ein einfacher knopfartiger Draht verwendet.
Die Anordnung der LED-Anordnung, es geht von einem Quadrat aus, das in gewisser Weise die kartesischen Achsen widerspiegelt. Dann beginnt die Zündsequenz unten links und folgt mit l’ Erhöhung der und, bis zu maximal einer Spaltennummer. unten, Fahren Sie mit der nächsten Spalte fort. Siehe Tabelle unten, Das zeigt, wie die Zündsequenz ist. Ausgehend von Nummer eins.
Ausrichtung der LEDs
|
6 |
12 |
18 |
24 |
|
5 |
11 |
17 |
23 |
|
4 |
10 |
16 |
22 |
|
3 |
9 |
15 |
21 |
|
2 |
8 |
14 |
20 |
|
1 |
7 |
13 |
19 |
PCB
Um die Entwicklung zu vereinfachen, Ich habe einen einseitigen Ausdruck organisiert, Dies sieht die Verbindung jeder Anode und Kathode vor. Die Karte sieht bereits eine Matrixerweiterung von 6 vor×6. Die folgende Abbildung zeigt das Layout der Karte. Ich habe zwischen den Anoden und Kathoden jeder LED etwas Platz gelassen, mehrere Spuren passieren. Leider gibt es ein paar Springer zu überholen, da konnte das enträtseln nicht reduziert werden.

Es sollte beachtet werden, dass die Kathoden den Widerständen zugewandt sind, die alle gehen’ Arduino, während die Anoden mit den Kollektoren der Transistoren verbunden sind. Schauen wir uns also den Schaltplan an.
Schaltplan
Beachten Sie, dass l’ Arduino kann auf Anschlüssen platziert werden. Ich empfehle diesen Weg, um es im Falle einer Neuprogrammierung extrahieren zu können.
In allen Fällen ja kann die Details sehen durch Herunterladen der Paket welches auch Skizzen enthält[*] geladen werden auf’ Arduino.
[*] Eine Skizze hat den Zeitraum, in dem die LEDs nur leuchten und beginnt, wenn die maximale Anzahl von LEDs erreicht ist. Das nennt man matrix_single_time.ino.
Der zweite, matrix_multiple_time.ino, Es funktioniert, dass jede LED ihre eigene autonome Periode hat und mit der zugewiesenen Dauer endet (AUSZEIT). auch, falls alle Lichter sarannein beleuchtet., undRRA Setzen Sie die Dauer dieser LED zurück, die awerden die längste Zeit.
Ein Hinweis, dass matrix_multiple_time.ino, beginnt von der Position aus zu zählen 24 alles’ zurück.
Es gibt auch eine Version, die einen MAX7219 mit ihrer Bibliothek verwendet, das kann bis zu behandeln 64 Lichter. Es ist aber nicht im Paket enthalten.
Wie das Programm funktioniert
Das Programm erlaubt einige Anpassungen, die in seinen Frontlinien aufgeführt sind. Unabhängig davon, wofür es aktuell bestimmt ist, können Sie es dorthin bringen’ Arduino und implementieren eine Matrix 8 Zeilen für 6 Spalte, mit nur zwei Korrekturlinien. Mal sehen im Detail.
die Linie 5 #definieren DEBUG Definiert, ob zum Debuggen mit der angeschlossenen seriellen Schnittstelle kompiliert werden soll (Sobald Sie die Schaltung ausprobiert haben, besser die Zeile zu kommentieren). unten, in der Skizze, zu den Zeilen 23 e 24 Sie können festlegen, welche Pins für die Verwendung mit der seriellen Schnittstelle zugewiesen werden sollen. Wie abgebildet ist eine USB-RS232-TTL-Schnittstelle erforderlich. Anschließend können Sie eine Verbindung zu den noch verfügbaren Pins herstellen, je nachdem, wie Sie sie zuweisen möchten.
die Linie 12 #Definieren Sie INBTN A0, erlaubt uns, l zuzuweisen’ Eingabe, die Sie zum Aktivieren der Zählung verwenden möchten. Zumindest für dieses Projekt wird erwartet in der gedruckten Schaltung ein Block mit Schraubbefestigung, um die Taste zu verbinden. Für eine andere Verwendung bleibt jedoch die Möglichkeit, eine neue Position zuzuweisen. Außer denen, die an sind’ Arduino sind durch nummeriert 0 ein 13, Mit diesen werden die LEDs angesteuert.
die Linie 13 #Definieren Sie TMPRESS 20, es wird verwendet, um den Zeitraum zu definieren, in dem l’ Der Eintrag muss niedrig bleiben, um validiert zu werden. Vielleicht brauchen Sie es dort’ Anpassung, um seine Empfindlichkeit zu definieren. Der Wert wird in ausgedrückt 2,5 Millisekunden. Dies entspricht der Aktualisierungsdauer der LEDs.
die Linie 14 #Definieren Sie TIMEOUT 7200, Legt fest, wie lange alle LEDs leuchten, Sobald die maximale Anzahl von Starts erreicht wurde. Die Messung erfolgt in Sekunden, Daher wurde ein Zeitraum von zwei Stunden angenommen. In der Funktion Countdown die Verzögerung ist von 998 Millisekunden, Diese Anpassung kann erforderlich sein, um den richtigen Zeitraum zu erhalten.
Die Linien 15 e 16 Definieren Sie, wie viele Spalten NUMKOLEN und wie viele Zeilen ZAHLEN das für das Projekt sind 4 e 6 beziehungsweise.
Zu dem Folgendem 3 Zeilen berechnen Sie die Programmeinstellungen, abhängig von den für die Zeilen und Spalten definierten Werten, über. (Sie dürfen auch bei einer anderen Verwendung des Programms nicht geändert werden).
Zur Linie 20 #NUMBLINKS definieren 8, Sie können variieren, wie oft blinken soll, bevor die LED dauerhaft leuchtet. Beachten Sie, dass es sich nur um eine gerade Zahl handeln kann, Andernfalls endet die Zählung bei ausgeschalteter LED.
die Linie 21 #Definieren Sie COMMON_ANODE, Hier können Sie festlegen, ob für Zeilenausgaben niedrige oder hohe Pegel verwendet werden sollen. In diesem Fall möchten Sie Transistorpuffer oder dazwischen legenwie Schaltungen integriert als ULN2804, Auf diese Weise können Sie die Kompilierung variieren und die Ausgaben invertieren.
Wenn Sie hohe aktive Ausgänge wünschen, Kommentieren Sie einfach die Zeile, Putten //.
Gleiches gilt auch für die Leitung 22 #Definieren Sie COL_ACTIVE_LOW, ermöglicht es uns, die Logik der Ausgänge für die Spalten zu invertieren. Ich habe das Laufwerk 2N2907A eingerichtet, also brauchte ich wenig aktiv.
die Linie 25 #Definieren Sie TIMELAPSE 2500, Es ist dasjenige, das die Aktualisierungshäufigkeit der Matrix und das Scannen der Spalten festlegt. Die Periode ist in Mikrosekunden. Tatsächlich wird die Funktion hier aufgerufen Aktualisierung jeder 2,5 Millisekunden. Es könnte behoben werden, den Wert erhöhen, um die Helligkeit der LEDs leicht zu reduzieren, Sie riskieren jedoch ein nerviges Flackern. Ich habe es mit versucht 5 Millisekunden und hat kein Flimmern. Eine weitere Reduzierung könnte die Leistung der anderen Aufgaben des’ Arduino.
Für den Rest, Sie können das Programm auch anpassen, um eine numerische Anzeige zu steuern. a 7 Segmente, mit einem Maximum von 6 Figuren. Oder ein Array von 8×6 Spalte. Aus diesem Grund ist das Programm ein pädagogisches Engagement, um einige Programmier-Tricks zu lernen. Ein zu beachtendes Detail war die Verwendung einer Interrupt-Routine, um dorthin zu gelangen’ Aktualisierung von hellen LEDs.
Zum Beispiel als ich Elektronikmagazine nahm, Ich habe das ganze Projekt kaum kopiert, Ich war daran interessiert, Ideen für meine Ideen zu bekommen.
Visuelle Tests
Konnte das nicht verpassen Brandtest.
Mit dem’ Absicht, dass es der Gemeinschaft dienen kann, vergnügt euch.


Hallo,
Ich habe es erfolgreich geschafft, die Matrix_Single-Schaltung zum Laufen zu bringen. Ich habe Schwierigkeiten, den MAX7219 zum Laufen zu bringen. Ich habe einen Stift 2 als Eingang und DATAIN-Pin 5, CLK-Stift 3 ,LADEN Sie den Stift 4, GND und 5V. Vermisse ich etwas? ?
Ich habe auch Fragen an Sie , kann das gleiche Konzept auf die Verwendung von fastLED.h und WS2812B angewendet werden ?
Vielen Dank
Die letzte Skizze sollte für den MAX funktionieren 7219. Ich habe die Kompilierung wiederholt und sie kompiliert einwandfrei. Ich habe die Skizze nur mit dem Simulator getestet.
Für WS2812B ist das eine andere Geschichte, aber der Stil, um diesen Effekt zu erzielen, bleibt gleich. Sie sollten die Arrays beibehalten, um sich jede LED-Lebensdauer zu merken. Ich habe sogar dafür eine Quelle für einen PIC12F1822 / 40 geschrieben, in Proton Basic, aber es folgt einem anderen Stil.
Hallo, Vielen Dank für Ihre schnelle Antwort. Ich habe immer noch Probleme, den MAX7219 zum Laufen zu bringen. Ich benutze das MAX7219 Dot Matrix Modul Mikrocontroller LED Modul Anzeigemodul als Test. Irgendwelche Vorschläge ?
Sie sollten einige Details zu Ihrer Baugruppe angeben, um zu kommentieren und sicherzustellen, dass Sie nicht in ein Versehen geraten sind.
Mit Arduino können Sie die spezifische Bibliothek verwenden, wie in der Skizze vorgeschlagen, und die Stifte wie in dieser Skizze beschrieben verbinden. Keine Ahnung, ob das reibungslos funktioniert. Ich habe derzeit weder die Hardware noch die Zeit, um meine Skizze zu beweisen.
Ich schlage vor, Sie eröffnen eine neue Diskussion über Ihre Arbeit.
Ausgezeichnetes und interessantes Projekt mit PORTD und PORTB , wird versuchen, Arduino UNO. Haben Sie einen Schaltplan, den Sie unterstützen können? 64 LEDs. Mach weiter so.
Ich bin froh, dass Sie an meinem Projekt interessiert sind. Also für die 8×8 Schaltpläne Es war nur ein bisschen Kopieren und Einfügen, um zwei weitere Spalten hinzuzufügen. Ich bin nicht auf die Skizze und das Leiterplattenlayout eingegangen. Also solltest du es ein bisschen von dir selbst versuchen. Falls Sie in Schwierigkeiten sind, werde ich etwas für Sie entwickeln. Derzeit soll dieses Projekt in eine 8 überarbeitet werden×8 Layout Ich habe einige Entwicklung mit dem MAX7219. Das sollte schon seit der Veröffentlichung enthalten sein.
Die 8×8 Sie können es finden Hier herunterladen.
Vielen Dank für Ihre Antwort sehr geschätzt. Ich werde es zuerst mit versuchen 24 LEDs den Fortschritt zu 64. Ich konnte nicht auf den Download-Link zugreifen, der für das bereitgestellt wurde 8 x 8 Layout.
So verwenden Sie die 8 x 8 welche zusätzlichen Pins auf Arduino verfügbar sind. Auch möchte ich hinzufügen 2 x 8 LCD-Anzeige, irgendwelche Ideen?
Entschuldigung für den falschen Link, Ich habe etwas Unordentliches auf dem Weg. Jetzt ist korrigiert. Sie finden die Schema.
Auf jeden Fall können Sie den Fall lösen und das gesamte PORTD verwenden, um weitere Spalten zu adressieren. Wie bereits erwähnt, können Sie eine CD4028 verwenden, um die Adressierung nur mit zu konvertieren 3 Bits.
Hier die MAX7219 Skizze, Die neueste version.
Entschuldigung für die Kommentare auf Italienisch.
Vielen Dank für Ihre Zeit und Geduld. Ihre Tiefe des Wissens darüber ist einfach unglaublich. Ich habe die Teile bestellt und werde versuchen, sie über das Wochenende einzurichten und Ihnen das Ergebnis mitzuteilen. Der Aufbau des MAX7129 ist weniger kompliziert als die Transistortreiberschaltungen.
Tatsächlich habe ich immer noch die Methode zur Verwendung eines Dual-Displays a übernommen 7 Segmente in einem anderen Projekt.
Das Design ist für einen Timer, der noch nicht ausprobiert wurde, aber Simulation ja. Ich sollte mir einen Moment Zeit nehmen, um es zu testen.
Tatsächlich wird der gesamte PORTC zum Schreiben eines Bytes verwendet. Mit dem 7segmenti, Besser, wenn Sie ein Datenarray verwenden, das die anzuzeigenden Symbole darstellt.
Ohne Zweifel gefiel mir die Idee und die Einfachheit der Realisierung war noch bemerkenswerter. Ich werde Ihre Idee als Ausgangspunkt für andere Jobs stehlen, auch wenn ich im Moment mit Charlieplexing beschäftigt bin, wird es meine zukünftige Studie sein, sobald die aktuelle abgeschlossen ist.