Developer blog / Projects / LED strip controller

Project summary

It can drive an RGB LED strip which can be up to 25 meters long, using music as input. This can come from any device with a line level output (basically all PCs, mobile phones or Hi-Fi systems). It uses a visual equalizer which separates the audio into 3 channels: low, middle and high frequency, and each of these correspond to a specific color. The device also supports passive modes, where no input is needed.

Elkészült az első iteráció a ledes projektemből. A cél az, hogy majd zenére menjen, de most elsőre az is épp elég áttörés, hogy világít. :D Egyelőre Raspberry Pi-ról megy, és azt vezérlem WiFi-n keresztül a PC-ről, de később tervezem, hogy veszek egy Arduino-t és arra írom át. Venném már most is, csak a Pi most úgyis kell az egyetemi projektmunkához, az meg nem, úgyhogy majd csak később kezdek el vele foglalkozni. Addig is van még mit tökéletesíteni, a videón talán látszik, hogy a fényáttűnés nem éppen lineáris, momentán egyetlen tranzisztor szabályozza az egész ledsort, persze színenként. Következő update-ben lesz már piros szín is.

Két vizsga közti pihenő alatt elkészült a második felvonás a LED-sor projektből. Most a változó feszültségszint helyett szabályozott kitöltési tényezőjű négyszögjellel hajtom meg (Pulse Width Modulation), pont ahogyan a LED-sor eredeti vezérlőjében is volt. Ezzel nagyon szép lineáris áttünést sikerült elérni, és nincs az a probléma, hogy a LED-ek nem egyformán világítanak, vagy hogy túlzottan melegszik a tranzisztor.

Ehhez első lépésben kell egy 8 bites shift regiszter + latch, a Raspberry Pi ebbe írja be az új értékeket, aztán kell még egy latch, amire mindjárt kitérek, hogy miért. Ebből lesz az első 8 bites számérték, ezt nevezzük el A-nak.

A másik oldalon egy 8 bites számláló van, aminél egy teljes ciklus, hogy nullától 255-ig elszámol körülbelül 4,096 ms. Minden ciklus végén a 9. helyiértékkel reseteli saját magát és aktiválja az A-nak a második latch-ét, hogy a Raspberry által beírt új érték ne a ciklus közepén lépjen érvénybe, hanem csak a ciklusok között. A számlálóban keletkező 8 bitet nevezzük el B-nek.

Az egész szerkezet közepén egy 8 bites összehasonlító IC van, ami ha A < B, magas jelet ad, különben pedig alacsonyat, és ez a jel vezérli a LED-sort.

Következő lépés: megcsinálni mind a három színre, és rendes panelra összeforrasztani.

A korábbi eredmények, hogy a PWM vezérlőt sok-sok IC-ből raktam össze, szórakoztató volt, de gyakorlatban nem sok értelme, mivel nagyjából bármilyen mikrovezérlőben alapból van PWM kimenet. Így lett aztán, hogy végül egy Arduino Mini-t használtam fel a feladatra, és a jelforrás kérdését is sikerült egyszerűbben megoldanom, ugyanis az eredeti terv szerint egy szoftver vette volna fel a hangkimenetet és szedte volna szét szoftveresen a jelet 3 frekvenciatartományra, ehelyett most egy equalizer IC-t használok, ami a szűrést analog elvégzi, és az Arduino ennek a jelét olvassa be. Így aztán a bemenetre bármilyen eszköz analog hangkimenete rácsatlakoztatható.

A dolog persze még nem tökéletes, a hardver oldala ugyan majdnem kész, de a szoftver oldala az, amivel még lesz bőven munka. Mint rájöttem, a legtöbb esetben nem ad kielégítő eredményt. A legjobb eredményt azok a zeneszámok adják, ahol egyszerre kevés hangszer szól, vagy jóval hangúlyosabb a dob, mint a zene többi része, - ez tipikusan a zeneszámok eleje - de aztán amint beindul, már szinte csak egyenletesen világít. Erre egy ötlet az, hogy programoznék bele beat-detektálást, és azt külön kihangsúlyozná. Ezt aztán tovább lehet vinni, hogy legyen olyan üzemmód is, ahol a LED-ek ritmusra ötletszerűen váltogatják a színüket.

Ha az eszköz kész lesz és beválik, akkor lehet csinálok belőle egy komolyabb összeszerelést is, csupa SMD alkatrészekkel, és profi csináltatott nyomtatott áramköri lappal.

Kész állapotba került hát a LED-sor projekt. Elkészült a dobozba szerelt változata és a szoftver finomhangolása is.

A szoftver része kapott egy új üzemmódot, ahol a LED-sor ritmusra váltogatja véletlenszerűen a színét. Ehhez kellett egy beat-detektáló algoritmus, ami a dob és egyéb kitűnő hangosabb részeket keresi a zenében, majd ezek észlelésekor vált a színek között. Ezt azt is jelenti, hogy a fényerő így mindig egységes és akkor is világít valamilyen színnel, ha épp nem szól alatta zene.

Az SMD-s változatot egyelőre hanyagolom, olyat majd akkor csinálok, ha már ott tartok, hogy egy ehhez szükséges áramkör tervező szoftvert kitanultam.

A tervezésnél külön kiemelt szempont volt, hogy az egész minél egyszerűbb és univerzálisabb legyen. Ahogyan a lenti galériában látszik, a dobozon van összesen 3 csatlakozó, ebből egy a táp, egy a kimenet a ledsorra és egy Jack bemenet, amelyre tetszőleges eszköz hangkimenete rácsatlakoztatható. Vonalszintre van belőve, ami egy szabványos jelszint, az összes kommersz eszköz ezt adja ki (stúdiós felszerelésnél eltérő lehet), így elég csak csatlakoztatni, és már megy is.

Most hogy ez kész, ha valakinek felkeltettem az érdeklődését egy ilyen ketyere iránt, nyugodtan keressen meg vele és készíthetek neki egyet.

LED szalag vezérlőAz előző dobozolt változatban csak próba nyák volt, és az egész inkább prototípus volt, mint sem kész termék. Ezt most rendesen nyomtatott áramkörrel csináltam meg, és kijavítottam pár hiányosságot is, ami a gyakorlati tesztelés során merült fel, szoftver és hardver területen egyaránt. 4 példány készül most belőle, és ha van igény, továbbiak jöhetnek.

A nyomtatott áramkört noha „nyomtatottnak” hívják, ezt is kézzel rajzoltam, mint a korábbiakat, de nem is ez a lényeg, hanem hogy ezáltal hogy az alkatrészek közti összeköttetések vezetékek helyett a panel felületén futnak, így bírja a rázkódást, aminek főként szállítás közben lehet kitéve.

Ami újdonság az előző verzióhoz képest:

  • A programok végigléptetésére most már két gomb van, mindkettő saját indikátor LED-el. Erre azért volt szükség, hogy az aktív (zenére reagáló) és passzív programokat külön tudjam választani, és könnyebben lehessen váltogatni közöttük.
  • A két gomb megléte egyúttal lehetővé tette többféle gombnyomás kombinációkkal további funkciók megvalósítását, úgy mint egyes programoknál a színváltás, vagy hogy az eszköznek be lehessen állítani, hogy bekapcsoláskor melyik programot indítsa elsőnek.
  • A gombok és a potenciométer elhelyezését most jobban átgondoltam, a kényelmes és esztétikus elhelyezés volt a fő szempont.

Aki kíváncsi mélyebben az eszköz képességeire, itt letöltheti a hozzá készített útmutatót.

A teljes funkcionalitást szemléltető videó megtekinthető lent a képgalériában!