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

米粒AVRでシリアル通信(ただし送信だけ)

米粒AVR(ATtiny10)にUART機能は搭載されていないので、シリアル通信を行う為には自前

記事を読む

Hello Tiny10

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

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

記事を読む

no image

Arduino + USBホストシールド で ADK を試す(その3)

「Arduino + USBホストシールド で ADK を試す(その1)」では、Android上のア

記事を読む

no image

S2 Resistor Color Code 公開しました。

このアプリは、抵抗のカラーコードから抵抗値を素早く見る為のAndroidアプリです。 4本帯と、5

記事を読む

SDFormatter

Raspbianの起動SDカードを再利用

一度、Raspbianのイメージを書き込んだSDカードは、フォーマットが違う為にWindowsでは利

記事を読む

米粒AVT(tiny10) リモコンレシーバー

米粒AVRでリモコン受信処理

  米粒AVR(Tiny10)で赤外線リモコンを受信して処理をするサンプルを作ってみまし

記事を読む

Raspberry Pi 起動SDカード

Raspberry Piの起動SDカードを準備する

先日入手したRaspberry PiでLinuxを起動する為のSDカードを準備します。 Ras

記事を読む

soundIR 受信機 回路図

赤外線リモコン受信機(イヤホンジャック接続)の回路

  前回からだいぶと時間が経ってしまっていますが、今回はイヤホンジャック接続のリモコン受

記事を読む

no image

Android + Arduino でリモコン2 (softmodem接続)

以前、LAN接続のリモコン Android + Arduino でリモコン と言うものを作ったのです

記事を読む

no image

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

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

記事を読む

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

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

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

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

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

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

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

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

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

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

PAGE TOP ↑