步驟1:設(shè)計(jì)RTC
我不喜歡我的第一個(gè)設(shè)計(jì),因?yàn)殡姵刂荒苁褂么蠹s十天,所以我希望設(shè)計(jì)可以使用更長(zhǎng)的時(shí)間。
:電池不能使用很長(zhǎng)時(shí)間的原因是,我必須持續(xù)保持AtMega328(Arduino)的電源以保持軟件實(shí)時(shí)時(shí)鐘運(yùn)行。因此,我需要能夠使AtMega328進(jìn)入睡眠狀態(tài)或?qū)⑵潢P(guān)閉。
我的朋友給我發(fā)送了一些RTC(實(shí)時(shí)時(shí)鐘)模塊:
http://www.ebay.co.uk/ITM/Arduino的I2C纖巧-RTC-DS1307-的實(shí)時(shí)時(shí)鐘模塊,AT24C32板上-AVR-MCU-PIC-/221176522620 PT = UK_BOI_Electrical_Components_Supplies_ET&哈希= item337f25e77c搜索結(jié)果HTTP://WWW。 ebay.com/itm/I2C-Tiny-RTC-DS1307-實(shí)時(shí)時(shí)鐘模塊AT24C32-AVR-MCU-PIC-DIY-/231037403500?pt = LH_DefaultDomain_0&hash = item35cae7016c
這些均隨附具有電池備用功能的RTC和EEPROM也很有幫助。
問(wèn)題:因此,我對(duì)這些模塊感到擔(dān)心。請(qǐng)注意,電池是LIR2032,它是可充電電池。我懷疑它有充電電路。好吧,我找到了一個(gè)原理圖并決定繪制自己的示意圖(參見(jiàn)圖片)。它確實(shí)具有充電電路,并且會(huì)給18650電池帶來(lái)額外的負(fù)擔(dān)。
解決方案:因此,對(duì)于此模塊,如果卸下R5,D1,R4和R6并跨接一個(gè)跳線, R6并用CR2032更換電池,這將消除電池充電。這就是我所做的(參見(jiàn)圖片)。
在此應(yīng)用程序中,CR2032應(yīng)該可以使用大約十年,因此我對(duì)此沒(méi)有任何問(wèn)題。
警告: AdaFruit的一個(gè)舊庫(kù),用于其數(shù)據(jù)記錄器RTCLib。有一個(gè)名為DS1307.pde的草圖可以設(shè)置時(shí)間。現(xiàn)在,它在第一次運(yùn)行時(shí)效果很好,但是沒(méi)有設(shè)置時(shí)間。有一個(gè)更新的版本,其示例效果更好:
https://github.com/jcw/rtclib
下載zip,解壓縮,將其從rtclib-master重命名為rtclib并將其復(fù)制到您的Arduino庫(kù)目錄。
TechnoSpeak I2C:從技術(shù)上講,它應(yīng)該是I(平方)C或表示集成電路間的IIC。基本上,這是一個(gè)“標(biāo)準(zhǔn)”串行接口,需要兩個(gè)信號(hào)SCL,SDA和接地。 SDA是從0V切換到5V的數(shù)據(jù)信號(hào),數(shù)據(jù)按順序(串行)傳輸。由于只有兩個(gè)級(jí)別,并且無(wú)法確定速度,因此無(wú)法確定一個(gè)數(shù)據(jù)的結(jié)束位置和下一個(gè)數(shù)據(jù)的開始位置。這就是SCL(時(shí)鐘)信號(hào)的輸入。這告訴接收設(shè)備一位在哪里結(jié)束,下一位在哪里開始。
I2C的一個(gè)優(yōu)點(diǎn)是可以將多個(gè)設(shè)備連接到相同的兩個(gè)信號(hào)。在這種情況下,DS1307(RTC)和24C32(EEPROM)都連接到SCL和SDA線上。為了告訴您正在交談的設(shè)備,每種設(shè)備類型都有一個(gè)唯一的地址。
DS1307的地址為0x68。 24C32地址為0x50。
Arduino通過(guò)“ wire”庫(kù)支持I2C。
順便說(shuō)一句,這意味著在同一兩行上不能有多個(gè)相同的設(shè)備類型。例如,您不能有兩個(gè)24C32。
步驟2:設(shè)計(jì)Solar Boost
問(wèn)題:所以RTC模塊需要5Vdc,我希望它能與18650電池一起工作,電池的電壓從4.2Vdc降至大約2Vdc。
解決方案:有一些滿足需求的小Solar Boost模塊:
http://www.ebay.com/itm/370828387683?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
我不知道為什么他們稱他們?yōu)镾olar Boost。基本上,它們采用1-5Vdc的DC電壓并將其轉(zhuǎn)換為5Vdc電壓。
現(xiàn)在有許多可用的版本。我想大多數(shù)都適用于該應(yīng)用程序。
我取消了USB連接器的焊接,因?yàn)椴恍枰?(見(jiàn)圖)。如圖所示,兩個(gè)外部USB引腳分別為接地和5V。
步驟3:設(shè)計(jì)ShowerMonitor2 PCB
所以自然是極客,我決定制作自己的帶有Arduino的ShowerMonitor2 PCB。 (參見(jiàn)圖片)此PCB將Solar Boost和Tiny RTC連接在一起,并顯示“星期幾”和“淋浴”狀態(tài)。
問(wèn)題:我想用一個(gè)按鈕打開電源, Arduino保持開機(jī)狀態(tài),直到顯示星期幾和淋浴狀態(tài)為止,并且還可以通過(guò)另一個(gè)按鈕切換淋浴狀態(tài)。然后關(guān)閉PCB的電源。
解決方案:下一張圖片是電源電路的框圖。
TechoSpeak:連接至PCB并連接至Solar Boost的地面(在此Solar Boost上,PS-和GND輸出連接在一起,以便可以將其中任何一個(gè)連接到PCB)。
要打開Arduino PCB,請(qǐng)按Start按鈕。這會(huì)將正的電池電壓傳遞給Solar Boost,后者啟動(dòng)并向PCB提供5Vdc。 Arduino草圖將D3拉高,從而導(dǎo)通BS170 FET。這允許電流流過(guò),從而將大部分電池電壓施加到Solar Boost。因此,可以釋放啟動(dòng)開關(guān)。
在短暫的延遲后,用戶可以看到白天和淋浴狀態(tài),Arduino將D3設(shè)置為低電平,這會(huì)關(guān)閉FET并斷開與Solar Boost的電源,從而斷開與PCB的電源。
電源摘要:因此,大多數(shù)情況下,Arduino均未供電。 TinyRTC擁有自己的電池來(lái)保持正確的時(shí)間。 EEPROM存儲(chǔ)一些淋浴信息,不需要電源。大多數(shù)情況下,18650電池的耗電量可忽略不計(jì)。按下開始按鈕時(shí),Solar Boost由18650供電,Arduino讀取RTC,在星期幾點(diǎn)亮,并在適當(dāng)時(shí)點(diǎn)亮Shower LED。大約五秒鐘后,Arduino斷開電池并自動(dòng)關(guān)機(jī)。
TechnoSpeak: EEPROM代表電可擦可編程只讀存儲(chǔ)器。這意味著我們可以在其中存儲(chǔ)信息。該信息將保持通電或斷電狀態(tài)。因此,下次使用電源時(shí),我們可以讀取之前存儲(chǔ)的信息。不需要電池。
注意:我添加了一個(gè)標(biāo)有“ Prog”的兩針插頭。如果連接了跳線,這將為Arduino持續(xù)供電,以便用戶可以將草圖加載到Arduino并在需要時(shí)進(jìn)行故障排除。
好的,所以我制作了PCB并將其塞滿。我在一周中的幾天內(nèi)安裝了不同顏色的LED,因此區(qū)分一天和另一天比較容易。 (我的視力不是最大)
問(wèn)題:對(duì)于TinyRTC庫(kù)部分,我概述了電路板的物理尺寸。不幸的是,當(dāng)我試圖縮小PCB尺寸時(shí),我忘記了這一點(diǎn),因此“開始”按鈕位于Tiny RTC板的下面。這是當(dāng)我累了并且沒(méi)有徹底檢查時(shí)會(huì)發(fā)生的事情。
問(wèn)題2:嗯,TinyRTC的底部是電池。有了母頭,我以為可以清除AtMega328,但沒(méi)有清除。
解決方案:我從朋友那里抽了些長(zhǎng)根母頭(見(jiàn)圖)。我將引腳彎曲成“ S”形,這樣TinyRTC板就更高了并且遠(yuǎn)離“開始”按鈕。
問(wèn)題3:很好,但是當(dāng)我把它掛在
解決方案2:如果您看一下TinyRTC模塊,它有兩個(gè)連接器。一個(gè)是七個(gè)針腳,另一個(gè)是五個(gè)針腳,但五個(gè)信號(hào)以相同的順序重復(fù)。無(wú)論如何,我只使用其中的四個(gè)。好吧,我決定拆下母頭,在另一側(cè)安裝五針公頭,然后將它們焊接進(jìn)去。它工作得很好,并且更容易到達(dá)“開始”按鈕。
附帶了鷹頭文件
零件清單:
1個(gè)微小的RTC_DS1307和AT24C32模塊
http://www.ebay.com/itm/I2C-Tiny-RTC-DS1307-Real-Time-Clock-模塊-AT24C32-AVR板載-MCU-PIC-DIY-/231037403500?pt = LH_DefaultDomain_0&hash = item35cae7016c
1 Solar Boost 1-5Vdc to 5Vdc output
http://www.ebay.com/itm/370828387683?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649
1 18650電池
1 18650電池座
1淋浴監(jiān)視器2 PCB(可以用Eagle Cadsoft文件制成)
1 ATmega328P微處理器
1 28針IC插座
6公頭針
2觸覺(jué)SPST開關(guān)
2電容器0.1uFd
2電容器22pFd
1圓柱晶體8MHz
8 LED 3MM(多種顏色)
1 BS170 FET
2電阻10K
8電阻1.5K
1 JST2.0連接器組(公/母)
廢線
Sprap p lastic
大多數(shù)零件都可以從Digikey和其他電子產(chǎn)品商店獲得。
步驟4:Arduino軟件
問(wèn)題::標(biāo)準(zhǔn)引導(dǎo)加載的AtMega328P不適用于8MHz晶振。需要其他引導(dǎo)加載程序。
解決方案:我基本上使用此過(guò)程來(lái)加載正確的引導(dǎo)加載程序:
http://arduino.cc/zh/Tutorial/ArduinoISP
步驟6:我選擇了:帶Promega的Arduino Pro或Pro Mini(3.3V,8 MHz)作為我在AtMega328P上想要的引導(dǎo)負(fù)載。
警告:在“工具”》“面板”菜單下加載草圖時(shí),必須選擇帶有ATmega328的 Arduino Pro或Pro Mini(3.3V,8 MHz)
我在AtMega328上貼了一個(gè)標(biāo)簽,以幫助使我想起我正在使用什么。
TinyRTC模塊使用DS1307 IC作為實(shí)時(shí)時(shí)鐘。對(duì)于Arduino,您需要一個(gè)庫(kù)。有很多,但我選擇了這個(gè):
https://github.com/jcw/rtclib
首先,必須在TinyRTC模塊中設(shè)置正確的時(shí)間/日期。確保已安裝CR2032電池。
在Prog上放一個(gè)兩腳跳線。
運(yùn)行我的SetRTC草圖。打開串行監(jiān)視器以確保正確設(shè)置。
現(xiàn)在加載ShowerMonitor2草圖。
刪除兩針跳線。
草圖摘要:
設(shè)置:將電源設(shè)置為高,以使SolarBoost保持打開狀態(tài)。
循環(huán) ::讀取存儲(chǔ)在24C32-EEPROM中的數(shù)據(jù)。
讀取RTC。以獲得正確的時(shí)間/日期。
打開正確的星期幾LED。
弄清楚淋浴LED是否應(yīng)打開。
檢查是否按了Shift。
切換淋浴并發(fā)送到EEPROM。
大約五秒鐘后,關(guān)閉電源,然后關(guān)閉Solar Boost和Arduino。
步驟5:使用淋浴監(jiān)控器2
所以我很懶,我用雙面膠帶將電池和PCB粘在一塊塑料上。我鉆了幾個(gè)孔,用一根電線將其掛在釘子上。
步驟:因此,Shower Monitor2通常處于關(guān)閉狀態(tài)。
按住開始鍵按鈕。 Solar Boost上的電源LED將點(diǎn)亮,然后一周中的某一天LED將點(diǎn)亮。釋放開始按鈕。如果淋浴LED亮起,則是淋浴時(shí)間。
淋浴監(jiān)控器將在大約四秒鐘后關(guān)閉。
更改淋浴日期::如果要更改淋浴日期,按住“開始”按鈕,直到獲得日間LED,然后按住Shift按鈕,直到“淋浴” LED發(fā)生切換。
故障排除::如果沒(méi)有LED亮起,則(希望)電池。替換為已充電的18650。
如果星期幾關(guān)閉,請(qǐng)加載setRTC草圖以設(shè)置時(shí)間,然后重新加載ShowerMonitor2草圖。
-
監(jiān)控器
+關(guān)注
關(guān)注
1文章
270瀏覽量
26603 -
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187492
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論