- Statt leuchtender LEDs wurde eine physisch umklappende Scheibe verwendet, um ein interaktives Wandkunstwerk fürs Büro zu bauen; 9 AlfaZeta-Panels wurden in einem 3x3-Raster zu einem 84x42-Display angeordnet
- Die Hardware besteht aus 24V-10A-Stromversorgung, einem 80/20-Aluminiumrahmen, RS485-Verkabelung und einem Nvidia Orin Nano; für hohe Framerates sollte man pro RS485-Leitung höchstens 6 Panels anschließen
- Die Software ist aufgeteilt in die Node.js-Bibliothek flipdisc für RS485-Frames und RLE-Kompression sowie flipdisc-server für Szenen-Queue, REST-API, WebSockets und Rendering-Loop
- Für das Rendering werden PIXI, Three.js, Matter.js, GSAP, node-canvas und node-gl genutzt; für die MediaPipe-Gestenerkennung startet Node ein Python-Skript und erhält die Ergebnisse per ZeroMQ-IPC zurück
- Bei einer Auflösung von 42x84 entscheidet eine auf geringe Auflösung abgestimmte Darstellungsgestaltung wie 3x5-Pixel-Schriften und Floyd-Steinberg- bzw. Bayer-Dithering über die praktische Nutzbarkeit
Warum Flip-Disc?
- Flip-Disc ist ein Display, bei dem kleine Scheiben per elektromagnetischem Impuls zwischen zwei Farben umklappen; es wurde vor über 80 Jahren erfunden, doch das Grundprinzip ist bis heute weitgehend gleich geblieben
- Statt des hellen, glatten Eindrucks eines LED-Bildschirms fiel die Wahl darauf, ein großes interaktives Wandkunstwerk fürs Büro mit physischer Bewegung und Klang zu bauen
- Kennzeichnend sind hohe Lesbarkeit, lange Lebensdauer, Betrieb im Bereich von 25–60 fps und ein regengeräuschähnlicher Klang beim Umklappen der Scheiben
- Ähnlich wie bei der zuvor für Code-Visualisierung gebauten pixel knitting app und dem crafting tool für Atom Editor wird das Projekt als Experiment verstanden, das Code mit physischen Medien verbindet
Hardware-Aufbau
- 9 Alfazeta panels wurden in einem 3x3-Raster angeordnet, um ein Flip-Disc-Display mit 84x42 Scheiben zu bauen
- Jedes Board besteht aus zwei 28x7-Panels
- Auf dem PCB sitzen ein älterer ATMEGA128 microcontroller, mehrere hundert MELF-Dioden und zwei DIP-Schalter
- Ein DIP-Schalter setzt die Adresse, der andere die Baudrate
- Details zu den AlfaZeta-Boards finden sich im manual
- Flip-Disc-Boards und Komponenten sind schwer zu beschaffen; der aktuelle Markt ist eher auf gewerbliche Nachfrage wie den Transportsektor als auf normale Verbraucher ausgerichtet
- Würde man es neu bauen, könnte sich auch ein eigenes Board-Design als Experiment lohnen
- Mit Zugang zur Firmware wäre Performance-Tuning einfacher
- Die Kosten der Panels steigen schnell an, was die Skalierung auf größere Formate erschwert
- Mögliche Bezugsquellen und Produkte
Stromversorgung, Rahmen, Verkabelung
- Das Display benötigt pro Board 24V 1A; um bei allen 9 Boards sämtliche Punkte umzuschalten, werden insgesamt 9A benötigt
- Im realen Aufbau kommt ein 24V-10A-MEAN WELL HLG-240H-24 zum Einsatz
- Der Rahmen wurde aus 80/20 aluminum extrusions gebaut, und die PCB-Abstandshalter wurden direkt am Rahmen befestigt
- Boards und Scheiben sind sehr fragil, sodass man beim Zusammenbau leicht Scheiben verlieren oder beschädigen kann
- Die Scheiben seien so zerbrechlich wie Schmetterlingsflügel; daher sollte man die Kanten greifen und die Boards einzeln vorsichtig montieren
- Fotos des fertigen Aufbaus gibt es unter photos of the final build
- Verwendete 80/20-Komponenten
- (7) 1010 - auf 25,2 Zoll zugeschnitten
- (2) 1010 - auf 49,65 Zoll zugeschnitten
- (12) 33460 Corner Connector
- (72) M3x16MM screws
- (72) M3x10MM spacer
- Die Verkabelung verbindet jede Spalte seriell und hängt dann alles zu einer Kette zusammen
- Für die Datenleitungen werden die +/- der RS485-Blockklemmen genutzt
- Für Strom kommt 18AWG zum Einsatz, für Daten ein abgeschirmtes 22AWG-Kabel
- Für hohe Framerates sollten pro RS485-Leitung nicht mehr als 6 Panels angeschlossen werden
- Für das gesamte Display wurden 3 USB RS485 devices verwendet
- Soll Content von einem externen Server kommen, sind auch RS485 to ethernet servers eine Option
Recheneinheit und Ein-/Ausgabe
- Da für die Verarbeitung von Sprache, Video und Bildern Machine Learning genutzt wird, wird mehr Rechenleistung benötigt als bei einem typischen Single-Board-Computer oder Mikrocontroller
- Im realen Aufbau wird ein Nvidia Orin Nano verwendet
- Ein Raspberry Pi könnte ebenfalls funktionieren, allerdings mit geringerer Framerate
- Als Kamera wird die IMX708 camera verwendet
- Für Audio-Ein- und -Ausgabe kommt ein Waveshare audio board zum Einsatz
- Es wurde ein Dockerfile für das Deployment auf Jetson 6.0 erstellt; für aktiviertes MediaPipe-GPU muss aus dem Quellcode kompiliert werden
- Als einfacheren Weg wird ein M2 Mac Mini empfohlen; wenn man auf Interaktivität verzichtet, reicht eventuell auch eine günstigere Lösung wie ein Raspberry Pi
Board-Kommunikation und Node.js-Treiber
- Für die Kommunikation mit den Boards wird RS485 verwendet; das Frame-Format hat die Struktur
0x80 0x83 0x01 imageData 0x8F- Jedes Frame beginnt mit dem Start-Byte
0x80 - Danach folgen flush
0x83oder buffer0x84, Board-Adresse, Bilddaten und das End-Byte0x8F - Die Bilddaten nutzen nur die beiden Zustände
0und1 - Zur Kompression der übertragenen Frames wird RLE verwendet
- Jedes Frame beginnt mit dem Start-Byte
- Es wurde die grundlegende Node.js-Bibliothek flipdisc erstellt, die derzeit über USB und Ethernet mit AlfaZeta- und Hanover-Boards funktioniert
- Die Daten aus
ctx.getImageData(0, 0, width, height)einer Canvas-Instanz können direkt gesendet werden; anhand der luminance werden Pixel in1oder0umgewandelt - Installation und Dokumentation
- Driver Documentation
npm install flipdisc
Rendering, Interaktion und Server-Architektur
- Ziel ist nicht, vorgerenderte Assets auf einem stromsparenden Gerät anzuzeigen, sondern Echtzeitvisualisierungen zu schaffen, die direkt auf Nutzer-Feedback reagieren
- Für das Rendering werden bestehende Web-Technologien genutzt
- Für die Interaktion werden Google-MediaPipe libraries und Modelle verwendet
- Für die Demo zur Gestenerkennung siehe Gesture Recognizing
- Da viele ML-Bibliotheken Python nutzen, startet Node Python-Skripte und erhält die Daten per ZeroMQ-IPC zurück
- Künftig könnte auch Python WASM genutzt werden
- Visualisierungen werden jeweils als Szene (scene) dargestellt und können einer Queue hinzugefügt werden
- Zugriff auf Szenenwiedergabe und Queue-Verwaltung erfolgt über eine REST-API
- Daten für die Echtzeitwiedergabe werden per WebSocket übertragen
- Mit der useLoop function kann man Events abonnieren oder der Rendering-Queue Inhalte hinzufügen
- Jede scene-Datei muss scene und schema zurückgeben und kann optional background tasks enthalten
- Background tasks laufen in festgelegten Intervallen und fügen bei Erfolg eine scene zur Wiedergabe-Queue hinzu
- Server-Paket und Beispiele
- Server Documentation
- Scene Examples
npm install flipdisc-server
- Funktionen von
flipdisc-server- Import von scenes aus einem Verzeichnis
- Live-Reload von scene-Dateien
- Background tasks zum Hinzufügen von scenes zur Queue
- UI-Komponenten für Text, Bilder und Listen
- Flex-Layout auf Basis von Yoga
- Standard-Getter und Setup für pixi/three/matter sowie Anbindung zusätzlicher Module
- REST-Server und WebSocket für Echtzeitdaten
- Rendering-Loop und Nutzung von GLSL-Shadern
Steuerungs-App
- Um zu vermeiden, dass man mit der Zeit vergisst, welche Befehle auszuführen sind, und das Projekt deshalb schwer wieder aufnehmen kann, wurde separat eine stabile Schnittstelle gebaut
- Für schnelles Prototyping fiel die Wahl auf eine expo-App
- Über die App lassen sich pause, start, skip und previous des Displays steuern
- Über scene-Variablen lässt sich das Erlebnis personalisieren
- Man kann direkt auf dem Bildschirm frei zeichnen
- Die App Flipdisc ist im App Store verfügbar
- Funktionen der App
- scene pausieren/abspielen
- Zur Queue hinzufügen oder daraus entfernen
- In der Queue zum nächsten/vorherigen Element wechseln
- In Echtzeit sehen, was aktuell auf dem Display angezeigt wird
- Frei auf dem Bildschirm zeichnen
- Configuration variables an jede scene senden
Design bei niedriger Auflösung
- Bei einem Flip-Disc-Display im Format 42x84 muss entschieden werden, wie Informationen innerhalb der begrenzten Pixelzahl möglichst einfach vermittelt werden; das kommt constraint-basiertem Design nahe
- Als Standard-Schrift fürs Lesen wird eine 3x5 pixel font verwendet
- Es gibt auch Varianten in 4x5 und mono
- 3x3 fonts und 3x4 nano fonts sind noch kleiner, werden für den praktischen Einsatz aber als zu schlecht lesbar eingeschätzt
- Ab 12 Pixeln lassen sich die meisten Schriften einigermaßen lesen
- Da kein Anti-Aliasing gerendert wird, passen Bitmap-Schriften gut zu solchen Displays
- Auch das Archiv Bitmap designed fonts ist als Integrationsziel interessant
- Für Bilder wird eine Mischung aus Floyd-Steinberg dithering und Bayer 4x4 ordered dithering verwendet
- Floyd-Steinberg wird bevorzugt, weil es natürlichere Pixelverteilungen im Bild erzeugt
- Bayer eignet sich besser für UI-Elemente, weil es konsistente Muster erzeugt
- Als Material dazu wird Ditherpunk — The article I wish I had about monochrome image dithering empfohlen
- Für Büro-Szenen wurden ein New York Times RSS reader, ein Spotify client, eine weather app sowie weitere scene-Sammlungen erstellt
Nächste Schritte und Referenzprojekte
- Das nächste Ziel ist, mithilfe neuer multimodaler Ein- und Ausgaben eine transparente Agentenoberfläche für AI zu bauen
- Dieses Vorhaben soll angegangen werden, sobald die nächste Modellgeneration veröffentlicht ist
- Es wird gehofft, dass Flip-Disc für Hobbybauer zugänglicher wird; wer an Zusammenarbeit für günstige Flip-Disc-Hardware interessiert ist, soll sich melden
- Inspirierende Projekte und Materialien
1 Kommentare
Kommentare auf Hacker News
„Nahezu unbegrenzte Lebensdauer“ ist vielleicht nicht so unbegrenzt, wie man hoffen würde. Es kommt recht häufig vor, dass Disks herausfallen oder hängen bleiben, aber wenn sie richtig funktionieren, sind sie wirklich cool, vor allem wegen des Sounds.
Früher war ich in einem Büro mit einer Flip-Dot-Anzeige, und später haben wir diese Anzeige zerlegt. Ich habe ein Foto davon, wie eine hängengebliebene Disk aussieht: https://photos.app.goo.gl/onpHefUVL8oeP4si7
Interessante Tatsache: Texas Instruments DLP (Digital Light Processing) ähnelt einer miniaturisierten Version eines Flip-Disk-Displays.
Allerdings drehen sich Flip-Disks um 180°, während DLP-Pixel nur ein wenig gekippt werden, um das Licht in Richtung Kühlkörper zu lenken; außerdem haben Flip-Disks auf beiden Seiten unterschiedliche Farben, während DLP aus Spiegelpixeln besteht. Flip-Disks haben sehr wahrscheinlich eine begrenzte Lebensdauer, während DLP Billionen von Zyklen aushält. DLP reagiert im Mikrosekundenbereich extrem schnell und erzeugt Graustufen per Duty-Cycle-Modulation (PWM).
Breakfast Studio erstellt großartige Kunstwerke mit Flip-Disk-Modulen.
https://breakfaststudio.com/flip-discs
Ich frage mich, wie genau der Autor an die Panels gekommen ist. Ich hatte mich früher einmal danach umgesehen, aber außer über Orte wie eBay waren sie praktisch nicht zu bekommen.
Es sei denn, man war bereit, industrielle Stückzahlen zu Industriepreisen zu kaufen. Ich wüsste gern, wo er sie gekauft hat und wie viel sie gekostet haben.
Im Artikel habe ich auch geschrieben, dass ich mir wünschen würde, solche Panels würden für Hobbyentwickler günstiger werden. Wer in diese Richtung zusammenarbeiten möchte, kann sich gern melden.
Es wird in Polen hergestellt und verschickt, es gibt keine öffentliche Preisliste, aber ein 7x28-Panel kostet ungefähr 220 Euro. Teuer, aber es gibt nicht viele Hersteller, die so etwas noch produzieren. Wenn man weiterliest, findet man auch Links zu anderen Herstellern, die günstiger erscheinen, darunter solche auf AliExpress.
Wirklich cool. Es gefällt mir, JavaScript in so einem Einsatz zu sehen.
Ich war überrascht zu erfahren, dass das James-Webb-Teleskop für einen großen Teil seiner Onboard-Funktionen eine angepasste JavaScript-Runtime verwendet.
https://news.ycombinator.com/item?id=19739454
Trotzdem ist mir noch nicht ganz klar, warum JavaScript gewählt wurde. Laut Paper handelt es sich um eine kommerzielle JavaScript-Engine: https://ui.adsabs.harvard.edu/abs/2006SPIE.6274E..0AB/abstra...
Das könnte als NOC-Monitor nützlich sein. Meistens zeigt er etwas Statisches an, aber wenn etwas schiefläuft, wird die Anzeige aktualisiert, und das Geräusch zieht ganz natürlich Aufmerksamkeit auf sich. Ein separater „Alarm“ ist nicht nötig.
Wo ist auf diesem Schwarz-Weiß-Display die obligatorische Touhou Bad Apple-Animation?
Das Originalvideo für alle, die es nicht kennen: https://www.youtube.com/watch?v=FtutLA63Cp8
Meine Lieblingsversion ist dieses Video mit realen Objekten: https://www.youtube.com/watch?v=lT-fdnIK0k0 (HN-Diskussion: https://news.ycombinator.com/item?id=39527559)
Schön. Ich mag Flip-Dots auch. Ich habe mit einem JavaScript-Controller für Hanover-Busdisplays angefangen (https://engineer.john-whittington.co.uk/2017/11/adventures-f...) und bin später über einen Auftrag für einen Controller im Format 256x56, also für 24 Panels, bis zu Alfa-Zeta-Modulen gekommen.
Damals habe ich ein Python-Modul (https://github.com/tuna-f1sh/flipdot), ein Admin-Tool auf Basis von Python Flask/React und Sequenzinformationen aus einer SQLite-DB verwendet. Das Ergebnis ähnelte dieser App, inklusive vorab geladener Übergangseffekte und natürlich Game of Life: https://engineer.john-whittington.co.uk/2020/04/game-of-life...
Auf meiner Projekt-TODO-Liste steht, einen FPGA-basierten direkten HDMI-Controller für Alfa-Zeta-Module zu bauen. Die Bildwiederholrate der eingebauten Firmware ist etwas enttäuschend.
Der Anfang des Demo-Videos erinnert mich an Ye Olde Wooden Mirror
https://www.smoothware.com/danny/woodenmirror.html
Oder auch an dieses neuere Beispiel: https://tisch.nyu.edu/itp/news/spring-2024/daniel-rozin--itp...
Statt „Flip-Disk-Displays sind eine eher unbekannte Technologie“ wäre Nischentechnologie wohl treffender. Diese Nische war die Lesbarkeit bei Sonnenlicht.
Noch vor ein paar Jahren waren Flip-Disk-Displays in Bussen, Zügen usw. sehr verbreitet. Dann wurden LEDs besser, und diese Nische verschwand.