<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 電源與新能源 > 設計應用 > 使用無(wú)字庫12864液晶模塊制作溫濕度計

使用無(wú)字庫12864液晶模塊制作溫濕度計

作者: 時(shí)間:2011-10-27 來(lái)源:網(wǎng)絡(luò ) 收藏

在上次介紹的日歷鐘的基礎上擴展一下:讓它具備檢測大氣溫度和濕度的功能,一天24小時(shí)不間斷運行并定時(shí)檢測,于是,日歷鐘就搖身一變成為一個(gè)小小啦。雖然氣象要素很多,不過(guò)我們最常用的就是氣溫和濕度。一個(gè)是冷熱程度,一個(gè)是環(huán)境空氣中含水蒸氣的多少。一般家用溫度計很常見(jiàn),濕度計就比較少,以前有一種干濕球溫度計,但是用起來(lái)比較麻煩,準確度也不高?,F在應用電子技術(shù)我們就可以做一個(gè)可以同時(shí)顯示溫度、濕度、時(shí)間的小,放在家里以便隨時(shí)監測我們的小環(huán)境。它的特點(diǎn)如下:

1.在單片機ATMega8L-8PU(以下簡(jiǎn)稱(chēng)M8)和日歷鐘電路DS1302的基礎上,使用一個(gè)在工廠(chǎng)經(jīng)過(guò)精密校準的數字式溫度、濕度傳感器AM2301作為探頭;

2.當24小時(shí)連續工作時(shí),縱然工作電流僅為幾毫安,也不宜使用紐扣電池供電。這次選用可充電的3.6V聚合物鋰電池,使它的放置地點(diǎn)可以不受電源限制,可以在室內,也可以在不受陽(yáng)光直射和雨水接觸的室外;

3.具有文字和圖形界面,可以顯示溫度和濕度數值,以及12小時(shí)內的濕度變化記錄曲線(xiàn),為什么是濕度曲線(xiàn)呢?因為氣溫的變化規律一般比較穩定,濕度就不一樣了,我們可以從濕度變化趨勢估計一下未來(lái)的晴雨可能,這比看燕子飛高飛低要靠譜些吧??jì)蓚€(gè)界面用按鍵切換;

4.具備鋰電池線(xiàn)性充電電路,通過(guò)USB接口從外部取得5V電源,一邊供給充電,一邊維持電路繼續工作;
全部元器件安裝在一塊70mm×90mm的小萬(wàn)用板上,正面、背面外形見(jiàn)圖1、圖2。正面左邊那個(gè)黑色小烏龜殼就是溫濕度探頭。

使用無(wú)字庫12864液晶模塊制作溫濕度計
圖2 電路板背面元器件分布和連線(xiàn)?

電路原理

電路見(jiàn)圖3。圖形點(diǎn)陣液晶、單片機M8、時(shí)鐘電路DS1302和上次小小日歷鐘基本相同,不再重復。有兩點(diǎn)稍稍不同:
1.液晶的控制雖然還是通過(guò)M8的PD口,但具體接線(xiàn)有所改變,不再占用兩根串口線(xiàn)PD0和PD1,目的是為今后可能和外部通信預留接口。這好辦,編程時(shí)重新定義即可;

2.因為常用電源是帶保護板的3.6V充電鋰電池(圖3中GB2),它放完電會(huì )自動(dòng)切斷,為了使DS1302繼續工作,必須另外使用一片3V紐扣鋰電池CR1225(圖3中GB1)作為時(shí)鐘芯片的后備電池。也可用法拉電容,但較貴。

使用無(wú)字庫12864液晶模塊制作溫濕度計
圖3?電路原理圖

使用無(wú)字庫12864液晶模塊制作溫濕度計
圖4 AM2301的讀寫(xiě)時(shí)序脈沖示意圖?

TRH是數字式溫濕度傳感器 AM2301。它內部有經(jīng)過(guò)校準的電容式濕度傳感器和負溫度系數熱敏電阻(NTC),以及8位單片機??蓽y量溫度范圍是-40~+80℃,精度最大±1℃,濕度范圍是0%~100%,常溫時(shí)精度±3%,分辨率都是0.1。溫度信號、濕度信號最后都轉換為一個(gè)40位的二進(jìn)數串行輸出。其中的高16位是濕度,中16位是溫度,低8位是校驗和,當高16位加中16位等于低8位時(shí),說(shuō)明測量結果正確,可以采信。它使用單線(xiàn)總線(xiàn)結構,接線(xiàn)很簡(jiǎn)單,一共就3根線(xiàn):圖3中的R表示紅線(xiàn),接電源(3.3~5.5VΩ),Y表示黃線(xiàn),是信號線(xiàn),按照要求需要外接5kΩ上拉電阻R2,接M8的PC5引腳。B表示黑線(xiàn),接地。

輕觸按鈕S1~S5還是作校時(shí)用,沒(méi)有變化。

為了給400mAh的鋰電池充電,通過(guò)USB插頭把外部的5V電壓加到智能線(xiàn)性充電模塊TP4054。另外一個(gè)2×2微型自鎖開(kāi)關(guān)S6可以選擇電池供電,或者電池充電。充電時(shí)5V外部電壓經(jīng)穩壓器WY1降低為3.3V為VCC供電。

用上蓄電池了,液晶背光也可以“奢侈點(diǎn)”,偶爾用它一下。為此,增加了限流電阻R3和輕觸按鈕S5。

硬件組裝

這個(gè)電路簡(jiǎn)單,所需元件不多。除了溫濕度傳感器和充電模塊比較特殊以外,其他都是普通元件。幾個(gè)電阻和退耦電容都是用的貼片元件,尺寸是 0805,和洞洞板可以很好地配合。當然也可用普通的引線(xiàn)電阻、電容。集成電路使用雙列直插插座反裝,這樣就有效利用了正面液晶屏占用的面積。具體做法和小小日歷鐘一樣。

溫濕度傳感器和充電模塊我都是從淘寶網(wǎng)上買(mǎi)的,搜一下“DHT21”和“TP4054”就可以找到大把,價(jià)格不高。溫濕度探頭的敏感元件都是裝在通風(fēng)透氣的烏龜殼內,膠死了打不開(kāi),也就不要試圖暴力拆解了,以免污染了敏感元件影響性能。

反面焊裝IC插座的辦法是先把引腳向外折平(這樣子它更像小蜈蚣了),然后把引腳尖端稍向下彎,在洞洞板反面定位后,用尖頭鑷子把引腳尖端逐一捅進(jìn)焊盤(pán)洞洞里,外接引線(xiàn)也插入相應洞洞里,一并焊接。

要注意兩個(gè)鋰電池最后安裝,安裝前必須先檢查已經(jīng)裝好其他元器件和接線(xiàn)的電路板,確認VCC和地端沒(méi)有短路故障。在焊接前電池先不開(kāi)封,避免不小心正負極短路,以至于“出師未捷身先死”。帶引腳的紐扣電池焊好即固定了,充電電池則用較厚的雙面膠粘接在電路板反面固定。完工后四角一定要裝上墊柱,避免電路板直接與平面接觸。

其他就沒(méi)有什么訣竅了,也就不再搞看圖識物。7cm×9cm的洞洞板安裝全部元件很寬松,實(shí)際上要想使這個(gè)小玩意工作起來(lái),還要靠“軟功夫”。下面一一分解。

編程之一:AM2301的讀寫(xiě)時(shí)序

前面說(shuō)過(guò),溫濕度探子輸出的是40位的二進(jìn)數。在探頭進(jìn)行測量并輸出數據前,主控單片機M8和探頭有個(gè)握手過(guò)程,步驟是:

M8的PC5空閑時(shí)一直為高,數據線(xiàn)處于釋放狀態(tài)。要啟動(dòng)測量,M8就在PC5輸出低,使數據線(xiàn)拉低1ms以上(程序中用的10ms),把PC5轉為輸入狀態(tài),外部上拉電阻R2立即使數據線(xiàn)升高。在40μs以?xún)忍筋^發(fā)出響應:把數據線(xiàn)拉低80μs。M8讀到這個(gè)低電平,知道探頭回話(huà)了,接著(zhù)探頭也釋放數據線(xiàn)80μs,M8就明白隨后就是數據了。數據總是以50μs低電平先導,隨后并不是以電平高低表示1、0,而是以高電平脈沖寬度表示1、0:70μs表示 1,26~28μs表示0。為了識別1和0,M8可在讀先導低電平完成后,延時(shí)35μs再次讀數據線(xiàn),如果為高,就是1,如果為低,就是0。探頭連續送出 40個(gè)低-高脈沖后,再次拉低數據線(xiàn)50μs,結束數據送出。脈沖示意圖如圖4。

實(shí)際使用時(shí)還要注意,測量應進(jìn)行兩次:第一次測量后,過(guò)2s再測一次,這次M8讀出的數據是兩秒前的測試數據。如果連續測量,間隔2s最好,無(wú)論如何不得小于1s。實(shí)際上氣溫和濕度一般也不會(huì )變化那么快?,F在做的是每分鐘測兩次:在0s和2s各測一次,2s讀出0s的數據,0s讀的是上一分鐘的數據,就丟棄了。

編程之二:AM2301的數據格式

如果數據正確(通過(guò)檢查和校驗),就需要把高16位濕度數據換算成十進(jìn)位的3位數:000到999。在個(gè)位和十位間加上小數點(diǎn),就是濕度的百分值。例如 M8讀出的高16位是0B0000001100001101=512+256+8+4+1=781。濕度就是78.1%。溫度類(lèi)似,但是如果溫度最高位為 1,意味著(zhù)零下溫度。

編程之三:怎樣畫(huà)出記錄曲線(xiàn)

要畫(huà)出一段時(shí)間的記錄曲線(xiàn),也就是在液晶上面按照這也就是在液晶上面按照這段時(shí)間順序記錄的數值畫(huà)出對應的點(diǎn)。
在這塊圖形液晶畫(huà)點(diǎn)的基本方法前次已經(jīng)介紹過(guò),就是先設置列坐標x和頁(yè)坐標y,再寫(xiě)數據,用LCDSetxy(unsigned x,unsigned y)和LCDWriData(unsigned data)兩個(gè)函數就可以在x列y頁(yè)點(diǎn)亮任意8個(gè)點(diǎn)。但是如果直接用頁(yè)坐標來(lái)畫(huà)出通常用垂直坐標(行坐標)表示的點(diǎn)則非常不便。

使用無(wú)字庫12864液晶模塊制作溫濕度計
圖5 12小時(shí)內的溫度變化記錄曲線(xiàn)?

要按照列坐標x和行坐標h(h從0到63共計64行)來(lái)畫(huà)一個(gè)點(diǎn),而這正是畫(huà)記錄曲線(xiàn)的基礎,我們可以變換一下,先用h/8算出h所在的頁(yè),例如h為45,那么它就在45/8即5頁(yè)。而余數h%8就是h在該頁(yè)的第幾位(現在是第5位),讓一個(gè)數unsigned char tmp=0x01;那把它左移5位得到的數值0x20就是用列坐標和頁(yè)坐標畫(huà)點(diǎn)時(shí)需要給液晶輸入的數值。這些數值對于每次僅僅1個(gè)點(diǎn),從低位到高位只能對應于0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80這8個(gè)數中的一個(gè)。這樣我們可以捏造一個(gè)函數 LCDPutDot(unsigned char x,unsigned h);來(lái)在x列,h行畫(huà)出一個(gè)點(diǎn)了,具體代碼見(jiàn)后文。形式上用行列坐標參數,實(shí)質(zhì)上還是頁(yè)列坐標參數,但卻方便多了?,F在再回到怎樣畫(huà)濕度記錄曲線(xiàn)。由于液晶像素的限制,水平只能取128點(diǎn)以下。那么如果每6分鐘記錄一次,12小時(shí)就記錄120次,把這120次的濕度數值和液晶的垂直方向點(diǎn)位置(與行坐標成比例)對應起來(lái)畫(huà)一系列點(diǎn),不就是記錄曲線(xiàn)嗎?當然垂直方向只有64點(diǎn),那么我們就取51點(diǎn),0到50表示0到100。還要提醒的是,液晶的垂直方向,0點(diǎn)在最上面,這和通常的習慣相反。那也沒(méi)關(guān)系,就把(100-h)/2作為垂直坐標就對了,為簡(jiǎn)單計,可略去小數。

至此幾個(gè)編程的關(guān)鍵都說(shuō)完了。按此在程序中加入了新增的函數:
unsigned char DHT21_ReadByte(void);//讀探頭串行數據
void DHT21_RHT(void);//發(fā)起檢測,讀數
void Show_RHT(void);//顯示檢測值
void LcdPutDot(unsignedcharx,unsignedcharh);//畫(huà)點(diǎn)

函數具體內容見(jiàn)附件程序。

為了描繪12小時(shí)的記錄曲線(xiàn),還要設立一個(gè)120單元的濕度記錄數組unsigned charRH_record[120],好在M8的數據區有512字節,還很富裕。
每6分鐘往里面順序填入一個(gè)記錄,記滿(mǎn)后又從0單元開(kāi)始。
整個(gè)程序流程和日歷鐘基本相同,但有改變:

啟動(dòng)→M8初始化→LCD初始化→檢查1302是否已經(jīng)運行中,如否則要初始化并啟動(dòng)它→讀取1302數據→打開(kāi)顯示界面(標題、正文和最下面的顯示行)→檢測溫濕度→延時(shí)2秒→給記錄數組賦以初值→再次檢測溫濕度→顯示溫濕度→進(jìn)入程序循環(huán)。

程序循環(huán)是設置一個(gè)用于軟件計數的靜態(tài)變量:const unsigned int delta=0;在主循環(huán)while(1){}中當delta未達到設定值例如3800前它每次遞增,達到設定值后再查鍵→健處理→如果秒數值改變就刷新日歷鐘的顯示。

有所改變的是如果計時(shí)達到1分鐘,就開(kāi)始一次檢測溫濕度→2秒后再檢測并更新溫濕度顯示→如果是6的整數倍分鐘,則還要在濕度記錄數組中填入新的濕度記錄。

在S4的按鍵功能觸發(fā)時(shí)就按照濕度記錄數組的數值逐一繪點(diǎn),形成曲線(xiàn)。其中還包括水平和垂直標尺的繪制和當前記錄位置指針的繪制。

調試

調試過(guò)程和小小日歷鐘類(lèi)似,就不重復了。只要元件正常,接線(xiàn)正確,加電后把程序注入M8立刻就可以運行。繪制曲線(xiàn)則要等到1小時(shí)以后才畫(huà)出一小段。經(jīng)過(guò) 12小時(shí)曲線(xiàn)完成,你就可以知道過(guò)去12小時(shí)的濕度變化趨勢了。按照我這里來(lái)看(番禺郊區),濕度波動(dòng)還是蠻大的,晴熱時(shí)可以低到40%,一下暴雨會(huì )升高到80%以上。

如果發(fā)現溫度、濕度顯示都為0,那么檢查探頭接線(xiàn)是否有斷開(kāi)。如果突然不顯示了,那么恭喜你!鋰電池保護板發(fā)揮了作用,沒(méi)電了!趕快切換S6充電吧!在這個(gè)基礎上還能進(jìn)一步改進(jìn):找出24小時(shí)內的最高溫濕度和最低溫濕度;設定報警點(diǎn),實(shí)現超限報警以及把信號發(fā)送出去等,就靠你啦!

使用

把它充好電,按一下S6,切到電池供電位置就可以了,把它放在桌上、掛在墻上都可以,只要不陽(yáng)光直射,陰涼通風(fēng)就可以。充一次電大約需要90分鐘,充好后可以用三天以上。

上拉電阻相關(guān)文章:上拉電阻原理
土壤濕度傳感器相關(guān)文章:土壤濕度傳感器原理
溫濕度控制器相關(guān)文章:溫濕度控制器原理


關(guān)鍵詞: 液晶模塊 溫濕度計 儀器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>