第1步:時鐘程序功能
關于時鐘的某些軟件功能的一些評論。
時間設置:許多使用rtc的Arduino示例在設置時間方面都很隨意。他們經常使用草圖的編譯時間來設置rtc(如果尚未設置)。由于您不知道編譯和下載需要多長時間,這很笨拙,如果先前已設置時鐘,則時間不會更新。
我在代碼中放了一個標志(KBSetTime = true | false),如果在下載時設置,將導致打開一個串行窗口并提示輸入時間。按下輸入時,時間精確設置為rtc。
準確度:DST3231模塊的指定精度為+/- 2 ppm,在常溫下每年約1分鐘。為了校正這種漂移,提供了“碰撞”按鈕。我們的想法是,當您聽到通過收音機廣播的時間源信號點數時,按下按鈕按鈕并將時間調整為“時間最高”。為了防止手指徘徊,我將此功能限制為僅在一小時內的五到五個范圍內有效。
夏令時:有問題!時鐘沒有同步到任何可識別DST的外部源,因此沒有辦法自動調整,就像電話會因為它連接到網絡塔而做。在舊版本的Windows中,他們只使用一個文件,其中包含日期,指定何時發生更改,為此您需要事先知道并確定更改日期 - 我們走了多遠,預期壽命是多少時鐘,如果我們移動司法管轄區怎么辦?其他方法依賴于固定的規范,例如3月的第2個星期日,但這也有問題 - 不是每個地方同時調整,特殊事件可能會移動這個“固定”的變化點。出于這些原因,我決定采用不同的方法讓用戶輕松進行調整 - 設置滑動開關以指定進入或退出夏令時,然后按下按鈕。這將在當前時間恰好增加或減少一小時。保留日期的準確性,以防你在23:45小時進行。
擴展:時鐘顯示為12h格式,有四個LED小時,最大值為8 + 4 + 2 + 1 = 15,因此如果需要24小時格式,您可以添加額外的LED。或者,您可以添加指示上午或下午的方式。軟件庫和時鐘模塊的接口都可以在需要時輕松實現這些。
第2步:位和塊 - 片斷
Arduino世界有一系列有趣的位,都非常顯著便宜從ebay,ali barber等。還有很多指導和建議。這是我用過的東西;
Nano arduino,便宜,功能強大,具有教育意義 - 該項目最終使用了約80%的代碼空間
DS3231 - 實時時鐘模塊,可維持時間,2 ppm精度約為1分鐘/年
WS8212 LED - 串行控制LED,3線,單個LED顏色由3字節RGB字符串設置
使用電容式觸摸開關可能更好按鈕。一個例子是TTP223
關于DS3231 rtc模塊的注意事項:如果你使用像鋰電池那樣的鋰電池(大多數人會),你需要切斷模塊上的電池充電痕跡?;ヂ摼W搜索將揭示信息和原因。上圖說明了要切割的痕跡。
步驟3:接線
該圖顯示了接線連接。
第4步:代碼
此處顯示代碼,您只需下載并使用它即可。你需要安裝Arduino環境。
希望它被充分評論,允許任何具有一些Arduino技能的人來跟蹤和修改。
Arduino世界有許多智能民間的圖書館讓我們其他人可以輕松使用設備。沒有必要重新發明輪子,所以我使用了以下庫;
TimeLib.h - 用于時間函數的使用和管理
DS3223RTC.h - 用于訪問rtc模塊
Adafruit_NeoPixel.h - 用于使用串行LED
DHT.h - 用于濕度和溫度傳感器
Streaming.h - 便于與串行窗口交互
U8glib.h - 用于Oled顯示
使用了IC2總線,它內置于Arduino,rtc和oled模塊以及相關的庫中 - 由于上面提到的庫,它們對使用都是透明的
中斷。這些用于碰撞到小時和夏令時調整例程。前者因為它需要以時間關鍵的方式發生而后者因為它不經常使用。
每個顯示特征的顯示時間的暫停延遲可以通過show_xxxx_delay常量來調整。例如,顯示的紅色溫度LED被設置為4000毫秒或4秒
const unsigned long show_temp_delay = 4000;
顏色的變化可以通過編輯線條來實現 - 它只是每個00的三個十六進制值。 RGB的ff
#define Yellow leds.Color(0xff, 0xff, 0x00) // colour for day display
步驟5:木工
我開始在車庫里放一塊松木,切成一定長度如所須。大理石位于凹陷的口袋中,因此從正面鉆出一個更大的孔,大理石的直徑達到您想要的深度,然后鉆一個小孔,讓光線看到大理石的背面。鉆孔后,我使用了一個插入式路由器從后部劃出一個口袋來容納電子設備。
我在頂部表面上切了一個小凹槽,這樣Oed顯示器就會齊平。
后面的部分被切割成適合按鈕和DHT傳感器的尺寸。
我用自制的污漬混合物對松樹進行染色并涂上一層蠟以產生緞面效果
步驟6:電子裝配
《我將LED安裝在一條木條上 - 這主要是為了讓它們更容易處理,因為我正在玩耍和原型制作。他們需要連接5V,0V和數據。來自arduino的數據引腳連接必須首先到達一分鐘,因為LED是通過字符串中的位置來尋址的。 8小時led是字符串中的最后一個,并且不需要終結器。
鉆幾個孔,將開關和傳感器安裝在后面板上。熱膠可用于將物品固定到位。為這些設備使用觸摸開關可能更好。
Arduino和rtc模塊安裝在配線板上。這樣可以更容易地將所有東西焊接在一起。鏈接由單股銅線制成。
帶狀電纜提供與后面板安裝的開關和傳感器的完美連接,并允許打開外殼。
在LED燈條之間使用一塊牛奶瓶塑料和補丁板,以防止任何短路。
擰緊背部,你就完成了。時鐘可以通過USB端口從計算機或插頭包裝到墻上。沒有USB電源,沒有顯示器,但rtc模塊上的電池可以保持時間。
在光線昏暗的房間里享受它,并對訪客進行測驗,因為它以的形式吸引了一些注意力。 “那是什么!?”
-
led
+關注
關注
242文章
23700瀏覽量
670888 -
二進制
+關注
關注
2文章
803瀏覽量
42151 -
時鐘
+關注
關注
11文章
1879瀏覽量
132839
發布評論請先 登錄
評論