這是第一個比較像完整作品的 Arduino 作業:一個簡易的溫溼度計,功能是顯示溫度與濕度,有一個按鈕可以切換顯示哪一項,顯示的地方是在一個 1602 的LCD顯示幕上面。
所需要的零件有:
- 1. Arduino *1
- 2. 按鈕 *1
- 3. 電阻10k *2
- 4. 1602 LCD 顯示幕 (I2C界面) *1
- 5. DHT 11 溫濕度感應器 *1 (或是其他替代方案也可以)
- 6. 單心線若干
10k的電阻是做為按鈕的上拉(或下拉,看你想要怎麼接)電阻、以及 DHT11 的上拉電阻。
DHT 11 的函式庫可以在網路上找到,我是順便練習看 spec 然後自己寫一個。
1602 LCD 的函式庫要用這個:https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library
一開始的時候是用這個: http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/
雖然他說已經針對 Arduino 1.0 做了修正,可是我還是試不出來,甚至以為是 LCD 壞了,後來才發現是函式庫問題,卡了好久。他的舊版是可以在 Arduino 0.22 版運作無誤,可是新版在 Arduino 1.0, 1.0.1, 1.0.2 我都試不出來。好險有找到可以用的函式庫,不然我應該暫時改不出來,囧rz
因為做作業的時候,手上沒有按鈕,就只好拿舊電腦拆下的按鈕先將就著用 XDD
以下是完成圖:
按鈕尚未按下時,顯示濕度
按鈕按下之後顯示溫度
有幾個小技巧:
濕度的最大值99、溫度的最大值40、溫度的度C字元,還有下面的長條圖是我自己加上去的,這些圖案必須自己手繪,LCD 函式庫中的範例有。這項作業剛好將8個可自訂字元用完:99、40、度C、左邊線、右邊線、方塊、左邊線+方塊、右邊線+方塊。
把溫濕度的數值轉換成長條圖可以自己算,或是採用內建的函式 map() 可以將某一段數值對應到另一段數值,這邊的例子就是濕度的 0~99 對應到 0~16 (因為每行可以顯示16個字元)。
大家一起來玩 Arduino 吧!!