2015年1月3日

Arduino+兩個DS18B20溫度感應器的應用

上個月,小p問我可不可以用arduino去作一個專題,

「例如拿冰塊用酒精燈加熱,然後資料直接傳給電腦,直接畫出曲線。目標要能看到冰塊融化的直線,和後面沸騰的直線,但是人不用一直讀數據,線直接畫出來」

我想想,其實以前作過耶。就這個..arduino的數位溫度計。可是那時候沒有懂很多,也沒有拿來作測水溫,這次就再來作一次吧。不過要多一些東西,我要有兩個感測器,還要有LCD輸出,輸出時還要有時間戳記。

先講結論,最後的成品就是這短短影片秀出來的


溫度感測器,選擇這種DS18B20的不鏽鋼防水測線的產品,一條在100元以內。選擇它的原因是因為可以用很簡單的方式接多個DS18B20。液晶螢幕用的是1602 I2C的產品
測水溫_07


我用的是這種實驗板,底下有個壓克力,上面黏上麵包板,再加上I2C的液晶螢幕。
測水溫_04



接線方式

液晶螢幕
LCD--Arduino
GND--GND
VCC--5V
SDA--A4
SCL--A5


溫度感測器
DS18B20--Arduino
藍線(Data)--D2
紅線--5V
黑線--GND
還要在紅線藍線之間再加一個4.7k的電阻

要加入第二個DS18B20,也很簡單
就照著上面接就可以了,意思就是把第二顆感測器的三條線和第一顆的三條線接在一起就行了。


Arduino的韌體部份
我作好的程式就在這
https://sites.google.com/site/pancala/Home/DS18B20_LCDI2C.ino

不過不是光用那個程式就好了,還得先去各地下載幾個函式庫,

OneWire
http://playground.arduino.cc/Learning/OneWire

DallasTemperature.h
https://github.com/milesburton/Arduino-Temperature-Control-Library

LiquidCrystal_I2C
http://arduino-info.wikispaces.com/file/view/LiquidCrystal_I2C1602V1.zip

這些下載後的東西,解壓縮之後,資料夾要放在arduino安裝資料夾裡的libraries資料夾裡頭,然後重新開啟arduino。如果在File/Example裡頭有看到那些資料夾的名稱就成功了。



Excel的外掛
要把資料從arduino透過com port餵給excel,得透過PLX-DAQ這套軟體,就相當於是Excel的外掛程式。(當然只有windows版本)
http://www.parallax.com/downloads/plx-daq

安裝之後執行程式就會開啟一個有巨集的excel,請務必允許執行。

擷取
PLX-DAQ收到特定資料格式後,就會放到Excel的儲存格裡頭。因為我已經把設定都寫好在arduino的程式裡頭了,所以不用改些什麼東西了。

再來,因為希望能即時繪圖,所以得先設定好圖表。但這也不用擔心,你下載這個excel檔案(含有巨集),直接拿來用就行。(記得還是要先安裝PLX-DAQ)
https://sites.google.com/site/pancala/Home/PLX-DAQ-Temperature.xlsm

Port的選擇,請按照你Arduino的port來選,例如我的是com5,我就在PLX-DAQ選5。

在Excel的資料裡,第一行是紀錄的時間,第二行是PLX-DAQ內部的計時器,第三行和第四行則分別是兩個溫度感測器的溫度。

需要注意的是,開始連線(Connect)前,請先按下Reset Timer將內部計時器歸零,再按下Connect,這樣出圖才會比較完整。

再者,每次重新連線時,都會自動清除原有儲存格資料。所以如果有需要舊資料,請先用複製貼上大法移走。



以上都準備好了之後,就可以開始作溫度的即時紀錄了。這個是加熱冰塊時的溫度曲線。因為沒有一邊加熱一邊攪拌,所以甚至在有冰的時候,溫度就上升了。紅色箭頭處是冰塊融化完畢時。
冰水的加熱曲線



這個則是把加熱到90度以上的熱水放涼,看它的溫度曲線。紅線是放在熱水的感測器,藍線是室溫的,嘿嘿,這就是兩個感測器同時測量的好處啊。
熱水降溫曲線
最左側的溫度上上下下,只是因為我一下子開電磁爐,一下子關起來而已。

這圖有兩件重要的事要說,一是用PLX-DAQ紀錄的時候,不要分心去開其他程式玩耍,因為資料可能會無法進來,就造成資料不連續(看到兩個缺口嗎?)

第二件事情很有趣,90度的熱水降到70度只要1分鐘,但是50度降到30度至少要8分鐘,更不用說30度要降到20度了,花了至少30分鐘都還沒達到。


以下是離題很多的題外話...====================

這圖看著看著就會想到企鵝腳,為什麼呢?你看那個圖,溫度跟環境溫度的溫差越大,散熱就越快。但如果溫度跟環境溫度差不多,那散熱就會很慢很慢。

為什麼人光著腳站在冰塊上,腳會凍傷,但是企鵝就不會呢?腳趾頭會凍傷其實是因為血不流到腳趾頭了,沒血液來提供細胞養分氧氣,接著細胞就會死亡,組織就會壞死。

我們的身體怎麼這麼狠心啊,小氣到不肯給腳趾頭多點血液呢?因為啊,如果腳站的地方溫度很低,身體還是送大量的血去那邊,那就會造成熱量大量散失啊。(看看上面的圖吧,溫差越大,散熱越快)

為了減少散熱,所以身體只好把送往肢體末端(手指、腳趾)的動脈縮窄一點,讓血少流過去週邊器官。顧全體腔內器官為重啊,身體不得不作這樣的犧牲哪!

那企鵝呢?牠的身體當然也會擔心熱量都從腳底散掉啊,所以牠們也會有「把動脈縮小」的這招,不過光用這招,只會落得腳凍傷,最後變黑要截肢這地步。(企鵝沒有腳的話,看起來不就是顆蛋嗎?)

既然腳的溫度一定要夠低才不會散掉太多熱,可是又不能隨便縮血管,那該怎麼作呢?

想想啊,動脈的血到了腳一定會被腳下大冰塊搶走熱量。有沒有可能不要讓大冰塊搶走熱,而是讓動脈先降溫呢?

往腳流的動脈是熱的,回到心臟的靜脈是冷的,那麼乾脆就把動脈和靜脈配在一塊兒不就好了嗎?動脈會被靜脈降溫,而靜脈會被動脈升溫,這樣既可以讓腳的溫度降低,又不會把熱量散到環境去。哈哈,這招就叫做「逆流熱交換」。叫逆流是因為動脈和靜脈的流向是相反的,然後兩者又可以交換熱量。

企鵝企鵝,畢竟是活在冰天雪地的漢子啊!

這招這麼好用,人類的工程也學會這招啦,例如「全熱交換器」就是這樣的原理啊。

如果你房裡開冷氣,可是又希望室內和室外的空氣能循環,如果直接用抽風機換氣,那就慘兮兮了,室內冷空氣排出去,換來高溫的熱氣進來。用全熱交換器,就可以得到我們希望的結果。