湿度センサSHT31を搭載したセンサモジュールとLCD(液晶)モジュールをArduinoにI2C (I squared C、2線式シリアル通信) バスでつないで温湿度計を作りました。
ブレッドボードでパーツをつないで温湿度計の組み立て
結線図
ArduinoとSHT31センサモジュール、LCDモジュールとの接続は2線式のI2Cなので配線数は少ないです。
ブレッドボードに部品を配置して、ArduinoとSHT31センサモジュール、LCDモジュールをI2Cバス(今回使ったのは緑色と白色の線)2本、3.3V電源ライン(赤色と青色の線)2本、計4本のジャンパーワイヤで接続していきます。
Arduino Uno Rev3はI2Cで使うSDA、SCL用の専用ピンが独立していますが、内部ではアナログピンA4(SDA)、A5(SCL)に接続されています。
SHT31センサモジュールのADR(4番ピン)は解放としたのでI2Cアドレスは0x45。ADR(4番ピン)をはんだブリッジでGND (5番ピン)に接続すると0x44になります。このモジュールにはプルアップ抵抗が内蔵されています。
集めたパーツ
ネット通販(秋月電子通商 など)でパーツを集めてブレッドボードで組み立てました。
# | パーツ | 仕様 | 数量 | 備考 |
1 | Arduino Uno Rev3 | ATmega328 | 1 | 【M-07385】 |
2 | 温湿度センサモジュール | SENSIRION社SHT31-DISセンサ | 1 | 【K-12125】 |
3 | LCDモジュール | I2C接続 16×2行 白色バックライト [ACM1602NI-FLW-FBW-M01] | 1 | 【P-05693】 |
4 | 半固定ボリューム | 3362P 10kΩ | 1 | 【P-03277】 |
5 | ブレッドボード | EIC-801 | 1 | 【P-00315】 |
6 | ジャンパーワイヤ | オス-オス 10cmセット | 適量 | 【C-05371】 |
7 | スイッチングACアダプタ | 9V1.3A 100~240V ※PCとUSB接続のみの場合は不要 | 1 | 【M-00030】 |
Arduinoの開発環境「Arduino IDE」のセットアップ手順
Arduinoの公式サイトからArduino IDEをダウンロードしてPCにインストールします。
Arduinoボードの開発環境となる「Arduino IDE」のインストール、各種センサやLCDといったモジュールとArduinoとの接続を容易にする「ライブラリ」を活用したスケッチ作成までの手順メモです。
温湿度センサモジュールSHT31のライブラリ設定と動作検証
秋月電子通商で提供されている温湿度センサモジュールSHT31の「Arduinoスケッチ」をダウンロードして動作検証します。
(1)秋月電子通商の「SHT31使用 高精度温湿度センサモジュールキット」サイトに掲載の「Arduinoスケッチ」zipファイル(AE_SHT31.zip)をダウンロードします。
(2)ダウンロードしたzip形式のライブラリを、Arduino IDEのメニュー「スケッチ」→「ライブラリをインクルード」→「ZIP形式のライブラリをインストール」でインストールします。
(3)ライブラリと一緒にサンプルコードがついています。これを使って動作検証します。Arduino IDEのメニュー「ファイル」→「スケッチ例」→「AE_SHT31」→「SHT31_Sample」を画面に表示してアドレスを確認します。
ADR(4番ピン)が解放の場合は、SHT31センサモジュールのI2Cスレーブアドレスが[0x45]になっているか確認して修正します。
(4)Arduino IDEのメニュー「検証」を行いスケッチにエラーがないことを確認して、「マイコンボードに書き込む」ボタンをクリックします。
(5)書き込みが完了後Arduino IDEのメニュー「ツール」→「シリアルモニタ」をクリックするとCOM3(番号は環境で異なります)画面がポップアップします。画面に温度と湿度を表示できるとセンサ部分の検証完了です。
LCDモジュール用のライブラリ追加と動作検証、温湿度計が完成
LCDモジュール(ACM1602NI-FLW-FBW-M01)用のI2Cライブラリを追加して、SHT31センサモジュールで測定した温湿度データをI2Cバス経由で液晶モジュールに表示できるように、「SHT31_Sample」コードを書き換えました。
「Wire.h」は「Arduino IDE」に含まれるI2C用ライブラリです。
LCDモジュール用のI2Cライブラリは「構想100年」サイトのLCDコアライブラリ「LcdCore.h(LcdCore_20120528.zip)」 と ACM1602NI用I/Oライブラリ「LCD_ACM1602NI.h(LCD_ACM1602NI_20120528.zip)」を利用させていただきました。上記SHT31のライブラリ設定手順(2)と同じ手順でインストールします。
「AE_SHT31.h」は秋月電子通商サイトの温湿度センサモジュール用「Arduinoスケッチ(AE_SHT31.zip)」のインストール時に組み込まれます。
SHT31_Sample_LCD.ino
※ここをクリックするとコード表示を開閉できます。
#include <Wire.h> // Arduino IDE のI2Cライブラリ
#include <LcdCore.h> // LCDコアライブラリ(LcdCore_20120528.zip)
#include <LCD_ACM1602NI.h> // 秋月液晶用I/Oライブラリ(LCD_ACM1602NI_20120528.zip)
#include <AE_SHT31.h> // 秋月SHT31用のI/Oライブラリ(AE_SHT31.zip)
AE_SHT31 SHT31(0x45); // 0x45は温湿度センサSHT31のI2Cアドレス
LCD_ACM1602NI lcd(0xa0); // 0xa0は液晶モジュールのI2Cアドレス
void setup() {
Wire.begin(); // I2C初期化
lcd.begin(16, 2); // ディスプレイの行数(16)と桁数(2)
SHT31.SoftReset(); // SHT31をソフトリセット
SHT31.Heater(0); // 内蔵ヒーター 0:OFF 1:ON
}
void loop() {
SHT31.GetTempHum(); // SHT31から温湿度データを取得
lcd.setCursor(1, 0);
lcd.print("Temp:");
lcd.setCursor(7, 0);
lcd.print(SHT31.Temperature());
lcd.setCursor(13, 0);
lcd.print("C");
lcd.setCursor(1, 1);
lcd.print("Humi:");
lcd.setCursor(7, 1);
lcd.print(SHT31.Humidity());
lcd.setCursor(13, 1);
lcd.print("%");
delay(1600); // 待ち時間
}
外部電源(ACアダプタや006P乾電池など)を接続することで、PC接続無しでもプログラムを実行できます。