Inhaltsverzeichnis:
- Schritt 1: Pulsweitenmodulation zum Mischen von Farben
- Schritt 2: Sprechen mit Schieberegistern und LEDs
- Schritt 3: Schaltplan
- Schritt 4: C++-Quellcode
- Schritt 5: Fertiges Gadget
- Schritt 6: Anwendung: CPU Load Monitor für Linux mit Perl
- Schritt 7: Anwendung: Mit anderen Modulen über I²C. sprechen
- Schritt 8: Anwendung: "Game Cube":-)
- Schritt 9: Anzeigen von Bildern / Animationen auf der Matrix - Quick Hack
- Schritt 10: Interaktive Steuerung gespeicherter Animationen
- Schritt 11: Live-Video anzeigen
- Schritt 12: Mehr Licht fast kostenlos
Video: 64-Pixel-RGB-LED-Anzeige - Ein weiterer Arduino-Klon - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:23
Dieses Display basiert auf einer 8x8 RGB LED Matrix. Zu Testzwecken wurde es mit 4 Schieberegistern an ein Standard-Arduino-Board (Diecimila) angeschlossen. Nachdem ich es zum Laufen gebracht hatte, habe ich es auf einer fabrizierten Platine permatisiert. Die Schieberegister sind 8 Bit breit und lassen sich leicht mit dem SPI-Protokoll verbinden. Zum Mischen der Farben wird Pulsweitenmodulation verwendet, dazu später mehr. Ein Teil des RAM der MCU wird als Framebuffer verwendet, um das Bild zu speichern. Der Video-RAM wird im Hintergrund von einer Interrupt-Routine geparst, sodass der Benutzer andere nützliche Dinge tun kann, wie zum Beispiel mit einem PC sprechen, Tasten und Potentiometer lesen. Weitere Informationen zu "Arduino": www.arduino.cc
Schritt 1: Pulsweitenmodulation zum Mischen von Farben
Pulsweitenmodulation - WAS ?Pulsweitenmodulation schaltet den Strom, der einem elektrischen Gerät zugeführt wird, ziemlich schnell ein und aus. Die nutzbare Leistung ergibt sich aus dem mathematischen Mittel der Rechteckfunktion über das Intervall einer Periode. Je länger die Funktion in der ON-Position bleibt, desto mehr Leistung erhalten Sie. PWM hat die gleiche Wirkung auf die Helligkeit von LEDs wie ein Dimmer bei AC-Leuchten. Die vor uns liegende Aufgabe besteht darin, die Helligkeit von 64 RGB-LEDs (= 192 Einzel-LEDs!) Spektrum der Farben. Es sollte möglichst kein Flackern oder andere störende Effekte auftreten. Die nichtlineare Helligkeitswahrnehmung des menschlichen Auges wird hier nicht berücksichtigt (zB erscheint der Unterschied zwischen 10 % und 20 % Helligkeit „größer“als zwischen 90 % und 100 %). der PWM-Algorithmus. Angenommen, der Code erhält einen Wert von 7 für die Helligkeit der LED (0, 0). Außerdem weiß es, dass es maximal N Helligkeitsstufen gibt. Der Code führt N Schleifen für alle möglichen Helligkeitsstufen und alle notwendigen Schleifen durch, um jede einzelne LED in allen Reihen zu bedienen. Falls der Schleifenzähler x in der Helligkeitsschleife kleiner als 7 ist, wird die LED eingeschaltet. Wenn es größer als 7 ist, wird die LED ausgeschaltet. Dies geschieht sehr schnell für alle LEDs, Helligkeitsstufen und Grundfarben (RGB), jede LED kann individuell angepasst werden, um die gewünschte Farbe anzuzeigen. Messungen mit einem Oszilloskop haben gezeigt, dass der Anzeigeaktualisierungscode etwa 50% CPU-Zeit benötigt. Der Rest kann verwendet werden, um serielle Kommunikation mit einem PC durchzuführen, Tasten zu lesen, mit einem RFID-Lesegerät zu sprechen, I. zu senden2C-Daten zu anderen Modulen…
Schritt 2: Sprechen mit Schieberegistern und LEDs
Ein Schieberegister ist ein Gerät, mit dem Daten seriell und parallel ausgegeben werden können. Der umgekehrte Betrieb ist mit dem entsprechenden Chip auch möglich. Ein gutes Tutorial zu Schieberegistern gibt es auf der arduino-Website. Die LEDs werden von 8-Bit-Schieberegistern vom Typ 74HC595 angesteuert. Jeder Port kann etwa 25 mA Strom liefern oder absenken. Der Gesamtstrom pro versenktem oder gespeistem Chip sollte 70 mA nicht überschreiten. Diese Chips sind extrem günstig, zahlen Sie also nicht mehr als etwa 40 Cent pro Stück. Da LEDs eine exponentielle Strom-/Spannungskennlinie haben, müssen Strombegrenzungswiderstände vorhanden sein. Nach dem Ohmschen Gesetz:R = (V - Vf) / IR = Begrenzungswiderstand, V = 5V, Vf = Durchlassspannung der LED, I = gewünschter StromRote LEDs haben eine Durchlassspannung von etwa 1,8 V, blau und grün reichen von 2,5 V bis 3,5 V. Verwenden Sie ein einfaches Multimeter, um das festzustellen. Für eine korrekte Farbwiedergabe sollte man einige Dinge berücksichtigen: spektrale Empfindlichkeit des menschlichen Auges (Rot/Blau: schlecht, Grün: gut), Effizienz der LED bei einer bestimmten Wellenlänge und Strom. In der Praxis nimmt man einfach 3 Potentiometer und stellt sie ein, bis die LED richtig weißes Licht zeigt. Natürlich darf der maximale LED-Strom nicht überschritten werden. Wichtig ist hier auch, dass das die Zeilen ansteuernde Schieberegister 3x8 LEDs mit Strom versorgen muss, also den Strom besser nicht zu hoch treiben. Ich war erfolgreich mit Begrenzungswiderständen von 270 Ohm für alle LEDs, aber das hängt natürlich von der Marke der LED-Matrix ab. Die Schieberegister sind mit SPI-Seriell verbunden. SPI = Serial Peripheral Interface (Bild (1)). Im Gegensatz zu den seriellen Ports bei PCs (asynchron, kein Taktsignal) benötigt SPI eine Taktleitung (SRCLK). Dann gibt es eine Signalleitung, die dem Gerät mitteilt, wann die Daten gültig sind (Chip Select / Latch / RCLK). Schließlich gibt es noch zwei Datenleitungen, eine heißt MOSI (Master Out Slave In), die andere heißt MISO (Master In Slave Out). SPI wird verwendet, um integrierte Schaltkreise zu verbinden, genau wie I2C. Dieses Projekt benötigt MOSI, SRCLK und RCLK. Zusätzlich wird auch die Freigabeleitung (G) verwendet. Ein SPI-Zyklus wird gestartet, indem die RCLK-Leitung auf LOW gezogen wird (Bild (2)). Die MCU sendet ihre Daten auf der MOSI-Leitung. Der logische Zustand davon wird vom Schieberegister an der steigenden Flanke der SRCLK-Leitung abgetastet. Der Zyklus wird beendet, indem die RCLK-Leitung wieder auf HIGH gezogen wird. Nun stehen die Daten an den Ausgängen zur Verfügung.
Schritt 3: Schaltplan
Bild (1) zeigt, wie die Schieberegister verdrahtet sind. Sie sind verkettet, sodass Daten in diese Kette und auch durch sie hindurch verschoben werden können. Daher ist das Hinzufügen weiterer Schieberegister einfach.
Bild (2) zeigt den Rest des Schaltplans mit MCU, Anschlüssen, Quarz… Die angehängte PDF-Datei enthält die gesamten Arbeiten, am besten zum Ausdrucken.
Schritt 4: C++-Quellcode
In C/C++ muss man normalerweise Funktionen prototypisieren, bevor man sie kodiert.#include int main(void);void do_something(void);int main(void) { do_something();}void do_something(void) { /* comment */ }Die Arduino IDE erfordert diesen Schritt nicht, da Funktionsprototypen automatisch generiert werden. Daher werden Funktionsprototypen im hier gezeigten Code nicht angezeigt. Bild (1): setup() functionImage (2): spi_transfer()-Funktion mit Hardware-SPI des ATmega168-Chips (läuft schneller)Image (3): Framebuffer-Code mit ein Timer1-Überlauf-Interrupt. Code-Stücke, die für Anfänger ein leicht kryptisches Aussehen haben, z while(!(SPSR & (1<<SPIF))) {} die Register der MCU direkt verwenden. Dieses Beispiel in Worten: "solange das SPIF-Bit im Register SPSR nicht gesetzt ist, tut man nichts". Ich möchte nur betonen, dass es bei Standardprojekten wirklich nicht nötig ist, sich mit diesen Dingen so eng mit der Hardware auseinanderzusetzen. Anfänger sollten sich davon nicht erschrecken lassen.
Schritt 5: Fertiges Gadget
Nachdem ich alle Probleme gelöst und den Code zum Laufen gebracht hatte, musste ich nur noch ein PCB-Layout erstellen und es an ein Fabhouse schicken. Es sieht so viel sauberer aus:-)Bild (1): vollständig bestückte ControllerplatineBild (2): Vorderseite der blanken PlatineBild (2): RückseiteEs gibt Anschlüsse, die PORTC und PORTD des ATmega168/328-Chips und 5V/GND ausbrechen. Diese Ports enthalten die seriellen RX-, TX-Leitungen, die I2C-Leitungen, digitale I/O-Leitungen und 7 ADC-Leitungen. Dies ist zum Stapeln von Schilden auf der Rückseite der Platine gedacht. Der Abstand ist für die Verwendung von Perfboard (0,1 Zoll) geeignet. Der Bootloader kann mit dem ICSP-Header geflasht werden (funktioniert mit USBtinyISP von adafruit). Sobald dies erledigt ist, verwenden Sie einfach einen Standard-FTDI-USB/TTL-Seriell-Adapter oder ähnliches. Ich habe auch einen Auto-Reset-Disable-Jumper hinzugefügt. Ich habe mir auch ein kleines Perl-Skript ausgedacht (siehe meinen Blog), das einen automatischen Reset mit FTDI-Kabeln ermöglicht, was normalerweise nicht sofort funktioniert (RTS vs. DTR-Linie). Dies funktioniert unter Linux, vielleicht auf MAC. Leiterplatten und ein paar DIY-KITs gibt es auf meinem Blog. SMD-Löten erforderlich! Bauanleitungen und Quellen für LED-Matrizen finden Sie in den PDF-Dateien.
Schritt 6: Anwendung: CPU Load Monitor für Linux mit Perl
Dies ist ein sehr einfacher Lastmonitor mit einem Verlaufsdiagramm. Es basiert auf einem Perl-Skript, das mit iostat alle 1s den "Lastdurchschnitt" des Systems erfasst. Die Daten werden in einem Array gespeichert, das bei jeder Aktualisierung verschoben wird. Neue Daten werden oben in der Liste hinzugefügt, der älteste Eintrag wird herausgeschoben. Nähere Informationen und Downloads (Code…) finden Sie auf meinem Blog.
Schritt 7: Anwendung: Mit anderen Modulen über I²C. sprechen
Dies ist nur ein Grundsatzbeweis und bei weitem nicht die einfachste Lösung für diese Aufgabe. Mit I2C ermöglicht die direkte Adressierung von bis zu 127 "Slave"-Karten. Hier ist das Board auf der rechten Seite im Video der "Master" (der alle Übertragungen initiiert), das linke Board ist der Slave (wartet auf Daten). ich2C benötigt 2 Signalleitungen und die üblichen Stromleitungen (+, -, SDA, SCL). Da es sich um einen Bus handelt, sind alle Geräte parallel daran angeschlossen.
Schritt 8: Anwendung: "Game Cube":-)
Nur ein Freak-Gedanke. Dieser passt auch in das Holzgehäuse, das auf der Intro-Seite gezeigt wird. Auf der Rückseite befinden sich 5 Knöpfe, die zum Spielen eines einfachen Spiels verwendet werden können. DAS ENDE ?
Schritt 9: Anzeigen von Bildern / Animationen auf der Matrix - Quick Hack
Es hat also nur 8x8 Pixel und ein paar Farben zur Verfügung. Verwenden Sie zuerst etwas wie Gimp, um Ihr Lieblingsbild auf genau 8x8 Pixel zu verkleinern und im Rohformat ".ppm" (nicht ASCII) zu speichern. PPM ist einfach zu lesen und in einem Perl-Skript zu verarbeiten. Die Verwendung von ImageMagick und dem Befehlszeilentool "convert" funktioniert nicht richtig. Laden Sie den neuen Arduino-Code hoch und verwenden Sie dann das Perl-Skript zum Hochladen auf den Controller. Das Flimmern ist nur eine Fehlanpassung der LED-Aktualisierung und der Bildrate meiner Kamera. Nachdem der Code ein wenig aktualisiert wurde, läuft er ziemlich flott. Alle Bilder werden live über seriell übertragen, wie Sie sie sehen. Längere Animationen können in einem externen EEPROM gespeichert werden, wie dies bei verschiedenen Spoke-Pov-Boards der Fall ist.
Schritt 10: Interaktive Steuerung gespeicherter Animationen
Warum den Mikrocontroller den ganzen Spaß haben lassen? Beim Arduino-Kult dreht sich alles um physikalisches Rechnen und Interaktion, also fügen Sie einfach ein Potentiometer hinzu und übernehmen Sie die Kontrolle! Die Verwendung eines der 8 Analog-Digital-Wandlereingänge macht dies sehr einfach.
Schritt 11: Live-Video anzeigen
Die Verwendung eines Perl-Skripts und einiger Module macht es recht einfach, quasi Live-Videos auf X11-Systemen anzuzeigen. Es wurde auf Linux kodiert und kann auch auf MACs funktionieren. wiederholen
Schritt 12: Mehr Licht fast kostenlos
Mit nur zwei Stufen lässt sich die Helligkeit deutlich erhöhen. Ersetzen Sie die 270Ω-Widerstände durch 169Ω-Widerstände und huckepack ein weiteres 74HC595-Schieberegister auf IC5.
Empfohlen:
Einen Arduino-Gitarren-Tuner herstellen – wikiHow
So bauen Sie einen Arduino-Gitarren-Tuner: Dies sind die Anweisungen, um einen Gitarren-Tuner aus einem Arduino und mehreren anderen Komponenten zu machen. Mit Grundkenntnissen in Elektronik und Codierung können Sie dieses Gitarrenstimmgerät herstellen. Zuerst müssen Sie wissen, was die Materialien sind. Ma
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: 9 Schritte
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: Este proyecto consiste en a alarma básica que Detecta presencia, activa una sirena de 108dB y visa al usuario mediante un SMS (opcional). Permite también el control remoto básico por parte del usuario a través de SMS (encendido, apagado, reinicio
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 2 - Temperatur- / Feuchtigkeitsmonitor - Rev 3: 7 Schritte
Easy Very Low Power BLE in Arduino Teil 2 – Temperatur-/Feuchtigkeitsmonitor – Rev 3: Update: 23. November 2020 – Erster Austausch von 2 x AAA-Batterien seit 15. Januar 2019 dh 22 Monate für 2x AAA AlkalineUpdate: 7. April 2019 – Rev 3 of lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung, wenn
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i