Cuprins:

Ceas ușor de vară: 7 pași
Ceas ușor de vară: 7 pași

Video: Ceas ușor de vară: 7 pași

Video: Ceas ușor de vară: 7 pași
Video: Iuly Neamtu - Basu si Balansu | Manele Mentolate 2024, Iulie
Anonim
Ceas ușor de vară
Ceas ușor de vară
Ceas ușor de vară
Ceas ușor de vară

Poveste

Acest proiect a început ca o provocare pentru mine de a învăța programarea (codarea) cu Arduino Uno și un singur ecran LCD 1602A, am vrut mai întâi să împing Arduino la limitele sale pentru precizie. Acesta este un proiect de construire a unui ceas fără utilizarea unui modul RTC (modul în timp real) și de a nu folosi nici o întârziere (); comanda deoarece delay (); comanda oprește codul pentru o perioadă determinată de timp. Pe măsură ce lucram la codul de bază pentru păstrarea timpului, m-am gândit că acest lucru ar putea fi un pic banal, așa că am decis să adaug o caracteristică pentru ora de vară ca o completare nouă pentru a condimenta lucrurile și, eventual, să creez un pic mai mult interes pentru acest proiect. La început, ideea era pur nouă, dar cu cât lucrez mai mult cu ea și urmăresc ceasul fizic pe care îl rulez pe birou, cu atât ideea devine mai practică. Prin adăugarea unui modul RTC și ajustarea codului, acest ceas ar fi corect pentru anii următori și la un cost foarte mic pentru producătorii și publicul care cumpără un astfel de ceas.

Ora de vară sau (DST) există de peste 100 de ani (Google it, are o istorie destul de colorată). Nu vreau să intru în politica ei, dar este un exercițiu dur și dureros care nu ușurează viața oamenilor de rând (tu și eu). În cea mai mare parte ne bucurăm de ora suplimentară de lumină, dar modul în care este aplicat este brutal. Este timpul pentru un upgrade major la o idee foarte veche.

Acest exemplu este ușor de trăit cu și cu era digitală și progresele tehnologice aplicate cu ușurință tuturor formelor de ceasuri digitale, dar ar putea ajuta la dispariția ceasului analogic. Mai degrabă decât o săritură de 1 oră de la ora standard la ora de vară, apoi ora de vară la ora standard, acest ceas se bazează pe progresia treptată a timpului de la solstițiul de iarnă la solstițiul de vară, apoi înapoi la ora standard la următorul solstițiu de iarnă an după an. Această tranziție are loc 180 de zile din fiecare perioadă de 6 luni, ajustarea este de 20 de secunde pe zi timp de 360 de zile, cu restul de 5 sau 6 zile adăugate la lungimea solstițiilor. Exemplul meu aici mărește 1 minut o dată la trei zile în cadrul ciclului de 180 de zile. Pe sau în jurul datei de 21 iunie a fiecărui an, ceasul este cu o oră completă înainte și pe sau în jurul datei de 21 decembrie a fiecărui an, ceasul a revenit la ora standard. Anul bisect este contabilizat cu ușurință mai ales dacă se utilizează un RTC. Emisfera sudică este ușor de adaptat și la acest ceas, scara de diapozitive este pur și simplu cu 6 luni defazată din emisfera nordică.

Există trei locuri în lume în care DST ar fi destul de mult decât dacă, regiunea ecuatorială și polii. Nu cred că lumina zilei se schimbă prea mult la ecuator, nu știu dacă vreuna dintre zonele tropicale folosește chiar DST, iar polii sunt din nou o poveste diferită, doar „CÂT” este oricum la poli?

Pasul 1: Despre ceas

Despre Ceas
Despre Ceas
Despre Ceas
Despre Ceas

Ceasul pe care l-am creat se bazează pe ora standard care nu variază niciodată față de ceasul mondial acceptat la nivel internațional, acesta este afișat pe prima linie a ecranului LCD 1602. A doua linie este aceeași scară de timp, dar arată setul de minute de la un solstițiu la altul. De la solstițiul de iarnă la solstițiul de vară, compensarea crește cu un minut la fiecare trei zile până la maximum șaizeci de minute. De la solstițiul de vară la solstițiul de iarnă, offset-ul scade un minut la fiecare trei zile până când ora standard și ora de vară sunt aceleași.

Pentru acest exemplu, am folosit ora militară (ceasul de 24 de ore) și ora standard (ceasul de 12 ore) AM și PM pentru a ajuta persoanele care nu sunt familiarizați cu scara de timp de 24 de ore, de asemenea, mi-a dat camera să afișeze numărul zilei în care este ora de vară. setat din. Codul poate fi modificat pentru a afișa ceasul de 12 ore. Am adăugat trei butoane conectate la pinii digitali 2, 3 și 4 pentru a regla timpul. Aceste butoane vor crește doar secunde, minute sau ore. Butoanele sunt opționale, ceasul va funcționa în continuare dacă nu conectați butoanele și nu este nevoie să modificați codul. Aș recomanda cel puțin utilizarea unui buton pentru a regla secundele și dacă nu se poate obține o precizie completă, mențineți ceasul pe partea lentă, butonul avansează timpul cu 1 secundă pe secundă.

Dacă porniți ceasul de la Arduino IDE, va dura aproximativ 5,5 până la 6 secunde pentru ca schița să se încarce și să pornească, dacă aveți schița încărcată pe Arduino, apoi conectați-o la un neg de perete sau la sursa de alimentare va dura aproximativ 2,5 până la 3 secunde pentru a porni și a rula.

Există câteva setări manuale necesare atunci când în sfârșit pregătiți ceasul pentru funcționare.

Acest ceas nu folosește un modul RTC și nici nu dozează utilizarea "delay ();" comenzi.

Dacă vă place să utilizați RTC cu Arduino, acest concept poate fi încă folosit. RTC vă va oferi toate informațiile de care aveți nevoie pentru a adăuga ora EDSC. Codul poate fi destul de diferit cu un modul RTC, nu l-am analizat. Ești destul de singur, dacă o faci, dar este o modalitate excelentă de a-ți exercita creierul.

Pasul 2: De ce veți avea nevoie

Ce vei avea nevoie
Ce vei avea nevoie
Ce vei avea nevoie
Ce vei avea nevoie
Ce vei avea nevoie
Ce vei avea nevoie

LISTA DE CUMPARATURI

1 Arduino Uno sau Mega2569 (pinii I2C sunt A4 și A5 pe UNO și 20 și 21 pe 2560 Mega)

Aproape orice alt Arduino ar trebui să funcționeze, pinii utilizați pot fi diferiți. De altfel, orice placă de control va funcționa. Va trebui să rescrieți codul pentru placa respectivă sau producătorul respectiv.

1 afișaj LCD 1602 (culoarea la alegere)

Folosesc un rucsac I2C cu LCD, mi se pare mai ușor și mai rapid de configurat.

Sârme de jumper

PRODUSE OPȚIONALE

1 tablă de pâine de dimensiuni medii

1-3 butoane de contact momentane

1-3 rezistențe de 10 K ohm

Această instrucțiune este lungă, așa că nu intru în montaj sau în dulapul pe care l-am folosit pentru a afișa ceasul. Dacă îți place acest proiect și vrei să faci o versiune permanentă, proiectează-l după bunul tău gust. Acest design este perfect pentru mine, deoarece aveam tot ce aveam nevoie în cutia de gunoi și îmi place aspectul acestuia.

NOTE:

Pentru a evita căderile de curent din întreruperile de curent, ceasul meu final este alimentat de un panou solar pe care îl am afară. Panoul solar menține o baterie de 12 volți încărcată cu un regulator pentru a preveni supraîncărcarea. Această baterie este conectată la Arduino prin mufa de alimentare de lângă portul USB. Mențin portul USB conectat la rețea pentru a reduce consumul de baterie. Ambele surse de alimentare pot fi utilizate în același timp, fără a afecta Arduino. O baterie de 12 volți poate fi încărcată la 14,5 volți maxim, care este prea mare pentru Arduino, așa că folosesc un convertor Buck pentru a reduce tensiunea de alimentare de la baterie la un interval de 9 până la 12 volți. Bateria de 12 volți pe care o țin încărcată va dura 3 sau 4 zile dacă zilele sunt acoperite. Regulatorul pe care îl folosesc va întrerupe energia Arduino dacă tensiunea bateriei scade la 11 volți. Bateria pe care o am provine din sistemul de iluminare de urgență pentru clădirile comerciale, are aproximativ un sfert din mărimea unei baterii mici pentru mașini. Dacă intenționați să utilizați o baterie auto, asigurați-vă că o păstrați într-o zonă bine ventilată (în exterior), bateriile auto degajând hidrogen și oxigen gaz pe măsură ce se încarcă și se descarcă, aceasta este o combinație explozivă.

AVERTIZARE

PĂSTRAȚI BATERIA ÎN BUN

ZONA VENTILATĂ, IN AFARA

Pasul 3: Cablare

Cablare
Cablare

Am furnizat o schemă pentru toate conexiunile din acest proiect, dacă utilizați o placă de calcul, veți avea nevoie de o placă de dimensiuni medii, întrerupătoarele vor avea nevoie de spațiu pentru a fi întins, astfel încât circuitul să nu fie confuz.

Afișajul LCD 1602 are un pachet din spate I2C pentru simplitate, dacă utilizați conexiuni SPI va trebui să căutați cum să îl utilizați și să modificați codul aproape de începutul schiței. Nu am folosit niciodată conexiunile SPI, astfel încât este posibil ca pinii 2, 3 și 4 să nu fie disponibili pentru cele trei butoane.

Cele trei butoane sunt utilizate pentru a regla ora ceasului. Ei avansează doar timpul (ÎNAINTE). În ultimele ajustări, păstrați ceasul în cod pe partea lentă (aproximativ 1 până la 2 secunde pe zi sau câteva zile) astfel puteți avansa ora, dacă este necesar. Fiecare buton avansează timpul cu o creștere pe secundă, butonul inferior 2 secunde pe secundă, butonul din mijloc 1 minut pe secundă și butonul superior 1 oră pe secundă. Un grad destul de ridicat de precizie ar trebui să fie realizabil, astfel încât nu va trebui să-l reglați foarte des.

Dacă reglați secunde, minute sau ore (de exemplu, dacă minutele sunt avansate 58, 59, 00), ora va avansa la ora următoare.

Aceste trei butoane sunt o completare de ultim moment la ceas, funcționează bine, dar poate exista o modalitate mai bună. Amintiți-vă doar că, dacă vă deranjați cu această parte a codului, "delay ();" comanda nu poate fi utilizată. Am folosit această metodă pentru că nu trebuie să îmi fac griji cu privire la săriturile de comutare și la salturile ciudate în timp.

Pasul 4: Ce arată afișajul

Ce arată afișajul
Ce arată afișajul

Am pus o mulțime de informații pe ecranul LCD 1602 care necesită explicații:

Linia 1 Sau linia zero '0' când vorbim în cod, arată ora standard. În stânga este „STD”, aceasta înseamnă timpul „STandarD”.

Următorul pe prima linie din mijloc este ora standard locală. Nu începeți cu ora de vară, ceasul va afișa aceasta pe a doua linie.

Această scală de timp este un ceas de 12 ore, astfel încât în partea dreaptă este „AM sau„ PM”pentru a indica dimineața sau după amiază.

Linia 2 Sau linia unu '1' când vorbim în cod, arată ora de vară care variază în funcție de ziua anului. „DST” din stânga înseamnă „Ora de vară”

În mijlocul celei de-a doua linii se află ora militară locală, care este un ceas de 24 de ore. Veți auzi, de exemplu, denumit „oh șase sute de ore”.

În partea dreaptă este ziua anului, așa cum se face referire la solstițiul de iarnă, în emisfera nordică 21 decembrie (aproximativ) este ziua zero „0”, iar în emisfera sudică 21 iunie (aproximativ) este ziua zero „0”.

Am furnizat două fișiere.pdf pentru referință la prima configurare a ceasului. Alegeți fișierul care se referă la emisfera în care locuiți.

Cele trei butoane din dreapta cresc secunde, minute și ore de jos în sus.

Pasul 5: Configurare schiță

Configurare schiță
Configurare schiță

Există mai multe linii de cod care trebuie configurate pentru pornirea inițială. Unele dintre aceste linii trebuie să fie modificate de fiecare dată când deconectați ceasul și modificați valorile variabilelor din schiță. Dacă porniți ceasul pentru IDE, va dura aproximativ 6 secunde pentru încărcare și pornire. Dacă încărcați schița de pe IDE, deconectați ceasul și reporniți-l de la un neg de perete sau de la sursa de alimentare, schița va porni în aproximativ 2,5 secunde.

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

Această linie se adresează afișajului LCD și setează adresa corectă a rucsacului I2C. 0x27 este adresa oricăruia dintre pachetele pe care le-am cumpărat. Dacă porniți ceasul, dar nu sunt afișate date, dar acesta se aprinde, adresa este probabil diferită pe ecranul LCD. Voi pune un link mai jos pentru o descriere a modului de modificare a rucsacului LCD sau a găsirii adresei.

Linii 24 int minuteSt = 35;

Setați minutul de început pentru ceasul standard, setați-l de obicei cu 5 minute înainte de a porni ceasul pentru a permite timpul de configurare.

Linii 25 int orăSt = 18;

Setați ora la ora STD (ceasul de 24 de ore) începe. 18:00 ar fi ora 18.

Linia 26 int DSTdays = 339;

Descărcați și consultați fișierul pdf „Easy DST Clock Time Scale” (emisfera nordică sau sudică) în care locuiți, căutați data și introduceți ziua # în această linie. (Coloana din stânga). Exemplu (24 noiembrie este ziua # 339 în emisfera nordică și ziua # 156 în emisfera sudică)

Linia 27 int DSTyear = 2019;

Introduceți anul curent.

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

„PreviousMasterTimeSt” trebuie comparat cu numărul de milisecunde, deci este posibil ca acest „1000” să fie schimbat la 999, în funcție de ceasul intern al plăcii Arduino, apoi reglați precedentMicroTime pentru a regla fin ceasul. Ceasul intern, deși 16MH are variații de la o placă la alta.

„PreviousMicroTimeSt” reglează fin ceasul intern pentru a ajuta la contorizarea unei secunde precise. Dacă ceasul este prea rapid creșteți microsecundele și dacă ceasul este prea lent micșorați microsecundele și, dacă este necesar, scăpați milisecundele la 999 și apoi porniți microsecundele la aproximativ 999, 990 sau măriți viteza ceasului.

Fiecare placă Arduino are o viteză ușor diferită, prin urmare aceste numere se vor schimba cu fiecare placă pe care o utilizați. O parte din cod nu a fost încă testată, aceasta este linia 248 pentru fiecare an bisect. În următoarele câteva săptămâni îl voi testa și voi posta orice modificări, dacă este necesar.

Pasul 6: Note finale

Note finale
Note finale

Acest proiect este ușor de construit, dar conceptul și ajustările necesare în cod pot fi o sarcină, luați-vă timp și gândiți-vă bine, ceasul nu expiră până la sfârșitul anului 2037. Voi urmări cu atenție trimiteți un e-mail pentru întrebări, deoarece sunt sigur că vor exista unele, nu sunt un geniu literar, așa că unele dintre descrierile mele pot fi un pic noroioase.

Există două fișiere.pdf incluse, descărcați fișierul pentru emisfera în care locuiți, acest fișier vă va oferi informațiile necesare pentru a porni ceasul cu precizie.

Cu informațiile manipulate în schiță, ar fi ușor să afișați nu numai ora standard și ora DST, ci și ziua și data pe un LCD 2004A. Dacă vă plac provocările pe care le oferă acest proiect, încercați să conectați un afișaj LCD 2004A, apoi adăugați cod pentru a afișa informațiile suplimentare sau dacă este afișat suficient interes, voi face o altă variantă a acestui proiect, inclusiv aceste informații suplimentare.

Am încercat să fiu atotcuprinzător în acest proiect, dar am găsit trei zone din lume în cauză. Polul Nord, Polul Sud și Ecuatorul.

Este DST necesară sau chiar posibilă în polul nord sau sud?

Ce oră este la Polul Nord sau Sud?

În ce direcție ați călători pentru a părăsi Polul Nord sau Polul Sud?

Din Polul Sud ce direcție ați călători pentru a ajunge la Austrailia, America de Nord, Europa sau Asia?

În ce fus orar trăiește Moș Crăciun?

Are nevoie de ora de vară?

Ce oră este oricum la Polul Nord?

În ce direcție călătorește Moș Crăciun pentru a-și livra toate darurile?

La ce latitudine este eficient DST?

Acum pentru ecuator;

Este acest ceas utilizabil la Ecuator?

Ar folosi scara emisferei nordice sau sudice?

Care sunt datele pentru solstițiul de iarnă și solstițiul de vară?

La ce latitudine este eficient DST?

Pinguinii au nevoie de DST?

Crezi că sunt ciudat că mă gândesc la aceste întrebări?

Fericit de construirea tuturor!

filmnut

Pasul 7: Alte legături

Acesta este un link pentru a determina sau schimba adresa de pe pachetul I2C:

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

PiotrS a scris o instruire excelentă pentru adresele hardware I2C

playground.arduino.cc/Main/I2cScanner

Acest link vă va scana dispozitivul I2C și vă va returna adresa

Recomandat: