Innholdsfortegnelse:

Enkel sommertid: 7 trinn
Enkel sommertid: 7 trinn

Video: Enkel sommertid: 7 trinn

Video: Enkel sommertid: 7 trinn
Video: Церковь скрыла мотивы Куликовской Битвы 2024, Juli
Anonim
Enkel sommertid
Enkel sommertid
Enkel sommertid
Enkel sommertid

Historie

Dette prosjektet startet som en utfordring for meg å lære programmering (koding) med Arduino Uno og en enkelt 1602A LCD -skjerm, jeg ville først presse Arduino til grensene for nøyaktighet. Dette er et prosjekt for å bygge en klokke uten bruk av en RTC -modul (Real Time Clock -modul) og videre ikke bruke noen forsinkelse (); kommandoer fordi forsinkelsen (); kommandoen stopper koden i en bestemt tid. Da jeg jobbet gjennom den grunnleggende tiden for å holde koden, tenkte jeg at dette kan være litt dagligdags, så jeg bestemte meg for å legge til en sommertid som et nytt tillegg for å krydre ting og muligens skape litt mer interesse for dette prosjektet. I begynnelsen var ideen ren, men jo mer jeg jobber med den og ser på den fysiske klokken jeg har på skrivebordet, jo mer praktisk blir ideen. Ved å legge til en RTC -modul og justere koden, ville denne klokken være nøyaktig i årene som kommer og til svært lave kostnader for produsenter og publikum som kjøper en slik klokke.

Sommertid eller (DST) har eksistert i 100+ år (Google den, den har en ganske fargerik historie). Jeg vil ikke gå inn på politikken, men det er en grov og smertefull øvelse som ikke gjør livet enkelt for vanlige mennesker (deg og meg). For det meste nyter vi den ekstra timen med dagslys, men måten den brukes på er brutal. Det er på tide med en større oppgradering til en veldig gammel idé.

Dette eksemplet er lett å leve med og med den digitale tidsalderen og teknologiske fremskritt som lett brukes på alle former for digitale klokker, men kan hjelpe til med den analoge klokkens død. Snarere enn et 1 -timers hopp fra standardtid til sommertid, så er sommertid til standardtid basert på den gradvise tiden som går fra vintersolverv til sommersolverv, deretter tilbake til standardtid ved neste vintersolverv år etter år. Denne overgangen finner sted i 180 dager av hver seks måneders periode. Justeringen er 20 sekunder om dagen i 360 dager med de resterende 5 eller 6 dagene lagt til lengden solstikkene. Mitt eksempel her øker 1 minutt hver tredje dag i 180 -dagers syklusen. Den 21. juni hvert år er klokken hele 1 time fremover, og omtrent 21. desember hvert år har klokken gått tilbake til standardtid. Skuddår er lett redegjort for, spesielt hvis en RTC brukes. Den sørlige halvkule er også lett tilpasset denne klokken, lysbildeskalaen er ganske enkelt 6 måneder ute av fase fra den nordlige halvkule.

Det er tre steder i verden som sommertid ville være ganske mye med mindre ekvatorialregionen og polene. Jeg tror ikke dagslyset forandrer seg særlig ved ekvator, jeg vet ikke om noen av de tropiske områdene engang bruker DST og polene er en annen historie igjen, bare 'HVAD' tid er det på polene uansett?

Trinn 1: Om klokken

Om klokken
Om klokken
Om klokken
Om klokken

Klokken jeg har laget er basert på standard tid som aldri varierer fra den internasjonalt aksepterte verdensklokken, denne vises på første linje i 1602 LCD. Den andre linjen er den samme tidsskalaen, men den viser forskyvningen av minutter fra en solstice til den neste. Fra vintersolverv til sommersolverv øker forskyvningen ett minutt hver tredje dag opptil maksimalt seksti minutter. Fra sommersolverv til vintersolverv reduseres forskyvningen ett minutt hver tredje dag til standardtid og sommertid er den samme.

I dette eksemplet har jeg brukt militær tid (24 timers klokke) og standard tid (12 timers klokke) AM og PM for å hjelpe de som ikke er kjent med 24 timers tidsskala, og det ga rommet mitt å vise dagnummeret DST er sett fra. Koden kan endres for å vise 12 -timers klokken. Jeg har lagt til tre trykknapper som er koblet til digitale pinner 2, 3 og 4 for å justere tiden. Disse knappene øker bare sekunder, minutter eller timer. Knappene er valgfrie, klokken fungerer fortsatt fint hvis du ikke kobler til knappene og ikke trenger å endre koden. Jeg vil i det minste anbefale å bruke en knapp for å justere sekundene, og hvis fullstendig nøyaktighet ikke kan oppnås, hold klokken på den langsomme siden, går knappen fremover 1 sekund per sekund.

Hvis du starter klokken fra Arduino IDE vil det ta omtrent 5,5 til 6 sekunder for skissen å laste og starte opp, hvis du har skissen lastet til Arduino og deretter koble den til en veggvorter eller strømforsyning vil det ta omtrent 2,5 til 3 sekunder å starte og kjøre.

Det er noe manuelt oppsett som trengs når du endelig gjør klokken klar til bruk.

Denne klokken bruker ikke en RTC -modul eller doserer den med "delay ();" kommandoer.

Hvis du liker å bruke RTC med Arduino, kan dette konseptet fortsatt brukes. RTC vil gi deg all informasjonen du trenger for å legge til EDSC -tiden. Koden kan være ganske annerledes med en RTC -modul, jeg har ikke sett på den. Du er ganske alene om du gjør det, men det er en fin måte å trene hjernen på.

Trinn 2: Hva du trenger

Hva du trenger
Hva du trenger
Hva du trenger
Hva du trenger
Hva du trenger
Hva du trenger

HANDLELISTE

1 Arduino Uno eller Mega2569 (I2C -pinnene er A4 og A5 på UNO og 20 og 21 på 2560 Mega)

Omtrent enhver annen Arduino skal fungere, pinnene som brukes kan være forskjellige. For den saks skyld vil ethvert kontrollkort fungere. Du må skrive om koden for det kortet eller produsenten.

1 1602 LCD -skjerm (valgfri farge)

Jeg bruker en I2C -ryggsekk med LCD -skjermen, jeg synes det er enklere og raskere å sette opp.

Jumper ledninger

VALGFRITT LEVERANSER

1 mellomstort brødbrett

1-3 øyeblikkelige trykknapper

1-3 10 K ohm motstander

Denne instruerbare er lang, så jeg skal ikke gå inn i festet eller skapet jeg har brukt til å vise klokken. Hvis du liker dette prosjektet og vil lage en permanent versjon, kan du designe det etter din smak. Denne designen er perfekt for meg fordi jeg hadde alt jeg trengte i søppelboksen min, og jeg liker utseendet på den.

MERKNADER:

For å unngå at strømbruddene faller i gang, blir min siste klokke drevet av et solcellepanel jeg har utenfor. Solcellepanelet holder et 12 volt batteri ladet med en regulator på for å forhindre overlading. Dette batteriet er koblet til Arduino via strømkontakten ved siden av USB -porten. Jeg holder USB -porten koblet til nettet for å redusere trekk på batteriet. Begge strømkildene kan brukes samtidig uten skader på Arduino. Et 12 volts batteri kan lades til maks 14,5 volt, som er for høyt for Arduino, så jeg bruker en bukkomformer for å redusere forsyningsspenningen fra batteriet til et område på 9 til 12 volt. 12 volts batteriet jeg holder ladet vil vare 3 eller 4 dager hvis dagene er overskyet. Regulatoren jeg bruker vil kutte strømmen til Arduino hvis batterispenningen synker til 11 volt. Batteriet jeg har kommer fra nødlyssystem for kommersielle bygninger, det er omtrent en fjerdedel av størrelsen på et lite bilbatteri. Hvis du har tenkt å bruke et bilbatteri, sørg for å oppbevare det i et godt ventilert område (utenfor), bilbatterier avgir hydrogen og oksygengass når de lades og lades ut, dette er en eksplosiv kombinasjon.

ADVARSEL

BEHOLD BATTERIET I GODT

VENTILERT OMRÅDE, UTENFOR

Trinn 3: Kabling

Kabling
Kabling

Jeg har gitt en skjematisk oversikt over alle tilkoblingene i dette prosjektet. Hvis du bruker et brødbrett trenger du et mellomstort brett, bryterne trenger plass for å bli spredt slik at kretsen ikke er forvirrende.

1602 LCD -skjermen har en I2C -ryggsekk for enkelhets skyld. Hvis du bruker SPI -tilkoblinger, må du slå opp hvordan du bruker den og endre koden nær begynnelsen av skissen. Jeg har aldri brukt SPI -tilkoblingene, så pinne 2, 3 og 4 er kanskje ikke tilgjengelige for de tre trykknappene.

De tre trykknappene brukes til å justere klokken. De forskutterer bare tiden (fremover). I de siste justeringene holder du klokken i koden på den langsomme siden (ca. 1 til 2 sekunder per dag eller flere dager) på denne måten kan du forflytte tiden om nødvendig. Hver knapp fremskrider tiden ett trinn per sekund, den nederste knappen 2 sekunder per sekund, den midterste knappen 1 minutt per sekund og den øverste knappen 1 time per sekund. En ganske høy grad av nøyaktighet bør være mulig, så du trenger ikke å justere den veldig ofte.

Hvis du justerer sekunder, minutter eller timer (for eksempel hvis minuttene er avansert 58, 59, 00) går timen videre til neste time.

Disse tre knappene er et siste minutt -tillegg til klokken, de fungerer bra, men det kan være en bedre måte. Bare husk at hvis du roter med denne delen av koden "forsinkelsen ();" kommandoen kan ikke brukes. Jeg brukte denne metoden fordi jeg ikke trenger å bekymre meg for bryterstopp og merkelige hopp i tiden som går.

Trinn 4: Hva skjermen viser

Hva displayet viser
Hva displayet viser

Jeg har lagt mye informasjon på 1602 LCD -skjermen som trenger litt forklaring:

Linje 1 Eller linje null '0' når du snakker i kode, viser standardtiden. Til venstre står 'STD', dette står for 'STandarD' tid.

Neste på første linje i midten er din lokale standardtid. Ikke start med sommertid, klokken viser dette på den andre linjen.

Denne tidsskalaen er en 12 -timers klokke, så på høyre side er 'AM eller' PM 'for å indikere morgen eller etter middag.

Linje 2 Eller linje 1 '1' når du snakker i kode, viser sommertid som varierer etter årstid. 'DST' til venstre betyr 'sommertid'

Midt på den andre linjen er din lokale militære tid, som er en 24 -timers klokke. Du vil for eksempel høre det referert til som "oh six hundred hours".

På høyre side er dagen på året som referert fra vintersolverv, på den nordlige halvkule er 21. desember (omtrent) dag null '0' og på den sørlige halvkule er 21. juni (omtrent) dag null '0'.

Jeg har gitt to.pdf -filer som referanse når jeg først satte opp klokken. Velg filen som refererer til halvkule du bor i.

De tre knappene til høyre øker sekunder, minutter og timer nedenfra og opp.

Trinn 5: Skisseoppsett

Skisseoppsett
Skisseoppsett

Det er flere kodelinjer som må settes opp for første oppstart. Noen av disse linjene må være endringer hver gang du kobler fra klokken og endrer verdiene til variablene i skissen. Hvis du starter klokken for IDE vil det ta omtrent 6 sekunder å laste inn og starte. Hvis du laster skissen fra IDE, kobler du fra klokken og starter den på nytt fra en veggvorter eller strømforsyning, og skissen starter opp på omtrent 2,5 sekunder.

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

Denne linjen adresserer LCD -displayet og angir riktig adresse til I2C -ryggsekken. 0x27 er adressen til noen av ryggsekkene jeg kjøpte. Hvis du slår på klokken, men det ikke vises noen data, men den lyser, er adressen sannsynligvis annerledes på LCD -skjermen. Jeg legger en lenke nedenfor for en beskrivelse av hvordan du endrer adressen til LCD -ryggsekken eller finner adressen.

Linjer 24 int minuttSt = 35;

Angi startminutten for standardklokken, vanligvis sett den 5 minutter før du starter klokken for å tillate oppsettstid.

Linjer 25 int timeSt = 18;

Sett timen til STD -tid (24 -timers klokke) starter. 18.00 ville vært time 18.

Linje 26 int DSTdager = 339;

Last ned og referer til pdf -filen "Easy DST Clock Time Scale" (nordlige eller sørlige halvkule), slå opp datoen og sett inn Day # i denne linjen. (Venstre kolonne). Eksempel (24. november er dag #339 på den nordlige halvkule og dag #156 på den sørlige halvkule)

Linje 27 int DSTyear = 2019;

Skriv inn inneværende år.

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

"PreviousMasterTimeSt" må sammenlignes med antall millisekunder, så denne "1000" må kanskje endres til 999, avhengig av den interne klokken på Arduino -kortet, og juster deretter den foregående MicroTime for å finjustere klokken. Den interne klokken, selv om 16MH har variasjoner fra et bord til det neste.

"PreviousMicroTimeSt" finjusterer den interne klokken for å telle nøyaktig 1 sekund. Hvis klokken er for rask, øker du mikrosekundene, og hvis klokken er for langsom, reduserer du mikrosekundene, og om nødvendig slipper du millisekundene til 999 og starter deretter mikrosekundene på omtrent 999, 990 eller øker hastigheten på klokken.

Hvert Arduino -brett har en litt annen hastighet, derfor vil disse tallene endres med hvert brett du bruker. En del av koden er ennå ikke testet, dette er linje 248 for hvert skuddår. I løpet av de neste ukene vil jeg teste det og legge ut eventuelle endringer om nødvendig.

Trinn 6: Sluttnotater

Sluttnotater
Sluttnotater

Dette prosjektet er enkelt å bygge, men konseptet og nødvendige justeringer i koden kan være en oppgave, ta deg god tid og tenk gjennom det, klokken går ikke ut før slutten av 2037. Jeg kommer til å holde et godt øye med meg e -post for spørsmål da jeg er sikker på at det kommer noen, jeg er ikke et litterært geni, så noen av beskrivelsene mine kan være litt gjørmete.

Det er to.pdf -filer inkludert. Last ned filen for halvkule du bor i. Denne filen vil gi deg nødvendig informasjon for å starte klokken nøyaktig.

Med informasjonen manipulert i skissen ville det være enkelt å vise ikke bare standard tid og sommertid, men også dag og dato på en 2004A LCD. Hvis du liker utfordringene dette prosjektet gir, prøv å koble til en 2004A LCD -skjerm, og legg deretter til kode for å vise tilleggsinformasjonen, eller hvis det vises nok interesse, vil jeg gjøre en annen variant av dette prosjektet, inkludert denne tilleggsinformasjonen.

Jeg har prøvd å være altomfattende i dette prosjektet, men jeg fant tre områder i den aktuelle verden. Nordpolen, Sydpolen og ekvator.

Er sommertid nødvendig eller til og med mulig på nord- eller sørpolen?

Hva er klokken på Nord- eller Sydpolen?

Hvilken retning vil du reise for å forlate Nordpolen eller Sydpolen?

Hvilken retning ville du reise fra Sydpolen for å nå Austrailia, Nord -Amerika, Europa eller Asia?

Hvilken tidssone bor nissen i?

Trenger han sommertid?

Hva er klokka uansett på Nordpolen?

Hvilken retning reiser nissen for å levere alle gavene sine?

På hvilken breddegrad er sommertid effektiv?

Nå for ekvator;

Kan denne klokken brukes ved ekvator?

Ville de bruke den nordlige eller sørlige halvkule skalaen?

Hva er datoene for vintersolverv og sommersolverv?

På hvilken breddegrad er sommertid effektiv?

Trenger pingvinene sommertid?

Synes du jeg er rar når jeg tenker på disse spørsmålene?

Lykke til med å bygge alle sammen!

philmnut

Trinn 7: Andre lenker

Dette er en lenke for å bestemme eller endre adressen på I2C -ryggsekken:

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

PiotrS har skrevet en utmerket instruerbar for I2C -maskinvareadresser

playground.arduino.cc/Main/I2cScanner

Denne lenken skanner I2C -enheten og returnerer adressen

Anbefalt: