Ébredj Arduinóval

|

Szeretnél egy sajátkezűleg készített digitális órát, mely még riasztási funkciókkal is rendelkezik? Cikkünkben bemutatjuk, miként készítheted el a mikrovezérlős vekkered prototípusát.

Bizony a vekkerek felett már eljárt az idő, és a rádiós ébresztőórák pittyegése sem szakítja meg legszebb álmaidat, az okostelefonokra hárul a reggeli ébresztésed elősegítésének hálátlan feladata. Persze a mobilok lágy dallamait akár egy érintéssel elhallgattathatod, így könnyen előfordulhat, hogy a sokadik szundi után már csak arra eszmélsz, hogy elkéstél.

Számtalan szoftveres megoldás van, melyekkel ezt kiküszöbölheted, mi most azonban hardveres alternatív ébresztési módot ismertetünk, egy Arduino bevetésével ugyanis - már minimális kódolási ismeretekkel - összeállítható egy funkcionálisan tökéletesen működő ébresztőóra. Cikkünkben bemutatjuk, milyen komponenseket érdemes beszerezned és természetesen az alapkód készítése során is segítséget nyújtunk.

Csak pár kiegészítő kell

Nem szükséges komoly vásárlásba kezdened, ha saját ébresztőórát szeretnél készíteni, az egyszerűbb megoldásokhoz az Arduino-modelled mellé egy berregő, ismertebb nevén buzzer is elegendő. Persze a látványos eredményhez azért ennél kicsit több hardverelem szükséges, a cikkünkben elkészített modelhez egy Genuino 101-es Arduino-t vetettünk be, valamint a Groove Starter Kit Shield-modulját, LCD-kijelzőjét és természetesen a hanghatások kiváltásához elengedhetetlen berregőt vetettük be. Mivel független eszközként szeretnénk használni ezt a kis összeállításunkat, érdemes lehet valamilyen külső áramforrást is beszerezni, hisz alapvetően a kódunkat úgy készítjük el, hogy a feltöltést követően azonnal elindul az óra számlálója, és mint a legtöbb digitális, offline használható óra esetén, egy áramszünet után az alapértelmezettként beállított időre áll majd vissza eszközünk.

Szerencsére a Groove Starter Kit-ben található a mikrovezérlőd táp-portjára köthető elem-csatlakoztató, tehát ha te is ezt a csomagot használod, csupán egy 9V-os elem vásárlása szükséges, de akár egy powerbank segítségével is kellő energiát adhatsz a PC-független működéshez. Az összeállítás során a buzzert a D4-es porthoz csatlakoztasd, a kijelzőt pedig a Shield valamelyik I2C feliratú portjához kapcsold és hardveresen már el is készült összeállításod.

Kódra fel

Miután már minden komponenst sikerült beszerezned, el is kezdheted a készülék felprogramozását. Szerencsére nem kell nulláról indulnod, az Intel által a Genuino 101-es modellhez készített mintakódok között ugyanis már találhatsz is olyant, mely egészen jó kiindulási alapot kínál az idő megjelenítéséhez. Az Arduino fejlesztői környezet megnyitását követően csatlakoztasd a mikrovezérlőt számítógépedhez, ellenőrizd az Eszközök menüpont alatt a készüléked láthatóságát. Ha minden stimmel navigálj a Fájl/Példák/CurieTime mappájába és itt válaszd ki a setTime fájlt, ez lesz ugyanis az a program, amiből a legtöbb kódrészletet felhasználhatod a végleges órád felépítéséhez. Első lépésként két csomagot kell hozzáadnod a fejlesztői környezetben megjelenő utasítássorozathoz, melyekkel a kijelző használatát teszed lehetővé. A #include <Wire.h> valamint a #include "rgb_lcd.h" kifejezéseket helyezd el a már megtalálható include sor alá. A következőkben hozz létre a használni kívánt eszközökhöz egy-egy változót a rgb_lcd lcd; valamint a const int buzzer = 4; sorok begépelésével. Ha mindezzel elkészültél elkezdheted módosítani a setup() belsejét, itt mindenképp szabadulj meg a soros-porttal kapcsolatos műveletektől - töröld mindkét sort, ahol a Serial-feliratot látod - , hisz közvetlenül a kijelzőre írjuk majd az információkat, így erre nem igazán lesz szükséged. Helyette az lcd.begin(16, 2); pinMode(buzzer, OUTPUT); kerüljön a setup()-ba, majd a setTime függvény belsejében állítsd be az alapértelmezett dátumot. Arra figyelj, hogy a számláló minden indítást követően innen kezdi az aktuális számlálást, szóval érdemes minden feltöltés előtt módosítani ezt az értéket is. Ezek után lépj át a loop felületére, majd töröld ki az első sort (Serial.print("Time now is: ");), hisz nem lesz rá szükséged a továbbiakban, helyére pedig gépeld be a lcd.clear(); lcd.setCursor(0,0); utasításokat.

Ezzel máris elérted, hogy minden körben a legelső kis pixelhalmazra írja majd az általad megadott karaktereket a kijelződ. Ezek után a következő pár sorban megtalálod az óra, perc és másodperc megjelenítéséhez szükséges funkciókat, itt csupán annyi a dolgod, hogy a Serial-feliratokat lcd-re cseréled. Ha ezt megtetted, a soron következő Serial.print(" "); kifejezéstől kezdődően egészen a delay(1000); előtti sorig mindent törölhetsz, ezzel pedig végeztél is a loop módosításaival. Már csupán egyetlen lépésre vagy attól, hogy egy működő óra megjelenjen a kijelződön, ehhez void print2digits(int number) függvény belsejében kell csupán átírnod a Serial kifejezéseket lcd-re és már végeztél is. A feltöltést követően a megjelenítőd máris életre kel és a setup()-ban megadott időponttól indítja is a számlálást.

Riasztás beépítése

Most már csupán annyi a teendőd, hogy a riasztási metódust is elkészíted és természetesen a loopon belül majd aktiválod is ezt a funkciót. Az aktuális programkódod végén, az utolsó kapcsos zárójel után üss egy entert, majd a void wakeUp(){} sor begépelésével hozd létre a riasztásért felelős függvényt. A kapcsos zárójelek között hozz létre két long változót, th és tm néven, majd add nekik értékül azt az időpontot, ahol szeretnéd a riasztást (a teszteléshez praktikus a kezdő időpontokhoz közeli értéket adni), th segítségével az órát, tm használatával pedig a percet adhatod meg (pl. long th =3;). Az értékek beállítását követően egy feltételben vizsgáld a th egyezését a hour() értékével, valamint a tm és a minute() együttállását (if(th==hour() && tm == minute()) ) és ha mindkét feltétel teljesül akkor a ciklusmagban elkezdheted kifejteni, hogy miként reagáljon a megjelenítő és a berregő a riasztásra beállított perc során.

Ha csupán arra vágysz, hogy éktelen ricsaj keretében vörösre váltson a megjelenítő, akkor nem kell mást tenned, mint a tone(buzzer, 1000); segítségével bekapcsolni az apró hangszórót, a lcd.setRGB(255,0,0); utasítással pedig a fehér háttérvilágítást pirosra színezni, esetleg a két soros kijelző második sorában még egy kis üzenetet is megjeleníthetsz a lcd.setCursor(0,1); lcd.print("Jo reggelt!"); sorok begépelésével. Hogy a riasztás lefutását követően minden visszaálljon a normális kerékvágásba az else ágban használd a noTone(buzzer); lcd.setRGB(255,255,255); kifejezéseket. Ezzel el is készültél az Arduino-vekkered prototípusával.

Úgy tűnik, AdBlockert használsz, amivel megakadályozod a reklámok megjelenítését. Amennyiben szeretnéd támogatni a munkánkat, kérjük add hozzá az oldalt a kivételek listájához, vagy támogass minket közvetlenül! További információért kattints!

Engedélyezi, hogy a https://www.helloworldonline.hu értesítéseket küldjön Önnek a kiemelt hírekről? Az értesítések bármikor kikapcsolhatók a böngésző beállításaiban.