Menü Bezárás

Karantén projekt – Home office tábla, gyorsan

Ki ne szeretne nyugodt körülmények között dolgozni, akár otthonról is? Ebben a miniprojektben egy 64×32 pixeles RGB LED mátrixot fogok életre kelteni, majd kitenni az ajtóra, hogy senki se zavarjon a munkában vagy éppen a tanulásban.

Hardver

Adott volt a fent említett paraméterekkel rendelkező kijelző modul.

Nyilván semmilyen jelzés nem volt rajta a típusát illetően, de némi keresgélés után rá lehet bukkanni az interneten ekvivalens példányokhoz való adatlapokra, például nem-noname gyártók honlapján.
(Kezdetben nem a képen látható panellel dolgoztam.)
Egyből kiderült, hogy a végtelen LED-en, néhány meghajtó IC-n és shift regiszteren kívül nincs is rajta más bonyolult dolog, cserébe az egyes sorokat kézzel kell multiplexelni, a pixelek színenkénti logikai értékének betöltése után. Az már a vezérlő elektronika kérdése, hogy hány színárnyalatot és mekkora képfrissítési sebességet lehet elérni.
Ez problémát jelent majd.

Tapasztalatszerzés

Régóta szerettem volna működésre bírni ezt a panelt. Próbálkoztam Raspberry PI-vel, Arduino-val, (még PIC-kel is) de nem voltam elégedett az eredménnyel. A Raspi PWM jele instabil volt, mindig villódzott egy-egy sor, az Arduino-ban pedig egész egyszerűen nem volt annyi grafikus célra felhasználható memória, hogy értelme lett volna monokróm állóképen kívül bármi mást előállítani.

Talán a legjobbnak nevezhető eredményt úgy sikerült elérnem, hogy a panelt közvetlenül rákötöttem egy régi PC párhuzamos portjára. Ez a gép TCP-n fogadott képet, és real-time jelenítette meg nyolc színben, maximális processzorhasználat mellett. A szervernek használt laptop a webkamerája által vett videojelet egy – direkt erre a célra írt – program segítségével átalakította a megfelelő méretűre, a beállított paraméterek alapján újraszínezte, majd bitmapek sorozataként továbbította socketen keresztül. Mind a szerver, mind a kliensprogramot Visual Basic-ben írtam meg, mert akkor még nagyon értettem ahhoz 🙂

Íme egy remek minőségű archív néma felvétel a szerkezetről működés közben:

Később, egyik alkalommal ismét elővettem a LED mátrixot, hogy kísérletezzek vele. Eddigre már átalakítottam egy ATX tápot, tettem rá kapcsolót, banándugó aljzatokat, és a szükséges terhelő ellenállást, hogy általános célú tápegységnek is lehessen használni. Nagy áramot tud felvenni az a sok LED, nem elég neki egy sima telefontöltő!

Addig kísérleteztem, míg egyszer csak eltévesztettem a tápfeszültséget, és 5V helyett véletlenül 12V-ot kapott a panel. Sajnos a LED driver IC-k nem tolerálták ezt az ötletet, és szépen elfüstölt valamennyi. Megpróbáltam volna kicserélni őket, de mivel drágább lett volna az új IC-ket beszerezni, mint egy zsír új kijelzőt, így az utóbbi megoldás mellett döntöttem.

Ezúttal kötelezőnek éreztem építeni egy védőáramkört, amely csak akkor kapcsolja rá a kijelzőre a tápellátást, ha megfelelő a feszültségszint. A kapcsolási rajzot nem találtam meg digitális formában, ezek szerint annyira egyszerű, hogy elég volt papíron megrajzolni anno – pedig szoktam dokumentálni, amit csinálok.
Update: valóban, megtaláltam a beültetési rajzot egy papírfecnin, viszont nem tartom közzétételre érdemesnek. Inkább megpróbálom reprodukálni a kapcsolási rajzot.

Működési elv a következő: a relé csak akkor húz be, és adja rá a tápot a kimenetre, ha 5V körüli feszültség van a bemeneten (DC barrel jack csati a felső sarokban). Nagyjából 3.8V-nál kisebb feszültség nem tudja behúzni a relét, a 6V-nál nagyobb pedig egy feszültségosztóval a bal oldali tranzisztoron keresztül letiltja a jobb oldalit, és azért nem kapcsol a relé. Az áramkört egy furatraszteres próbapanelen raktam össze, és beragasztottam egy biciklibelső-javító készlet üres dobozába. Aztán eltelt majdnem 5 év.

A projekt

Az egyetem mellett sajnos jóval kevesebb időm van olyan dolgokkal szórakozni, mint amilyenekről például az előbb szó volt. Most, hogy otthonról lehet/kell egyetemre járni, lett némi szabad kapacitásom, leporoltam a LED mátrixot, és elhatároztam, csinálok belőle egy állapotjelző táblát. Sokkal jobban lehet az éppen aktuális teendőre koncentrálni, ha közben nem jön oda öt percenként mindenki, akivel egy háztartásban élek. (Ráadásul attól sem kell tartanom, hogy esetleg amiatt lesz mém belőlem, mert valaki belesétál a képbe egy szál pizsamában.)

Az volt a cél, hogy minél gyorsabban összerakjak egy szöveges tartalom megjelenítésére alkalmas kijelzőt a rendelkezésre álló alapanyagokból. Ezúttal egy ESP-32 fejlesztőpanellel próbálkoztam, mint vezérlő. Számos hasonló projekt és kódkönyvtár található meg az interneten, így nem bonyolítottam a dolgot, néhány példaprogram alapján összeollóztam magamnak egy alap kódot, kicsit igazítottam rajta, és kiegészítettem a szükséges funkciókkal.

A képadatot egy HUB75-nek nevezett porton – mely fizikailag egy 2×8 lábú szalagkábel csatlakozó – fogadja a panel. A kijelző vízszintesen két, 16 sorból álló részre van elválasztva, ezekből tudunk egyszerre két azonos sorszámú sort kiválasztani a négy (A, B, C, D jelű) címbittel. A felső- illetve az alsó rész kiválasztott sorához a pixeladatot az R1, G1, B1 és R2 G2 B2 bemenetekről mintavételezi a shift regiszter a CLK jel felfutó élére. A LATCH (vagy STROBE) jel hastására egyszerre íródik a shift regiszterek tartalma a kimeneti bufferbe, így csak a végeredmény látszik, nem pedig a pixelek végigvándorlása az adott sorban. A vezetékezés nem szép, ellenben ronda lett – viszont működik az eszköz.

Tápegységnek továbbra is a megbuherált ATX tápot választottam, a feladatát tökéletesen ellátja, és még telefont is lehet róla tölteni közben. Néha zörög egy picit a hűtőventilátora, majd alkalomadtán kicserélem.

Mit tud?

Az ESP-32 WiFi kliensként üzemel, és az itthoni routerre csatlakozik, szándékom szerint fix belső IP címmel. Kódolatlan szöveges üzeneteket fogad, 3×10 karakter terjedelemben, és a kapott szöveget megjeleníti a képen látható módon. Ami a kijelző meghajtását illeti, nincs rá panasz: villogásmentes képet ad, és 64 különböző szín megjelenítésére képes (tudna többet is, de ez bőven elég). Ugyan a LED mátrix bemeneti magas jelszintje hivatalosan 5V, az ESP pedig 3.3V-os logikával dolgozik, úgy tűnik, ez mégsem okozott problémát.

Pythonban írtam egy szkriptet, mely segítségével az üzenetet soronként lehet összerakni, az előre beállított lehetőségeket pedig listából lehet kiválasztani egy-egy billentyű lenyomásával a számítógépen. Az éppen kiírt üzenet is látható a terminál felső részén.


Természetesen lehet engem zavarni is, ilyenkor az első körben kiválasztott üres sor (0) után – egy állapotgéphez hasonlóan – más listaelemek közül lehet választani, mint a ‘Pihenek’, vagy ‘Bejohetsz’. Az ékezetes karakterek támogatását túl nagy erőfeszítés lett volna megcsinálni, így azzal inkább nem foglalkoztam, mivel így is érthetőek az üzenetek. Az ajtóüveg eléggé töri a fényt: a képen szerencsére nem látszik, de a valóságban jól kivehetők az RGB LED-ek színei külön-külön, ez rontja az élvezeti faktort – ha lehet ilyet mondani. További fejlesztési lehetőség maradt, hogy a szöveg színei a konstans piros-sárga-zöldeskék helyett állíthatóak legyenek, valamint egyéni szöveget is lehessen küldeni a forráskód módosítása nélkül.

Persze ez egy ideiglenes megoldás, mely eddigi tapasztalataim alapján tökéletesen ellátja a feladatát. Nem merült fel igény például grafikus elemek megjelenítésére, de természetesen, ha úgy adódik, mindenképp továbbfejlesztem.

Related Posts