2010年12月6日

用Arduino製作溫濕度記錄器


前言

從很小的時候開始,我就莫名的喜歡「儀器」,喜歡可以測超音波的,可以測心跳,也喜歡溫度計、望遠鏡、放大鏡,光是溫度計,家裡就將近十種了。我一直想找一個可以記錄溫度的機器,也不只是為了做科展或專題,就只是為了做記錄。

曾經有想過用webcam拍攝數位溫度計的數字,然後再用軟體把數字辨別出來,這樣就可以有記錄溫度的功能了;後來甚至還買了專業級LabQuest的資料分析採集器,再加上溫度感應器、濕度感應器,這樣就將近30000元了(23000+1900+4500)。

可是我還是不滿意,我覺得應該有更平價的方式可以做到溫濕度的資料記錄功能。果然,最近在看我一直關注的arduino時,終於找到解決的方式了!

arduino,很多人一直以為我說的是android(手機的作業系統),其實它是一塊小小的板子。


可以做什麼呢?讓我引用Auduino.TW樂園的一段話
   Arduino是一塊基於開放原始碼的Simple i/o介面版,並且具有使用類似java,C語言的開發環境。讓您可以快速使用Arduino語言與Flash或Processing…等軟體,作出互動 作品。Arduino可以使用開發完成的電子元件例如Switch或sensors或其他控制器、LED、步進馬達或其他輸出裝置。Arduino也可以獨立運作成為一個可以跟軟體溝通的介面,例如說:flash processing Max/MSP VVVV 或其他互動軟體…



簡單的說,就是它可以寫程式進去,然後用來作互動溝通的電子作品,這個在互動藝術界裡已經佔有一席之地,很多藝術大學或是設計相關領域的學系裡已經開始開設課程在如何利用這個東西了。

甚至日本的大人的科學也出了一集用arduino做視覺暫留的玩具,不過它的板子改叫做japanino。我在幾年前就開始玩arduino,當然也買了那個japanino來玩,雖然板子名字不一樣,但基本能做的事情都一樣。

最近,我已經開始用它來做生物專題研究的東西,我有一組學生利用它來做跟光有關係的生物實驗,而在這裡我要介紹如何用arduino製作一個溫濕度記錄器,而總價只要商品級的1/10,甚至 1/20。



硬體

這次介紹的是直接和電腦連接的arduino溫濕度記錄器,價格合計:2290

Arduino UNO  1090
USB傳輸線 70
通用感測器連接線 兩條 30
SHT10數位溫度感測 780
感測擴充板V4.0 320

如果你有辦法去對岸的掏寶買原廠FlamingoEDA 电子设计艺术的商品,價格又會更低了。

所有材料就這樣而已,(中間那塊紅色板子就是Japanino,跟 arduino功能是一樣的)
DSCN2979



軟體


需要的軟體有:
Arduino下載程式
Gobetwino
SHT10函式庫
溫濕度記錄程式




硬體組裝

硬體組裝的方式很簡單,先把感測擴充器裝在arduino上面,再把兩條連接線接到溫濕度感應器上

DSCN2973

然後把連結SCK那條線接到感測擴充板的11號pin,DATA接到10號pin(顏色要插對)

DSCN2977

DSCN2975


插上USB連接線,硬體的部份就完成了

DSCN2972



軟體設定



比較複雜的是軟體部分啦。
在windows下,你要先找到從裝置管理員那找出,接上arduino之後,電腦會把它當做是接在哪個連接埠,以我的例子來說,我是被電腦當做接在COM5這個埠

1


接下來就是打開下載的Arduino程式安裝溫濕度感應器的函式庫(SHT10函式庫
把解壓縮出的SHT1x整個資料夾放在arduino安裝的資料夾裡的libaries

然後打開arduino.exe,先設定你用的板子是哪個,如果你買的是最新一款Arduino Uno那就要選Tools/Board/Arduino Uno,不過像我因為用的是Japanino,所以選的不是第一個,而是第三個。

2


再來是選擇連接埠,剛剛已經知道是接在COM5,所以就要在Tools/Serial Port/ 設定成COM5

3


接下來用file/open去開arduino資料夾裡的  \libraries\SHT1x\examples\ReadSHT1xValues\ReadSHT1xValues.pde

ReadSHT1xValues


然後按下小圖式第6個的Upload,就可以把這個程式上傳到arduino的板子了

upload


等到視窗下面出現Done Uploading,打開第七個圖式serial monitor,就可以看到感應器抓到的溫度和濕度了。

不過在serial monitor還要調整一個地方才不會顯示亂碼-右下角要調整成19200(雖然本來的程式設定的鮑率是38400 baud)

調整baud


這樣其實已經達到用電腦顯示溫濕度的功能了,不過這樣還不夠好,因為缺少時間。這時我們還需要另外一個軟體的幫忙,就是Gobetwino,它可以用來接收arduino透過com埠傳來的訊號。




Gobetwino 的設定

打開Gobetwino,在settings/serial port先設定serial port為COM5,Baud rate為19200

Gobe_configuration



然後設定Commands/New Command。
  • select command type選擇LGFIL(Log data to a file)
  • Command name選LOGTEST
  • File就選一個已經事先建立的空白文字檔
  • Time stamp一定要打勾,才有時間的紀錄

LOGTEST

接下來要回頭去重新改arduino裡頭的程式了,因為Gobetwino要接收特定的字串才能夠處理。以下的程式修改自原本的ReadSHT1xValues.pde,其實最重要的只有改紅字而已,你可以直接在溫濕度記錄程式下載我修改的

-------------------------------------------------------------------------------

/**
 * ReadSHT1xValues
 *
 * Read temperature and humidity values from an SHT1x-series (SHT10,
 * SHT11, SHT15) sensor.
 *
 * Copyright 2009 Jonathan Oxer <jon@oxer.com.au>
 * www.practicalarduino.com
 */

#include <SHT1x.h>

// Specify data and clock connections and instantiate SHT1x object
#define dataPin  10
#define clockPin 11
SHT1x sht1x(dataPin, clockPin);

void setup()
{
   Serial.begin(38400); // Open serial connection to report values to host
   //Serial.println("Starting up");
}

void loop()
{
  float temp_c;
  float humidity;

  // Read values from the sensor
  temp_c = sht1x.readTemperatureC();
  humidity = sht1x.readHumidity();

  // Print the values to the serial port
  Serial.print("#S|LOGTEST|[");
  Serial.print(temp_c, DEC);
  Serial.print(";");
  Serial.print(humidity);
  Serial.println("]#");

}
-------------------------------------------------------------------------------

上傳到arduino好了之後,再打開serial monitor看看。(注意:serial monitor和Gobetwino在設定成同一個com埠的時候,不能同時開)
應該會出現這樣的訊息。
(以下的圖片,我的溫度和濕度位置都是相反的:78點多那個是濕度,24點多的是溫度,不過我上面寫的程式,溫度是在前面)

接收2


接著關掉serial monitor,開啟Gobetwino,出現這樣的訊息,就代表資料已經成功記錄在文字檔了

接收


打開文字檔,就長這樣囖,有時間、濕度和溫度

文字檔




用Excel繪製圖形



若要利用Excel繪製折線圖,先用excel開啟文字檔,選擇用分隔符號

excel1


用空格和分號來分隔

excel2.



就可以把資料完整地送進EXCEL檔裡,再依照一般繪製圖形方式來做就可以了。
(下圖是我記錄我房間從凌晨到下午六點多的溫濕度變化,在下午2點多之後溫度就開始上升了)Excel

這一篇教的是連接電腦的溫濕度記錄器,但如果要一個不用電腦的呢?也是可以的,不過要再多一些零件,像是要加SD卡擴充還有Real Clock的模組,未來我會再介紹。

ps. 三年前,我的學生做專題需要的紀錄器,我到現在才找到解決的方案,啊~~