- Parlak LED'ler yerine fiziksel olarak dönen diskler kullanarak ofis için etkileşimli bir duvar sanatı oluşturdu ve 9 AlfaZeta panelini 3x3 dizerek 84x42'lik bir ekran kurdu
- Donanım tarafı 24V 10A güç kaynağı, 80/20 alüminyum çerçeve, RS485 kablolama ve Nvidia Orin Nano etrafında toplandı; yüksek kare hızı isteniyorsa RS485 hattı başına panel sayısını 6'nın altında tutmak gerekiyor
- Yazılım, RS485 frame'lerini ve RLE sıkıştırmasını işleyen Node.js kütüphanesi flipdisc ile sahne kuyruğu, REST API, websocket ve render döngüsünü yöneten flipdisc-server olarak ikiye ayrılıyor
- Render için PIXI, Three.js, Matter.js, GSAP, node-canvas ve node-gl kullanılıyor; MediaPipe jest tanıma ise Node içinden Python script'i çalıştırıp sonuçları ZeroMQ IPC üzerinden alıyor
- 42x84 çözünürlükte 3x5 piksel yazı tipi ve Floyd-Steinberg ile Bayer dithering gibi düşük çözünürlüğe uygun ifade tasarımı, gerçek kullanılabilirliği belirliyor
Neden flip-disc?
- Flip-disc, elektromanyetik darbeyle küçük bir diski iki renk arasında çeviren bir ekran teknolojisi; 80 yıldan uzun süre önce icat edilmiş olsa da temel prensibi bugün de büyük ölçüde aynı
- Parlak ve pürüzsüz LED ekran hissi yerine, fiziksel hareketi ve sesi olan ofis tipi büyük bir etkileşimli duvar sanatı üretmek için bunu seçti
- Yüksek okunabilirlik, uzun ömür, 25-60fps aralığında çalışma ve diskler dönerken çıkan yağmur sesine benzer akustik karakter öne çıkan özellikleri
- Daha önce kod görselleştirme için yaptığı pixel knitting app ve Atom Editor için crafting tool çalışmalarına benzer biçimde, bunu da kod ile fiziksel ortamı birleştiren bir deney olarak ele aldı
Donanım yapısı
- 9 adet Alfazeta panels 3x3 grid halinde yerleştirilerek 84x42 diskli bir ekran oluşturuldu
- Her kart, 28x7 boyutunda 2 panelden oluşuyor
- PCB üzerinde eski bir ATMEGA128 microcontroller, yüzlerce MELF diyot ve 2 DIP switch bulunuyor
- DIP switch'lerden biri adresi, diğeri baud rate'i ayarlıyor
- AlfaZeta kartlarıyla ilgili ayrıntılar manual içinde yer alıyor
- Flip-disc kartları ve parçalarını bulmak zor; mevcut pazar, genel tüketiciden çok ulaşım sektörü gibi kurumsal talebe göre şekillenmiş durumda
- Yeniden yapılsa kendi kart tasarımını denemek mantıklı olabilir
- Firmware erişimi performans ayarı açısından avantaj sağlar
- Panel maliyeti hızla arttığı için daha büyük boyutlara ölçeklemek zorlaşıyor
- Dikkate değer tedarikçiler ve ürünler
Güç, çerçeve ve kablolama
- Ekran, kart başına 24V 1A gerektiriyor; 9 kartın tüm noktalarını aynı anda çevirmek için toplam 9A gerekiyor
- Gerçek kurulumda 24V 10A MEAN WELL HLG-240H-24 kullanıldı
- Çerçeve 80/20 aluminum extrusions ile yapıldı ve PCB standoff'ları doğrudan çerçeveye sabitlendi
- Kartlar ve diskler çok hassas olduğundan montaj sırasında disk kaybetmek veya kırmak kolay
- Diskler kelebek kanadı kadar narin sayılabilecek düzeyde hassas; bu yüzden kenarlardan tutup kartları tek tek dikkatle yerleştirmek gerekiyor
- Tamamlanmış yapının fotoğrafları photos of the final build sayfasında bulunuyor
- Kullanılan 80/20 parçaları
- (7) 1010 - 25.2 inç olarak kesildi
- (2) 1010 - 49.65 inç olarak kesildi
- (12) 33460 Corner Connector
- (72) M3x16MM screws
- (72) M3x10MM spacer
- Kablolama, her kolonu seri bağlayıp ardından tüm yapıyı zincir şeklinde birleştiriyor
- Veri hattı için RS485 blok terminalindeki +/- uçları kullanılıyor
- Güç hattında 18AWG, veri hattında ise 22AWG shielded cable kullanılıyor
- Yüksek kare hızı isteniyorsa bir RS485 hattına 6'dan fazla panel bağlanmamalı
- Tüm ekran için 3 adet USB RS485 devices kullanıldı
- İçeriği harici bir sunucudan vermek istenirse RS485 to ethernet servers da bir seçenek
İşlem birimi ve giriş/çıkış
- Ses, video ve görüntü işlemek için makine öğrenmesi kullanıldığından, temel bir tek kart bilgisayar ya da mikrodenetleyiciden daha fazla işlem gücü gerekiyor
- Gerçek kurulumda Nvidia Orin Nano kullanılıyor
- Raspberry Pi de çalışabilir, ancak kare hızı düşebilir
- Kamera olarak IMX708 camera kullanılıyor
- Ses giriş/çıkışı için Waveshare audio board tercih edildi
- Jetson 6.0 üzerinde dağıtım için bir Dockerfile hazırlandı; MediaPipe GPU desteğini etkinleştirmek için kaynak koddan derleme gerekiyor
- Daha kolay bir yol olarak M2 Mac Mini öneriliyor; etkileşim gerekmiyorsa Raspberry Pi gibi daha ucuz seçenekler de yeterli olabilir
Kart iletişimi ve Node.js sürücüsü
- Kart iletişimi için RS485 kullanılıyor ve frame formatı
0x80 0x83 0x01 imageData 0x8Fyapısında- Her frame başlangıç baytı
0x80ile başlıyor - Ardından flush
0x83veya buffer0x84, kart adresi, görüntü verisi ve bitiş baytı0x8Fgeliyor - Görüntü verisi yalnızca iki durum kullanıyor:
0,1 - Aktarım frame'lerini sıkıştırmak için RLE kullanılıyor
- Her frame başlangıç baytı
- Node.js için temel kütüphane olarak flipdisc geliştirildi; şu anda USB ve ethernet üzerinden AlfaZeta ve Hanover kartlarında çalışıyor
- Bir canvas örneğinin
ctx.getImageData(0, 0, width, height)verisi doğrudan gönderilebiliyor; piksel verisi luminance değerine göre1veya0'a dönüştürülüyor - Kurulum ve dokümantasyon
- Driver Documentation
npm install flipdisc
Render, etkileşim ve sunucu mimarisi
- Amaç, önceden render edilmiş asset'leri düşük güçte bir cihaza göstermek değil; kullanıcıdan doğrudan geri bildirim alan gerçek zamanlı görselleştirmeler üretmek
- Render tarafında mevcut web teknolojileri kullanılıyor
- Etkileşim için Google MediaPipe libraries ve modelleri kullanılıyor
- Jest tanıma demosu için Gesture Recognizing örneğine bakılabilir
- Pek çok ML kütüphanesi Python kullandığı için Node içinden Python script'i çalıştırılıyor ve veriler ZeroMQ IPC ile geri alınıyor
- İleride Python WASM da kullanılabilir
- Görselleştirmeler ayrı ayrı scene olarak tanımlanıyor ve kuyruğa eklenebiliyor
- Scene oynatma ve kuyruk yönetimi REST API üzerinden erişiliyor
- Gerçek zamanlı oynatma verisi websocket ile aktarılıyor
- useLoop function ile event'lere abone olunabiliyor veya render kuyruğuna ekleme yapılabiliyor
- Her scene dosyası bir scene ve schema döndürmeli; isteğe bağlı olarak background task da içerebilir
- Background task belirli aralıklarla çalışıyor ve başarılı olursa oynatma kuyruğuna scene ekliyor
- Sunucu paketi ve örnekler
- Server Documentation
- Scene Examples
npm install flipdisc-server
flipdisc-servertarafından yönetilen işlevler- Dizinden scene içe aktarma
- Scene dosyaları için live reload
- Kuyruğa scene ekleyen background task'ler
- Metin, görsel ve liste için UI bileşenleri
- Yoga tabanlı flex layout
- pixi/three/matter için temel getter ve setup, ek modül bağlama
- REST sunucusu ve gerçek zamanlı veri için websocket
- Render döngüsü ve GLSL shader kullanımı
Kontrol uygulaması
- Zaman geçince hangi komutların çalıştırılacağını unutup projeyi tekrar kullanmayı zorlaştırma sorununu önlemek için ayrıca kararlı bir arayüz oluşturuldu
- Hızlı prototipleme için expo uygulaması seçildi
- Uygulama üzerinden ekranın pause, start, skip ve previous işlevleri kontrol edilebiliyor
- Scene değişkenleri ayarlanarak deneyim kişiselleştirilebiliyor
- Ekran üzerine doğrudan serbest çizim yapılabiliyor
- Uygulama App Store'da Flipdisc adıyla yer alıyor
- Uygulama özellikleri
- Scene duraklatma/oynatma
- Kuyruğa ekleme veya çıkarma
- Kuyrukta sonraki/önceki öğeye geçme
- O anda ekranda gösterilen görüntüyü gerçek zamanlı izleme
- Ekran üzerine serbest çizim
- Her scene için configuration variable gönderme
Düşük çözünürlükte tasarım
- 42x84 boyutundaki bir flip-disc ekranda, sınırlı piksel içinde bilginin ne kadar sade aktarılacağına karar vermek gerekiyor; bu da kısıt odaklı tasarıma oldukça yakın
- Temel okuma yazı tipi olarak 3x5 pixel font kullanılıyor
- 4x5 ve mono varyasyonları da mevcut
- 3x3 fonts ve 3x4 nano fonts daha küçük olsa da pratik kullanım için okunabilirliklerinin çok düşük olduğu düşünülüyor
- 12 pikselin üstünde çoğu yazı tipi bir ölçüde okunabilir hale geliyor
- Anti-aliasing render edilmediği için bitmap font'lar bu tür ekranlara iyi uyum sağlıyor
- Bitmap designed fonts arşivi de entegrasyon açısından ilgi çekici görülüyor
- Görsellerde Floyd-Steinberg dithering ile Bayer 4x4 ordered dithering birlikte kullanılıyor
- Floyd-Steinberg, görüntüde daha doğal bir piksel dağılımı sunduğu için tercih ediliyor
- Bayer, daha tutarlı desenler ürettiği için UI öğelerinde daha uygun
- İlgili kaynak olarak Ditherpunk — The article I wish I had about monochrome image dithering öneriliyor
- Ofis için New York Times RSS reader, Spotify client, weather app ve başka scene koleksiyonları geliştirildi
Sonraki adımlar ve referans projeler
- Bir sonraki hedef, yeni çok modlu giriş/çıkış olanaklarını kullanarak yapay zeka için şeffaf bir ajan arayüzü oluşturmak
- Bu özelliğin, yeni nesil modeller çıktıktan sonra ele alınması planlanıyor
- Flip-disc teknolojisinin hobi geliştiricileri için daha erişilebilir hale gelmesi umuluyor; düşük maliyetli flip-disc donanımı üzerine iş birliğiyle ilgilenenlerin iletişime geçmesi isteniyor
- İlham veren projeler ve kaynaklar
1 yorum
Hacker News yorumları
“Neredeyse sonsuz ömür” demek, beklendiği kadar sonsuz olmayabilir. Disklerin düşmesi veya takılması oldukça sık oluyor; ama düzgün çalıştığında gerçekten harika ve özellikle sesi çok iyi.
Eskiden flip-dot ekranı olan bir ofisteydim; daha sonra o ekranı söktük. Takılmış bir diskin nasıl göründüğünü gösteren bir fotoğrafım var: https://photos.app.goo.gl/onpHefUVL8oeP4si7
İlginç bilgi: Texas Instruments DLP (Digital Light Processing), flip-disc ekranın minyatürleştirilmiş bir sürümüne biraz benziyor.
Ancak flip-disc 180° dönerken DLP pikselleri ışığı soğutucuya yönlendirmek için yalnızca biraz eğilir; flip-disc’in iki yüzü farklı renktedir, DLP ise ayna piksellerden oluşur. Flip-disc’in ömrünün sınırlı olma ihtimali yüksek; DLP ise trilyonlarca çevrime dayanır ve mikrosaniye ölçeğinde çok hızlı tepki vererek gri tonlamayı duty cycle modülasyonu (PWM) ile uygular.
Breakfast Studio, flip-disc modüllerle harika sanat eserleri yapıyor.
https://breakfaststudio.com/flip-discs
Yazarın panelleri tam olarak nasıl edindiğini merak ediyorum. Eskiden buna bakmıştım; eBay gibi yerler dışında bulmak pratikte imkânsızdı.
Tabii endüstriyel miktarları endüstriyel fiyatlarla almaya istekli değilseniz. Nereden aldığını ve ne kadara mal olduğunu bilmek isterim.
Yazıda da bu tür panellerin hobi geliştiricileri için daha ucuz hâle gelmesini istediğimi yazdım. Bu konuda iş birliği yapmak isteyen varsa bana ulaşsın.
Polonya’da üretilip gönderiliyor; herkese açık bir fiyat listesi yok ama bir 7x28 panel yaklaşık 220 euro civarında. Pahalı, ama hâlâ bunları üreten çok yer yok. Yazıyı okumaya devam ederseniz AliExpress tarafı dâhil daha ucuz görünen başka üreticilere bağlantılar da var.
Gerçekten harika. JavaScript’in böyle yerlerde kullanıldığını görmek hoşuma gidiyor.
James Webb Telescope’un yerleşik işlevlerinin önemli bir kısmında özel bir JavaScript çalışma zamanı kullandığını öğrenince şaşırmıştım.
https://news.ycombinator.com/item?id=19739454
Yine de JavaScript’i neden seçtiklerini hâlâ pek anlamıyorum. Makaleye göre ticari bir JavaScript motoruymuş: https://ui.adsabs.harvard.edu/abs/2006SPIE.6274E..0AB/abstra...
Bunun bir NOC monitörü olarak faydalı olabileceğini düşünüyorum. Çoğu zaman statik bir gösterim olur; ama bir şey ters giderse ekran güncellenir ve sesi doğal olarak dikkati çeker. Ayrı bir “alarm” gerekmez.
Bu siyah-beyaz ekranda elbette olması gereken Touhou Bad Apple animasyonu nerede?
Bilmeyenler için orijinal video: https://www.youtube.com/watch?v=FtutLA63Cp8
En sevdiğim sürüm, gerçek nesneler kullanılan şu video: https://www.youtube.com/watch?v=lT-fdnIK0k0 (HN tartışması: https://news.ycombinator.com/item?id=39527559)
Güzel. Ben de flip-dot’ları seviyorum. Hanover otobüs ekranı için JavaScript denetleyicisiyle başlamıştım (https://engineer.john-whittington.co.uk/2017/11/adventures-f...); daha sonra 256x56’lık, yani 24 panel ölçeğinde bir denetleyici yapma talebi vesilesiyle Alfa-Zeta modüllerine kadar uzandı
O zamanlar Python modülü (https://github.com/tuna-f1sh/flipdot) ile Python Flask/React tabanlı bir yönetim arayüzü ve SQLite DB’deki sekans bilgilerini kullanmıştım. Ortaya çıkan şey, önceden yüklenmiş geçiş efektleri ve elbette Hayat Oyunu da dahil olmak üzere bu uygulamaya benziyordu: https://engineer.john-whittington.co.uk/2020/04/game-of-life...
Alfa-Zeta modülleri için FPGA tabanlı, doğrudan HDMI denetleyicisi yapmak proje TODO listemde. Yerleşik firmware’in yenileme hızı biraz hayal kırıklığı yaratıyor
Demo videosunun başları bana Ye Olde Wooden Mirror’ı hatırlattı
https://www.smoothware.com/danny/woodenmirror.html
Ya da daha yakın tarihli şu da aklıma geldi: https://tisch.nyu.edu/itp/news/spring-2024/daniel-rozin--itp...
“Flip-disc ekranlar biraz yabancı bir teknoloji” demektense niş teknoloji demek daha doğru olur bence. O niş de güneş ışığı altında okunabilirlikti
Birkaç yıl öncesine kadar flip-disc ekranlar otobüslerde, trenlerde vb. oldukça yaygındı. Sonra LED’ler iyileşince o niş ortadan kalktı