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

 

関連記事

no image

Android Open Accessory開発時のWiFiデバッグ

Android Open Accessory開発時のデバッグは、ADBをWiFiで接続しろと、USB

記事を読む

Hello Tiny10

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

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

記事を読む

no image

米粒AVRでアナログ入力を試してみた

米粒AVR(ATtiny10)に搭載されている8ビット4チャンネルのアナログ入力を試してみました

記事を読む

秋月電子 キャラクタLCD

秋月の小型キャラクタLCD

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

記事を読む

no image

PIC24FJ64GB002でADKを試す(その1)

先日、MicrochipからPIC向けのAndroid Open Accessoryのライブラリが公

記事を読む

no image

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

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

記事を読む

Androidで温度計

Androidで温度計(STTS751使用)

  Androidに温度センサー(STTS751)を繋いで温度表示してみました。 温度

記事を読む

no image

Android + Bluetooth + Arduino

 以前書いた『気になる物』で紹介したBluetoothモジュールですが、本当に気になって実

記事を読む

no image

Atmel Studio 6

米粒AVR(ATtiny10)の開発を行う為に、Atmel Studio 6.0をインストールし

記事を読む

raspi-colortest

Raspbianの起動

Raspbianの起動画面をキャプチャしてみた。 SDカードにイメージを書き込んだままのデフォ

記事を読む

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

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

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

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

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

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

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

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

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

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

PAGE TOP ↑