Innehållsförteckning:

Enkel sommartid: 7 steg
Enkel sommartid: 7 steg

Video: Enkel sommartid: 7 steg

Video: Enkel sommartid: 7 steg
Video: Таблица умножения больше не нужна / Умножение любых чисел без калькулятора @arinablog 2024, Juli
Anonim
Enkel sommartid
Enkel sommartid
Enkel sommartid
Enkel sommartid

Berättelse

Detta projekt började som en utmaning för mig att lära mig programmering (kodning) med Arduino Uno och en enda 1602A LCD -display, jag ville först driva Arduino till dess gränser för noggrannhet. Detta är ett projekt för att bygga en klocka utan användning av en RTC -modul (Real Time Clock -modul) och vidare inte använda någon fördröjning (); kommandon eftersom fördröjningen (); kommandot stoppar koden under en bestämd tid. När jag arbetade igenom den grundläggande tiden för att hålla koden trodde jag att det här kan vara lite vardagligt, så jag bestämde mig för att lägga till en sommartidsfunktion som ett nytt tillägg för att krydda saker och möjligen skapa lite mer intresse för detta projekt. Först var idén ren, men ju mer jag arbetar med den och tittar på den fysiska klockan jag har på skrivbordet, desto mer praktisk blir idén. Genom att lägga till en RTC -modul och justera koden skulle denna klocka vara korrekt i många år framöver och till mycket låg kostnad för tillverkare och allmänhet som köper en sådan klocka.

Sommartid eller (DST) har funnits i 100+ år (Google det har en ganska färgstark historia). Jag vill inte gå in i politiken, men det är en grov och smärtsam övning som inte gör livet enkelt för vanliga människor (du och jag). För det mesta njuter vi av den extra timmen med dagsljus, men sättet på vilket det är brutalt. Det är dags för en stor uppgradering till en mycket gammal idé.

Detta exempel är lätt att leva med och med den digitala tidsåldern och tekniska framsteg som enkelt tillämpas på alla former av digitala klockor, men kan hjälpa den analoga klockans bortgång. I stället för ett 1 timmars hopp från standardtid till sommartid då är sommartid till standardtid baserat på den gradvisa tiden från vintersolståndet till sommarsolståndet och sedan tillbaka till standardtiden vid nästa vintersolstånd år efter år. Denna övergång sker 180 dagar av varje 6 -månadersperiod, justeringen är 20 sekunder om dagen i 360 dagar med de återstående 5 eller 6 dagarna som läggs till längden solstånden. Mitt exempel här ökar 1 minut var tredje dag inom 180 -dagarscykeln. Den 21 juni varje år är klockan hela 1 timme framåt och ungefär 21 december varje år har klockan glidit tillbaka till standardtiden. Skottår redovisas enkelt, särskilt om en RTC används. Södra halvklotet är också lätt att anpassa till den här klockan. Bildskalan är helt enkelt 6 månader ur fas från norra halvklotet.

Det finns tre platser i världen som sommartid skulle vara ganska mycket om inte, ekvatorialregionen och polerna. Jag tror inte att dagsljuset förändras särskilt mycket vid ekvatorn, jag vet inte om någon av de tropiska områdena ens använder DST och polerna är en annan historia igen, bara "VAD" tid är det vid polerna ändå?

Steg 1: Om klockan

Om klockan
Om klockan
Om klockan
Om klockan

Klockan jag har skapat är baserad på standardtid som aldrig skiljer sig från den internationellt accepterade världsklockan, den visas på första raden i 1602 LCD. Den andra raden är samma tidsskala men den visar förskjutningen av minuter från en solstice till nästa. Från vintersolståndet till sommarsolståndet ökar offset en minut var tredje dag upp till maximalt sextio minuter. Från sommarsolståndet till vintersolståndet minskar offset en minut var tredje dag tills standardtid och sommartid är desamma.

I det här exemplet har jag använt militär tid (24 -timmars klocka) och standardtid (12 -timmars klocka) AM och PM för att hjälpa de personer som inte är bekanta med 24 -timmars tidsskalan, det gav också mitt rum att visa dagnumret DST är ställa in från. Koden kan ändras för att visa 12 -timmars klockan. Jag har lagt till tre tryckknappar anslutna till digitala stift 2, 3 och 4 för att justera tiden. Dessa knappar ökar bara sekunder, minuter eller timmar. Knapparna är valfria, klockan fungerar fortfarande bra om du inte kopplar in knapparna och inte behöver ändra koden. Jag skulle rekommendera åtminstone att använda en knapp för att justera sekunderna och om fullständig noggrannhet inte kan uppnås håll klockan på den långsamma sidan, knappen går framåt 1 sekund per sekund.

Om du startar klockan från Arduino IDE tar det cirka 5,5 till 6 sekunder för skissen att ladda och starta, om du har skissen laddad till Arduino kopplar du den sedan till en väggvarta eller strömförsörjning tar det cirka 2,5 till 3 sekunder att starta och köra.

Det krävs viss manuell inställning när du äntligen gör klockan redo för drift.

Denna klocka använder inte en RTC -modul eller doserar den med "delay ();" kommandon.

Om du gillar att använda RTC med Arduino kan detta koncept fortfarande användas. RTC ger dig all information du behöver för att lägga till EDSC -tiden. Koden kan vara ganska annorlunda med en RTC -modul, jag har inte undersökt den. Du är ganska mycket på egen hand om du gör det men det är ett bra sätt att träna din hjärna.

Steg 2: Vad du behöver

Vad du kommer att behöva
Vad du kommer att behöva
Vad du kommer att behöva
Vad du kommer att behöva
Vad du kommer att behöva
Vad du kommer att behöva

INKÖPSLISTA

1 Arduino Uno eller Mega2569 (I2C -stiften är A4 och A5 på UNO och 20 och 21 på 2560 Mega)

Nästan alla andra Arduino borde fungera, stiften som används kan vara olika. För den delen kommer alla styrkort att fungera. Du måste skriva om koden för det kortet eller tillverkaren.

1 1602 LCD -skärm (valfri färg)

Jag använder ett I2C -ryggsäck med LCD -skärmen, jag tycker att det är lättare och snabbare att installera.

Bygelkablar

ALTERNATIVA LEVERANSER

1 medelstor brödbräda

1-3 tillfälliga kontaktknappar

1-3 10 K ohm motstånd

Denna instruerbara är lång, så jag går inte in i fästet eller skåpet jag har använt för att visa klockan. Om du gillar det här projektet och vill göra en permanent version, designa det efter eget tycke. Denna design är perfekt för mig eftersom jag hade allt jag behövde i min skräpbox och jag gillar utseendet på den.

ANMÄRKNINGAR:

För att undvika gropen faller av strömavbrott min sista klocka drivs av en solpanel jag har utanför. Solpanelen håller ett 12 volts batteri laddat med en regulator på den för att förhindra överladdning. Detta batteri är anslutet till Arduino via strömuttaget bredvid USB -porten. Jag håller USB -porten ansluten till nätet för att minska batteridraget. Båda strömkällorna kan användas samtidigt utan att Arduino skadas. Ett 12 volts batteri kan laddas till max 14,5 volt vilket är för högt för Arduino så jag använder en buck -omvandlare för att minska matningsspänningen från batteriet till ett intervall på 9 till 12 volt. Det 12 volts batteri som jag håller laddat räcker i 3 eller 4 dagar om dagarna är mulna. Regulatorn jag använder kommer att bryta strömmen till Arduino om batterispänningen sjunker till 11 volt. Batteriet jag har kommer från nödljussystem för kommersiella byggnader, det är ungefär en fjärdedel av storleken på ett litet bilbatteri. Om du tänker använda ett bilbatteri, var noga med att förvara det i ett väl ventilerat område (utanför), bilbatterier avger väte och syrgas när de laddas och laddas ur, detta är en explosiv kombination.

VARNING

HÅLL BATTERIET VÄL

VENTILERAT OMRÅDE, UTANFÖR

Steg 3: Kabeldragning

Kabeldragning
Kabeldragning

Jag har tillhandahållit en schema för alla anslutningar i detta projekt. Om du använder en brödbräda behöver du en medelstor bräda, omkopplarna behöver utrymme för att spridas ut så att kretsen inte förvirrar.

1602 LCD -skärmen har ett I2C -ryggsäck för enkelhetens skull. Om du använder SPI -anslutningar måste du leta upp hur du använder den och ändra koden nära början av skissen. Jag har aldrig använt SPI -anslutningarna så stift 2, 3 och 4 kanske inte är tillgängliga för de tre tryckknapparna.

De tre tryckknapparna används för att justera tiden på klockan. De förskott bara tiden (framåt). Vid de sista justeringarna håller du klockan i koden på den långsamma sidan (cirka 1 till 2 sekunder per dag eller flera dagar) på detta sätt kan du förflytta tiden vid behov. Varje knapp förflyttar tiden ett steg per sekund, den nedre knappen 2 sekunder per sekund, den mittersta knappen 1 minut per sekund och den övre knappen 1 timme per sekund. En ganska hög grad av noggrannhet bör vara genomförbar så att du inte behöver justera den mycket ofta.

Om du justerar sekunder, minuter eller timmar (till exempel om minuter är avancerade 58, 59, 00) går timmen vidare till nästa timme.

Dessa tre knappar är ett sista tillägg till klockan, de fungerar bra men det kan finnas ett bättre sätt. Kom bara ihåg att om du bråkar med den här delen av koden är "delay ();" kommandot kan inte användas. Jag använde den här metoden eftersom jag inte behöver oroa mig för switchstopp och konstiga hopp i tiden som går framåt.

Steg 4: Vad displayen visar

Vad displayen visar
Vad displayen visar

Jag har lagt mycket information på 1602 LCD -skärmen som behöver lite förklaring:

Rad 1 Eller rad noll '0' när du talar i kod, visar standardtiden. Till vänster står 'STD', detta står för 'STandarD' tid.

Nästa på första raden i mitten är din lokala standardtid. Börja inte med sommartid, klockan visar detta på den andra raden.

Denna tidsskala är en 12 -timmars klocka så på höger sida är 'AM eller' PM 'för att indikera morgon eller efter middag.

Rad 2 Eller rad ett '1' när du talar i kod, visar sommartiden som varierar beroende på årets dag. 'DST' till vänster betyder 'sommartid'

I mitten av den andra raden är din lokala militära tid som är en 24 -timmars klocka. Du kommer att höra det kallas "oh sexhundra timmar" till exempel.

På höger sida är den dag på året som refereras från vintersolståndet, på norra halvklotet (december) (ungefär) är dag noll '0' och på södra halvklotet (21 juni) är dag noll '0'.

Jag har tillhandahållit två.pdf -filer som referens när jag först ställde in klockan. Välj filen som refererar till halvklotet du bor i.

De tre knapparna till höger ökar sekunder, minuter och timmar nedifrån och upp.

Steg 5: Sketch Setup

Sketch Setup
Sketch Setup

Det finns flera kodrader som måste ställas in för den första starten. Några av dessa rader måste vara ändringar varje gång du kopplar ur klockan och ändrar värdena på variablerna i skissen. Om du startar klockan för IDE tar det cirka 6 sekunder att ladda och starta. Om du laddar skissen från IDE kopplar du sedan ur klockan och startar om den från en väggvarta eller strömförsörjning, skissen startar om cirka 2,5 sekunder.

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

Denna rad adresserar LCD -skärmen och anger rätt adress för I2C -ryggsäcken. 0x27 är adressen till någon av de ryggsäckar jag köpte. Om du slår på klockan men det finns ingen data som visas men den lyser upp är adressen förmodligen annorlunda på LCD -skärmen. Jag lägger en länk nedan för en beskrivning av hur du ändrar adressen till ditt LCD -ryggsäck eller hittar adressen.

Linjer 24 int minutSt = 35;

Ställ in startminuten för standardklockan, ställ in den vanligtvis 5 minuter innan du startar klockan för att möjliggöra inställningstid.

Rader 25 int timSt = 18;

Ställ in timmen på STD -tid (24 -timmars klocka) börjar. 18.00 skulle vara timme 18.

Linje 26 int DSTdays = 339;

Ladda ner och hänvisa till pdf -filen "Easy DST Clock Time Scale" (norra eller södra halvklotet) där du bor, leta upp datumet och sätt in Day # i den här raden. (Vänster kolumn). Exempel (24 nov är dag #339 på norra halvklotet och dag #156 på södra halvklotet)

Linje 27 int DSTyear = 2019;

Ange aktuellt år.

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

"PreviousMasterTimeSt" måste jämföras med antalet millisekunder så denna "1000" kan behöva ändras till 999 beroende på den interna klockan på Arduino -kortet och justera sedan föregående MicroTime för att finjustera klockan. Den interna klockan även om 16MH har variationer från ett kort till nästa.

"PreviousMicroTimeSt" finjusterar den interna klockan för att hjälpa till att räkna bort en exakt 1 sekund. Om klockan är för snabb ökar du mikrosekunderna och om klockan är för långsam minskar du mikrosekunderna och vid behov sänker du millisekunderna till 999 och startar sedan mikrosekunderna på cirka 999, 990 eller ökar klockans hastighet.

Varje Arduino -bräda har en något annorlunda hastighet därför kommer dessa siffror att ändras med varje bräda du använder. En del av koden har ännu inte testats, detta är rad 248 för varje skottår. Under de närmaste veckorna kommer jag att testa det och lägga upp eventuella ändringar om det behövs.

Steg 6: Slutanteckningar

Slutanteckningar
Slutanteckningar

Detta projekt är enkelt att bygga men konceptet och nödvändiga justeringar i koden kan vara en uppgift, ta dig tid och tänk igenom det, klockan löper inte ut förrän i slutet av 2037. Jag kommer att hålla ett öga på min mejla för frågor eftersom jag är säker på att det kommer att finnas några, jag är inte ett litterärt geni så några av mina beskrivningar kan vara lite leriga.

Det finns två.pdf -filer, ladda ner filen för halvklotet du bor i. Denna fil ger dig nödvändig information för att starta klockan exakt.

Med informationen manipulerad i skissen skulle det vara lätt att visa inte bara standardtid och sommartid utan också dag och datum på en 2004A LCD. Om du gillar de utmaningar som detta projekt ger, försök ansluta en 2004A LCD -skärm och lägg sedan till kod för att visa ytterligare information eller om tillräckligt intresse visas ska jag göra en annan variant av detta projekt inklusive denna ytterligare information.

Jag har försökt att vara heltäckande i detta projekt men jag hittade tre områden i världen i fråga. Nordpolen, Sydpolen och ekvatorn.

Är DST nödvändigt eller ens möjligt på nord- eller sydpolen?

Vad är klockan på nord- eller sydpolen?

Vilken riktning skulle du resa för att lämna Nordpolen eller Sydpolen?

Från sydpolen, vilken riktning skulle du resa för att nå Austrailia, Nordamerika, Europa eller Asien?

Vilken tidszon bor tomten i?

Behöver han sommartid?

Vad är klockan ändå på Nordpolen?

Vilken riktning går tomten för att leverera alla sina gåvor?

På vilken breddgrad är sommartid effektiv?

Nu till ekvatorn;

Kan denna klocka användas vid ekvatorn?

Skulle de använda norra eller södra halvklotets skala?

Vilka datum är för vintersolståndet och sommarsolståndet?

På vilken breddgrad är sommartid effektiv?

Behöver pingvinerna sommartid?

Tycker du att jag är konstig när jag tänker på dessa frågor?

Lycka till att bygga alla!

philmnut

Steg 7: Andra länkar

Detta är en länk för att bestämma eller ändra adressen på I2C -ryggsäcken:

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

PiotrS har skrivit en utmärkt instruerbar för I2C -hårdvaruadresser

playground.arduino.cc/Main/I2cScanner

Denna länk skannar din I2C -enhet och returnerar adressen

Rekommenderad: