2011年1月15日 星期六

Arduino 筆記 - 製作一個溫溼度記錄器 (1)

介紹

如果你已經認識 Arduino,寫過一些簡單的 Arduino 程式,比如讓 LED 發光閃爍讓蜂鳴器發出聲音,你知道怎麼在 2x16 字元 LCD 上顯示資料,而且也知道怎麼使用 SHT15 溫溼計,那麼接下來的這個實驗你可能會有興趣,我們將用 Arduino 製作一個溫溼度記錄器。

這個溫溼度記錄器會有底下這些功能:

  1. 可以感測環境的溫溼度
  2. 可以在 2x16 字元 LCD 上顯示目前的溫度與溼度
  3. 可以把溫溼度資料存檔記錄起來

有件事得說明,在這個溫溼度記錄器中,第 3 項的功能得靠 PC 的幫忙,Arduino 其實只是負責收集溫溼度資料,我們得寫一支在 PC 端跑的程式把 Arduino 送過來的溫溼度資料保存到檔案中。

材料

我們需要這些材料:

  • 麵包板 x 1
  • Arduino 板子 x 1
  • SHT15 溫溼度計
  • HD44780 相容 LCD x 1  (本文所用的為 14 pin 無背光 LCD)
  • 旋轉式可變電阻 x 1
  • 單心線 x N
硬體接線

首先,我們先把 LCD 接到麵包板上跟 Arduino 連接起來。HD44780 相容 LCD 的腳位圖表如下:

image_thumb2

腳位編號 名稱 說明
1 Vss 接地 (0V)
2 Vdd 電源 (+5V)
3 Vo 或稱 Vee 對比(0-5V), 可接一顆 1k 電阻,或利可變電阻調整適當的對比
4 RS Register Select:
  1: D0 – D7 當作資料解釋
  0: D0 – D7 當作指令解釋
5 R/W Read/Write mode:
  1: 從 LCD 讀取資料
  0: 寫資料到 LCD

因為很少從 LCD 這端讀取資料,可將此腳位接地以節省 I/O 腳位。
6 E Enable
7 D0 Bit 0 LSB
8 D1 Bit 1
9 D2 Bit 2
10 D3 Bit 3
11 D4 Bit 4
12 D5 Bit 5
13 D6 Bit 6
14 D7 Bit 7 MSB
15 A+ 背光(串接 330R 電阻到電源)
16 K- 背光(GND)

LCD 的接線步驟為:

  • 將 LCD 的 RS, Enable, D4, D5, D6, D7 依序接到 12, 11, 5, 4, 3, 2 等腳位上
  • 將 LCD 的 Vss 及 R/W 接到 GND,Vdd 接到 +5V
  • 可變電阻中間腳位接到 LCD 的 Vo,剩下的兩支腳位,一支接到 5V,另外一支接到 GND (註:也可以不使用可變電阻,只要在 LCD 的 Vo 上串接一顆 1k ohm 電阻連到 GND 即可)

image_thumb6

接下來接上 SHT15 溫溼計,SHT15 溫溼度計的接法比較簡單,一共只有四支接腳(VCC, DATA, SCK 與 GND):

image_thumb6[6]

SHT15 的接線步驟為:

  • 將 SHT15 的 VCC 接到 Arduino 的 +5V,GND 接到 Arduino 的 GND
  • 將 SHT15 的 Data 腳接到 pin 6, SCK 接到 pin 7

LCD 與 SHT15 全部接起來後,完整的接線圖如下:

image

安裝 SHT1x 函式庫

為了讀取 SHT1x 系列(SHT10, SHT11, SHT15) 溫溼度計的讀值,我們需要安裝 SHT1x 函式庫。SHT1x Library 的安裝辦法很簡單,先到官網或直接點此下載函式庫後,把檔案解壓縮放到 Arduino 的 Libraries 資料夾底下即可:

image_thumb16

Arduino 程式碼

底下是這個溫溼度記錄器的程式(可點此下載):

請用 Arduino IDE 編譯程式,然後 Upload 上傳到 Arduino 板子上。

操作說明

注意觀察 LCD 的變化,當程式上傳到 Arduino 板子上後,LCD 上就會顯示環境的溫度與溼度,而且是即時的(Real-Time):

image

註:如果 LCD 上沒有訊息,或者訊息看起來模糊朦朧的,請檢查可變電阻以調整對比。

打開 Serial Monitor,就會看到 Arduino 送過來的溫溼度資料了:

image

接著我們得寫一支在 PC 端跑的程式,把 Arduino 送過來的溫溼度資料保存到檔案中。程式怎麼寫,請見下回分解。

參考資料

4 意見:

匿名 提到...

小馬!粉耶! 崇拜!崇拜! ^o^

Cooper Maa 提到...

沒有啦,玩 Arduino 就好像在玩電子積木一樣,很簡單、好玩又有成就感,挺有趣的。

Mei 提到...

你好,我在SH1X 與 arduion AT mega 328 (0022版本)的連接好像出現問題 ,就算只是跑內建的example,Verify 也一直有錯誤: "SHT1x"does not name a type.

麻煩您幫忙=)
謝謝

Cooper Maa 提到...

Hi, "'SHT1x' does not name a type" 這個錯誤訊息是說找不到 SHT1x 的定義,應該是因為 SHT1x library 沒有正確安裝的關係,Arduino library 的安裝位置是在 arduino-xxxx/libraries 或是 Sketch folder 的 libraries 資料夾下。

所以你只要把 SHT1x 資料夾放到 arduino-xxxx/libraries 資料夾底下應該就可以編譯過關。見這篇的「安裝 SHT1x 函式庫」一段。