Developer blog / Hardware

Sajnos az eredeti két lehetséges billentyű, amik között lehetett váltogatni, nem bizonyultak elegendőnek, így eljött a továbbfejlesztés ideje!

Először is a kapcsoló az oldalán már régóta zavart, nem így akartam eredetileg, csak akkor nem volt jobb ötletem. Most az aljára került egy toló kapcsoló, aminek a pöcke épp csak kilóg. Sőt, kettő is, így most már 4 féle billentyűgomb közül lehet választani, ezek pedig a Space, Pause, F11 és a Scroll Lock.

A régi kapcsoló helyén keletkező lyukra egy vaslemezt csavaroztam fel és az egész dobozt lefestettem feketére.

A Vasparittya program is kapott egy új funkciót, mint az a videón is látszik, bármelyik gomb megnyomására felvillantja a Scroll Lock led-et a billentyűzeten, ami a nagy piros gombra van közve. Persze az időtartam állítható, vagy ki is lehet kapcsolni teljesen.

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!

VoltmérőNoha ilyet lehet kapni készen is, saját kezűleg elkészíteni mégis sokkal izgalmasabb. A lényege, hogy az autó akkumulátorának a feszültségét tudja mérni, anélkül, hogy a motorháztető alatt kéne kotorászni. Ehhez csupán a szivargyújtóba kell bedugni.

Az eszközt az előző blogbejegyzésben említett 8 lábú ATtiny85 mikrovezérlő működteti. A végleges kapcsolási rajz a tervezés során majdnem a felére redukálódott, ahogy haladtam végig a mikrovezérlő dokumentációján és jöttem rá, hogy több dolgot is meglehet sokkal egyszerűbben is csinálni a beépített okosságokkal.

Az egész eszköz 3,3 voltról üzemel, ezt a stabilizált feszültséget ugyanabból a feszültségből csinálja, mint amit mér, emiatt a mérési tartomány alsó határa körülbelül 4V. A felső határ bármekkora lehetne, de a kijelzőkhöz igazítva 19,9V-ra lett beállítva, így a 3 kijelző meghajtható két darab 8 bites sorosból párhuzamossá alakító IC-vel (két teljes kijelző = 2 ∙ 7, plusz az 1-es és a pont, az összesen 16 bit).

A tápfeszültséget az ATtiny analog-digital converter bemenete méri a belső 1,1V-os referenciafeszültségéhez képest. Mivel a mérendő feszültség magasabb, mint a referencia, ezért szükséges egy feszültségosztó. A mikrovezérlő rendelkezik beépített brownout védelemmel, azaz reset-be állítja saját magát, ha a tápfeszültség egy bizonyos szint alá esik. Erre felhasználja ezt az 1,1V referenciafeszültséget is, ugyanis ez bőven a működéshez szükséges szint alatt van. Épp emiatt a mérés során is amíg még megy, a referenciafeszültség mindig pontos lesz, és ezáltal a mérés is. Brownout reset-et a mikrovezérlő szoftveresen is megvalósít a kijelzőket meghajtó IC-k számára, így azok bekapcsoláskor, túl alacsony feszültségből való ébredéskor, vagy a ATtiny saját reset állapota alatt sem mutatnak helytelen információt.

Hogy kiküszöböljem a kijelzett érték esetleges oszcillálását, a kijelző az utolsó 128 mérés eredményét átlagolja ki és erre még Schmitt trigger-t használ. Ez utóbbi ugyan plusz-mínusz fél tizedessel meghamisítja a mérést, de jelen esetben nincs akkora jelentősége, és fontosabb, hogy vezetés közben az ember szeme sarkában ne villogjon.

Még év elején elkezdtem gőzerővel dolgozni több hardveres projekten is, itt az ideje, hogy elkezdjek írni róluk. Az egyik ilyen, egy felprogramozó készítése az ATtiny85 mikrovezérlőkhöz, amit egy későbbi projekthez használtam fel. Egyúttal megismerkedhettem a házi, kézzel rajzolt „nyomtatott” áramkörgyártás fortélyaival.

Ahogy a képen is látszik, az eszköz lelke egy ATmega328P mikrovezérlő, amire egy Arduino ISP szoftver van feltöltve. A tiny felprogramozását ez vezényli le, ami a 8 lábú foglalatba kerül. A LED-ek jelzik az átvitel folyamatát.

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.

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.

A szakirányos tárgyak kapcsán felmerült bennem az igény, hogy ez ugyan szép és jó, hogy szabályzó rendszereket tervezünk és szimulálunk, de jó lenne látni működés közben is. Itt jött az ötlet, hogy akkor legyen valami, ami egyszerű és látványos is: egy lift! A működési elv az a valódi liftekkel ellentétben most egy kicsit más lesz, a kimenő jel értelemszerűen a motor jele, viszont a bemenő jel egy magasság lesz, a visszacsatolás pedig szintén egy magasság, mégpedig a tényleges fizikai helyzete a liftkabinnak. A liftet az egyszerűség kedvéért LEGO-ból építem meg, így az összerakással hamar készen leszek.

A szabályzó rendszert egy Arduino Uno mikrovezérlő alkotja, ez fogja figyelni az analog bemenetén a visszacsatolást, illetve PWM kimenetén vezérli a motort. A felhasználói bemenetet kapcsolók végzik, mindegyik reprezentálva egy-egy emeletet, a program ezek megnyomásakor az adott emelethez tartozó magasságértékre fogja a rendszer bemenetét állítani.

A liftkabin helyzetének mérését egy ultrahangos szenzorral oldom meg, ami a liftaknában figyel felfelé (ez egy 300 forintos eszköz). Az előzetes tesztek ígéretesnek bizonyultak, a szenzor miliméterre pontosan tud mérni és 200 centiméter után is megfelelően kicsi a szórása.

Egy 22cm-es mérés. A kis fehér dobozt akárhova húztam a vonalzón, mindig pontosan kiírta a kijelzőn a távolságot.

A következő feladat a szenzor liftaknába szerelése. Gondoltam arra hogy esetlen LEGO kockákat fúrok meg, de túl kevés a hely a lyukak körül. Aztán jött az ötlet, hogy építek saját átkötő elemet, ami csatlakozik a gombokra anélkül, hogy bármi kárt tennék bennük. Az eredmény még annál is jobb lett mint amire számítottam.

LEGO átkötő elemek felszerelve az ultrahangos szenzorra.

Jelenleg most itt tartok vele, a liftnek az alsó része meg van csinálva, de még át lesz szabva. Ha kész a LEGO építmény és a motor már viszi a kabint, utána veheti kezdetét a PID szabályzó tervezése.

A lift, amennyi most megvan belőle, és a liftaknába beszerelve az ultrahangos szenzor.

Megérkezett hát az Arduino panelem, és elkezdtem rá gőzerővel mindenfélét építgetni. Van pár konkrét terv is vele, nem csak ilyen „dejó, működik” típusúak, úgyhogy esélyes hogy veszek még egyet.

A jelen bemutató tárgya: hogyan hajtsunk meg villanymotort egy Arduino Uno-nak a PWM kimenetéről. Közte még van egy IC ami a 12V-os tápot és az Arduino védelmét intézi. A motort gyurmaragasztóval rögzítettem az asztalra, hogy ne másszon el, amitől viszont elég komoly hangja lett. :D