Indholdsfortegnelse:

Let sommertid: 7 trin
Let sommertid: 7 trin

Video: Let sommertid: 7 trin

Video: Let sommertid: 7 trin
Video: Tutorial: FLOWSIC500 Extended commissioning via FLOWgate™ 2024, Juli
Anonim
Let sommertid
Let sommertid
Let sommertid
Let sommertid

Historie

Dette projekt startede som en udfordring for mig at lære programmering (kodning) med Arduino Uno og et enkelt 1602A LCD -display, jeg ville først presse Arduino til dets grænser for nøjagtighed. Dette er et projekt til at bygge et ur uden brug af et RTC -modul (Real Time Clock -modul) og yderligere ikke bruge nogen forsinkelse (); kommandoer, fordi forsinkelsen (); kommando stopper koden i en bestemt tidsperiode. Da jeg gennemgik den grundlæggende tid med at holde kode, tænkte jeg, at dette måske var lidt dagligdags, så jeg besluttede at tilføje en sommertid som en ny tilføjelse til at krydre tingene og muligvis skabe lidt mere interesse for dette projekt. I første omgang var ideen ren, men jo mere jeg arbejder med det og ser det fysiske ur, jeg har på mit skrivebord, jo mere praktisk bliver ideen. Ved at tilføje et RTC -modul og justere koden ville dette ur være nøjagtigt i mange år fremover og til meget lave omkostninger for producenter og offentligheden, der køber et sådant ur.

Sommertid eller (DST) har eksisteret i 100+ år (Google det, det har en ganske farverig historie). Jeg vil ikke gå ind i politikens politik, men det er en grov og smertefuld øvelse, der ikke gør livet let for almindelige mennesker (dig og mig). For det meste nyder vi den ekstra time med dagslys, men den måde, den anvendes på, er brutal. Det er tid til en større opgradering til en meget gammel idé.

Dette eksempel er let at leve med og med den digitale tidsalder og teknologiske fremskridt, der let anvendes på alle former for digitale ure, men kan hjælpe med at gå ned i det analoge ur. I stedet for et 1 times spring fra standardtid til sommertid, så er sommertid til standardtid baseret på det gradvise tidsforløb fra vintersolhverv til sommersolhverv, derefter tilbage til standardtid ved den næste vintersolhverv år efter år. Denne overgang finder sted i 180 dage ud af hver 6 måneders periode, justeringen er 20 sekunder om dagen i 360 dage med de resterende 5 eller 6 dage tilføjet til længden solhverv. Mit eksempel her øger 1 minut hver tredje dag inden for 180 dages cyklus. Omkring den 21. juni hvert år er uret hele 1 time foran, og omkring eller omkring den 21. december hvert år er uret gået tilbage til standardtid. Skudår er let redegjort for, især hvis der bruges en RTC. Den sydlige halvkugle er også let tilpasset dette ur, diasskalaen er simpelthen 6 måneder ude af fase fra den nordlige halvkugle.

Der er tre steder i verden, at sommertid stort set ville være, medmindre ækvatorialregionen og polerne. Jeg tror ikke, at dagslyset ændrer sig meget ved ækvator, jeg ved ikke, om nogen af de tropiske områder overhovedet bruger DST, og polerne er en anden historie igen, bare 'HVAD' tid er det alligevel ved polerne?

Trin 1: Om uret

Om uret
Om uret
Om uret
Om uret

Uret jeg har oprettet er baseret på standardtid, der aldrig afviger fra det internationalt accepterede verdensur, dette vises på første linje i 1602 LCD. Den anden linje er den samme tidsskala, men den viser forskydningen af minutter fra en solstice til den næste. Fra vintersolhverv til sommersolhverv stiger forskydningen et minut hver tredje dag op til maksimalt tres minutter. Fra sommersolhverv til vintersolhverv falder forskydningen et minut hver tredje dag, indtil standardtid og sommertid er den samme.

I dette eksempel har jeg brugt militær tid (24 timers ur) og standard tid (12 timers ur) AM og PM til at hjælpe de mennesker, der ikke er bekendt med 24 timers tidsskalaen, det gav også mit værelse til at vise det dagnummer, sommertid er sæt fra. Koden kan ændres for at vise 12 -timers uret. Jeg har tilføjet tre trykknapper forbundet til digitale ben 2, 3 og 4 for at justere tiden. Disse knapper øger kun sekunder, minutter eller timer. Knapperne er valgfri, uret fungerer stadig fint, hvis du ikke tilslutter knapperne og ikke behøver at ændre koden. Jeg vil anbefale i det mindste at bruge en knap til at justere sekunderne, og hvis fuldstændig nøjagtighed ikke kan opnås, skal du holde uret på den langsomme side, knappen går fremad 1 sekund i sekundet.

Hvis du starter uret fra Arduino IDE vil det tage omkring 5,5 til 6 sekunder for skitsen at indlæse og starte, hvis du har skitsen indlæst til Arduino, skal du derefter tilslutte den til en vægvorte eller strømforsyning, vil det tage omkring 2,5 til 3 sekunder til at starte og køre.

Der er brug for en manuel opsætning, når du endelig gør uret klar til brug.

Dette ur bruger ikke et RTC -modul eller doserer det med "forsinkelse ();" kommandoer.

Hvis du kan lide at bruge RTC med Arduino, kan dette koncept stadig bruges. RTC giver dig alle de oplysninger, du har brug for for at tilføje EDSC -tiden. Koden kan være ganske anderledes med et RTC -modul, jeg har ikke undersøgt det. Du er stort set alene, hvis du gør det, men det er en fantastisk måde at træne din hjerne på.

Trin 2: Hvad du får brug for

Hvad du får brug for
Hvad du får brug for
Hvad du får brug for
Hvad du får brug for
Hvad du får brug for
Hvad du får brug for

INDKØBSLISTE

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

Næsten enhver anden Arduino skal fungere, de ben, der bruges, kan være forskellige. For den sags skyld vil ethvert controller board fungere. Du bliver nødt til at omskrive koden til det pågældende kort eller den pågældende producent.

1 1602 LCD -display (farve efter eget valg)

Jeg bruger en I2C rygsæk med LCD'en, jeg synes det er lettere og hurtigere at konfigurere.

Jumper ledninger

VALGFRIT LEVERING

1 mellemstort brødbræt

1-3 kortvarige kontaktknapper

1-3 10 K ohm modstande

Denne instruerbare er lang, så jeg går ikke ind i den montering eller kabinet, jeg har brugt til at vise uret. Hvis du kan lide dette projekt og vil lave en permanent version, kan du designe det efter din smag. Dette design er perfekt til mig, fordi jeg havde alt, hvad jeg havde brug for i min junk box, og jeg kan lide udseendet af det.

BEMÆRKNINGER:

For at undgå, at strømbrudene falder ned, drives mit sidste ur af et solpanel, jeg har udenfor. Solpanelet holder et 12 volt batteri opladet med en regulator på det for at forhindre overopladning. Dette batteri er forbundet til Arduino via strømstikket ved siden af USB -porten. Jeg holder USB -porten forbundet til nettet for at reducere træk på batteriet. Begge strømkilder kan bruges på samme tid uden skader på Arduino. Et 12 volt batteri kan oplades til max 14,5 volt, hvilket er for højt for Arduino, så jeg bruger en bukkonverter til at reducere forsyningsspændingen fra batteriet til et område på 9 til 12 volt. Det 12 volt batteri, jeg holder opladet, varer 3 eller 4 dage, hvis dagene er overskyet. Den regulator, jeg bruger, vil afbryde strømmen til Arduino, hvis batterispændingen falder til 11 volt. Batteriet jeg har kommer fra nødlyssystem til erhvervsbygninger, det er cirka en fjerdedel af størrelsen på et lille bilbatteri. Hvis du har til hensigt at bruge et bilbatteri, skal du sørge for at opbevare det i et godt ventileret område (udenfor), bilbatterier afgiver brint og iltgas, når de oplades og aflades, dette er en eksplosiv kombination.

ADVARSEL

OPBEVAR BATTERIET I ET BRUG

VENTILERET OMRÅDE, UDEN FOR

Trin 3: Ledningsføring

Ledninger
Ledninger

Jeg har givet en skematisk oversigt over alle forbindelser i dette projekt. Hvis du bruger et brødbræt, skal du bruge et mellemstort bord, kontakterne skal have plads til at blive spredt, så kredsløbet ikke er forvirrende.

1602 LCD -displayet har en I2C -rygsæk for enkelheds skyld. Hvis du bruger SPI -forbindelser, skal du kigge efter, hvordan du bruger det og ændre koden nær begyndelsen af skitsen. Jeg har aldrig brugt SPI -forbindelserne, så ben 2, 3 og 4 er muligvis ikke tilgængelige for de tre trykknapper.

De tre trykknapper bruges til at justere tiden på uret. De forskyder kun tiden (fremad). I de sidste justeringer skal du holde uret i koden på den langsomme side (ca. 1 til 2 sekunder pr. Dag eller flere dage) på denne måde kan du forlænge tiden, hvis det er nødvendigt. Hver knap fremskrider tiden et trin i sekundet, den nederste knap 2 sekunder pr. Sekund, den midterste knap 1 minut pr. Sekund og den øverste knap 1 time pr. Sekund. En ret høj grad af nøjagtighed burde kunne lade sig gøre, så du behøver ikke at justere den meget ofte.

Hvis du justerer sekunder, minutter eller timer (f.eks. Hvis minutterne er avanceret 58, 59, 00), går timen videre til den næste time.

Disse tre knapper er en tilføjelse i sidste øjeblik til uret, de fungerer godt, men der kan være en bedre måde. Bare husk, at hvis du roder med denne del af koden, "forsinkelsen ();" kommando kan ikke bruges. Jeg brugte denne metode, fordi jeg ikke behøver at bekymre mig om switch bounce og mærkelige spring i tiden, der går frem.

Trin 4: Hvad viser displayet

Hvad displayet viser
Hvad displayet viser

Jeg har lagt en masse oplysninger på 1602 LCD -displayet, der kræver lidt forklaring:

Linje 1 Eller linje nul '0', når der tales i kode, viser standardtiden. Til venstre står 'STD', dette står for 'STandarD' tid.

Næste på den første linje i midten er din lokale standardtid. Start ikke med sommertid, uret viser dette på den anden linje.

Denne tidsskala er et 12 -timers ur, så på højre side er 'AM eller' PM 'for at angive morgen eller efter middag.

Linje 2 Eller linje 1 '1', når du taler i kode, viser sommertid, som varierer alt efter årets dag. 'DST' til venstre betyder 'sommertid'

I midten af den anden linje er din lokale militære tid, som er et 24 -timers ur. Du vil for eksempel høre det omtalt som 'åh hundrede timer'.

På højre side er årets dag, som der henvises til fra vintersolhverv, på den nordlige halvkugle 21. december (cirka) er dag nul '0' og på den sydlige halvkugle 21. juni (cirka) er dag nul '0'.

Jeg har leveret to.pdf -filer til reference, når jeg første gang satte uret op. Vælg den fil, der refererer til den halvkugle, du bor i.

De tre knapper i det højre trin, sekunder, minutter og timer nedefra og op.

Trin 5: Skitseopsætning

Skitseopsætning
Skitseopsætning

Der er flere kodelinjer, der skal konfigureres til den første opstart. Nogle af disse linjer skal være ændringer hver gang du afbryder uret og ændrer værdierne for variablerne i skitsen. Hvis du starter uret til IDE, tager det cirka 6 sekunder at indlæse og starte. Hvis du indlæser skitsen fra IDE'en, skal du derefter afbryde uret og genstarte det fra en vægvorte eller strømforsyning, og skitsen starter op på cirka 2,5 sekunder.

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

Denne linje adresserer LCD -displayet og angiver den korrekte adresse til I2C -rygsækken. 0x27 er adressen på en af de rygsække, jeg købte. Hvis du tænder for uret, men der ikke vises nogen data, men det lyser, er adressen sandsynligvis anderledes på din LCD. Jeg vil lægge et link herunder for en beskrivelse af, hvordan du ændrer adressen på din LCD -rygsæk eller finder adressen.

Linjer 24 int minutSt = 35;

Indstil startminutten for standarduret, normalt indstil det 5 minutter før du starter uret for at give mulighed for opsætningstid.

Linjer 25 int timeSt = 18;

Indstil timen til STD -tid (24 -timers ur) starter. 18.00 ville være time 18.

Linie 26 int DSTdage = 339;

Download og henvis til "Easy DST Clock Time Scale" pdf -filen (nordlige eller sydlige halvkugle), du bor i, slå op på datoen og indsæt Day # i denne linje. (Venstre kolonne). Eksempel (24. november er dag #339 på den nordlige halvkugle og dag #156 på den sydlige halvkugle)

Linje 27 int DSTyear = 2019;

Indtast det aktuelle år.

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

"PreviousMasterTimeSt" skal sammenlignes med antallet af millisekunder, så denne '1000' skal muligvis ændres til 999 afhængigt af det interne ur på Arduino -kortet og derefter justere den foregående MicroTime for at finjustere uret. Det interne ur, selvom 16MH har variationer fra det ene bord til det næste.

"PreviousMicroTimeSt" finjusterer det interne ur for at hjælpe med at tælle et nøjagtigt 1 sekund. Hvis uret er for hurtigt, øges mikrosekunderne, og hvis uret er for langsomt, reduceres mikrosekunderne, og hvis det er nødvendigt, skal du sænke millisekunderne til 999 og derefter starte mikrosekunderne på omkring 999, 990 eller øge hastigheden på uret.

Hvert Arduino -bord har en lidt anden hastighed, derfor ændrer disse tal sig med hvert bræt, du bruger. En del af koden er endnu ikke blevet testet, dette er linje 248, der skal tages højde for hvert skudår. I de næste par uger vil jeg teste det og sende eventuelle ændringer, hvis det er nødvendigt.

Trin 6: Endelige noter

Endelige noter
Endelige noter

Dette projekt er let at bygge, men konceptet og nødvendige justeringer i koden kan være en opgave, tag dig god tid og tænk det igennem, uret udløber først i slutningen af 2037. Jeg kommer til at holde godt øje med min email til spørgsmål, da jeg er sikker på, at der vil være nogle, jeg er ikke et litterært geni, så nogle af mine beskrivelser kan være lidt mudrede.

Der er to.pdf -filer inkluderet, download filen til den halvkugle, du bor i, denne fil giver dig nødvendige oplysninger for at starte uret præcist.

Med oplysningerne manipuleret i skitsen ville det være let at vise ikke kun standardtid og sommertid, men også dag og dato på en 2004A LCD. Hvis du kan lide de udfordringer, som dette projekt giver, så prøv at tilslutte et 2004A LCD -display, og tilføj derefter kode for at vise yderligere oplysninger, eller hvis der vises tilstrækkelig interesse, vil jeg lave en anden variation af dette projekt, herunder disse yderligere oplysninger.

Jeg har forsøgt at være altomfattende i dette projekt, men jeg fandt tre områder i den pågældende verden. Nordpolen, Sydpolen og Ækvator.

Er sommertid nødvendig eller endda mulig på nord- eller sydpolen?

Hvad er klokken på Nord- eller Sydpolen?

Hvilken retning ville du rejse for at forlade Nordpolen eller Sydpolen?

Hvilken retning ville du rejse fra Sydpolen for at nå Austrailia, Nordamerika, Europa eller Asien?

Hvilken tidszone bor julemanden i?

Har han brug for sommertid?

Hvad er klokken alligevel på Nordpolen?

Hvilken retning går julemanden for at levere alle sine gaver?

På hvilken breddegrad er sommertid effektiv?

Nu til ækvator;

Kan dette ur bruges ved ækvator?

Ville de bruge skalaen på den nordlige eller sydlige halvkugle?

Hvad er datoerne for vintersolhverv og sommersolhverv?

På hvilken breddegrad er sommertid effektiv?

Har pingvinerne brug for sommertid?

Synes du, jeg er underlig, når jeg tænker på disse spørgsmål?

God fornøjelse med at bygge alle sammen!

philmnut

Trin 7: Andre links

Dette er et link til at bestemme eller ændre adressen på I2C -rygsækken:

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

PiotrS har skrevet en fremragende instruerbar til I2C hardware adresser

playground.arduino.cc/Main/I2cScanner

Dette link scanner din I2C -enhed og returnerer adressen

Anbefalede: