Arduinoで温湿度計

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

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

 

AE-HDC1000

AE-HDC1000

AE-HDC1000

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

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モジュールであれば、この抵抗は半田ジャンパー等で有効にしたり無効にしたりできたのですが、このモジュールに限っては無効にすることが出来ません。

 

接続

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%程度なのかなと感じました。

 

関連記事

Raspbianの最初の設定

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

記事を読む

no image

米粒AVRの動作周波数

  米粒AVR(ATtiny10)のデフォルトでは内臓発振器利用の1MHzが指定されてい

記事を読む

no image

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

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

記事を読む

no image

SoundIRModemライブラリのサンプル

 SoundIRModemライブラリは、米粒AVR(Tiny10)とAndroid端末をイ

記事を読む

no image

AndroidでSoftModemを試してみた

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

記事を読む

no image

米粒AVR(ATtiny10)

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

記事を読む

no image

オシロスコープを手に入れた

ついにオシロスコープを買っちゃいました。 と言っても、DSO QUADと言うポータブルタイプの

記事を読む

no image

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

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

記事を読む

no image

AVRISPmk2

米粒AVR(ATtiny10)のプログラム書き込み用にAVRISPmk2を購入しました。 先人

記事を読む

Hello Tiny10

米粒AVRでI2C通信を使ってLCD表示

前の記事で紹介したI2Cライブラリを使った、LCDの表示のライブラリ的なもの  

記事を読む

Arduinoで温湿度計 #2

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

Arduinoで温湿度計

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

ArduinoでSDカード

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

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

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

秋月の小型キャラクタLCD

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

PAGE TOP ↑