Turinys:
- Prekės
- 1 žingsnis: idėja
- 2 žingsnis: kai kurios dvejetainių laikrodžių teorijos
- 3 žingsnis: pradėkite dirbti
- 4 žingsnis: komponentų pasirinkimas
- 5 žingsnis: schema
- 6 žingsnis: PCB išdėstymas
- 7 žingsnis: 3D dizainas
- 8 žingsnis: Kodas
- 9 žingsnis: programavimas
- 10 žingsnis: litavimas
- 11 žingsnis: Surinkimas
- 12 žingsnis: Išvados ir patobulinimai
Video: Galutinis dvejetainis laikrodis: 12 žingsnių (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Neseniai susipažinau su dvejetainių laikrodžių sąvoka ir pradėjau atlikti tyrimus, kad galėčiau sukurti tokį sau. Tačiau man nepavyko rasti esamo dizaino, kuris būtų funkcionalus ir stilingas tuo pačiu metu. Taigi, aš nusprendžiau sukurti savo dizainą visiškai nuo nulio!
Prekės
Visi šio projekto failai:
„Arduino“kodo bibliotekas galite atsisiųsti iš „GitHub“čia:
M41T62 RTC biblioteka
„FastLED“biblioteka
„LowPower“biblioteka
1 žingsnis: idėja
Neseniai radau tokį vaizdo įrašą:
„Pasidaryk pats“dvejetainis riešo laikrodis
Aukščiau esančiame vaizdo įraše rodomas pagrindinis naminis dvejetainis laikrodis. Aš net neįsivaizdavau, kad toks dalykas egzistuoja, tačiau atlikęs tolesnius dvejetainių laikrodžių temos tyrimus greitai supratau, kad ten yra daugybė skirtingų dizainų! Norėjau sukurti tokį sau, bet nepavyko rasti man patinkančio dizaino. Mano rasti dvejetainiai laikrodžiai neturėjo daug funkcijų ir neatrodė ypač gerai. Taigi, aš nusprendžiau sukurti savo visiškai nuo nulio!
Pirmasis žingsnis buvo nustatyti mano dizaino kriterijus. Štai ką aš sugalvojau:
- Dvejetainė RGB sąsaja
- Laiko rodymas (su labai tiksliu laiko skaičiavimu)
- Datos rodymas
- Chronometro funkcionalumas
- Signalizacijos funkcionalumas
- Baterijos veikimo laikas yra mažiausiai 2 savaitės
- USB įkrovimas
- Programinė įranga lengvai pritaikoma vartotojui
- Švarus ir paprastas dizainas
Šie kriterijai tapo viso projekto pagrindu. Kitas žingsnis buvo išsiaiškinti, kaip noriu, kad laikrodis veiktų!
2 žingsnis: kai kurios dvejetainių laikrodžių teorijos
Planas buvo paprastas. Dvejetainis laikrodis veiktų kaip įprastas laikrodis, išskyrus tai, kad sąsaja būtų dvejetainė, konkrečiai, BCD (dvejetainis koduotas dešimtainis). BCD yra dvejetainio kodavimo tipas, kuriame kiekvienas dešimtainis skaitmuo yra nurodytas fiksuotu bitų skaičiumi. Man reikia 4 bitų, kad galėčiau pavaizduoti skaitmenį nuo 0 iki 9. Ir už standartą
hh: mm
laiko formatu, man reikia 4 tų skaitmenų. Tai reiškia, kad man iš viso reikia 16 bitų, kuriuos parodys 16 šviesos diodų.
Kai pripratote prie laiko, skaityti BCD yra gana paprasta. Laikrodžio apačioje esanti eilutė reiškia mažiausiai reikšmingą bitą (1), o viršuje - reikšmingiausią bitą (8). Kiekvienas stulpelis žymi skaitmenį
hh: mm
laiko formatas. Jei šviesos diodas dega, jūs skaičiuojate šią vertę. Jei šviesos diodas yra išjungtas, į jį nekreipiate dėmesio.
Norėdami perskaityti pirmąjį skaitmenį, tiesiog susumuokite visas įjungtas šviesos diodų atitinkamas reikšmes pirmame (kairėje) stulpelyje. Atlikite tą patį su kitais skaitmenimis iš kairės į dešinę. Dabar jūs perskaitėte laiką BCD!
Šis principas bus tas pats ir visoms kitoms laikrodžio funkcijoms. RGB šviesos diodų naudojimas padės atskirti skirtingas funkcijas ir režimus naudojant skirtingas spalvas. Spalvas pasirenka vartotojas ir jas galima lengvai pritaikyti prie bet kokios norimos spalvų paletės. Tai leidžia vartotojui nesunkiai naršyti po funkcijas.
Kitas žingsnis buvo sukurti blokinę schemą!
3 žingsnis: pradėkite dirbti
Kaip ir bet kuris tipiškas elektronikos projektas, blokinė schema yra esminė pradinio projektavimo etapo dalis. Naudodamasis kriterijais, man pavyko sudaryti aukščiau pateiktą blokinę schemą. Kiekvienas diagramos blokas reiškia funkciją grandinėje, o rodyklės rodo funkcijų ryšį. Visa blokinė schema gerai parodo, kaip grandinė veiks.
Kitas žingsnis buvo pradėti priimti sprendimus dėl atskirų komponentų kiekvienam blokui schemoje!
4 žingsnis: komponentų pasirinkimas
Paaiškėjo, kad šioje grandinėje yra gana daug komponentų. Žemiau aš išrinkau keletą svarbiausių ir paaiškinu, kodėl juos pasirinkau.
Šviesos diodai
Dvejetainės sąsajos pasirinkimas buvo gana paprastas. Žinojau, kad noriu ekranui naudoti šviesos diodus, ir supratau, kad man reikia 16 iš jų (4 × 4 tinklelyje), kad būtų parodyta kuo daugiau informacijos. Tyrinėdamas tobulą šviesos diodą, APA102 vis atsirado. Tai labai mažas (2 mm x 2 mm) adresuojamas šviesos diodas su plačia spalvų gama ir yra gana nebrangus. Nors niekada anksčiau su jais nedirbau, atrodė, kad jie puikiai tinka šiam projektui, todėl nusprendžiau juos panaudoti.
Mikrovaldiklis
Mikrovaldiklio pasirinkimas taip pat buvo gana paprastas. Turėjau daug patirties naudojant „Atmega328P-AU“savarankiškose programose ir labai gerai susipažinau su jo funkcijomis. Tai tas pats mikrovaldiklis, kuris naudojamas „Arduino Nano“plokštėse. Aš žinau, kad tikriausiai yra pigesnis mikrovaldiklis, kurį galėčiau naudoti, tačiau žinant, kad „Atmega328“visiškai palaikys visas „Arduino“bibliotekas, tai buvo svarbus veiksnys renkantis šį projektą.
RTC (realiojo laiko laikrodis)
Pagrindinis RTC reikalavimas buvo tikslumas. Žinojau, kad laikrodis neturės jokio interneto ryšio ir todėl negalės iš naujo kalibruoti per interneto ryšį, vartotojas turės jį iš naujo kalibruoti rankiniu būdu. Todėl norėjau, kad laikas būtų kuo tikslesnis. „M41T62 RTC“turi vieną didžiausių tikslumų, kuriuos galėjau rasti (± 2 ppm, o tai atitinka ± 5 sekundes per mėnesį). Sujungus didelį tikslumą su I2C suderinamumu ir mažomis srovės sąnaudomis, šis RTC buvo geras pasirinkimas šiam projektui.
DC-DC stiprinimo keitiklis
DC-DC Boost Converter IC pasirinkimas buvo atliktas tiesiog žiūrint į grandinę ir išsiaiškinant, kokios įtampos ir srovės reikia. Vykdant grandinę esant žemai įtampai, sumažėtų srovės suvartojimas, tačiau negalėjau nukristi žemiau 4,5 V (minimali 16MHz laikrodžio mikrovaldiklio įtampa) ir negalėjau viršyti 4,5V (maksimali RTC įtampa). Tai reiškė, kad turėjau paleisti grandinę tiksliai 4,5 V, kad galėčiau valdyti komponentus pagal jų rekomenduojamas specifikacijas. Apskaičiavau, kad maksimali grandinės srovė neviršys 250 mA. Taigi, aš pradėjau ieškoti padidinimo keitiklio, kuris galėtų atitikti reikalavimus, ir greitai užklydau į TPS61220. TPS61220 reikėjo minimalių išorinių komponentų, jis buvo gana nebrangus ir galėjo patenkinti srovės ir įtampos reikalavimus.
Baterija
Pagrindinis akumuliatoriaus reikalavimas buvo jo dydis. Baterija turėjo būti pakankamai maža, kad ji tilptų į laikrodžio korpusą ir neatrodytų didelė. Aš supratau, kad baterija negali viršyti 20 mm × 35 mm × 10 mm. Atsižvelgiant į šiuos dydžio apribojimus ir dabartinį 250 mA reikalavimą, mano pasirinkimas buvo tik LiPo baterijos. „Hobbyking“radau „Turnigy nano-tech 300mAh 1S“bateriją, kurią nusprendžiau naudoti.
Įkrovimo IC
Įkrovimo valdikliui nebuvo jokių specialių reikalavimų, išskyrus tai, kad jis turėjo būti suderinamas su 1S LiPo baterija. Radau MCP73831T, kuris yra visiškai integruotas įkrovimo valdiklis, skirtas vieno langelio įkrovimo programoms. Viena iš jo savybių yra galimybė reguliuoti įkrovimo srovę per išorinį rezistorių, kuris, mano manymu, buvo naudingas šioje programoje.
LiPo apsauga
Norėjau įtraukti įtampos ir srovės stebėjimą, kad apsaugotumėte akumuliatorių nuo bet kokių pavojingų perkrovos ir iškrovos sąlygų. Tokių funkcijų teikiančių IC buvo ribotas kiekis, o vienas iš pigesnių variantų buvo BQ29700 IC. Tam reikėjo minimalaus išorinių komponentų kiekio ir visos būtinos vieno elemento LiPo baterijos apsaugos.
Dabar, kai buvo pasirinkti komponentai, atėjo laikas sukurti schemą!
5 žingsnis: schema
Naudodamas „Altium Designer“, galėjau sudaryti aukščiau pateiktą schemą, naudodamas kiekvieno komponento duomenų lapo rekomendacijas. Schema yra padalinta į skirtingus blokus, kad būtų lengviau skaityti. Taip pat pridėjau keletą pastabų su svarbia informacija, jei kas nors norėtų atkurti šį dizainą.
Kitas žingsnis buvo schemos išdėstymas ant PCB!
6 žingsnis: PCB išdėstymas
PCB išdėstymas pasirodė sudėtingiausia šio projekto dalis. Aš nusprendžiau naudoti 2 sluoksnių PCB, kad PCB gamybos išlaidos būtų kuo mažesnės. Aš nusprendžiau naudoti standartinį 36 mm laikrodžio dydį, nes atrodė, kad jis gana gerai tinka šviesos diodams. Pridėjau keletą 1 mm varžtų skylių, kad pritvirtintų PCB laikrodžio korpuse. Tikslas buvo išlaikyti švarų ir išvaizdų dizainą, dedant visus komponentus (žinoma, išskyrus šviesos diodus) ant apatinio sluoksnio. Taip pat norėjau naudoti absoliučiai minimalų butelių skaičių, kad viršutiniame sluoksnyje nebūtų matomų vijų. Tai reiškė, kad turėjau nukreipti visus pėdsakus vienu sluoksniu, tuo pačiu įsitikindamas, kad „triukšmingos“grandinės dalys būtų atokiau nuo jautrių signalo pėdsakų. Aš taip pat pasirūpinau, kad visi pėdsakai būtų kuo trumpesni, uždėkite aplinkkelio kondensatorius prie apkrovos, naudodama storesnius pėdsakus didelės galios komponentams ir kitaip laikykitės visų įprastų PCB projektavimo praktikų. Maršrutas užtruko gana daug laiko, bet manau, kad tai pavyko labai gerai.
Kitas žingsnis buvo sukurti laikrodžio korpuso 3D modelį!
7 žingsnis: 3D dizainas
Laikrodžio korpusas buvo sukurtas pagal labai įprastą, klasikinį laikrodžio dizainą, naudojant „Fusion 360“. Laikrodžio dirželiui naudoju standartinį 18 mm atstumą, kad laikrodis būtų suderinamas su daugybe kitų dirželių. PCB iškirptė buvo suprojektuota 0, 4 mm didesnė už pačią PCB, kad būtų atsižvelgta į bet kokius gamybos netikslumus. Įtraukiau keletą varžtų, skirtų PCB montavimui, ir nedidelį kraštą, ant kurio galima uždėti PCB. Įsitikinau, kad įkišiu PCB į milimetrus nuo viršaus, kad aštrūs šviesos diodų kraštai neužstrigtų ant drabužių. Korpuso aukštį lėmė tik akumuliatoriaus storis. Likusi gaubto dalis buvo sukurta taip, kad tiesiog gerai atrodytų su užapvalintais kraštais ir poliruotais kampais. Aš turėjau išlaikyti dizainą patogų 3D spausdinimui, kad galėčiau jį 3D spausdinti namuose be jokios pagalbinės medžiagos.
Dabar, kai aparatūra buvo baigta, atėjo laikas pradėti dirbti su programine įranga!
8 žingsnis: Kodas
Aš pradėjau kodą įtraukdamas visas reikalingas bibliotekas. Tai apima biblioteką, skirtą bendrauti su RTC ir valdyti šviesos diodus. Po to kiekvienam režimui sukūriau atskiras funkcijas. Kai vartotojas perjungia režimus paspausdamas mygtuką, programa įjungia tą režimą atitinkančią funkciją. Jei vartotojas nepaspaudžia mygtuko per nurodytą laiką, laikrodis užmiega.
Miego režimą rodo visi šviesos diodai, kurie išnyksta, kol jie visiškai išsijungia. Naudojant miego režimą, žymiai pailgėja akumuliatoriaus veikimo laikas ir šviesos diodai išjungiami, kai jie nenaudojami. Vartotojas gali pažadinti laikrodį paspausdamas viršutinį mygtuką. Pabudęs laikrodis patikrins akumuliatoriaus įkrovos lygį ir įsitikins, kad jo nereikia įkrauti. Jei reikia įkrauti, šviesos diodai keletą kartų mirksi raudonai prieš rodydami laiką. Jei akumuliatorius yra žemiau kritinio lygio, jis visiškai neįsijungs.
Likusį laiką programuojant buvo siekiama, kad kiti režimai būtų kuo intuityvesni. Supratau, kad tas pats mygtukas, atsakingas už tą patį funkcionalumą visais režimais, būtų pats intuityviausias. Po tam tikrų bandymų aš sugalvojau šią konfigūraciją:
- Viršutinio mygtuko paspaudimas: pabusti / pereiti tarp režimų „Rodymo laikas“, „Rodyti datą“, „Chronometras“ir „Žadintuvas“.
- Viršutinio mygtuko laikymas: įveskite režimą „Nustatyti laiką“, „Nustatyti datą“, „Pradėti chronometrą“arba „Nustatyti žadintuvą“.
- Apatinio mygtuko paspaudimas: padidinkite ryškumą.
- Apatinio mygtuko laikymas: įjunkite režimą „Pasirinkite spalvą“.
Apatinis mygtukas visada yra atsakingas už ryškumą ir spalvų reguliavimą, nepriklausomai nuo to, kokiu režimu esate. Kai vartotojas įjungia režimą „Pasirinkti spalvą“, šviesos diodai pradeda perjungti visas galimas RGB spalvas. Vartotojas gali pristabdyti animaciją ir pasirinkti tam tikram režimui pageidaujamą spalvą (rodymo laikas raudona, rodymo data mėlyna ir kt.). Spalvas vartotojas turi lengvai pritaikyti, kad padėtų jiems atskirti skirtingus režimus.
Dabar, kai kodas buvo baigtas, atėjo laikas jį įkelti į mikrovaldiklį!
9 žingsnis: programavimas
Buvo beveik laikas litavimui ir surinkimui, bet prieš tai turėjau užprogramuoti mikrovaldiklį. Aš vadovavausi šia pamoka
Įrašykite įkrovos tvarkyklę į ATmega328P-AU SMD
apie tai, kaip įrašyti įkrovos įkroviklį ir užprogramuoti mikrovaldiklį naudojant įprastą „Arduino Uno“kaip programuotoją.
Pirmasis žingsnis buvo „Arduino Uno“paversti IPT įkėlus „ArduinoISP“pavyzdinį kodą. Aš naudoju duonos lentą kartu su programavimo lizdu ir prijungiau schemą iš vadovėlio. Po to galėjau įrašyti įkrovos įkroviklį į mikrovaldiklį tiesiog paspausdamas „Burn Bootloader“„Arduino IDE“.
Kai mikrovaldiklis turėjo įkrovos įkroviklį, aš tiesiog pašalinau esamą mikrovaldiklį iš „Arduino Uno“ir panaudojau „Arduino Uno“plokštę kaip USB į nuoseklųjį adapterį, norėdamas įkelti kodą į programavimo lizdo mikrovaldiklį. Kai įkėlimas buvo baigtas, galėjau pradėti litavimo procesą.
Kitas žingsnis buvo surinkti visus komponentus ir lituoti juos kartu!
10 žingsnis: litavimas
Litavimo procesas buvo padalintas į dvi dalis. Pirmiausia reikia lituoti apatinį sluoksnį, o tada - viršutinį.
Laikrodžio plokštę pritvirtinau tarp poros prototipinių plokščių, naudodami juostą. Tai užtikrino, kad PCB nejudėjo litavimo metu, o tai yra labai svarbu. Tada uždėjau litavimo trafaretą ant PCB ir naudoju didelį kiekį litavimo pastos, kad padengčiau visas litavimo pagalves. Aš pradėjau naudoti ploną pincetą, kad sudėčiau visus komponentus ant atitinkamų pagalvėlių. Tada aš panaudojau šilumos pistoletą, kad suvirinčiau visus lydmetalius.
Kai apatinis sluoksnis buvo lituojamas, aš greitai jį apžiūrėjau, kad įsitikinčiau, ar litavimas buvo sėkmingas. Tada apverčiau lentą ir pakartojau litavimo procesą kitoje pusėje, šį kartą su visais šviesos diodais. Lituodami viršutinį sluoksnį, buvo labai svarbu neperkaisti plokštės, nes visi apačioje esantys komponentai gali nukristi. Laimei, visi komponentai liko vietoje ir po litavimo mygtukais, naudojant įprastą lituoklį, PCB buvo baigtas!
Dabar atėjo laikas paskutiniam surinkimui!
11 žingsnis: Surinkimas
Surinkimas buvo labai paprastas. Prijungiau bateriją prie PCB ir įdėjau bateriją bei PCB į 3D spausdinimo korpusą. Aš įsukau keturis varžtus į tvirtinimo angas kiekviename PCB kampe. Po to aš pritvirtinau laikrodžio dirželius naudodamas 18 mm spyruoklinius strypus ir laikrodis buvo baigtas!
12 žingsnis: Išvados ir patobulinimai
Laikrodis veikia kaip tikėtasi ir esu labai patenkintas tuo, kaip pasirodė. Iki šiol neturėjau jokių problemų, o baterija lieka beveik visiškai įkrauta po visos naudojimo savaitės.
Ateityje galiu pridėti kitų laikrodžio funkcijų. Kadangi USB prievadas yra prijungtas prie mikrovaldiklio, programinę -aparatinę įrangą galima bet kada atnaujinti naujomis funkcijomis. Tačiau kol kas aš ir toliau naudosiu šią laikrodžio versiją ir pažiūrėsiu, kaip ji laikysis po ilgesnio naudojimo.
Jei turite minčių, komentarų ar klausimų apie šį projektą, palikite juos žemiau. Taip pat galite juos siųsti adresu [email protected].
Pirmasis prizas laikrodžių konkurse
Rekomenduojamas:
Mikro dvejetainis laikrodis: 10 žingsnių (su nuotraukomis)
Mikro dvejetainis laikrodis: Anksčiau sukūręs „Instructable“(dvejetainį DVM), kuris naudoja ribotą rodymo sritį naudodami dvejetainį. Tai buvo tik nedidelis žingsnis, kai anksčiau buvo sukurtas pagrindinis kodo modulis dešimtainiam ir dvejetainiam konvertavimui, kad būtų sukurtas dvejetainis laikrodis, bet t
Dvejetainis stalo laikrodis: 9 žingsniai (su nuotraukomis)
Dvejetainis stalinis laikrodis: dvejetainiai laikrodžiai yra nuostabūs ir skirti tik asmeniui, žinančiam dvejetainį (skaitmeninių įrenginių kalba). Jei esate technologijų vaikinas, šis keistas laikrodis kaip tik jums. Taigi, sukurkite vieną ir laikykite savo paslaptį! Rasite daug dvejetainių c
„Arduino“dvejetainis laikrodis - 3D spausdintas: 5 žingsniai (su nuotraukomis)
„Arduino“dvejetainis laikrodis - 3D spausdintas: jau kurį laiką žiūriu į dvejetainius laikrodžius savo biuro stalui, tačiau jie yra gana brangūs ir (arba) neturi daug funkcijų. Taigi nusprendžiau padaryti vieną. Kuriant laikrodį reikia atsižvelgti į vieną dalyką, „Arduino“/ „Atmega328“
Paprastas dvejetainis laikrodis naudojant „Attiny85“: 10 žingsnių
Paprastas dvejetainis laikrodis naudojant „Attiny85“: Sveikinu! Šioje instrukcijoje parodysiu, kaip padaryti minimalistinį ir paprastą dvejetainį laikrodį naudojant „arduino uno“ir „attiny85“. Jei niekada nenaudojote savo arduino kitų mikroschemų programavimui, pamatysite, kad tai padaryti labai paprasta (Pirmą kartą bandžiau
Dvejetainis marmurinis laikrodis: 9 žingsniai (su nuotraukomis)
Dvejetainis marmurinis laikrodis: tai paprastas laikrodis, rodantis laiką (valandas/minutes) dvejetainėje formoje, naudojant po stikliniais rutuliais paslėptus šviesos diodus. Paprastam žmogui tai atrodo kaip žibintų krūva, tačiau galėsite pasakyti laiką iki tik trumpas žvilgsnis į šį laikrodį. Tai