在上次先容的日歷鐘的基本上擴展一下:讓它具備檢測大氣溫度和濕度的成果,一天24小時不中斷運行并按時檢測,于是,日歷鐘就搖身一釀成為一個小小溫濕度計啦。固然氣象要素許多,不外我們最常用的就是氣溫和濕度。一個是冷熱水平,一個是情況氛圍中含水蒸氣的幾多。一般家用溫度計很常見,濕度計就較量少,以前有一種干濕球溫度計,可是用起來較量貧苦,精確度也不高。此刻應(yīng)用電子技能我們就可以做一個可以同時顯示溫度、濕度、時間的小儀器,放在家里以便隨時監(jiān)測我們的小情況。它的特點如下: 1.在單片機ATMega8L-8PU(以下簡稱M8)和日歷鐘電路DS1302的基本上,利用一個在工場顛末緊密校準的數(shù)字式溫度、濕度傳感器AM2301作為探頭; 2.當24小時持續(xù)事情時,即使事情電流僅為幾毫安,也不宜利用紐扣電池供電。這次選用可充電的3.6V聚合物鋰電池,使它的安排所在可以不受電源限制,可以在室內(nèi),也可以在不受陽光直射和雨水打仗的室外; 3.具有文字和圖形界面,可以顯示溫度和濕度數(shù)值,以及12小時內(nèi)的濕度變革記錄曲線,為什么是濕度曲線呢?因為氣溫的變革紀律一般較量不變,濕度就紛歧樣了,我們可以從濕度變革趨勢預計一下將來的晴雨大概,這比看燕子飛高飛低要靠譜些吧?兩個界面用按鍵切換; 4.具備鋰電池線性充電電路,通過USB接口從外部取得5V電源,一邊供應(yīng)充電,一邊維持電路繼承事情;
全部元器件安裝在一塊70mm×90mm的小萬用板上,正面、不和外形見圖1、圖2。正面左邊誰人玄色小烏龜殼就是溫濕度探頭。
圖2 電路板不和元器件漫衍和連線?
電路道理
電路見圖3。圖形點陣液晶、單片機M8、時鐘電路DS1302和上次小小日歷鐘基內(nèi)情同,不再反復。有兩點稍稍差異:
1.液晶的節(jié)制固然照舊通過M8的PD口,但詳細接線有所改變,不再占用兩根串口線PD0和PD1,目標是為此后大概和外部通信預留接口。這好辦,編程時從頭界說即可;
2.因為常用電源是帶掩護板的3.6V充電鋰電池(圖3中GB2),它放完電會自動割斷,為了使DS1302繼承事情,必需別的利用一片3V紐扣鋰電池CR1225(圖3中GB1)作為時鐘芯片的后備電池。也可用法拉電容,但較貴。
TRH是數(shù)字式溫濕度傳感器 AM2301。它內(nèi)部有顛末校準的電容式濕度傳感器和負溫度系數(shù)熱敏電阻(NTC),以及8位單片機??烧闪繙囟确懂犑?40~+80℃,精度最大±1℃,濕度范疇是0%~100%,常溫時精度±3%,判別率都是0.1。溫度信號、濕度信號最后都轉(zhuǎn)換為一個40位的二進數(shù)串行輸出。個中的高16位是濕度,中16位是溫度,低8位是校驗和,當高16位加中16位便是低8位時,說明丈量功效正確,可以采信。它利用單線總線布局,接線很簡樸, 470uf 16v,一共就3根線:圖3中的R暗示紅線,接電源(3.3~5.5VΩ),Y暗示黃線,是信號線,憑據(jù)要求需要外接5kΩ上拉電阻R2,接M8的PC5引腳。B暗示黑線,接地。
輕觸按鈕S1~S5照舊作校時用,沒有變革。
為了給400mAh的鋰電池充電,通過USB插頭把外部的5V電壓加到智能線性充電模塊TP4054。別的一個2×2微型自鎖開關(guān)S6可以選擇電池供電,可能電池充電。充電時5V外部電壓經(jīng)穩(wěn)壓器WY1低落為3.3V為VCC供電。
用上蓄電池了,液晶背光也可以“奢侈點”,偶然用它一下。為此,增加了限流電阻R3和輕觸按鈕S5。
硬件組裝
這個溫濕度計電路簡樸,所需元件不多。除了溫濕度傳感器和充電模塊較量非凡以外,其他都是普通元件。幾個電阻和退耦電容都是用的貼片元件,尺寸是 0805,和洞洞板可以很好地共同。雖然也可用普通的引線電阻、電容。集成電路利用雙列直插插座反裝,這樣就有效操作了正面液晶屏占用的面積。詳細做法和小小日歷鐘一樣。
溫濕度傳感器和充電模塊我都是從淘寶網(wǎng)上買的,搜一下“DHT21”和“TP4054”就可以找到大把,價值不高。溫濕度探頭的敏感元件都是裝在通風透氣的烏龜殼內(nèi),膠死了打不開,也就不要試圖暴力拆解了,以免污染了敏感元件影響機能。
后面焊裝IC插座的步伐是先把引腳向外折平(這樣子它更像小蜈蚣了),然后把引腳尖端稍向下彎,在洞洞板后面定位后,用尖頭鑷子把引腳尖端逐一捅進焊盤洞洞里,外接引線也插入相應(yīng)洞洞里,一并焊接。
要留意兩個鋰電池最后安裝,安裝前必需先查抄已經(jīng)裝好其他元器件和接線的電路板,確認VCC和地端沒有短路妨礙。在焊接前電池先不開封,制止不小心正負極短路,以至于“出師未捷身先死”。帶引腳的紐扣電池焊好即牢靠了,充電電池則用較厚的雙面膠粘接在電路板后面牢靠。落成后四角必然要裝上墊柱,制止電路板直接與平面打仗。
其他就沒有什么訣竅了,也就不再搞看圖識物。7cm×9cm的洞洞板安裝全部元件很寬松,實際上要想使這個小玩意事情起來,還要靠“軟工夫”。下面一一解析。
編程之一:AM2301的讀寫時序
前面說過,溫濕度探子輸出的是40位的二進數(shù)。在探頭舉辦丈量并輸出數(shù)據(jù)前,主控單片機M8和探頭有個握手進程,步調(diào)是:
M8的PC5空閑時一直為高,數(shù)據(jù)線處于釋放狀態(tài)。要啟動丈量,M8就在PC5輸出低,使數(shù)據(jù)線拉低1ms以上(措施頂用的10ms),把PC5轉(zhuǎn)為輸入狀態(tài),外部上拉電阻R2當縱然數(shù)據(jù)線升高。在40μs以內(nèi)探頭發(fā)出響應(yīng):把數(shù)據(jù)線拉低80μs。M8讀到這個低電平,知道探頭回話了,接著探頭也釋放數(shù)據(jù)線80μs,M8就大白隨后就是數(shù)據(jù)了。數(shù)據(jù)老是以50μs低電平先導,隨后并不是以電平坎坷暗示1、0,而是以高電平脈沖寬度暗示1、0:70μs暗示 1,26~28μs暗示0。為了識別1和0,M8可在讀先導低電平完成后,延時35μs再次讀數(shù)據(jù)線,假如為高,就是1,假如為低,就是0。探頭持續(xù)送出 40個低-高脈沖后,再次拉低數(shù)據(jù)線50μs,竣事數(shù)據(jù)送出。脈沖示意圖如圖4。
實際利用時還要留意,丈量應(yīng)舉辦兩次:第一次丈量后,過2s再測一次,這次M8讀出的數(shù)據(jù)是兩秒前的測試數(shù)據(jù)。假如持續(xù)丈量,隔斷2s最好,無論如何不得小于1s。實際上氣溫和濕度一般也不會變革那么快。此刻做的是每分鐘測兩次:在0s和2s各測一次,2s讀出0s的數(shù)據(jù),0s讀的是上一分鐘的數(shù)據(jù),就揚棄了。
編程之二:AM2301的數(shù)據(jù)名目
假如數(shù)據(jù)正確(通過查抄和校驗),就需要把高16位濕度數(shù)據(jù)換算成十進位的3位數(shù):000到999。在個位和十位間加上小數(shù)點,就是濕度的百分值。譬喻 M8讀出的高16位是0B0000001100001101=512+256+8+4+1=781。濕度就是78.1%。溫度雷同,可是假如溫度最高位為 1,意味著零下溫度。
編程之三:奈何畫出記錄曲線
要畫出一段時間的記錄曲線,也就是在液晶上面憑據(jù)這也就是在液晶上面憑據(jù)這段時間順序記錄的數(shù)值畫出對應(yīng)的點。
在這塊圖形液晶畫點的根基要領(lǐng)前次已經(jīng)先容過,就是先配置列坐標x和頁坐標y,再寫數(shù)據(jù),用LCDSetxy(unsigned x,unsigned y)和LCDWriData(unsigned data)兩個函數(shù)就可以在x列y頁點亮任意8個點。可是假如直接用頁坐標來畫出凡是用垂直坐標(行坐標)暗示的點則很是未便。
要憑據(jù)列坐標x和行坐標h(h從0到63共計64行)來畫一個點,而這正是畫記錄曲線的基本,我們可以調(diào)動一下,先用h/8算出h地址的頁,譬喻h為45,那么它就在45/8即5頁。而余數(shù)h%8就是h在該頁的第幾位(此刻是第5位),讓一個數(shù)unsigned char tmp=0x01;那把它左移5位獲得的數(shù)值0x20就是用列坐標和頁坐標畫點時需要給液晶輸入的數(shù)值。這些數(shù)值對付每次僅僅1個點,從低位到高位只能對應(yīng)于0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80這8個數(shù)中的一個。這樣我們可以假造一個函數(shù) LCDPutDot(unsigned char x,unsigned h);來在x列,h行畫出一個點了,詳細代碼見后文。形式上用隊列坐標參數(shù),實質(zhì)上照舊頁列坐標參數(shù),但卻利便多了。此刻再回到奈何畫濕度記錄曲線。由于液晶像素的限制,程度只能取128點以下。那么假如每6分鐘記錄一次,12小時就記錄120次,把這120次的濕度數(shù)值和液晶的垂直偏向點位置(與行坐標成比例)對應(yīng)起來畫一系列點,不就是記錄曲線嗎?雖然垂直偏向只有64點,那么我們就取51點,0到50暗示0到100。還要提醒的是,液晶的垂直偏向,0點在最上面,這和凡是的習慣相反。那也不要緊,就把(100-h)/2作為垂直坐標就對了,為簡樸計,可略去小數(shù)。
至此幾個編程的要害都說完了。按此在措施中插手了新增的函數(shù):
unsigned char DHT21_ReadByte(void);//讀探頭串行數(shù)據(jù)
void DHT21_RHT(void);//提倡檢測,讀數(shù)
void Show_RHT(void);//顯示檢測值
void LcdPutDot(unsignedcharx,
東莞電解電容廠家,unsignedcharh);//畫點
函數(shù)詳細內(nèi)容見附件措施。
為了描畫12小時的記錄曲線,還要設(shè)立一個120單位的濕度記錄數(shù)組unsigned charRH_record[120],虧得M8的數(shù)據(jù)區(qū)有512字節(jié),還很富饒。
每6分鐘往內(nèi)里順序填入一個記錄,記滿后又從0單位開始。
整個措施流程和日歷鐘基內(nèi)情同,但有改變:
啟動→M8初始化→LCD初始化→查抄1302是否已經(jīng)運行中,如不然要初始化并啟動它→讀取1302數(shù)據(jù)→打開顯示界面(標題、正文和最下面的顯示行)→檢測溫濕度→延時2秒→給記錄數(shù)組賦以初值→再次檢測溫濕度→顯示溫濕度→進入措施輪回。
措施輪回是配置一個用于軟件計數(shù)的靜態(tài)變量:const unsigned int delta=0;在主輪回while(1){}中當delta未到達設(shè)定值譬喻3800前它每次遞增,到達設(shè)定值后再查鍵→健處理懲罰→假如秒數(shù)值改變就刷新日歷鐘的顯示。
有所改變的是假如計時到達1分鐘,就開始一次檢測溫濕度→2秒后再檢測并更新溫濕度顯示→假如是6的整數(shù)倍分鐘,則還要在濕度記錄數(shù)組中填入新的濕度記錄。
在S4的按鍵成果觸發(fā)時就憑據(jù)濕度記錄數(shù)組的數(shù)值逐一繪點,形成曲線。個中還包羅程度和垂直標尺的繪制和當前記錄位置指針的繪制。
調(diào)試
調(diào)試進程和小小日歷鐘雷同,就不反復了。只要元件正常,接線正確,加電后把措施注入M8立即就可以運行。繪制曲線則要比及1小時今后才畫出一小段。顛末 12小時曲線完成,你就可以知道已往12小時的濕度變革趨勢了。憑據(jù)我這里來看(番禺郊區(qū)),濕度顛簸照舊蠻大的,晴熱時可以低到40%,一下暴雨會升高到80%以上。
假如發(fā)明溫度、濕度顯示都為0,那么查抄探頭接線是否有斷開。假如溘然不顯示了,那么恭喜你!鋰電池掩護板發(fā)揮了浸染,沒電了!趕緊切換S6充電吧!在這個基本上還能進一步改造:找出24小時內(nèi)的最高溫濕度和最低溫濕度;設(shè)定報警點,實現(xiàn)超限報警以及把信號發(fā)送出去等,就靠你啦!
利用
把它充好電,按一下S6,切到電池供電位置就可以了,把它放在桌上、掛在墻上都可以,只要不陽光直射,陰涼通風就可以。充一次電約莫需要90分鐘,充好后可以用三天以上。
Copyright 2020© 東莞市立邁電子有限公司 版權(quán)所有 粵ICP備2020136922號-1
24小時服務(wù)電話:13336555866 郵箱:jimmy@limak.cn
公司地址:廣東省東莞市塘廈鎮(zhèn)東興路162號振興大廈 網(wǎng)站地圖