Sisällysluettelo:
- Vaihe 1: Tietoja kellosta
- Vaihe 2: Mitä tarvitset
- Vaihe 3: Johdotus
- Vaihe 4: Mitä näyttö näyttää
- Vaihe 5: Luonnoksen asetukset
- Vaihe 6: Viimeiset huomautukset
- Vaihe 7: Muut linkit
Video: Helppo kesäaika: 7 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Tarina
Tämä projekti alkoi minulle haasteena oppia ohjelmointi (koodaus) Arduino Unon ja yhden 1602A LCD -näytön avulla. Halusin ensin työntää Arduinon äärimmilleen. Tämä on projekti, jolla rakennetaan kello ilman RTC -moduulia (reaaliaikainen kellomoduuli) eikä myöskään käytetä viivettä (); komentoja, koska viive (); komento pysäyttää koodin tietyn ajan. Työskennellessäni perusajanhallintakoodin kanssa ajattelin, että tämä saattaa olla hieman arkipäivää, joten päätin lisätä kesäaikaominaisuuden uutena lisäyksenä asioiden piristämiseen ja mahdollisesti lisätä hieman kiinnostusta tähän projektiin. Aluksi idea oli puhtaasti uusi, mutta mitä enemmän työskentelen sen kanssa ja katson fyysistä kelloa, jota käytän työpöydälläni, sitä käytännöllisemmäksi idea muuttuu. Lisäämällä RTC -moduuli ja säätämällä koodia tämä kello olisi tarkka tulevina vuosina ja erittäin alhaisin kustannuksin valmistajille ja yleisölle, jotka ostavat tällaisen kellon.
Kesäaika tai (DST) on ollut käytössä yli 100 vuotta (Googlen mukaan sillä on varsin värikäs historia). En halua mennä sen politiikkaan, mutta se on karkea ja tuskallinen harjoitus, joka ei tee elämästä helppoa tavallisille ihmisille (sinulle ja minulle). Suurimmaksi osaksi nautimme ylimääräisestä tunnista päivänvaloa, mutta tapa, jolla sitä käytetään, on raakaa. On aika tehdä suuri päivitys hyvin vanhaan ideaan.
Tämä esimerkki on helppo elää digitaalisen aikakauden kanssa, ja tekniikan kehitystä voidaan helposti soveltaa kaikentyyppisiin digitaalikelloihin, mutta se voi auttaa analogisen kellon tuhoutumisessa. Sen sijaan, että tunnin kello siirtyisi normaaliajasta DST -aikaan, sitten DST -aika vakioaikaan, tämä kello perustuu ajan asteittaiseen etenemiseen talvipäivänseisauksesta kesäpäivänseisaukseen ja sitten takaisin normaaliaikaan seuraavana talvipäivänseisauksena vuosi toisensa jälkeen. Tämä siirtymä tapahtuu 180 päivän ajan kuuden kuukauden jaksosta, säätö on 20 sekuntia päivässä 360 päivän ajan, ja loput 5 tai 6 päivää lisätään päiväseisausten pituuteen. Esimerkki tässä kasvaa 1 minuutti kerran kolmessa päivässä 180 päivän jakson aikana. Kunkin vuoden 21. kesäkuuta tai noin kello noin kello on 1 tunti eteenpäin ja noin 21 päivänä joulukuuta joka vuosi kello on siirtynyt takaisin normaaliaikaan. Karkausvuosi on helppo laskea, varsinkin jos käytetään RTC: tä. Eteläinen pallonpuolisko on myös helposti sovitettavissa tähän kelloon, dia -asteikko on yksinkertaisesti 6 kuukauden päässä vaiheesta pohjoisella pallonpuoliskolla.
Maailmassa on kolme paikkaa, joissa DST olisi melko paljon, ellei päiväntasaajan alue ja navat. En usko, että päivänvalo muuttuu paljon päiväntasaajalla.
Vaihe 1: Tietoja kellosta
Luomani kello perustuu normaaliaikaan, joka ei koskaan poikkea kansainvälisesti hyväksytystä maailmankellosta, tämä näkyy 1602 LCD -näytön ensimmäisellä rivillä. Toinen rivi on sama aikaskaala, mutta se näyttää minuuttien siirtymän yhdestä päiväseisauksesta seuraavaan. Talvipäivänseisauksesta kesäpäivänseisaukseen siirtymäaika kasvaa minuutin välein kolmen päivän välein enintään 60 minuuttiin. Kesäpäivänseisauksesta talvipäivänseisaukseen siirtymä vähenee minuutin välein kolmen päivän välein, kunnes normaaliaika ja kesäaika ovat samat.
Tässä esimerkissä olen käyttänyt sotilaallista aikaa (24 tunnin kello) ja normaaliaikaa (12 tunnin kello) AM ja PM auttamaan ihmisiä, jotka eivät tunne 24 tunnin aika -asteikkoa, ja se antoi huoneelleni näyttää päivämäärän, jolloin DST on alkaen Koodi voidaan muuttaa näyttämään 12 tunnin kello. Olen lisännyt kolme painonappia, jotka on liitetty digitaalisiin nastoihin 2, 3 ja 4 ajan säätämiseksi. Nämä painikkeet lisäävät vain sekunteja, minuutteja tai tunteja. Painikkeet ovat valinnaisia, kello toimii edelleen hyvin, jos et kytke painikkeita sisään eikä sinun tarvitse muuttaa koodia. Suosittelen ainakin painikkeiden käyttöä sekuntien säätämiseen, ja jos täydellistä tarkkuutta ei voida saavuttaa, pidä kello hitaalla puolella, painike siirtää aikaa 1 sekunti sekunnissa.
Jos aloitat kellon Arduino IDE: stä, luonnoksen lataaminen ja käynnistäminen kestää noin 5,5-6 sekuntia, jos olet ladannut luonnoksen Arduinoon, kytke se sitten seinään tai syylään tai se kestää noin 2,5 3 sekuntia käynnistykseen ja käyttöön.
Tarvitset manuaalisia asetuksia, kun saat vihdoin kellon käyttövalmiiksi.
Tämä kello ei käytä RTC -moduulia eikä annostele sitä "delay ();" komentoja.
Jos haluat käyttää RTC: tä Arduinon kanssa, tätä konseptia voidaan edelleen käyttää. RTC antaa sinulle kaikki tiedot, joita tarvitset EDSC -ajan lisäämiseen. Koodi voi olla aivan erilainen RTC -moduulin kanssa, en ole tutkinut sitä. Olet melko yksin, jos teet niin, mutta se on loistava tapa käyttää aivojasi.
Vaihe 2: Mitä tarvitset
OSTOSLISTA
1 Arduino Uno tai Mega2569 (I2C -nastat ovat A4 ja A5 UNO: ssa ja 20 ja 21 2560 Megassa)
Lähes minkä tahansa muun Arduinon pitäisi toimia, käytetyt nastat voivat olla erilaisia. Tässä tapauksessa mikä tahansa ohjainkortti toimii. Sinun on kirjoitettava koodi uudelleen kyseiselle kortille tai valmistajalle.
11602 LCD -näyttö (valitsemasi väri)
Käytän I2C -selkäreppua nestekidenäytön kanssa, se on helpompi ja nopeampi asentaa.
Hyppyjohdot
LISÄVARUSTEET
1 keskikokoinen leipälauta
1-3 hetkellistä kosketuspainiketta
1-3 10 K ohmin vastukset
Tämä ohje on pitkä, joten en mene kiinnikkeeseen tai kaappiin, jota olen käyttänyt kellon näyttämiseen. Jos pidät tästä projektista ja haluat tehdä pysyvän version, suunnittele se mieleiseksesi. Tämä malli on täydellinen minulle, koska minulla oli kaikki mitä tarvitsin roskapussissani ja pidän sen ulkonäöstä.
HUOMAUTUKSIA:
Välttääksesi sähkökatkojen kaatumisen, viimeinen kelloni saa virtansa aurinkopaneelista, joka minulla on ulkona. Aurinkopaneeli pitää 12 voltin akun ladattuna säätimellä, jotta se ei lataudu liikaa. Tämä akku on kytketty Arduinoon USB -portin vieressä olevan virtaliitännän kautta. Pidän USB -portin liitettynä verkkoon akun kulutuksen vähentämiseksi. Molempia virtalähteitä voidaan käyttää samanaikaisesti vahingoittamatta Arduinoa. 12 voltin akku voidaan ladata enintään 14,5 volttiin, mikä on liian korkea Arduinolle, joten käytän buck -muunninta alentaaksesi syöttöjännitteen akusta 9-12 volttiin. Lataamani 12 voltin akku kestää 3 tai 4 päivää, jos päivät ovat pilvisiä. Käyttämäni säädin katkaisee Arduinon virran, jos akun jännite laskee 11 volttiin. Akku on peräisin liiketilojen turvavalojärjestelmästä, joka on noin neljännes pienen auton akun kokoisesta. Jos aiot käyttää auton akkua, muista säilyttää se hyvin tuuletetussa tilassa (ulkona), sillä auton akut luovuttavat vetyä ja happikaasua latautuessaan ja purkautuessaan, tämä on räjähtävä yhdistelmä.
VAROITUS
SÄILYTÄ AKKU HYVIN
TUULETETTU ALUE, ULKOPUOLELLA
Vaihe 3: Johdotus
Olen toimittanut kaavion kaikista tämän projektin yhteyksistä, jos käytät leipälevyä, tarvitset keskikokoisen levyn, kytkimet tarvitsevat tilaa levittää, jotta piiri ei ole hämmentävä.
1602 -nestekidenäytössä on yksinkertaisuuden vuoksi I2C -takapakkaus. Jos käytät SPI -yhteyksiä, sinun on etsittävä sen käyttö ja muutettava koodia luonnoksen alussa. En ole koskaan käyttänyt SPI -liitäntöjä, joten nastat 2, 3 ja 4 eivät ehkä ole käytettävissä kolmelle painikkeelle.
Kolmen painikkeen avulla säädetään kellon aikaa. Ne vain vievät aikaa eteenpäin (AHEAD). Lopullisissa säädöissä pidä kello koodissa hitaalla puolella (noin 1-2 sekuntia päivässä tai useita päiviä), jolloin voit tarvittaessa siirtää aikaa eteenpäin. Jokainen painike siirtää aikaa yhden askeleen sekunnissa, alapainike 2 sekuntia sekunnissa, keskimmäinen painike 1 minuutti sekunnissa ja ylin painike 1 tunti sekunnissa. Melko suuren tarkkuuden pitäisi olla mahdollista, joten sinun ei tarvitse säätää sitä usein.
Jos säädät sekunteja, minuutteja tai tunteja (esimerkiksi jos minuutit ovat 58, 59, 00), tunti siirtyy seuraavaan tuntiin.
Nämä kolme painiketta ovat viime hetken lisäys kelloon, ne toimivat hyvin, mutta voi olla parempi tapa. Muista vain, että jos sekoitat tämän koodin osan, "delay ();" komentoa ei voi käyttää. Käytin tätä menetelmää, koska minun ei tarvitse pelätä kytkimen pomppimista ja outoja hyppyjä ajan etenemisessä.
Vaihe 4: Mitä näyttö näyttää
Olen laittanut 1602 LCD -näyttöön paljon tietoa, joka kaipaa selitystä:
Rivi 1 Tai rivi nolla '0' puhuessaan koodissa näyttää normaaliajan. Vasemmalla on STD, tämä tarkoittaa STandarD -aikaa.
Seuraavaksi ensimmäisellä rivillä keskellä on paikallinen normaaliaika. Älä aloita kesäaikaan, kello näyttää tämän toisella rivillä.
Tämä aika -asteikko on 12 tunnin kello, joten oikealla puolella on 'AM' tai 'PM', joka osoittaa aamun tai keskipäivän.
Rivi 2 tai rivi yksi '1', kun puhutaan koodilla, näyttää kesäajan, joka vaihtelee vuoden päivän mukaan. Vasemmalla oleva DST tarkoittaa kesäaikaa
Toisen rivin keskellä on paikallinen armeijan aika, joka on 24 tunnin kello. Kuulet sen esimerkiksi "oh kuusisataa tuntia".
Oikealla puolella on vuoden päivä talvipäivänseisauksesta lähtien, pohjoisella pallonpuoliskolla 21. joulukuuta (suunnilleen) on päivä nolla '0' ja eteläisellä pallonpuoliskolla 21. kesäkuuta (suunnilleen) päivä nolla '0'.
Olen toimittanut kaksi.pdf -tiedostoa viitteeksi, kun asetat kelloa ensimmäisen kerran. Valitse tiedosto, joka viittaa pallonpuoliskoon, jossa asut.
Oikealla olevat kolme painiketta lisäävät sekunteja, minuutteja ja tunteja alhaalta ylöspäin.
Vaihe 5: Luonnoksen asetukset
Ensimmäisen käynnistyksen yhteydessä on määritettävä useita koodirivejä. Joitakin näistä riveistä on muutettava joka kerta, kun irrotat kellon ja muutat luonnoksen muuttujien arvoja. Jos käynnistät IDE -kellon, sen lataaminen ja käynnistyminen kestää noin 6 sekuntia. Jos lataat luonnoksen IDE: stä, irrota kello ja käynnistä se uudelleen syylästä tai virtalähteestä, luonnos käynnistyy noin 2,5 sekunnissa.
Rivi 11 LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);
Tämä rivi osoittaa nestekidenäytön ja asettaa oikean osoitteen I2C -selkänojalle. 0x27 on minkä tahansa ostamani pakkauksen osoite. Jos käynnistät kellon, mutta tietoja ei näy, mutta se syttyy, osoite on todennäköisesti erilainen nestekidenäytössä. Laitan alla olevan linkin, jossa kerrotaan, kuinka voit muuttaa LCD -selkäpakkauksesi osoitetta tai löytää osoitteen.
Rivit 24 int minuteSt = 35;
Aseta vakiokellon aloitus minuutti, yleensä 5 minuuttia ennen kellon käynnistämistä, jotta asetusaika on riittävä.
Rivit 25 tuntiSt = 18;
Aseta tunniksi STD -aika (24 tunnin kello) alkaa. 18.00 olisi tunti 18.
Linja 26 intialaisen päivän aikana = 339;
Lataa ja katso "Easy DST Clock Time Scale" pdf -tiedosto (pohjoinen tai eteläinen pallonpuolisko), jossa asut, etsi päivämäärä ja lisää päivä # tähän riviin. (Vasen sarake). Esimerkki (24. marraskuuta on päivä #339 pohjoisella pallonpuoliskolla ja päivä #156 eteläisellä pallonpuoliskolla)
Rivi 27 int DSTyear = 2019;
Anna kuluva vuosi.
Rivi 92 if ((masterTime - previousMasterTimeSt> = 1000) && (microTime - previousMicroTimeSt> = 500)) {
"PreviousMasterTimeSt" on verrattava millisekuntien lukumäärään, joten tämä '1000' on ehkä muutettava 999: ksi Arduino -kortin sisäisen kellon mukaan ja säädä sitten edellinenMicroTime hienosäätääksesi kelloa. Sisäinen kello, vaikka 16MH: ssa on vaihtelua kortilta toiselle.
"PreviousMicroTimeSt" hienosäätää sisäistä kelloa auttaakseen laskemaan tarkan 1 sekunnin. Jos kello on liian nopea, lisää mikrosekunteja ja jos kello on liian hidas, pienennä mikrosekunteja ja pudota tarvittaessa millisekunteja 999: een ja aloita sitten mikrosekunnit noin 999, 990 tai lisää kellon nopeutta.
Jokaisella Arduino -kortilla on hieman erilainen nopeus, joten nämä numerot muuttuvat jokaisen käyttämäsi levyn myötä. Osa koodista ei ole vielä testattu, tämä on rivi 248 jokaisen karkausvuoden osalta. Seuraavien viikkojen aikana testaan sitä ja ilmoitan mahdollisista muutoksista.
Vaihe 6: Viimeiset huomautukset
Tämä projekti on helppo rakentaa, mutta konsepti ja tarvittavat muutokset koodissa voivat olla tehtävä, vie aikaa ja mieti, kello ei vanhene ennen vuoden 2037 loppua. Aion seurata tarkasti sähköpostilla kysymyksiin, koska niitä on varmasti, en ole kirjallisuuden nero, joten jotkut kuvauksistani voivat olla hieman mutaisia.
Mukana on kaksi.pdf -tiedostoa. Lataa tiedosto puolipallollesi, jossa asut. Tämä tiedosto antaa sinulle tarvittavat tiedot kellon käynnistämiseksi tarkasti.
Luonnoksessa käsiteltyjen tietojen avulla olisi helppo näyttää normaaliajan ja DST -ajan lisäksi myös päivä ja päivämäärä 2004A -nestekidenäytössä. Jos pidät tämän projektin tarjoamista haasteista, kokeile liittää 2004A -nestekidenäyttö ja lisää sitten koodi lisätietojen näyttämiseksi.
Olen yrittänyt olla kaikenkattava tässä projektissa, mutta löysin kolme aluetta kyseisestä maailmasta. Pohjoinen napa, etelänapa ja päiväntasaaja.
Onko DST välttämätön tai edes mahdollista pohjois- tai etelänapoilla?
Paljonko kello on pohjois- tai etelänapa?
Mihin suuntaan matkustaisit lähteäksesi pohjoisnavalta tai etelänavalta?
Mihin suuntaan etelänavalta matkustaisit saavuttaaksesi Austrailian, Pohjois -Amerikan, Euroopan tai Aasian?
Millä aikavyöhykkeellä joulupukki asuu?
Tarvitseeko hän DST: tä?
Paljonko kello on pohjoisnavalla?
Mihin suuntaan joulupukki matkustaa toimittaakseen kaikki lahjansa?
Millä leveysasteella DST on tehokas?
Nyt päiväntasaajalle;
Voiko tätä kelloa käyttää päiväntasaajalla?
Käyttäisivätkö he pohjoista vai eteläistä pallonpuoliskoa?
Mikä on talvipäivänseisauksen ja kesäpäivänseisauksen päivämäärä?
Millä leveysasteella DST on tehokas?
Tarvitsevatko pingviinit DST: tä?
Onko sinun mielestäsi outoa ajatella näitä kysymyksiä?
Hyvää rakentamista kaikille!
kalvopähkinä
Vaihe 7: Muut linkit
Tämä on linkki I2C -takareunan osoitteen määrittämiseen tai muuttamiseen:
www.instructables.com/id/1602-2004-LCD-Adapter-Addressing/
PiotrS on kirjoittanut erinomaisen ohjeen I2C -laitteisto -osoitteisiin
playground.arduino.cc/Main/I2cScanner
Tämä linkki skannaa I2C -laitteesi ja palauttaa osoitteen
Suositeltava:
DIY Kuinka näyttää aika M5StickC ESP32: ssa Visuinon avulla - Helppo tehdä: 9 vaihetta
DIY Kuinka näyttää aika M5StickC ESP32: ssa Visuinon avulla - Helppo tehdä: Tässä opetusohjelmassa opimme ohjelmoimaan ESP32 M5Stack StickC: n Arduino IDE: n ja Visuinon avulla näyttämään ajan nestekidenäytöllä
Helppo paperipariston pidike: 5 vaihetta
Helppo paperiparistopidike: Jos sinun on vaikea löytää nappipariston pidikettä, kun teet pieniä projekteja lastesi tai oppilaidesi kanssa, kuten minä, tämä opaskirja on sinua varten. Tällä paristopidikkeellä on myös ON- tai OFF -asento sen mukaan, kuinka suljet
Helppo erittäin pienitehoinen BLE Arduinossa Osa 2 - Lämpötilan/kosteuden valvonta - Rev 3: 7 vaihetta
Helppo erittäin pienitehoinen BLE Arduinossa, osa 2 - Lämpötilan/kosteuden valvonta - Versio 3: Päivitys: 23. marraskuuta 2020 - Ensimmäinen 2 x AAA -pariston vaihto 15. tammikuuta 2019 lähtien, eli 22 kuukautta 2xAAA -alkaliparille Päivitys: 7. huhtikuuta 2019 - versio 3/ lp_BLE_TempHumidity, lisää päivämäärä- ja aikakaaviot käyttämällä pfodApp V3.0.362+-toimintoa ja automaattista kuristusta
Luo avaruusasema TinkerCad Codeblockissa -- Helppo opetusohjelma: 7 vaihetta (kuvilla)
Luo avaruusasema TinkerCad Codeblockiin || Helppo opetusohjelma: Vaikka ajatus avaruudessa elämisestä saattaa tuntua tieteiskirjallisuudelta, tätä lukiessasi kansainvälinen avaruusasema kiertää maata viiden mailin sekuntinopeudella ja kiertää maapalloa kerran 90 minuutin välein. Tässä projektissa opit
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, helppo käyttää, helppo siirtää: 3 vaihetta
DIY MusiLED, musiikin synkronoidut LEDit yhdellä napsautuksella Windows- ja Linux-sovelluksella (32- ja 64-bittinen). Helppo luoda, Helppo käyttää, Helppo siirtää: Tämä projekti auttaa sinua liittämään 18 LEDiä (6 punaista + 6 sinistä + 6 keltaista) Arduino-korttiin ja analysoimaan tietokoneen äänikortin reaaliaikaisia signaaleja ja välittämään ne LEDit sytyttävät ne beat -tehosteiden mukaan (virveli, korkea hattu, potku)