Inhoudsopgave:

Eenvoudige zomerklok: 7 stappen
Eenvoudige zomerklok: 7 stappen

Video: Eenvoudige zomerklok: 7 stappen

Video: Eenvoudige zomerklok: 7 stappen
Video: Wintertijd - Zondag met Lubach (S09) 2024, Juli-
Anonim
Eenvoudige zomerklok
Eenvoudige zomerklok
Eenvoudige zomerklok
Eenvoudige zomerklok

Verhaal

Dit project begon als een uitdaging voor mij om te leren programmeren (coderen) met de Arduino Uno en een enkel 1602A LCD-scherm, ik wilde eerst de Arduino tot het uiterste drijven voor nauwkeurigheid. Dit is een project om een klok te bouwen zonder het gebruik van een RTC-module (Real Time Clock-module) en verder geen vertraging(); commando's omdat de delay(); commando stopt de code voor een bepaalde tijdsduur. Terwijl ik de basiscode voor tijdregistratie doornam, dacht ik dat dit misschien een beetje alledaags zou zijn, dus besloot ik een zomertijdfunctie toe te voegen als een nieuwe toevoeging om dingen op te fleuren en mogelijk wat meer interesse in dit project te wekken. In het begin was het idee puur nieuw, maar hoe meer ik ermee werk en kijk naar de fysieke klok die ik op mijn bureau heb staan, hoe praktischer het idee wordt. Door een RTC-module toe te voegen en de code aan te passen, zou deze klok jarenlang nauwkeurig zijn en tegen zeer lage kosten voor fabrikanten en het publiek die zo'n klok kopen.

Zomertijd of (DST) bestaat al meer dan 100 jaar (Google het, het heeft een nogal kleurrijke geschiedenis). Ik wil me er niet in mengen, maar het is een grove en pijnlijke oefening die het leven van de gewone mensen (jij en ik) niet gemakkelijk maakt. Voor het grootste deel genieten we van het extra uur daglicht, maar de manier waarop het wordt toegepast is brutaal. Het is tijd voor een grote upgrade naar een heel oud idee.

Dit voorbeeld is gemakkelijk om mee te leven en met het digitale tijdperk en technologische vooruitgang die gemakkelijk kan worden toegepast op alle vormen van digitale klokken, maar zou de ondergang van de analoge klok kunnen helpen. In plaats van een sprong van 1 uur van standaardtijd naar DST-tijd, is de DST-tijd naar standaardtijd deze klok gebaseerd op de geleidelijke voortgang van de tijd van de winterzonnewende naar de zomerzonnewende en vervolgens jaar na jaar terug naar de standaardtijd bij de volgende winterzonnewende. Deze overgang vindt plaats gedurende 180 dagen van elke periode van 6 maanden, de aanpassing is 20 seconden per dag gedurende 360 dagen met de resterende 5 of 6 dagen opgeteld bij de lengte van de zonnewendes. Mijn voorbeeld hier wordt elke drie dagen met 1 minuut verhoogd binnen de cyclus van 180 dagen. Op of rond 21 juni van elk jaar loopt de klok een vol uur vooruit en op of rond 21 december van elk jaar is de klok teruggeschoven naar de standaardtijd. Schrikkeljaar is gemakkelijk te verantwoorden, vooral als een RTC wordt gebruikt. Het zuidelijk halfrond is ook gemakkelijk aan te passen aan deze klok, de schuifschaal is gewoon 6 maanden uit fase van het noordelijk halfrond.

Er zijn drie plaatsen in de wereld waar de zomertijd vrijwel zou zijn, tenzij, het equatoriale gebied en de polen. Ik denk niet dat het daglicht veel verandert op de evenaar, ik weet niet of een van de tropische gebieden zelfs zomertijd gebruikt en de polen is weer een ander verhaal, alleen 'HOE' laat is het eigenlijk aan de polen?

Stap 1: Over de klok

Over de klok
Over de klok
Over de klok
Over de klok

De klok die ik heb gemaakt is gebaseerd op de standaardtijd die nooit afwijkt van de internationaal geaccepteerde wereldklok, deze wordt weergegeven op de eerste regel van het 1602 LCD-scherm. De tweede regel is dezelfde tijdschaal, maar toont de verschuiving van minuten van de ene zonnewende naar de volgende. Van de winterzonnewende tot de zomerzonnewende neemt de afwijking elke drie dagen met één minuut toe tot een maximum van zestig minuten. Van de zomerzonnewende tot de winterzonnewende neemt de afwijking elke drie dagen met één minuut af totdat de standaardtijd en de zomertijd hetzelfde zijn.

Voor dit voorbeeld heb ik militaire tijd (24-uurs klok) en standaardtijd (12-uurs klok) AM en PM gebruikt om die mensen te helpen die niet bekend zijn met de 24-uurs tijdschaal, ook gaf het mijn kamer om het dagnummer weer te geven dat de DST is instellen van. De code kan worden gewijzigd om de 12-uursklok weer te geven. Ik heb drie drukknoppen toegevoegd die zijn aangesloten op digitale pinnen 2, 3 en 4 om de tijd aan te passen. Deze knoppen verhogen alleen seconden, minuten of uren. De knoppen zijn optioneel, de klok werkt nog steeds prima als je de knoppen niet bedraden en de code niet hoeft te wijzigen. Ik zou aanraden om op zijn minst een knop te gebruiken om de seconden aan te passen en als volledige nauwkeurigheid niet kan worden bereikt, houd de klok dan aan de trage kant, de knop zet de tijd 1 seconde per seconde vooruit.

Als je de klok start vanuit de Arduino IDE, duurt het ongeveer 5,5 tot 6 seconden voordat de schets is geladen en opgestart. 3 seconden om op te starten en uit te voeren.

Er is enige handmatige instelling nodig wanneer u de klok eindelijk bedrijfsklaar maakt.

Deze klok gebruikt geen RTC-module en gebruikt ook geen "delay();" commando's.

Als je de RTC graag met de Arduino gebruikt, kan dit concept nog steeds worden gebruikt. De RTC geeft je alle informatie die je nodig hebt om de EDSC-tijd toe te voegen. De code kan bij een RTC module heel anders zijn, daar heb ik niet naar gekeken. Je staat er vrijwel alleen voor, maar het is een geweldige manier om je hersenen te trainen.

Stap 2: Wat heb je nodig?

Wat je nodig zult hebben
Wat je nodig zult hebben
Wat je nodig zult hebben
Wat je nodig zult hebben
Wat je nodig zult hebben
Wat je nodig zult hebben

BOODSCHAPPENLIJST

1 Arduino Uno of Mega2569 (de I2C-pinnen zijn A4 en A5 op de UNO en 20 en 21 op de 2560 Mega)

Zowat elke andere Arduino zou moeten werken, de gebruikte pinnen kunnen anders zijn. Trouwens, elk controllerbord zal werken. U zult de code voor dat bord of die fabrikant moeten herschrijven.

1 1602 LCD-display (kleur naar keuze)

Ik gebruik een I2C-rugzak met het LCD-scherm, ik vind het gemakkelijker en sneller in te stellen.

Doorverbindingsdraden

OPTIONELE LEVERINGEN

1 middelgrote broodplank

1-3 kortstondige contactdrukknoppen

1-3 10 K ohm weerstanden

Deze instructable is lang, dus ik ga niet naar de montage of kast die ik heb gebruikt om de klok weer te geven. Als je dit project leuk vindt en een permanente versie wilt maken, ontwerp het dan naar jouw smaak. Dit ontwerp is perfect voor mij, want ik had alles wat ik nodig had in mijn rommeldoos en ik vind het er mooi uit zien.

OPMERKINGEN:

Om de valkuilen van stroomuitval te voorkomen, wordt mijn laatste klok aangedreven door een zonnepaneel dat ik buiten heb. Het zonnepaneel houdt een 12 volt batterij opgeladen met een regelaar erop om overladen te voorkomen. Deze batterij wordt aangesloten op de Arduino via de stroomaansluiting naast de USB-poort. Ik houd de USB-poort aangesloten op het elektriciteitsnet om het verbruik van de batterij te verminderen. Beide stroombronnen kunnen tegelijkertijd worden gebruikt zonder schade aan de Arduino. Een 12 volt batterij kan worden opgeladen tot maximaal 14,5 volt, wat te hoog is voor de Arduino, dus ik gebruik een buck-converter om de voedingsspanning van de batterij te verlagen tot een bereik van 9 tot 12 volt. De 12 volt batterij die ik opgeladen houd, gaat 3 of 4 dagen mee als het bewolkt is. De regelaar die ik gebruik, zal de stroom naar de Arduino onderbreken als de batterijspanning daalt tot 11 volt. De batterij die ik heb is afkomstig van een noodverlichtingssysteem voor commerciële gebouwen, het is ongeveer een kwart zo groot als een kleine autobatterij. Als u van plan bent een auto-accu te gebruiken, bewaar deze dan in een goed geventileerde ruimte (buiten), auto-accu's geven waterstof en zuurstofgas af tijdens het opladen en ontladen, dit is een explosieve combinatie.

WAARSCHUWING

HOUD DE BATTERIJ IN EEN GOED

GEVENTILEERDE RUIMTE, BUITEN

Stap 3: Bedrading

Bedrading
Bedrading

Ik heb een schema gegeven voor alle verbindingen in dit project, als je een breadboard gebruikt, heb je een bord van gemiddelde grootte nodig, de schakelaars hebben ruimte nodig om te worden uitgespreid, zodat het circuit niet verwarrend is.

Het 1602 LCD-scherm heeft een I2C-rugzak voor de eenvoud, als u SPI-verbindingen gebruikt, moet u opzoeken hoe u het moet gebruiken en de code aan het begin van de schets wijzigen. Ik heb de SPI-aansluitingen nooit gebruikt, dus pinnen 2, 3 en 4 zijn mogelijk niet beschikbaar voor de drie drukknoppen.

De drie drukknoppen worden gebruikt om de tijd op de klok in te stellen. Ze gaan alleen de tijd vooruit (AHEAD). Houd bij de laatste aanpassingen de klok in de code aan de trage kant (ongeveer 1 tot 2 seconden per dag of meerdere dagen) op deze manier kun je de tijd indien nodig vooruitzetten. Elke knop gaat de tijd met één stap per seconde vooruit, de onderste knop 2 seconden per seconde, de middelste knop 1 minuut per seconde en de bovenste knop 1 uur per seconde. Een vrij hoge mate van nauwkeurigheid moet haalbaar zijn, zodat u deze niet vaak hoeft aan te passen.

Als u seconden, minuten of uren aanpast (bijvoorbeeld als de minuten 58, 59, 00 zijn vooruitgegaan), gaat het uur naar het volgende uur.

Deze drie knoppen zijn een last-minute toevoeging aan de klok, ze werken goed, maar er is misschien een betere manier. Onthoud dat als je knoeit met dit deel van de code de "delay();" commando kan niet worden gebruikt. Ik heb deze methode gebruikt omdat ik me geen zorgen hoef te maken over het stuiteren van de schakelaar en vreemde sprongen in de tijd.

Stap 4: Wat het display laat zien

Wat het display laat zien
Wat het display laat zien

Ik heb veel informatie op het 1602 LCD-scherm gezet die enige uitleg behoeft:

Regel 1 Of regel nul '0' wanneer in code wordt gesproken, toont de standaardtijd. Links staat 'STD', dit staat voor 'STandarD' tijd.

De volgende op de eerste regel in het midden is uw lokale standaardtijd. Begin niet met zomertijd, de klok zal dit op de tweede regel aangeven.

Deze tijdschaal is een 12-uurs klok, dus aan de rechterkant staat 'AM of 'PM' om de ochtend of na de middag aan te geven.

Regel 2 Of regel één '1' wanneer in code wordt gesproken, toont de zomertijd die varieert afhankelijk van de dag van het jaar. De 'DST' aan de linkerkant betekent 'Zomertijd'

In het midden van de tweede regel staat uw lokale militaire tijd, een 24-uurs klok. Je zult het bijvoorbeeld 'oh zeshonderd uur' horen noemen.

Aan de rechterkant is de dag van het jaar zoals vermeld vanaf de winterzonnewende, op het noordelijk halfrond is 21 december (ongeveer) dag nul '0' en op het zuidelijk halfrond is 21 juni (ongeveer) dag nul '0'.

Ik heb twee.pdf-bestanden ter referentie verstrekt bij het voor het eerst instellen van de klok. Kies het bestand dat verwijst naar het halfrond waarin u woont.

De drie knoppen aan de rechterkant verhogen seconden, minuten en uren van onder naar boven.

Stap 5: Schetsconfiguratie

Schets instellen
Schets instellen

Er zijn verschillende regels code die moeten worden ingesteld voor de eerste keer opstarten. Sommige van deze regels moeten worden gewijzigd telkens wanneer u de klok loskoppelt en de waarden van de variabelen in de schets wijzigt. Als u de klok voor de IDE start, duurt het ongeveer 6 seconden om te laden en te starten. Als je de schets vanuit de IDE laadt, ontkoppel dan de klok en start hem opnieuw op vanaf een muurwrat of voeding. De schets zal in ongeveer 2,5 seconden opstarten.

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

Deze regel adresseert het LCD-scherm en stelt het juiste adres van de I2C-rugzak in. 0x27 is het adres van alle rugzakken die ik heb gekocht. Als u de klok aanzet, maar er worden geen gegevens weergegeven, maar het adres is waarschijnlijk anders op uw LCD-scherm. Ik zal hieronder een link plaatsen voor een beschrijving van hoe u het adres van uw LCD-rugzak kunt wijzigen of het adres kunt vinden.

Lijnen 24 int minuteSt = 35;

Stel de startminuut in voor de standaardklok, meestal 5 minuten voordat u de klok start om de insteltijd mogelijk te maken.

Lijnen 25 int uurSt = 18;

Stel het uur in op STD-tijd (24-uurs klok) begint over. 18.00 uur zou 18 uur zijn.

Lijn 26 int DSTdays = 339;

Download en raadpleeg het pdf-bestand "Easy DST Clock Time Scale" (noordelijk of zuidelijk halfrond) waarin u woont, zoek de datum op en voeg de dag # in deze regel in. (Linker kolom). Voorbeeld (24 november is dag #339 op het noordelijk halfrond en dag #156 op het zuidelijk halfrond)

Lijn 27 int DSTjaar = 2019;

Vul het huidige jaar in.

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

De "vorige MasterTimeSt" moet worden vergeleken met het aantal milliseconden, dus deze '1000' moet mogelijk worden gewijzigd in 999, afhankelijk van de interne klok van het Arduino-bord, en pas vervolgens de vorige MicroTime aan om de klok fijn af te stemmen. De interne klok, hoewel 16MH variaties heeft van het ene bord naar het andere.

De "previousMicroTimeSt" stemt de interne klok nauwkeurig af om een nauwkeurige 1 seconde te helpen aftellen. Als de klok te snel is, verhoog dan de microseconden en als de klok te langzaam is, verlaag dan de microseconden en verlaag indien nodig de milliseconden naar 999 en start dan de microseconden op ongeveer 999, 990 of verhoog de snelheid van de klok.

Elk Arduino-bord heeft een iets andere snelheid, daarom veranderen deze nummers met elk bord dat je gebruikt. Een deel van de code is nog niet getest, dit is regel 248 voor elk schrikkeljaar. De komende weken zal ik het testen en eventuele wijzigingen posten.

Stap 6: Laatste opmerkingen

Laatste opmerkingen
Laatste opmerkingen

Dit project is eenvoudig te bouwen maar het concept en de nodige aanpassingen in de code kan een opgave zijn, neem de tijd en denk er goed over na, de klok loopt pas eind 2037 af. Ik ga mijn e-mail voor vragen, want ik weet zeker dat die er zullen zijn, ik ben geen literair genie, dus sommige van mijn beschrijvingen kunnen een beetje modderig zijn.

Er zijn twee.pdf-bestanden inbegrepen, download het bestand voor het halfrond waarin u woont, dit bestand geeft u de nodige informatie om de klok nauwkeurig te starten.

Met de informatie die in de schets is gemanipuleerd, zou het gemakkelijk zijn om niet alleen de standaardtijd en DST-tijd, maar ook dag en datum op een 2004A LCD-scherm weer te geven. Als je van de uitdagingen houdt die dit project biedt, probeer dan een 2004A LCD-scherm aan te sluiten en voeg dan code toe om de aanvullende informatie weer te geven of als er voldoende interesse wordt getoond, zal ik een andere variant van dit project doen, inclusief deze aanvullende informatie.

Ik heb geprobeerd allesomvattend te zijn in dit project, maar ik heb drie gebieden in de betreffende wereld gevonden. De Noordpool, de Zuidpool en de evenaar.

Is zomertijd nodig of zelfs mogelijk op de Noord- of Zuidpool?

Hoe laat is het op de Noord- of Zuidpool?

In welke richting zou je reizen om de Noordpool of Zuidpool te verlaten?

In welke richting zou u vanaf de Zuidpool reizen om Australië, Noord-Amerika, Europa of Azië te bereiken?

In welke tijdzone woont de kerstman?

Heeft hij DST nodig?

Hoe laat is het eigenlijk op de Noordpool?

In welke richting reist de Kerstman om al zijn geschenken af te leveren?

Op welke breedtegraad is DST effectief?

Nu voor de evenaar;

Is deze klok bruikbaar op de evenaar?

Zouden ze de schaal van het noordelijk of zuidelijk halfrond gebruiken?

Wat zijn de data voor de winterzonnewende en de zomerzonnewende?

Op welke breedtegraad is DST effectief?

Hebben de pinguïns DST nodig?

Denk je dat ik raar ben om over deze vragen na te denken?

Veel bouwplezier allemaal!

philmnut

Stap 7: Andere links

Dit is een link om het adres op de I2C-rugzak te bepalen of te wijzigen:

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

PiotrS heeft een uitstekende instructable geschreven voor I2C-hardwareadressen

playground.arduino.cc/Main/I2cScanner

Deze link scant uw I2C-apparaat en retourneert het adres

Aanbevolen: