Avtor: mag. Vladimir Mitrović
V kakšnem tradicionalno opremljenem stanovanju ali hiši še vedno lahko vidite uro s kukavico, ki služi kot okras in spomin na minule čase.
Ura deluje na uteži, njeno merjenje časa pa uravnava nihalo, kukavica pa pokuka iz skrivališča in zapoje, da naznani začetek vsake nove ure (slika 1).
Obstajajo tudi posodobljene replike takšne ure, ki imajo podobno funkcionalnost in prečiščen dizajn, bolj primeren za današnji čas. To nas je navdihnilo, da smo za delavnico STEM (Zadar, 2025) zasnovali tehnološko napredno različico ure s kukavico, ki bo polna detajlov, ki spominjajo na retro ure, a bo opremljena s tehnologijo, ki si je v času njenega nastanka ni bilo mogoče niti zamisliti (slika 2).
Poglejmo na sliki 3 njene osnovne dele!
Ta vsebina je samo za naročnike
Kot kazalec ure služi obroč s premerom 170 mm in 60 svetlečimi diodami: svetloba se postopoma prenaša z ene svetleče diode na drugo, tako kot se premika kazalec minut na »pravi« uri. V 60 minutah opravi cel krog, tako da vsaka LED označuje eno od 60 minut.


Za majhen kazalec za ure ni na voljo ustreznega kroga z 12 svetlečimi diodami, zato smo morali tiskano vezje izdelati sami. Na njem je v krogu razporejenih 12 dvobarvnih svetlečih diod s premerom 5 mm, od katerih vsaka predstavlja eno celo uro (glej sliko 3, v sredini). Načelo delovanja je enako: svetloba se postopoma prenaša z ene diode na sosednjo, tako kot se majhen kazalec premika na »pravi« uri. Del z uro vključuje tudi dve manjši LED-ici, ki prikazujeta uro dneva; leva se prižge med 0. in 12. uro, desna pa med 12. in 24. uro.
Štirimestni 7-segmentni displej, nameščen na isti tiskani ploščici, ima več funkcij: odšteva sekunde, prikazuje datum in se uporablja za interaktivno nastavitev ure.
Uro krmita Arduino Nano in modul za ura (na sliki desno).
Znotraj velikega obroča sta še dva pomembna sestavna dela: servomotor in »angel eye«, tipka z vgrajeno obročasto LED-ico. To tipko uporabljamo za vklop in signalizacijo alarmnega stanja.
Shema krmilnega modula
Shema krmilnega modula ure je prikazana na sliki 4. Sestavljena je iz Arduino Nano V3, napetostnega regulatorja z integriranim vezjem LM2940, tipk S1–S3 (TIME, DATE in ALARM) ter potenciometra R3. Tipke in potenciometer se uporabljajo za nastavitev ure. Ostane le še snop žic, ki povezujejo vtičnice plošče Arduino Nano s priključki, na katere so pritrjene različne komponente ure. Način, kako so te komponente povezane, je simbolično prikazan na isti sliki.



Prstan z 60 LED-icami se priključi na priključek LED_60. Uporabili smo prstan s »pametnimi« LED-icami WS2812B; na takem prstanu je mogoče barvo in svetlost vsake posamezne LED-ice nastaviti individualno prek ene same krmilne linije (DI).
Priključek ALARM je povezan s tipko za vklop in izklop alarma ter z opozorilno lučko alarma »angel eye«.
Fotoupor je priključen na priključek FOTO_R. Njegova upornost se spreminja glede na jakost okoljske svetlobe, kar vpliva na napetost na priključku. Program bo z merjenjem te napetosti posredno lahko določil upornost fotoupora in svetlobi okolja prilagodil svetilnost LED-ic.
Aktivni piskač se priključi na priključek BUZ, pri čemer je treba paziti na polariteto priključkov. Izbrali smo ta tip aktivnega piskača, ker aktivni piskači na splošno oddajajo precej močnejši zvok kot pasivni, mi pa potrebujemo resnično nadležen in dovolj glasen alarm. Piskač pa ima še eno vlogo: vsako uro bo simuliral kukavičje čivkanje, zato ta zvok ne sme biti niti nadležen niti preveč glasen. S pametno programsko rešitvijo nam je uspelo aktivirati aktivni piskač tako, da lahko oddaja dva popolnoma različna zvočna signala, čeprav programsko ne moremo vplivati niti na frekvenco niti na glasnost zvoka, ki ga oddaja.
Na konektor ZS-042 se veže istoimenski modul z integriranim vezjem DS3231. Gre za zelo natančno uro, ki komunicira z mikrokontrolerjem prek I2C protokola (vodila SCL in SDA). Pri tej komunikaciji mikrokontroler pridobi trenutni čas in datum iz ure ali vanjo zapiše nove vrednosti. Program še vedno uporablja priključek SQW, na katerem ura ustvarja pravokotne impulze s frekvenco 1 Hz. Da bi zagotovili, da ura v čipu DS3231 deluje tudi ob izklopu napajanja, je na zadnji strani modula ZS-042 nameščeno držalo za litijevo baterijo – to bo zagotovilo, da bodo osnovne funkcije ure ostale aktivne tudi brez »glavnega« napajanja.


Priključka SERVO1 in SERVO2 sta namenjena priključitvi dveh servomotorjev. V končni izvedbi ure je bil za odpiranje vrat in premikanje ptice uporabljen le en servomotor, zato je drugi priključek ostal neuporabljen.
Ploščica s tiskanim vezjem z 12 LED-icami za »uro« in štirimestnim zaslonom se priključi na priključek LED_12. To ploščico bomo podrobneje obravnavali v naslednjem poglavju.
Priključka X1 in X2 na shemi na sliki 4 nista uporabljena. Prvotno sta bila namenjena za krmiljenje delovanja glasovnih modulov. Na tak modul bi bilo mogoče posneti glasovno sporočilo in ga nato po potrebi predvajati. Ker pa za jasno reprodukcijo potrebujemo zvočnik s premerom nekaj centimetrov, smo to idejo opustili – v zasnovi ure preprosto ni bilo prostora za zvočnik.
V spodnjem desnem kotu sheme je prikazan napetostni regulator, ki uporablja integrirano vezje LM2940. Ura se napaja prek omrežnega adapterja z izhodno napetostjo 6,5–9 V in izhodnim tokom 500 mA ali več, napetostni regulator pa zagotavlja stabilno delovno napetost 5 V za porabnike z večjo močjo: servomotorje, zvočni signal in glasovne module (če bi jih uporabljali). Na shemi je še en »nevidni« napetostni regulator; nahaja se na sami plošči Arduino Nano in zagotavlja stabilno napajalno napetost za mikrokontroler, vse LED-ice in druge manjše porabnike. Tako so napajanja za večje porabnike, ki bi lahko vplivala na delovanje mikrokontrolerja in druge »občutljive« elektronike, popolnoma ločena.
Poudarimo še eno pomembno dejstvo: Arduino Nano ima 22 vhodno-izhodnih pinov, ki so neposredno povezani z 22 pini mikrokontrolerja ATmega328P. Ne glede na to, ali jih uporabljamo kot digitalne vhode ali izhode, so ti pini enaki. Vendar pa imajo pini mikrokontrolerja, na katere so priključeni, tudi različne specifične zmožnosti, ki se razlikujejo od pina do pina. Pri načrtovanju vezja na sliki 4 smo posebno pozornost posvetili priključitvi posameznih komponent na določene pine, da bi izkoristili njihove posebne zmogljivosti. Tako so na primer krmilni priključki obeh servomotorjev (SIG) priključeni na priključke D9 in D10 plošče Arduino Nano, na kateri lahko mikrokontroler z namenskim vezjem elegantno generira ustrezne krmilne impulze. Enako velja za LED priključek za alarmno tipko, ki je priključena na D5: prek njega lahko mikrokontroler enostavno nadzira svetlost LED-a. Fotoupor in drsnik potenciometra R3 pa sta priključena na vrata A6 in A7, prek katerih mikrokontroler lahko odčitava analogne napetosti.


Shema modula ure
Kot je bilo omenjeno v uvodu, smo za prikaz časa zasnovali tiskano vezje, ki vsebuje 12 dvobarvnih in dve enobarvni LED-ici ter štirimestni 7-segmentni displej. Shema vezja na tej plošči je prikazana na sliki 5.
V skladu s prvotnim konceptom naj bi se dopoldanske in popoldanske ure razlikovale po barvi, zato je bila shema zasnovana za dvobarvne LED-ice. Naročili smo večjo količino rdeče-modrih LED-ic in izkazalo se je, da je vijolični odtenek, ki so ga ustvarile, ko sta bila osvetljena oba segmenta, zelo privlačen… Zato smo se odločili, da bodo diode neprekinjeno oddajale vijolično svetlobo, za razlikovanje med dopoldanskimi in popoldanskimi urami pa smo dodali še dve enobarvni diodi, D17 (AM) in D16 (PM).
Za vklapljanje in izklapljanje teh LED-ic je potrebnih skupaj 26 izhodov mikrokontrolerja – več, kot jih ima na voljo. Problem je še večji, ker morajo LED-ice spreminjati svojo svetilnost – število potrebnih krmilnih pinov se je tako povečalo na 76. Morali smo najti primerno integrirano vezje za prikaz na LED-icah! Odločili smo se za TM1637, ki je bil prvotno zasnovan za krmiljenje šestih 7-segmentnih zaslonov s skupno anodo. Na njegove izhode lahko priključimo do 48 LED-ic, od katerih je mogoče vsako krmiliti posamično. Ko mikrokontroler določi, katere LED-ice naj se prižgejo, in nastavi njihovo svetlost, TM1637 prevzame vse delo v zvezi z zaslonom!
Za nastavitev jakosti svetlobe LED-ic smo uporabili dva mehanizma: prvi je vgrajen v sam čip TM1637, kjer lahko izberemo eno od desetih različnih stopenj jakosti, drugega pa smo dodali zunanje z vezjem uporov R5–R7, R8–R10, R13–R15 in R18–R20. Če TM1637 usmerja tok skozi upor R5, bo LED-ica svetila trikrat močneje kot takrat, ko usmerja tok skozi R6, in sicer zaradi razmerja med njunima upornostma.
Upoštevajte, da kombinacije vrednosti uporov v vseh vezjih niso enake! Poleg tega, da oddajajo lepo vijolično svetlobo, imajo LED-ice, ki smo jih kupili, eno pomanjkljivost: intenzivnosti modre in rdeče svetlobe se pri enakih krmilnih tokovih močno razlikujejo! Zato ima niz uporov za modro barvo 10-krat večje vrednosti (1k, 3,3k, 10k) kot tisti za rdečo barvo (100, 330, 1k).
Intenzivnost AM/PM diod določamo na podoben način.
Ura ima tudi štirimestni 7-segmentni zaslon, ki ga prav tako krmili TM1637. Tako ura vsebuje skupaj tri čipe TM1637, ki mikrokontrolerju v celoti odvzamejo nalogo krmiljenja velikega števila LED-ic. Za komunikacijo z njimi so potrebne le štiri krmilne linije: skupna CLK in tri DTA linije, po ena za vsak TM1637!
Sestavljanje ure
Na sliki 6 je prikazana zasnova tiskanega vezja ure. V resnici gre za tri tiskana vezja, ki so vstavljena eno v drugo. Razlog za takšno zasnovo je naslednji: dimenzije največje plošče so 120×120 mm, kar je določeno s premerom obroča, na katerem so razporejene dvobarvne LED-ice »ure«. V središču te plošče mora biti velika odprtina, skozi katero bo ptica prišla, ko bo izstopila iz ure. Zato je vsa elektronika nameščena na robu plošče, a kljub tej omejitvi je plošča praktično prazna. Ker strošek izdelave tiskanega vezja ni odvisen od števila komponent, ampak od njegovih dimenzij, smo osrednji del plošče, ki ga je bilo treba odstraniti, uporabili za namestitev krmilne enote ure. Izkoristili smo tudi majhen pravokotni del, ki ga je treba izrezati, saj bo v njem nameščen štirimestni zaslon: nanj bomo prispajkali piskač!
Preden začnemo spajkati, moramo na nekaterih modulih opraviti nekaj manjših sprememb. Najpomembnejša med njimi zadeva modul ZS-042 (glej sliko 7 zgoraj): vezje za polnjenje baterije je treba odstraniti s plošče, saj bomo kot rezervni vir napajanja uporabili standardno litijevo baterijo CR2032. To vezje je označeno z rdečim križcem; ga bomo onemogočili tako, da odspajkamo upor ali diodo (oba elementa sta označena s puščicami).
Druge spremembe veljajo enako za vse tri module: ZS-042, štirimestni zaslon in Arduino Nano. Vsi ti moduli so opremljeni z rdečimi LED indikatorji, ki se prižgejo takoj, ko se vklopi napajanje. Naša ura je odprtega tipa in v temi je svetila v vse smeri, kar je odvračalo pozornost od LED-ic zaslona. Da bi izklopili indikatorske LED-ice, moramo odspajkati diodo ali njen upor (označena s puščicami).
Kako postaviti komponente na krmilno in na ploščico ure, prikazujejo fotografije na slikah 8 in 9.
V fazi načrtovanja projekta smo preučili več možnih izvedb ure. Želeli smo, da bi bila ura tako funkcionalna kot tudi neobičajna. V končni rešitvi so tiskana vezja z elektroniko nameščena v odprtem ohišju iz vezanega lesa, povezana pa so z deli, natisnjenimi na 3D-tiskalniku. Udeleženci so ptico oblikovali po lastnem okusu. Ure, izdelane na delavnicah STEM, so bile ponosno razstavljene na zaključni slovesnosti (slika 10).

Program
Delovanje ure nadzira mikrokontroler ATmega328P, nameščen na plošči Arduino Nano. Program mikrokontrolerja je napisan v programskem jeziku Bascom-AVR in je bil prilagojen tako, da ga lahko tukaj podrobneje analiziramo. Opisali bomo le njegove osnovne dejavnosti, ki se ponavljajo:
Program bo več desetkrat na sekundo prebral stanje izhoda SQW na uri realnega časa (integrirano vezje DS3231) in čakal na prihod nove sekunde.
Ko se to zgodi, bo program z ure prebral trenutni čas in datum, ju pripravil za prikaz ter ju prikazal na LED-icah in na displeju.
Če je minila cela ura, bo program sprožil servomotor, da bo ptico potisnil iz gnezda, vklopil zvočni signal, ki bo zapiskal tolikokrat, kolikor je predpisano, nato pa bo servomotorju ukazal, naj ptico vrne v gnezdo.
Če se trenutni čas ujema z uro, ko naj bi se alarm sprožil, in je alarm vklopljen, se bo sprožil zvočni alarmni signal.
Poleg tega program redno preverja tipke DATUM, TIME in ALARM (prikazane na sliki 8 spodaj), tako da ob pritisku na katerega koli od njih sproži postopke za nastavitev datuma, časa in časa budilke. Nastavitev se izvede z vrtenjem osi potenciometra, izbrana vrednost pa se prikaže na 7-segmentnem in obročnem displeju. V istem ritmu program preveri tudi tipko za vklop/izklop alarma (ta tipka ima vgrajeno obročasto LED-ico, ki prikazuje, ali je alarm vklopljen ali izklopljen) ter upornost fotoupora, da lahko prilagodi svetlost zaslona in vseh LED-ic glede na osvetljenost prostora.
Navodilo za uporabo ure
Normalni način dela
Ura prikazuje čas z osvetlitvijo ustreznih svetlečih diod na majhnem in velikem obroču. Majhen obroč je sestavljen iz 12 svetlečih diod za prikaz ur ter dveh svetlečih diod za prikaz dnevnega časa (0–12 ali 12–24). Veliki obroč je sestavljen iz 60 svetlečih diod za prikaz minut. Štirimestni 7-segmentni zaslon izmenično prikazuje sekunde in datum.
V dnevnem načinu (od 8.00 do 22.00) vsako uro zapoje ptica in se oglasi ura. V nočnem načinu (od 22.00 do 7.00) ptica ne zapoje.
Če je alarm vklopljen, bo ob nastavljenem času zazvonil. Alarm lahko zamaknete ali ga popolnoma izklopite.
Nastavljanje ure
Za nastavitev ure uporabljamo nadzorno ploščo s tremi tipkami in potenciometrom:
Nastavitev datuma se aktivira s pritiskom na gumb DATE, ki ga je treba držati več kot eno sekundo. Prvi dve številki na 7-segmentnem displeju prikazujeta dan v mesecu, ki ga lahko spremenite z vrtenjem osi potenciometra. Izbiro datuma potrdite s kratkim pritiskom na tipko DATE, nato se na zadnjih dveh številkah 7-segmentnega zaslona prikaže mesec. Mesec spremenimo z vrtenjem osi potenciometra, izbiro pa potrdimo s kratkim pritiskom na tipko DATUM. Leto se zdaj prikaže na 7-segmentnem displeju: z vrtenjem osi potenciometra ga lahko spremenimo v območju 2025–2099. Naslednji pritisk na tipko DATUM shrani vnesene podatke in vrne uro v normalno delovanje.
Nastavitev časa se aktivira s pritiskom na tipko TIME, ki jo je treba držati pritisnjeno več kot eno sekundo. Prvi dve številki na 7-segmentnem displeju in majhen obroč prikazujeta ure, medtem ko velik obroč ostane ugasnjen. Ure spreminjamo od 0 do 23 z vrtenjem osi potenciometra, izbiro pa potrdimo s kratkim pritiskom na tipko TIME. Minute se bodo zdaj prikazale na zadnjih dveh mestih 7-segmentnega zaslona, pri čemer se bo prižgala ustrezna LED-ica na velikem obroču. Minute se nastavljajo od 0 do 59 z vrtenjem osi potenciometra. Naslednji pritisk na tipko TIME shrani vnesene podatke in vrne uro v normalni način. Hkrati se število sekund začne šteti od 0.
Za vklop nastavitve alarma pritisnite in držite tipko ALARM več kot eno sekundo. Prvi dve številki na 7-segmentnem displeju in majhen obroč prikazujeta ure, medtem ko velik obroč ostane ugasnjen. Ure spreminjamo v območju od 0 do 23 z vrtenjem osi potenciometra, izbiro pa potrdimo s kratkim pritiskom na tipko ALARM. Minute se bodo zdaj prikazale na zadnjih dveh mestih 7-segmentnega displeja, pri čemer se bo prižgala ustrezna LED-ica na velikem obroču. Minute se nastavljajo od 0 do 59 z vrtenjem osi potenciometra. Naslednji pritisk na tipko ALARM shrani vnesene podatke in vrne uro v normalni način. Hkrati se prižge indikator alarma, ki signalizira, da se bo alarm sprožil ob nastavljenem času.
Nastavitev jakosti svetlobe: v ročnem načinu z vrtenjem osi potenciometra, izberete eno od štirih stopenj jakosti svetilnosti LED-ic. V avtomatskem načinu jakost svetilnosti LED-ic nadzira fotoupor glede na jakost okoljske svetlobe. Avtomatski način se izbere s kratkim stikom med pinoma A2 in GND na konektorju X2.
Vklop in izklop alarma
Alarm se nastavlja s tipko z obročasto LED-ico (»angel eye«), nameščeno na sprednji plošči ure. Alarm se vklopi in izklopi s pritiskom in držanjem te tipke. Ko je alarm vklopljen, se obročasta LED-ica prižge, na sedem segmentnem displeju pa se za kratek čas prikaže čas alarma. Opomba: Čas alarma je shranjen v trajnem pomnilniku mikrokontrolerja. Ob prvem zagonu programa ali v primeru poškodbe vsebine pomnilnika bo program ob vklopu alarma samodejno sprožil postopek nastavitve časa budilke.
Če je alarm vklopljen, se bo oglasil, ko se bo dejanski čas prvič ujemal z nastavljenim časom alarma. Izklopimo ga lahko s podaljšanim pritiskom na tipko ali pa ga preložimo s kratkim pritiskom tipke. Med preložitvijo utripa obročasta LED-ica, alarm pa bo ponovno zazvonil po 5 minutah. Preložitev je mogoče ponoviti večkrat, vendar le, dokler je alarm aktiven. Če v 5 minutah ne pritisnemo tipke za vklop/izklop alarma, bo ta po tem času prenehal piskati, vendar bo ostal vklopljena in bo ponovno zazvonil, ko se bo dejanski čas ujemal z nastavljenim časom alarma.
Vzdrževanje ure
Ura deluje v celoti le, če je napajana prek omrežnega adapterja z napetostjo 6,5–9 V. Brez te napetosti se LED-ice in 7-segmentni displej izklopijo, budilka in kukavica ne delujeta, vendar ostanejo vse bistvene nastavitve shranjene, ura pa še naprej vzdržuje pravi čas in datum s pomočjo baterije CR2032 na zadnji strani krmilne plošče. Baterijo je treba redno preverjati in zamenjati, ko njena napetost pade pod 2,5 V (pričakovana življenjska doba baterije je več let).
Demo način
V »demo« načinu program prikazuje preprosto animacijo na LED-icah. Vklopimo ga tako, da kratko sklenemo priključka A1 in GND na konektorju X1.
Opombe: Uro je zasnoval in njeno mehansko konstrukcijo izdelal Zvonimir Lapov-Padovan iz podjetja HZTK, medtem ko so shema vezja, načrt tiskanega vezja in program za mikrokontroler delo avtorja članka. Program za uro, imenovan clock_final.bas, je mogoče brezplačno dobiti v uredništvu revije Svet elektronike!
