Gavęs porą lentų Arduino, ir įvairius radijo komponentus, norėdami susipažinti su mikrovaldikliais, autorius nusprendė padaryti ką nors įdomaus ir tuo pat metu naudingo. Turėdami daug šviesos diodų, kilo idėja sukurti dvejetainį laikrodį.
Iš elektronikos pusės dvejetainis laikrodis nėra ypač sudėtingas, tačiau autorius apsunkino užduotį ir nusprendė neišsaugoti mygtukų ir šviesos diodų. Iš pradžių buvo siekiama naudoti 22 šviesos diodus, 6 mygtukus ir vieną garsiakalbį. Taip pat kilo idėja surinkti laikrodį „Arduino Mega“ dėl didesnio kaiščių skaičiaus, tačiau pamainų registrai 74HC595 pasirodė esąs išsigelbėjimas.
Medžiagos:
- Arduino Uno
- 2 pilno dydžio duonos lentos
- raudoni šviesos diodai 7 vnt
- Žali šviesos diodai 7 vnt
- Mėlyni šviesos diodai 6 vnt
- 2 geltoni ir balti šviesos diodai
- Rezistoriai 220 omų 25 vnt
- „Piezo“ garsinis signalas 1 vnt
- 6 mygtukai taktiški mygtukai
- „Shift“ išvesties registrai 74HC595 DIP-16 pakuotėje 3 vnt
- jungiamieji laidai 90 vnt
- Realiojo laiko laikrodžio modulis, pagrįstas DS1307 RTC mikroschema
Kaip viskas veiks.
Yra apie 10 dvejetainių laikrodžių tipų. Vieni rodo laiką dvejetainiu dešimtainiu (BCD) formatu, kiti - dvejetainiais skaičiais. Kadangi autorius ypač nemėgsta „BCD“ laikrodžio, jis nusprendė padaryti gryną dvejetainį. Kai kuriems žmonėms sunkiau skaityti, tačiau skirtumas nėra didelis, nes nesunku išversti skaičius iš dvejetainių į dešimtainius. Laikrodžio kūrėjui taip pat būtina sąlyga buvo sekundžių nurodymas laikrodyje.
Be to, laikrodis turi 6 mygtukus:
Nustatyti - atsakingas už laikrodžio / žadintuvo nustatymo režimą ir parametro išsaugojimą nustatymo režime.
Režimas - atsakingas už laikrodžio, žadintuvo ir laikmačio režimų perjungimą.
Aukštyn - laikrodžio / žadintuvo / laikmačio nustatyme padidina parametrą vienu. Žadintuvas ir laikmatis yra atsakingi už pasirinkto režimo įjungimą ir išjungimą. Kai suveikia signalas, jis išjungs aliarmo / laikmačio signalą.
Žemyn - laikrodžio / žadintuvo / laikmačio nustatyme jis sumažės parametru vienetu. Laikmatis jį pristabdys neatkurdamas atgalinės atskaitos. Kai žadintuvas užges, jis 5 minutes perduoda signalą.
12/12 - pakeisti laiko formatą.
Dim - atsakingas už šviesos diodų įjungimą ir išjungimą (kai šviesos diodai neveikia, likę mygtukai nustoja veikti).
LED padėties schema:
Komponentų sujungimas
Autorius sujungs visus šviesos diodus nuosekliai ir su rezistoriumi. Rezistorius yra lituojamas prie vieno iš LED lempučių, nesvarbu, kuris iš jų. Šviesos diodai bus jungiami per pamainų registrus, ši mikroschema turi 16 kontaktų.Šis kaiščių skaičius leidžia naudoti daug smeigtukų, kurių Arduino yra tik 3.
„Shift register“ „Pinout 74HC595“:
Q0-Q7 yra registro, prie kurio bus prijungti šviesos diodai, išvados.
Vcc - jam bus pritaikytas 5 V maitinimo kaištis.
GND - įžeminimas, sujungtas su GND Arduino mieste.
OE - kaištis yra atsakingas už apverstą kaiščių įjungimą, tačiau jis nebus naudojamas, jis tiesiog trumpinamas iki žemės.
MR yra apverstas registro kliringas, jo nereikia kontroliuoti, todėl jis bus prijungtas prie 5 V maitinimo šaltinio.
ST_CP - PIN kodas yra atsakingas už registro būsenos atnaujinimą. Įrašinėjant būseną, reikia ją naudoti LOW, po įrašymo - HIGH, kad būtų atnaujinta išėjimų būsena. Jis turi būti prijungtas prie Arduino smeigtuko. Šį kaištį galite sujungti lygiagrečiai trimis registrais.
SH_CP - smeigtukas, atsakingas už poslinkį 1 bitų registre. Jis turi būti prijungtas prie Arduino smeigtuko. Jie taip pat sujungti mikro grandinėmis lygiagrečiai.
DS - duomenys siunčiami į šį kaištį, jis yra prijungtas prie „Arduino“ smeigtuko.
Q7 '- šis kaištis naudojamas kaskadiniam ryšiui su kitais 74HC595 registrais.
Elektros schema:
Pjezo garsinis signalas bus sujungtas su trečiuoju „Arduino“ kaiščiu nuosekliai su rezistoriumi. Prieš įtraukdamas tviterį į grandinę, autorius apžiūrėjo, kurie kaiščiai palaiko PWM, nes tai jai yra privaloma. „Arduino Uno“ PWM palaiko 3, 5, 6, 9, 10 ir 11 kaiščius.
Mygtukai jungiami naudojant „Arduino“ įmontuotus rezistorius, kurių viena mygtukų pusė sujungta su žeme, kita - prie „Arduino“ kaiščių.
Taigi, galutinis dizainas atrodo:
Kurkite ant „Breadboard“
Įsigijęs papildomų detalių, autorius pagal schemas pradėjo montuoti projektą ant duonos lentos. Išvaizda buvo tikimasi, nes „Breadboard“ riboja laisvę dedant komponentus, o išsikišę laidai nesukūrė estetinio malonumo. Bet bandelė galų gale yra skirta tik lentos modeliams, bet ne gataviems prietaisams.
Programos kodas.
Išmokęs programuoti, autorius nusprendė rašyti kodą savarankiškai, nenaudodamas kitų žmonių tobulinimų. Pirmasis žingsnis buvo parašyti paprogramę, kuri yra atsakinga už visų diodų mirksėjimą ir įjungus pjezo signalą. Ši funkcija padeda patikrinti grandinės vientisumą, panašų į tą, kuris įdiegtas daugelyje įrenginių.
Eskizas išėjo gana didelis, tada galite apsvarstyti jo pagrindines savybes.
LED darbas.
Kadangi šviesos diodai pasiekiami per pamainų registrą, pirmiausia reikėjo įdiegti daugiau šviesos diodų rutinų. Kad būtų lengviau valdyti diodus, buvo įdiegta keletas papildomų funkcijų. Įdiegti įvairūs diodų animacijos efektai. Kai laikrodis nenustatytas, už valandas ir minutes atsakingi diodai pradės mirksėti (nes įprastas laikrodis mirksi, kai nenustatyta). Už sekundes atsakingi šviesos diodai taip pat turi savo animaciją, diodas gali veikti kairėn ir dešinėn žadintuvo režimu arba laikrodžio nustatymo režimu.
Pagrindinė kilpa.
Programa sukonfigūruota veikti taip: laikrodis rodo informaciją, atsižvelgiant į esamą būseną, ir keičia savo būseną, atsižvelgiant į mygtukų ir įvykių naudojimą. Viskas atrodo kaip nemaža dalis lizdų. Diodų būsena atnaujinama kiekvieną kartą patikrinus laikmačių ir mygtukų būklę, paskambinus jų prižiūrėtojui.
Be to, autorius labai stengėsi tinkamai valdyti įvesties mygtukus ir laikmačius. Eskizo šaltinio kodą galima atsisiųsti pagal straipsnį.
Paleiskite išdėstymą
Įjungus projektą, iš pirmo žvilgsnio, įrenginys veikė tinkamai ir stabiliai. Bet autorius rado trūkumą, laikrodis atsiliko viena sekunde per valandą, ilgą laiką tai būtų didelė klaida.
Ištyrus šią problemą, buvo nustatyta, kad originalus „Arduino Uno“ naudoja keraminį rezonatorių, be to, jis neturi tikslumo matuojant ilgą laiką. Labiausiai racionalus sprendimas buvo nusipirkti realaus laiko laikrodį, be to, dėl šio modulio laikas, rodomas laikrodyje, sugaištų ne taip greitai. Autorius įsigijo „Grove RTC“ modulį iš „Seeed Studio“. Tai yra baigta lenta su laikrodžio mikroschema. Autorius prijungė SDA ir SCL modulio kaiščius prie Arduino ant A4 ir A5, GND kaiščių prie žemės. Kadangi 5 V galią užima laikrodžio lenta, modulio prijungti niekur nebuvo. Autorius nusprendė maitinti modulį iš vieno iš skaitmeninių kaiščių, kurie bus nuolat maitinami.Taip pat autoriui reikėjo modifikuoti šaltinio kodą ir įtraukti realiojo laiko laikrodžių biblioteką.
Laikrodžių surinkimas
Atlikus ilgą kodo darbą, laikas suteikti prietaisui visišką vaizdą ir perkelti jį iš duonos lentelės į spausdintinę plokštę. Pirmiausia reikėjo pasidaryti lentos laidus. Tam buvo naudojamas frizingas, nes autorius jau turėjo idėją apie laikrodžio išvaizdą ir sukūrė prietaiso schemą. Autorius taip pat rankiniu būdu sekė lentą, tai užtruko daug laiko.
Spausdintinių plokščių gamybos projektas:
PCB gamyba buvo užsakyta Kinijoje. „Seeed Studio“ teikia „Fusion PCB“ plokštės paslaugą. Per „Fritzing“ failas buvo eksportuotas į išplėstinį „Gerber“ formatą, su juo dirba daug plokščių gamintojų. Po dviejų savaičių autorius paštu gavo ilgai lauktą mokestį.
Liko tik lituoti jau šiek tiek dulkėtas dalis ant lentos. Gautas rezultatas po litavimo atrodė daug geriau nei išdėstymas ant „Breadboard“.
Projekto autorius ilgą laiką sunkiai dirbo ir gavo tai, ko norėjo - unikalų dvejetainį laikrodį su laikmačiu ir žadintuvą. Naudodamiesi baterijų skyriumi, laikrodį galite pastatyti bet kur. Arduino pateisino lūkesčius ir visiškai susidorojo su užduotimi.