2016年8月5日

Arduino測暖暖包溫度變化

前幾天在科學maker社團裡看到有人問,想暖暖包溫度有什麼簡單的方式。我想測溫大概不會是測一下就離手紀錄了,應該是要長時間觀測,也就是要作data logger,對我而言最簡單的方是當然就是用Arduino來紀錄囉,溫度偵測使用DS18B20來作,其實其他如LM35或是熱敏電阻都是可以的。

找了一個暖暖包,把溫度計包進去,外頭再包一個毛巾,開啟電腦的serial port開始接收資料
 ts '%Y-%m-%d %H:%M:%S', < /dev/ttyACM1 >>log

IMAG2314


這是測試的前40分鐘,溫度上升到70度了

heat




經過兩個小時之後,斜率快要為零了,這個時間能維持多久呢?
heat2

到了隔天,看到昨晚開始作的暖暖包溫度計畫結束了。使用的是袋鼠暖暖包,宣稱最高溫度63°C,平均溫度53°C,持續時間12小時。做出來的結果是這樣,不過其宣稱的效果應該有特定的測定方式,我則是直接用暖暖包包著溫度計去測試的。實際使用時,若是直接讓暖暖包接觸皮膚,顯然會有煮熟皮膚的可能性。
heat3




IMAG2313



以下是各種程式的寫法

----------------------
Arduino
----------------------

unsigned long time;

// 匯入程式庫標頭檔
//from http://playground.arduino.cc/Learning/OneWire
#include <onewire .h="">

//from https://github.com/milesburton/Arduino-Temperature-Control-Library
#include <dallastemperature .h="">
#include <wire .h="">


// Arduino數位腳位2接到1-Wire裝置
#define ONE_WIRE_BUS 2

// 運用程式庫建立物件
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&amp;oneWire);

void setup(void)
{

  sensors.begin();

  // 初始化
  Serial.begin(9600);
}

void loop(void)
{
  // 要求匯流排上的所有感測器進行溫度轉換
  // 參數0代表匯流排上第0個1-Wire裝置
  sensors.requestTemperatures();

time = millis();
 
  Serial.print(time);
  Serial.print(",");
  Serial.println(sensors.getTempCByIndex(0));

  delay(1000);
}




--------------------------------
gnuplot script
--------------------------------



set xdata time
set datafile separator ","
set timefmt "%Y-%m-%d %H:%M:%S"
set xrange [0:12*60*60]
set yrange [0:80]
set xlabel "經過時間(時:分)"
set ylabel "攝氏溫度"
set title "暖暖包溫度"
set grid
unset key
startTime=strptime("%Y-%m-%d %H:%M:%S","2016-08-02 20:05:58")
plot "logfile" using (timecolumn(1)-startTime):3 with lines  linetype rgb "red"
pause -1


</wire></dallastemperature></onewire>