Arduinoで温湿度計

公開日: 電子工作 | , , ,

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。
以前「パソコンで温度計」と言うものを作りましたが、今回はパソコン無しでArduino単体で動作するものを作っていきたいと思います。

 

AE-HDC1000

AE-HDC1000

AE-HDC1000

今回使った、秋月電子で販売されている温湿度センサーモジュールです。

HDC1000使用 温湿度センサーモジュール – 秋月電子

仕様

電源電圧:3~5V
インターフェース:I2C
I2Cアドレス:0×40
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モジュールであれば、この抵抗は半田ジャンパー等で有効にしたり無効にしたりできたのですが、このモジュールに限っては無効にすることが出来ません。

 

接続

Arduinoで温湿度計

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上に表示します。

Arduinoで温湿度計

Arduinoで温湿度計

この日は雨だったので湿度が高めでした。

個人的な感想ですが、AE-HDC1000は分解能が温度・湿度共に14ビットと高いのですが、実際に試してみると数値の揺れが結構あるので、温度は0.1℃、湿度1%程度なのかなと感じました。

 

関連記事

Arduino + STTS751

パソコンで温度計

ありきたりのPC温度計ですが、なんとなく作りたくなったので作ってみる。 コントローラーは手軽な

記事を読む

raspi-config

Raspbianの最初の設定

  Raspbianのインストール後にraspi-configを使って行う最初の設定

記事を読む

no image

赤外線リモコン受信機(イヤホンジャック接続)を作ってみた

最近、このブログ何も書いて無かったので、作成中の物の紹介・・・  これは、Andro

記事を読む

no image

AndroidでSoftModemを試してみた

今回、ここで言うSoftModemとは、携帯電話のオーディオ端子(イヤホン・マイク端子)を利用し

記事を読む

no image

Androidで一眼レフカメラのシャッターを制御する(MicroBridge接続)

以前書いた、Androidで一眼レフカメラのシャッターを制御するでは、AndroidとArduino

記事を読む

no image

米粒AVR(ATtiny10)

通称「米粒AVR」で知られるTiny10を使ってみたくて、秋月の通販で買ってみました。 超小型

記事を読む

秋月電子 キャラクタLCD

秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、ちょっと比較してみる。 買っ

記事を読む

no image

AndroidとArduinoの接続で使えそうなBluetoothモジュール

1ヶ月ほど前に書いた、Android + Bluetooth + Arduino が割と人気があるよ

記事を読む

米粒AVRで温度計

米粒AVRで温度計(STTS751使用)

前回までに紹介したI2CライブラリとLCDライブラリを使って作る、温度計のサンプルです。 温度

記事を読む

no image

Android+Arduinoでリモコン3のおまけ

Androidとは関係ないのですが、前回の記事  Android+Arduinoでリモコ

記事を読む

Arduinoで温湿度データロガー
Arduinoで温湿度計 #2

今回は、前回作った温湿度計にRTCモジュールとSDカードアダプタを

Arduinoで温湿度計
Arduinoで温湿度計

秋月電子の温湿度モジュールを使って、温湿度計を作ってみました。 以前

SDカード・マイクロSDカード
ArduinoでSDカード

電子工作で大量のデータを保存する方法を調べていると、 Arduin

秋月電子 リアルタイムクロック(RTC)モジュール
秋月のリアルタイムクロック(RTC)モジュール

今回は秋月電子のI2C接続のリアルタイムクロック(RTC)モジュールを

秋月電子 キャラクタLCD
秋月の小型キャラクタLCD

今回秋月電子で売られている小型のキャラクター液晶2種を買ったので、

PAGE TOP ↑