Arduinoで温湿度計
秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。
以前「パソコンで温度計」と言うものを作りましたが、今回はパソコン無しでArduino単体で動作するものを作っていきたいと思います。
AE-HDC1000
今回使った、秋月電子で販売されている温湿度センサーモジュールです。
仕様
電源電圧:3~5V
インターフェース:I2C
I2Cアドレス:0x40
I2Cスピード: 最大400kHz
温度分解能:11bit(0.078125℃)、14bit(0.009765625℃)
温度計測精度:±0.2℃
温度測定レンジ:-20~+85℃
湿度分解能:8bit(0.390625%)、11bit(0.048828125%)、14bit(0.006103515625%)
湿度計測精度:±3%
湿度測定レンジ:0~100%(無結露状態)
※注意点
このモジュールには、I2Cのプルアップ用抵抗(10k)が基板に搭載されています。
他のI2Cモジュールであれば、この抵抗は半田ジャンパー等で有効にしたり無効にしたりできたのですが、このモジュールに限っては無効にすることが出来ません。
接続
LCDも同じく秋月で購入した16x2のものを使っています。
プログラム
#include <Wire.h><br /> <br /> #define LCD_ADRS 0x3E<br /> #define HDC1000_ADRS 0x40<br /> <br /> void setup()<br /> {<br /> Wire.begin();<br /> <br /> LCD_init();<br /> <br /> LCD_command(0x80+0x0);<br /> LCD_write('T');<br /> LCD_write('e');<br /> LCD_write('m');<br /> LCD_write('p');<br /> <br /> LCD_command(0x80+0x40);<br /> LCD_write('H');<br /> LCD_write('u');<br /> LCD_write('m');<br /> LCD_write('i');<br /> LCD_write('d');<br /> LCD_write('i');<br /> LCD_write('t');<br /> LCD_write('y');<br /> }<br /> <br /> void loop()<br /> {<br /> Wire.beginTransmission(HDC1000_ADRS);<br /> Wire.write(0x00);<br /> Wire.endTransmission(false);<br /> delay(15);<br /> Wire.requestFrom(HDC1000_ADRS,4);<br /> <br /> volatile int temperature,humidity;<br /> volatile unsigned long ul;<br /> volatile byte *p1 = (byte*)&ul;<br /> <br /> ul=0;<br /> *(p1+1) = Wire.read();<br /> *p1 = Wire.read();<br /> <br /> ul*=100;<br /> ul<<=4;<br /> temperature=*(((int *)&ul)+1);<br /> temperature-=400;<br /> <br /> ul=0;<br /> *(p1+1) = Wire.read();<br /> *p1 = Wire.read();<br /> <br /> ul*=1000;<br /> humidity=*(((int *)&ul)+1);<br /> <br /> LCD_command(0x80+0x08);<br /> if(temperature<0)<br /> {<br /> LCD_write('-');<br /> temperature=abs(temperature);<br /> }<br /> else<br /> {<br /> LCD_write('+');<br /> }<br /> <br /> LCD_write('0'+(temperature/1000));<br /> temperature%=1000;<br /> LCD_write('0'+(temperature/100));<br /> temperature%=100;<br /> LCD_write('0'+(temperature/10));<br /> temperature%=10;<br /> LCD_write('.');<br /> LCD_write('0'+temperature);<br /> LCD_write(0xDF);<br /> LCD_write('C');<br /> <br /> LCD_command(0x80+0x49);<br /> LCD_write('0'+(humidity/1000));<br /> humidity%=1000;<br /> LCD_write('0'+(humidity/100));<br /> humidity%=100;<br /> LCD_write('0'+(humidity/10));<br /> humidity%=10;<br /> LCD_write('.');<br /> LCD_write('0'+humidity);<br /> LCD_write('%');<br /> <br /> delay(1000);<br /> }<br /> <br /> void LCD_write(byte t_data)<br /> {<br /> Wire.beginTransmission(LCD_ADRS);<br /> Wire.write(0x40);<br /> Wire.write(t_data);<br /> Wire.endTransmission();<br /> delay(1);<br /> }<br /> <br /> void LCD_command(byte t_command)<br /> {<br /> Wire.beginTransmission(LCD_ADRS);<br /> Wire.write(0x00);<br /> Wire.write(t_command);<br /> Wire.endTransmission();<br /> delay(10);<br /> }<br /> <br /> void LCD_init()<br /> {<br /> LCD_command(0x38);<br /> LCD_command(0x39);<br /> LCD_command(0x14);<br /> LCD_command(0x73);<br /> LCD_command(0x52); // 5V<br /> //LCD_command(0x56); // 3V<br /> LCD_command(0x6C);<br /> LCD_command(0x38);<br /> LCD_command(0x01);<br /> LCD_command(0x0C);<br /> }<br />
※Arduino UNO / Duemilanoveで動作確認しています。
プログラムの動作
このプログラムを走らせると、約1秒毎に温度・湿度を計測し、LCD上に表示します。
この日は雨だったので湿度が高めでした。
個人的な感想ですが、AE-HDC1000は分解能が温度・湿度共に14ビットと高いのですが、実際に試してみると数値の揺れが結構あるので、温度は0.1℃、湿度1%程度なのかなと感じました。
関連記事
-
-
Androidで一眼レフカメラのシャッターを制御する(MicroBridge接続)
以前書いた、Androidで一眼レフカメラのシャッターを制御するでは、AndroidとArduino
-
-
オシロスコープを手に入れた
ついにオシロスコープを買っちゃいました。 と言っても、DSO QUADと言うポータブルタイプの
-
-
パソコンで温度計 #4
前回までに作ったPC温度計のログデータを、計測と同時に撮影した映像にオーバーレイ表示(スーパーイ
-
-
androidで気圧・高度計(LPS331AP使用)
Androidと大気圧センサー(LPS331AP)をイヤフォンジャックで繋いで気圧と高度、ついで
-
-
Arduino + USBホストシールド で ADK を試す(その3)
「Arduino + USBホストシールド で ADK を試す(その1)」では、Android上のア
-
-
Arduinoで温湿度計 #2
今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを取り付けて温湿度データロガーを
-
-
米粒AVRで小型8連ナイトライダーを作ってみた
米粒AVR(ATtiny10)を2つ使って、8つのLEDを順番に点灯しています。 &nbs
-
-
Androidとオーブントースターを繋いでみた
Android端末とオーブントースターを、Arduino+USBホストシールドで作ったADKっぽい奴
-
-
Arduino + USBホストシールド で ADK を試す(その2)
前回「Arduino + USBホストシールド で ADK を試す(その1)」では、Androidで
- PREV
- ArduinoでSDカード
- NEXT
- Arduinoで温湿度計 #2