Sisukord:

Lihtne suveaeg: 7 sammu
Lihtne suveaeg: 7 sammu

Video: Lihtne suveaeg: 7 sammu

Video: Lihtne suveaeg: 7 sammu
Video: Xiaomi Redmi 7 плохо заряжается 2024, November
Anonim
Lihtne suveaeg
Lihtne suveaeg
Lihtne suveaeg
Lihtne suveaeg

Lugu

See projekt algas minu jaoks väljakutsena programmeerimist (kodeerimist) õppida Arduino Uno ja ühe 1602A LCD -ekraaniga. Tahtsin kõigepealt Arduino oma täpsuse piiridesse viia. See on projekt, mille eesmärk on ehitada kell ilma RTC moodulita (reaalajas kella moodul) ja mitte kasutada viivitust (); käske, sest delay (); käsk peatab koodi määratud ajaks. Kui töötasin läbi põhilise ajaarvestuskoodi, arvasin, et see võib olla pisut igapäevane, nii et otsustasin lisada suveaja funktsiooni uudse lisandina, et asju vürtsitada ja võib -olla tekitada selle projekti vastu veidi rohkem huvi. Algul oli idee puhtalt uudne, kuid mida rohkem ma sellega töötan ja laual töötavat füüsilist kella vaatan, seda praktilisemaks see idee muutub. Kui lisada RTC moodul ja kohandada koodi, oleks see kell veel aastaid täpne ning sellise kella ostvate tootjate ja avalikkuse jaoks väga madalate kuludega.

Suveaeg või (DST) on eksisteerinud juba üle 100 aasta (googeldage, sellel on üsna värvikas ajalugu). Ma ei taha selle poliitikasse laskuda, kuid see on toore ja valus harjutus, mis ei tee lihtsate inimeste (teie ja minu) elu lihtsaks. Enamasti naudime lisatundi päevavalgust, kuid selle rakendamise viis on jõhker. On aeg põhjalikuks uuendamiseks väga vana idee jaoks.

Selle näitega on lihtne elada koos digitaalajastuga ning tehnoloogia arengut saab hõlpsasti rakendada igat tüüpi digitaalkelladele, kuid see võib aidata analoogkella hävimist. Selle asemel, et 1 tund hüpata tavalisest ajast DST -ajale, siis DST -aeg standardajale, põhineb see kell järkjärgulisel kulgemisel talvisest pööripäevast suvisesse pööripäeva, seejärel aasta -aastalt järgmisel talvisel pööripäeval tagasi standardajale. See üleminek toimub 180 päeva iga kuue kuu jooksul, kohandamine on 20 sekundit päevas 360 päeva jooksul, ülejäänud 5 või 6 päeva lisatakse pööripäevade pikkusele. Minu näide suurendab 180 -päevase tsükli jooksul 1 minutit üks kord iga kolme päeva tagant. Iga aasta 21. juunil või umbes 21. juunil on kell täistund 1 tund ees ja umbes 21. detsembril igal aastal on kell libisenud tagasi tavaajale. Liigaastat saab hõlpsasti arvestada, eriti kui kasutatakse RTC -d. Ka lõunapoolkera on selle kellaga hõlpsasti kohandatav, slaidi skaala on põhjapoolkerast lihtsalt 6 kuud faasist väljas.

Maailmas on kolm kohta, kus DST oleks päris palju, kui mitte ekvatoriaalne piirkond ja poolused. Ma arvan, et ekvaatoril päevavalgus eriti ei muutu, ma ei tea, kas mõnes troopilises piirkonnas kasutatakse isegi DST -d ja postid on jälle teine lugu, lihtsalt "MILLINE" kell on poolustel ikkagi?

Samm: teave kella kohta

Kella kohta
Kella kohta
Kella kohta
Kella kohta

Minu loodud kell põhineb standardsel kellaajal, mis ei erine kunagi rahvusvaheliselt aktsepteeritud maailmakellast, see kuvatakse 1602 vedelkristallekraani esimesel real. Teine rida on sama aja skaala, kuid see näitab minutite nihkumist ühest pööripäevast teise. Talvise pööripäeva ja suve pööripäeva vaheline aeg suureneb iga kolme päeva tagant ühe minuti võrra kuni maksimaalselt kuuekümne minutini. Alates suvisest pööripäevast kuni talvise pööripäevani väheneb nihe iga kolme päeva tagant ühe minuti võrra, kuni standardaeg ja keskaeg on samad.

Selle näite puhul olen kasutanud sõjaväelist aega (24 -tunnine kell) ja standardaega (12 -tunnine kell) AM ja PM, et aidata neid inimesi, kes ei tunne 24 -tunnilist ajavahemikku, samuti andis see mulle ruumi kuvada päevanumber, mis on DST seatud alates. Koodi saab muuta, et kuvada 12 -tunnine kell. Aja lisamiseks olen lisanud kolm vajutust, mis on ühendatud digitaalsete kontaktidega 2, 3 ja 4. Need nupud suurendavad ainult sekundeid, minuteid või tunde. Nupud on valikulised, kell töötab endiselt hästi, kui te ei ühenda nuppe juhtmega ega vaja koodi muuta. Ma soovitaksin vähemalt sekundite reguleerimiseks kasutada nuppu ja kui täielikku täpsust pole võimalik saavutada, hoidke kella aeglasel küljel, nupp liigutab aega 1 sekund sekundis.

Kui käivitate kella Arduino IDE -st, kulub visandi laadimiseks ja käivitamiseks umbes 5,5 kuni 6 sekundit. Kui olete eskiisi Arduinole laadinud, ühendage see seinaküünla või toiteallikaga umbes 2,5 kuni 3 sekundit käivitamiseks ja käivitamiseks.

Kui kella lõpuks tööks valmis saate, on vaja käsitsi seadistada.

See kell ei kasuta RTC moodulit ega annust "delay ();" käske.

Kui teile meeldib RTC -d kasutada koos Arduinoga, saab seda kontseptsiooni siiski kasutada. RTC annab teile kogu vajaliku teabe EDSC aja lisamiseks. RTC -mooduliga võib kood olla hoopis teistsugune, ma pole seda uurinud. Kui te seda teete, olete üsna omaette, kuid see on suurepärane viis oma aju treenimiseks.

Samm: mida vajate

Mida vajate
Mida vajate
Mida vajate
Mida vajate
Mida vajate
Mida vajate

OSTUNIMEKIRI

1 Arduino Uno või Mega2569 (I2C tihvtid on A4 ja A5 UNO -l ning 20 ja 21 2560 Mega)

Peaaegu iga teine Arduino peaks töötama, kasutatavad tihvtid võivad olla erinevad. Sel juhul töötab mis tahes kontrollerplaat. Peate selle plaadi või tootja koodi ümber kirjutama.

1 1602 LCD -ekraan (teie valitud värv)

Kasutan LCD -ekraaniga I2C seljakotti, minu arvates on seadistamine lihtsam ja kiirem.

Jumper juhtmed

VALIKU TARVIKUD

1 keskmise suurusega leivalaud

1-3 hetkelist kontaktnuppu

1-3 10 K oomi takistid

See juhend on pikk, nii et ma ei lähe kinnitusse ega kappi, mida olen kella kuvamiseks kasutanud. Kui teile see projekt meeldib ja soovite teha püsiva versiooni, kujundage see oma maitse järgi. See disain sobib mulle ideaalselt, sest mul oli kõik vajalik rämpspostis olemas ja mulle meeldib selle välimus.

MÄRKUSED:

Et vältida elektrikatkestuste kukkumist, toidab mu viimast kella päikesepaneel, mis on mul väljas. Päikesepaneel hoiab 12 -voldist akut, millel on regulaator, et vältida ülelaadimist. See aku on Arduinoga ühendatud USB -pordi kõrval asuva toitepistiku kaudu. Aku tühjenemise vähendamiseks hoian USB -porti võrguga ühendatud. Mõlemat toiteallikat saab korraga kasutada ilma Arduino kahjustamata. 12 -voldist akut saab laadida kuni 14,5 volti, mis on Arduino jaoks liiga kõrge, nii et ma kasutan buck -muundurit, et vähendada aku toitepinget vahemikku 9 kuni 12 volti. 12 -voldine aku, mida ma laen, hoian 3 või 4 päeva, kui päevad on pilves. Minu kasutatav regulaator katkestab Arduino toite, kui aku pinge langeb 11 voltini. Aku, mis mul on, pärineb ärihoonete turvavalgustussüsteemist, see on umbes veerand väikese autoaku suurusest. Kui kavatsete kasutada autoakut, hoidke seda kindlasti hästi ventileeritavas kohas (väljas), autoakud eraldavad laadimisel ja tühjenemisel vesinikku ja gaasi, see on plahvatusohtlik kombinatsioon.

HOIATUS

HOIDKE AKU HÄSTI

VENTILEERITAV ALA, VÄLJAS

Samm: juhtmestik

Juhtmestik
Juhtmestik

Olen esitanud selle projekti kõigi ühenduste skeemi, kui kasutate leivaplaati, vajate keskmise suurusega tahvlit, lülitid vajavad ruumi laiali, nii et vooluahel ei tekita segadust.

1602 vedelkristallekraanil on lihtsuse huvides I2C seljakott, kui kasutate SPI -ühendusi, peate selle kasutamise otsima ja koodi visandi alguses muutma. Ma pole kunagi kasutanud SPI -ühendusi, nii et tihvtid 2, 3 ja 4 ei pruugi kolme nupu jaoks saadaval olla.

Kolme nupu abil saab kellaaega reguleerida. Nad edendavad ainult aega (AHEAD). Lõplikes seadistustes hoidke kella koodis aeglasel poolel (umbes 1–2 sekundit päevas või mitu päeva), nii saate vajadusel aega edasi lükata. Iga nupp liigutab aega ühe sammu võrra sekundis, alumine nupp 2 sekundit sekundis, keskmine nupp 1 minut sekundis ja ülemine nupp 1 tund sekundis. Üsna kõrge täpsus peaks olema teostatav, nii et te ei pea seda sageli kohandama.

Kui reguleerite sekundeid, minuteid või tunde (näiteks kui minutid on edasi liikunud 58, 59, 00), liigub tund järgmisele tunnile.

Need kolm nuppu on kella viimase hetke lisand, nad töötavad hästi, kuid võib olla ka parem viis. Pidage meeles, et kui te selle koodi osaga jama teete, kuvatakse "delay ();" käsku kasutada ei saa. Kasutasin seda meetodit, sest ma ei pea muretsema lülitite põrkumise ja aja edenemise imelike hüppamiste pärast.

Samm: mida ekraan näitab

Mida ekraan näitab
Mida ekraan näitab

Olen pannud 1602 LCD -ekraanile palju teavet, mis vajab selgitust:

Rida 1 Või rida null '0' koodiga rääkides näitab standardset aega. Vasakul on "STD", see tähistab "STandarD" aega.

Järgmine esimesel real keskel on teie kohalik standardaeg. Ärge alustage suveajaga, kella näitab seda teisel real.

See ajaskaala on 12 -tunnine kell, nii et paremal on hommik või pärastlõuna, mis näitab hommikut või õhtut.

Rida 2 Või rida üks „1” koodiga rääkides näitab suveaega, mis varieerub vastavalt aastapäevale. Vasakul olev „DST” tähendab suveaega

Teise rea keskel on teie kohalik sõjaväeline aeg, mis on 24 -tunnine kell. Te kuulete seda näiteks "oh kuussada tundi".

Paremal küljel on aastapäev, millele on viidatud talvisel pööripäeval, põhjapoolkeral on 21. detsember (ligikaudu) nullpäev 0 ja lõunapoolkeral 21. juuni (ligikaudu) nullpäev 0.

Olen kella esmakordsel seadistamisel viitamiseks esitanud kaks.pdf -faili. Valige fail, mis viitab teie poolkerale.

Kolm nuppu paremal suurendavad sekundeid, minuteid ja tunde alt üles.

5. samm: visandage seadistamine

Sketši seadistamine
Sketši seadistamine

Esmaseks käivitamiseks tuleb seadistada mitu koodirida. Mõnda neist ridadest tuleb muuta iga kord, kui kella lahti ühendate ja visandis olevate muutujate väärtusi muudate. Kui käivitate IDE kella, kulub laadimiseks ja käivitamiseks umbes 6 sekundit. Kui laadite eskiisi IDE -st, siis ühendage kell lahti ja taaskäivitage see seintüügast või toiteallikast, visand käivitub umbes 2,5 sekundi pärast.

Rida 11 LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);

See rida on suunatud LCD -ekraanile ja määrab I2C seljakoti õige aadressi. 0x27 on mis tahes ostetud seljakoti aadress. Kui lülitate kella sisse, kuid andmeid ei kuvata, kuid see süttib, on aadress teie LCD -ekraanil tõenäoliselt erinev. Panen alla lingi, et kirjeldada, kuidas muuta oma LCD -seljakoti aadressi või leida aadress.

Ridad 24 int minutSt = 35;

Seadistage tavalise kella algusminut, seadistage see tavaliselt 5 minutit enne kella käivitamist, et seadistamiseks aega anda.

Ridad 25 int tundSt = 18;

Seadke tunniks STD -aeg (24 -tunnine kell) algab. Kell 18 oleks 18. tund.

Rida 26 int DSTpäevadel = 339;

Laadige alla ja vaadake pdf -faili "Lihtne DST kellaaja skaala" (põhja- või lõunapoolkera), kus elate, otsige kuupäev ja sisestage sellele reale päev #. (Vasak veerg). Näide (24. november on päev #339 põhjapoolkeral ja päev #156 lõunapoolkeral)

Rida 27 int DSTyear = 2019;

Sisestage praegune aasta.

Rida 92 if ((masterTime - previousMasterTimeSt> = 1000) && (microTime - previousMicroTimeSt> = 500)) {

"PreviousMasterTimeSt" tuleb võrrelda millisekundite arvuga, nii et see "1000" võib olla vaja muuta 999 -ks, sõltuvalt Arduino plaadi sisemisest kellast, ja seejärel kohandage eelmiseMicroTime kella peenhäälestamiseks. Sisemine kell, kuigi 16MH, on laual erinev.

"PreviousMicroTimeSt" peenhäälestab sisemist kella, et aidata arvestada täpset 1 sekundit. Kui kell on liiga kiire, suurendage mikrosekundeid ja kui kell on liiga aeglane, vähendage mikrosekundeid ja vajadusel langetage millisekundid 999 -ni ja seejärel alustage mikrosekundeid umbes 999, 990 juures või suurendage kella kiirust.

Igal Arduino plaadil on veidi erinev kiirus, seetõttu muutuvad need numbrid iga kasutatava tahvliga. Osa koodist pole veel testitud, see on rida 248 iga liigaasta arvestamiseks. Lähinädalatel katsetan seda ja vajadusel postitan kõik muudatused.

6. samm: viimased märkmed

Lõppmärkmed
Lõppmärkmed

Seda projekti on lihtne üles ehitada, kuid koodi idee ja vajalikud kohandused võivad olla ülesanne, võtke aega ja mõelge sellele järele, kell ei lõpe enne 2037. aasta lõppu. e -kirju küsimustele, kuna ma olen kindel, et neid tuleb, ma ei ole kirjandusgeenius, nii et mõned minu kirjeldused võivad olla pisut porised.

Kaasas on kaks.pdf -faili, laadige alla oma poolkera fail, kus elate, see fail annab teile kella täpseks käivitamiseks vajalikku teavet.

Eskiis manipuleeritud teabega oleks lihtne kuvada 2004A vedelkristallekraanil mitte ainult standardaeg ja DST aeg, vaid ka päev ja kuupäev. Kui teile meeldivad selle projektiga seotud väljakutsed, proovige ühendada 2004A LCD -ekraan, seejärel lisage lisateabe kuvamiseks kood või piisava huvi korral teen selle projekti veel ühe variatsiooni, sealhulgas selle lisateabe.

Olen püüdnud sellesse projekti kõikehõlmavalt kaasata, kuid leidsin kõnealusest maailmast kolm valdkonda. Põhjapoolus, lõunapoolus ja ekvaator.

Kas DST on põhja- või lõunapoolustel vajalik või isegi võimalik?

Mis kell on põhja- või lõunapoolusel?

Millises suunas reisiksite, et lahkuda põhjapoolusest või lõunapoolusest?

Millises suunas lõunapooluselt reisiksite Austraalia, Põhja -Ameerika, Euroopa või Aasia poole?

Mis ajavööndis jõuluvana elab?

Kas ta vajab DST -d?

Mis kell on põhjapoolusel?

Millises suunas sõidab jõuluvana kõigi oma kingituste kohaletoimetamiseks?

Millisel laiuskraadil on DST efektiivne?

Nüüd ekvaator;

Kas seda kella saab ekvaatoril kasutada?

Kas nad kasutaksid põhja- või lõunapoolkera skaalat?

Mis kuupäevad on talvisel pööripäeval ja suvel?

Millisel laiuskraadil on DST efektiivne?

Kas pingviinid vajavad DST -d?

Kas sa arvad, et ma olen nende küsimuste peale mõeldes imelik?

Head ehitust kõigile!

pähkel

Samm 7: muud lingid

See on link I2C seljakoti aadressi määramiseks või muutmiseks:

www.instructables.com/id/1602-2004-LCD-Adapter-Addressing/

PiotrS on kirjutanud suurepärase juhendi I2C riistvara -aadresside jaoks

playground.arduino.cc/Main/I2cScanner

See link skannib teie I2C -seadme ja tagastab aadressi

Soovitan: