Mündəricat:

Asan Yaz Saatı: 7 addım
Asan Yaz Saatı: 7 addım

Video: Asan Yaz Saatı: 7 addım

Video: Asan Yaz Saatı: 7 addım
Video: Ayçin Asan - Her Şeyim Oldun 2024, Iyul
Anonim
Asan Gündüz Qənaət Saatı
Asan Gündüz Qənaət Saatı
Asan Gündüz Qənaət Saatı
Asan Gündüz Qənaət Saatı

Hekayə

Bu layihə, Arduino Uno və tək bir 1602A LCD displey ilə proqramlaşdırma (kodlaşdırma) öyrənməyim üçün çətinliklə başladı, əvvəlcə Arduino -nu dəqiqliyi üçün həddinə çatdırmaq istədim. Bu, RTC modulu (Real Time Clock modulu) istifadə etmədən bir saat qurmaq və heç bir gecikmə () istifadə etməmək üçün bir layihədir; əmr verir, çünki gecikmə (); əmri kodu müəyyən bir müddətə dayandırır. Kod saxlamağın əsas vaxtını işləyərkən bunun bir az sıradan bir şey ola biləcəyini düşündüm, buna görə də hər şeyi ədviyyatlandırmaq üçün yeni bir əlavə olaraq gün işığına qənaət etmək xüsusiyyətini əlavə etmək və bəlkə də bu layihəyə bir az daha çox maraq yaratmaq qərarına gəldim. Əvvəlcə fikir tamamilə yeni idi, amma nə qədər çox çalışsam və masamda işlədiyim fiziki saata baxsam, fikir o qədər praktik olur. Bir RTC modulu əlavə edərək və kodu tənzimləyərək, bu saat gələcək illər üçün dəqiq olardı və belə bir saat alan istehsalçılar və ictimaiyyət üçün çox aşağı qiymətə.

Yaz Saatı və ya (DST) 100+ ildir ki, mövcuddur (Google, olduqca rəngarəng bir tarixə malikdir). Siyasətə girmək istəmirəm, amma sadə insanların (sən və mənim) həyatını asanlaşdırmayan kobud və ağrılı bir məşqdir. Çox vaxt gün işığının əlavə vaxtından zövq alırıq, amma tətbiq üsulu qəddardır. Çox köhnə bir fikrə böyük bir yüksəliş zamanıdır.

Bu nümunə rəqəmsal yaşla və texnologiyanın inkişafı ilə bütün rəqəmsal saatlar üçün asanlıqla tətbiq oluna bilər, ancaq analog saatın dağılmasına kömək edə bilər. Standart vaxtdan DST vaxtına, sonra DST vaxtından standart vaxta 1 saat tullanmaq əvəzinə, bu saat qış gündönümündən yaz gündönümünə qədər olan zamanın tədricən irəliləməsinə əsaslanaraq ildən -ilə növbəti qış gündönümündə standart vaxta qayıdır. Bu keçid hər 6 aylıq dövrdən 180 gün ərzində baş verir, tənzimləmə 360 gün ərzində gündə 20 saniyədir, qalan 5 və ya 6 gün solsticesin uzunluğuna əlavə olunur. Buradakı nümunəm 180 günlük dövr ərzində üç gündə bir dəfə 1 dəqiqə artır. Hər il təxminən 21 İyunda və ya təxminən 1 saat irəlidədir və hər il təxminən 21 Dekabrda saat standart vaxta qayıtmışdır. Xüsusilə bir RTC istifadə edildikdə, sıçrayış ili asanlıqla hesablanır. Cənub Yarımkürəsi də bu saata asanlıqla uyğunlaşdırılır, sürüşmə miqyası şimal yarımkürəsindən fazadan 6 ay sonra.

Dünyada ekvator bölgəsi və qütblər olmadığı təqdirdə DST -nin olduqca çox olacağı üç yer var. Gün işığının ekvatorda çox dəyişdiyini düşünmürəm, tropik ərazilərdən hər hansı birinin DST istifadə etdiyini və qütblərin yenidən fərqli bir hekayə olduğunu bilmirəm, hər halda qütblərdə 'NƏ' vaxtıdır?

Addım 1: Saat haqqında

Saat haqqında
Saat haqqında
Saat haqqında
Saat haqqında

Yaratdığım saat, beynəlxalq səviyyədə qəbul edilən dünya saatından heç vaxt fərqlənməyən standart saata əsaslanır, bu 1602 LCD -nin birinci sətrində göstərilir. İkinci sətir eyni vaxt ölçüsüdür, ancaq bir gündönümündən digərinə qədər olan dəqiqələri göstərir. Qış gündönümündən yay gündönümünə qədər hər üç gündə bir dəqiqə maksimum altmış dəqiqəyə qədər artır. Yaz gündönümündən qış gündönümünə qədər standart vaxt və DST vaxtı eyni olana qədər hər üç gündə bir dəqiqə azalır.

Bu nümunə üçün 24 saatlıq vaxt ölçüsü ilə tanış olmayan insanlara kömək etmək üçün hərbi vaxt (24 saat) və standart vaxt (12 saat) AM və PM -dən istifadə etdim, eyni zamanda otağıma DST -nin gün nömrəsini göstərdi. dən təyin edin. Kod 12 saatlıq saatı göstərmək üçün dəyişdirilə bilər. Vaxtı tənzimləmək üçün rəqəmsal sancaqlar 2, 3 və 4 -ə bağlı üç düyməni əlavə etdim. Bu düymələr yalnız saniyələri, dəqiqələri və ya saatları artıracaq. Düymələr isteğe bağlıdır, düymələri bağlamasanız və kodu dəyişdirməyə ehtiyacınız yoxdursa, saat hələ də yaxşı işləyəcək. Ən azı saniyələri tənzimləmək üçün bir düyməni istifadə etməyi məsləhət görürəm və tam dəqiqliyə nail olmaq mümkün deyilsə, saatı yavaş tərəfdə saxlayın, düymə saniyədə 1 saniyə irəliləyir.

Saatı Arduino IDE -dən başlatsanız, eskizin yüklənməsi və açılması təxminən 5.5 ilə 6 saniyə çəkəcək, əgər eskiziniz Arduino -ya yüklənmişsə, onu bir divar siğilinə və ya enerji təchizatına qoşun, təxminən 2,5 ilə Yükləmək və qaçmaq üçün 3 saniyə.

Nəhayət saatı işə hazır vəziyyətə gətirdiyiniz zaman bəzi əllə quraşdırma lazımdır.

Bu saat nə RTC modulu, nə də "delay ();" dozasını istifadə etmir. əmrlər.

Arduino ilə RTC istifadə etməyi sevirsinizsə, bu konsepsiya hələ də istifadə edilə bilər. RTC sizə EDSC vaxtını əlavə etmək üçün lazım olan bütün məlumatları verəcəkdir. Kod bir RTC modulu ilə tamamilə fərqli ola bilər, buna baxmadım. Əgər bunu etsəniz, demək olar ki, təkbaşına olursunuz, ancaq beyninizi məşq etmək üçün əla bir yoldur.

Addım 2: Ehtiyacınız olacaq

Ehtiyacınız olacaq
Ehtiyacınız olacaq
Ehtiyacınız olacaq
Ehtiyacınız olacaq
Ehtiyacınız olacaq
Ehtiyacınız olacaq

ALIŞ-VERİŞ SİYAHISI

1 Arduino Uno və ya Mega2569 (I2C pinləri UNO -da A4 və A5, 2560 Meqada isə 20 və 21 -dir)

Demək olar ki, hər hansı digər Arduino işləməlidir, istifadə olunan sancaqlar fərqli ola bilər. Bu baxımdan hər hansı bir idarəetmə lövhəsi işləyəcək. Bu lövhənin və ya istehsalçının kodunu yenidən yazmalı olacaqsınız.

1 1602 LCD ekran (seçdiyiniz rəng)

LCD ilə bir I2C arxa paket istifadə edirəm, qurmağı daha asan və daha sürətli görürəm.

Jumper telləri

İSTƏYƏN QAYDALAR

1 orta ölçülü çörək lövhəsi

1-3 anlıq əlaqə düymələri

1-3 10 K ohm rezistorlar

Bu təlimat uzundur, buna görə saatı göstərmək üçün istifadə etdiyim montaj və ya kabinetə girmirəm. Bu layihəni bəyənirsinizsə və daimi bir versiya hazırlamaq istəyirsinizsə, zövqünüzə uyğun dizayn edin. Bu dizayn mənim üçün mükəmməldir, çünki lazım olan hər şeyi çantamda saxlayırdım və görünüşünü bəyənirəm.

QEYDLƏR:

Elektrik kəsilmələrinin çökməməsi üçün son saatım çöldə olan bir günəş paneli ilə işləyir. Günəş paneli, həddindən artıq şarj etməməsi üçün tənzimləyici ilə doldurulmuş 12 voltluq bir batareyanı saxlayır. Bu batareya USB portunun yanındakı güc jakı vasitəsilə Arduino -ya qoşulur. Batareyanın çəkilməsini azaltmaq üçün USB portunu şəbəkəyə bağlı saxlayıram. Hər iki enerji mənbəyi eyni vaxtda Arduinoya zərər vermədən istifadə edilə bilər. 12 voltluq bir batareya Arduino üçün çox yüksək olan maksimum 14,5 volta qədər şarj edilə bilər, buna görə batareyadan gələn gərginliyi 9-12 volt aralığına endirmək üçün bir dollar çeviricidən istifadə edirəm. Doldurduğum 12 voltluq batareya, günlər buludlu olarsa 3 və ya 4 gün davam edəcək. İstifadə etdiyim tənzimləyici, batareya gərginliyi 11 volta düşərsə Arduinonun gücünü kəsər. Sahib olduğum batareya, ticarət binaları üçün fövqəladə işıq sistemindən gəlir, təxminən dörddə biri kiçik bir avtomobil akkumulyatoru ölçüsündədir. Bir avtomobil akkumulyatorundan istifadə etmək niyyətindəsinizsə, onu yaxşı havalandırılan bir yerdə (xaricdə) saxladığınızdan əmin olun, avtomobil akkumulyatorları doldurularkən və boşaldıqda hidrogen və oksigen qazı buraxır, bu partlayıcı bir birləşmədir.

XƏBƏRDARLIQ

BATARYAYI QUYUNDA SAXLAYIN

Ventilyasiya edilmiş sahə, Xaricdə

Addım 3: Kabel çəkmə

Kablolama
Kablolama

Bu layihədəki bütün əlaqələr üçün bir sxem təqdim etdim, bir çörək taxtasından istifadə etsəniz, orta ölçülü bir lövhəyə ehtiyacınız olacaq, açarların yayılması üçün yer lazım olacaq, belə ki dövrə qarışıq deyil.

1602 LCD displeydə sadəlik üçün I2C arxa paketi var, SPI bağlantılarından istifadə edirsinizsə, onu necə istifadə etməli olduğunuzu araşdırmalı və eskizin əvvəlində kodu dəyişdirməlisiniz. Heç vaxt SPI əlaqələrini istifadə etməmişəm, buna görə 2, 3 və 4 pinləri üç düymə üçün mövcud olmaya bilər.

Üç düymə, saatı tənzimləmək üçün istifadə olunur. Onlar yalnız vaxtı qabaqlayırlar (AHEAD). Son düzəlişlərdə, saatı yavaş tərəfdəki kodda saxlayın (gündə təxminən 1-2 saniyə və ya bir neçə gün), lazım olduqda vaxtı artıra bilərsiniz. Hər düymə saniyədə bir artım, altdakı düymə saniyədə 2 saniyə, orta düymə saniyədə 1 dəqiqə və yuxarıdakı düymə saniyədə 1 saat irəliləyir. Kifayət qədər yüksək bir dəqiqlik dərəcəsi edilə bilər, buna görə çox vaxt tənzimləməyinizə ehtiyac yoxdur.

Saniyələri, dəqiqələri və ya saatları düzəldirsinizsə (məsələn, dəqiqələr 58, 59, 00 -a qədər uzadılıbsa) saat növbəti saata irəliləyəcək.

Bu üç düymə saata son dəqiqə əlavəsidir, yaxşı işləyir, amma daha yaxşı bir yol ola bilər. Unutmayın ki, kodun bu hissəsini qarışdırsanız "delay ();" əmr istifadə edilə bilməz. Zaman keçdikcə keçid sıçrayışı və qəribə sıçrayışlardan narahat olmağım lazım olmadığı üçün bu üsuldan istifadə etdim.

Addım 4: Ekranda Nələr Göstərilir

Ekranın Göstərdikləri
Ekranın Göstərdikləri

1602 LCD ekrana bir az izahat tələb edən bir çox məlumat qoydum:

1 -ci xətt və ya kodda danışarkən sıfır '0' xətti, standart vaxtı göstərir. Solda 'STD' var, bu 'STandarD' vaxtını ifadə edir.

Ortada ilk sətirdə yerli standart vaxtınız var. Yaz vaxtı ilə başlamayın, saat bunu ikinci sətirdə göstərəcək.

Bu saat ölçüsü 12 saatlıq bir saatdır, buna görə sağ tərəfdə səhər və ya günortadan sonra göstərmək üçün 'AM' və ya 'PM' dir.

Satır 2 Və ya kodla danışarkən '1' sətri, ilin gününə görə dəyişən yaz işığı vaxtını göstərir. Soldakı 'DST', 'Yaz Saatı Əməliyyatı' deməkdir

İkinci xəttin ortasında 24 saatlıq bir saat olan yerli hərbi vaxtınız var. Məsələn, 'oh altı yüz saat' adlandırıldığını eşidəcəksiniz.

Sağ tərəfdə qış gündönümündən bəhs edildiyi kimi ilin günüdür, Şimali Yarımkürədə 21 dekabr (təxminən) sıfır '0' gündür və Cənubi Yarımkürədə 21 İyun (təxminən) sıfır '0' gündür.

Saatı ilk dəfə qurarkən istinad üçün iki.pdf faylı verdim. Yaşadığınız yarımkürəyə aid olan faylı seçin.

Sağdakı üç düymə aşağıdan yuxarıya saniyə, dəqiqə və saatı artırır.

Addım 5: Sketch Setup

Sketch Quraşdırması
Sketch Quraşdırması

İlkin başlanğıc üçün qurulması lazım olan bir neçə kod xətti var. Bu xətlərin bəziləri hər dəfə saatı ayırdığınızda və eskizdəki dəyişənlərin dəyərlərini dəyişdirdiyiniz zaman dəyişikliklər edilməlidir. IDE üçün saata başlasanız, yükləmək və işə salmaq təxminən 6 saniyə çəkəcək. Eskizi IDE -dən yükləsəniz, saatı ayırın və bir divar ziyarəti və ya enerji təchizatından yenidən başladın, eskiz təxminən 2,5 saniyədə başlayacaq.

Satır 11 LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);

Bu xətt LCD ekrana müraciət edir və I2C arxa paketinin düzgün ünvanını təyin edir. 0x27, aldığım arxa paketlərdən hər hansı birinin ünvanıdır. Saatı işə salırsınızsa, ancaq heç bir məlumat göstərilmir, ancaq ünvanı yandırırsınızsa, LCD -də fərqli ola bilər. LCD arxa paketinizin ünvanını necə dəyişdirəcəyinizi və ya ünvanı necə tapacağınızı izah etmək üçün aşağıya bir link qoyacağam.

Satırlar 24 int dəqiqəSt = 35;

Standart saata başlanğıc dəqiqəsini təyin edin, qurma vaxtına icazə vermək üçün saatı başlamazdan 5 dəqiqə əvvəl təyin edin.

Satırlar 25 int saatSt = 18;

Saatı STD vaxtına (24 saatlıq saat) başladığını təyin edin. 18:00 saat 18 olardı.

Satır 26 int DSTdays = 339;

Yaşadığınız "Asan DST Saat Vaxt Ölçeği" pdf faylını (Şimali və ya Cənubi Yarımkürə) yükləyin və baxın, tarixə baxın və Gün # -i bu sətrə daxil edin. (Sol sütun). Misal (24 Noyabr, Şimali Yarımkürədə 339 -cu gün və Cənubi Yarımkürədə 156 -cı gündür)

Satır 27 int DSTyear = 2019;

Cari ili daxil edin.

Satır 92 əgər ((masterTime - previousMasterTimeSt> = 1000) && (microTime - previousMicroTimeSt> = 500)) {

"ƏvvəlkiMasterTimeSt" -i milisaniyələrin sayı ilə müqayisə etmək lazımdır, buna görə də "1000" in Arduino lövhəsinin daxili saatından asılı olaraq 999 -a dəyişdirilməsi lazım ola bilər, sonra saatı dəqiq tənzimləmək üçün əvvəlkiMicroTime -ı tənzimləyin. Daxili saat 16MH -nin bir lövhədən digərinə dəyişməsinə baxmayaraq.

"ƏvvəlkiMicroTimeSt" dəqiq 1 saniyəni saymağa kömək etmək üçün daxili saatı tənzimləyir. Saat çox sürətlidirsə, mikrosaniyələri artırın və saat çox yavaş olarsa, mikrosaniyələri azaldın və ehtiyac olarsa milisaniyəni 999 -a endirin və sonra mikrosaniyələri təxminən 999, 990 -da başlayın və ya saatın sürətini artırın.

Hər bir Arduino lövhəsinin bir az fərqli sürəti var, buna görə istifadə etdiyiniz hər bir lövhədə bu ədədlər dəyişəcək. Kodun bir hissəsi hələ sınaqdan keçirilməyib, bu, hər sıçrayış ili üçün 248 -ci sətirdir. Növbəti bir neçə həftə ərzində test edəcəyəm və lazım gələrsə hər hansı bir dəyişiklik göndərəcəyəm.

Addım 6: Son Qeydlər

Son Qeydlər
Son Qeydlər

Bu layihəni qurmaq asandır, amma koddakı konsepsiya və lazımi düzəlişlər bir iş ola bilər, vaxtınızı ayırın və düşünün, saat 2037 -ci ilin sonuna qədər bitməyəcək. Suallar üçün e -poçt göndərin, bəzilərinin olacağına əminəm, mən ədəbi dahi deyiləm, buna görə bəzi təsvirlərim bir qədər çirkli ola bilər.

İçərisində iki.pdf faylı var, yaşadığınız yarımkürənin faylını yükləyin, bu fayl saatı dəqiq bir şəkildə başlatmaq üçün lazımlı məlumatları verəcək.

Eskizdə manipulyasiya edilmiş məlumatlarla 2004A LCD -də yalnız standart vaxtı və DST vaxtını deyil, həm də günü və tarixi göstərmək asan olardı. Bu layihənin təmin etdiyi çətinlikləri sevirsinizsə, 2004A LCD ekranı bağlamağa çalışın, sonra əlavə məlumatları göstərmək üçün kod əlavə edin və ya kifayət qədər maraq göstərilsə, bu əlavə məlumat daxil olmaqla bu layihənin başqa bir variantını edəcəyəm.

Mən bu layihədə hər şeyi əhatə etməyə çalışdım, amma söz mövzusu dünyada üç sahə tapdım. Şimal qütbü, Cənub qütbü və Ekvator.

Şimal və ya Cənub Qütblərində DST lazımdır və ya hətta mümkündürmü?

Şimal və ya Cənub qütbündə saat neçədir?

Şimal qütbünü və ya cənub qütbünü tərk etmək üçün hansı istiqamətə gedərdiniz?

Cənub qütbündən Austrailia, Şimali Amerika, Avropa və ya Asiyaya çatmaq üçün hansı istiqamətə səyahət edərdiniz?

Şaxta baba hansı saat dilimində yaşayır?

Ona DST lazımdırmı?

Hər halda Şimal Qütbündə saat neçədir?

Santa bütün hədiyyələrini çatdırmaq üçün hansı istiqamətə gedir?

DST hansı genişlikdə təsirlidir?

İndi Ekvator üçün;

Bu saat Ekvatorda istifadə edilə bilərmi?

Şimal və ya Cənubi yarımkürə miqyasından istifadə edərdilərmi?

Qış gündönümü və yay gündönümü tarixləri nədir?

DST hansı genişlikdə təsirlidir?

Pinqvinlərə DST lazımdırmı?

Sizcə bu suallar üzərində düşünmək mənə qəribə gəlirmi?

Hər kəsin inşası mübarək!

filmut

Addım 7: Digər bağlantılar

Bu, I2C geri paketindəki ünvanı təyin etmək və ya dəyişdirmək üçün bir bağlantıdır:

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

PiotrS, I2C hardware ünvanları üçün əla bir təlimat yazdı

playground.arduino.cc/Main/I2cScanner

Bu link I2C cihazınızı tarayacaq və ünvanı qaytaracaq

Tövsiyə: