Arduinoで温湿度センサDHT11を使ってI2C通信でLCDに値を表示!ビジュアルプログラミング(スクラッチベースmBlock)【Lesson17】
こんにちは、せでぃあ(@cediablog)です。
今回のArduinoプログラミングLESSON17では「温湿度センサDHT11を使った、LCD(液晶ディスプレイ)への温湿度値表示動作」を行います。
温湿度センサDHT11は3本の配線だけで、現在の温度と湿度値を取得できてしまう便利なデバイスです。
今回は、その温湿度センサを使って液晶ディスプレイLCD1602に温湿度表示させるプログラムの作り方を紹介します。
液晶ディスプレイLCD1602の制御はI2Cを使ったシリアル通信を使います。
I2C通信を使った経験のない方は、まずはこちらの記事を読んでいただくことをおすすめします。
本記事は、プログラミングと電子パーツの知識が習得できるプログラミング初心者にも安心して読んでいただける内容になっています。
小学生、中学生も安心してプログラミングができるように、文字列を使わないブロックプログラミング方法についても動画付きで紹介しています。
プログラミング初心者の方は、ブロックプログラミングから始めてみてください!
本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらも紹介しています
無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。
- 温湿度センサDHT11を使った、LCDへの温湿度表示方法
- Arduino IDEでのプログラミング方法
- mBlockを使ったビジュアルプログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
温湿度センサDHT11について
今回使用する温湿度センサDHT11について、説明します。
DHT11は、電源線2本と信号線1本の計3本配線するだけで「温度」「湿度」どちらの値も、Arduinoに取り込むことができます。
また、温度・湿度の値は出荷前に実際の値と一定以内の誤差に収まるように、調整されています。
この調整の事を、校正・キャリブレーションと言います。
DHT11はサンプリング速度が遅い
配線が少なくて、温度と湿度の両方の値が取得できる便利なセンサですが、欠点もあります。
それはデータ取得の周期(サンプリング周期)が2秒以上かかることです。
あからさまに、温湿度変化の反応が鈍いです。
それでも現在の部屋の温湿度値を見てみたいだけであれば、十分使えるデバイスですよ。
DHT11を使った温湿度値表示プログラム動作の説明
今回紹介する「温湿度センサDHT11を使った、LCD1602への温湿度値表示動作」について説明します。
- 温湿度センサ「DHT11」の機器説明
- LCDへの温湿度表示動作
- mBlockを使ったプログラミングの解説
まずは動画を見て、今回のLESSONで実行させたい動作内容を確認してください。
また、mBlockを使ったブロックプログラミングや動作確認方法についても解説しています。
今回はプログラムボリュームも少なめなので、作りやすいですよ!
DHT11を使った、LCDへの温湿度表示回路の作り方
DHT11を使った、LCDへの温湿度表示回路を実行させるために必要な作業を解説します。
今回は文字列を使ったプログラム形式と、文字列を使わないブロックプログラミング形式について説明します。
あなたの作りたいプロブラム形式に対応した手順に応じて、対応してください。
プログラム形式に応じた開発環境
・文字列による命令語形式⇒ArduinoIDE
・スクラッチベースのビジュアル形式⇒mBlock
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です。
パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。
以下の記事にて詳しく説明しています。
ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です。
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
私が作成したプログラムをコピペして使ってください。
Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です。
スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します
プログラム内容については、後述するプログラミング例を参考にしてください。
ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です。
プログラムが完成したら動作確認を行います。
- 液晶ディスプレイに「温度」「湿度」が表示されるか?
- 温度と湿度の値は、環境に応じて更新されるか?
DHT11を使った、LCDへの温湿度表示回路で使うもの
- パソコン
- Arduino本体
- USBケーブル
- ブレッドボード
- 温湿度センサDHT11
- LCD1602モジュール
- I2Cモジュール
- ジャンパー線(オスーメス)×4本
- ジャンパー線(オスーオス)×5本
今回はELEGOO社のスーパースターターキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
【おすすめ】コスパ最強のArduinoキットの中間グレードです!
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能は同じです。
ブレッドボードだけの購入も可能です。
温湿度センサDHT11【キット】
温度と湿度を同時に計測できるタイプのセンサーです。
Arduinoのデジタル入出力ソケットに接続して、データのやり取りを行います。
LCD1602モジュール【キット】
液晶ディスプレイ「LCD(Liquid Crystal Display)」モジュールになります。
数字や文字などを表示させることが可能です。
I2Cモジュール
I2Cを使ってLCDを制御するために必要なモジュールです。
電源線2本と通信線2本の合計4本の配線だけで、LCDを制御することが可能になります。
ジャンパー線(オスーメス)【キット】
オス-メスジャンパー線を4本使用します。
I2CシリアルインターフェースボードとArduino本体を接続させるために使用します。
ジャンパー線(オスーオス)【キット】
ジャンパー線を5本使用します。
Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。
スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。
配線のやり方
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
機器が故障するおそれがあるので、接続するプラスマイナス極性には十分注意して配線してください。
機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください
プログラミングのやり方
本記事では、以下に示す「Arduino IDEプログラミング」と「mBlockプログラミング」の2通りのプログラミング方法について解説しています。
いずれか1つのプログラミング方法を用いることで、本LESSONの動作を行うことが可能です。
ArduinoIDE:文字列による命令語形式
mBlock:スクラッチベースのビジュアル形式
文字列を使わないmBlockの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。
mBlockを使ってプログラミングをする方は、mBlockの説明まで読み飛ばしてください。
LiquidCrystal_I2Cライブラリのインストール
ArduinoIDEを使用した文字列プログラミングを行うためには、LiquidCrystal_I2Cライブラリのダウンロードとインストール作業が必要となります。
LiquidCrystal_I2Cライブラリのダウンロードとインストール方法を解説します。
mBlockでプログラミングをする場合は、本ライブラリインストール作業は不要です。
「Download ZIP」をクリックして、ZIPファイルをダウンロードします。
ArduinoIDEを開き、「スケッチ」⇒「ライブラリをインクルード」⇒「.ZIP形式のライブラリをインストール…」の順に選択して、STEP3でダウンロードしたZIPファイルを選択。
インストールが行われ、ライブラリインストール作業が完了となります。
DHT sensor libraryのインストール
ArduinoIDEを使用した文字列プログラミングを行うためには、DHT sensor libraryのダウンロードとインストール作業が必要となります。
DHT sensor libraryのダウンロードとインストール方法を解説します。
mBlockでプログラミングをする場合は、本ライブラリインストール作業は不要です。
Arduino開発環境である、Arduino IDEを開きます。
スケッチ⇒ライブラリインクルード⇒ライブラリを管理をクリックします。
ライブラリマネージャーの検索窓に「dht」と入力し、DHT sensor libraryを探します。
インストールボタンをクリックして、ライブラリをインストールします。
ライブラリの依存関係をインストールというポップアップウィンドウが開くので、「全てをインストール」ボタンをクリックします。
これで、DHT sensor libraryのインストールは完了です。
mBlockでブロックプログラミングする場合は、これらのライブラリのインストール作業は不要です。
Arduino IDEプログラミング
Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。
プログラミングするにあたり、ある程度の命令語を知っておく必要があります。
Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。
日本語版のArduino公式リファレンスが付属しているので関数を調べるときに重宝します!(私も所有しています)
プログラミング方法
Arduino IDEを使って、文字列プログラミングを行います。
Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。
Arduino IDEプログラム
/* 作品名:LESSON17 */
/* 作成者:せでぃあ https://cediablog.com */
/* 温湿度センサーDHT11の情報をLCD1602に表示させる */
#include <DHT.h> // ライブラリのインクルード
#include <LiquidCrystal_I2C.h> // ライブラリのインクルード
// DHT型変数の宣言
DHT dht(2, DHT11); // DATAピンの接続先は2番ソケット、DHT11を接続
// LiquidCrystal_I2C型変数の宣言
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27のアドレス,16列2行のLCDを使用
void setup() {
//プログラム起動時1回だけ処理される回路
//温湿度センサーの読み取り動作開始
dht.begin();
//LCD初期化
lcd.init(); // LCDの初期化
lcd.backlight(); // LCDバックライトの点灯
}
void loop() {
//プログラム起動後ループ処理される回路
float temp = dht.readTemperature(); //温度データの代入
float rh = dht.readHumidity(); //湿度データの代入
//LCD上段に温度データを表示
lcd.setCursor(0, 0); // カーソルの位置を指定(1文字目、上段)
lcd.print("Temp"); // 文字の表示
lcd.setCursor(6, 0); // カーソルの位置を指定(7文字目、上段)
lcd.print(temp); // 文字の表示
lcd.setCursor(11, 0); // カーソルの位置を指定(12文字目、上段)
lcd.print("C"); // 文字の表示
//LCD下段に湿度データを表示
lcd.setCursor(0, 1); // カーソルの位置を指定(1文字目、上段)
lcd.print("%RH"); // 文字の表示
lcd.setCursor(6, 1); // カーソルの位置を指定(7文字目、上段)
lcd.print(rh); // 文字の表示
lcd.setCursor(11, 1); // カーソルの位置を指定(12文字目、上段)
lcd.print("%"); // 文字の表示
delay(100); //0.1秒ウェイト
}
上記がI2Cを使った、LCD表示制御回路のプログラムになります。
Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。
各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。
各ライブラリの命令語については、このあと詳しく説明していきます
命令語の解説
今回のプログラムで使用した命令文について、解説します。
変数のデータ型指定
変数のデータ型を指定するものです。
今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。
またアナログ出力値は「0~255」の整数を扱いますので、同じく「int型」を指定します。
データ型 | 説明 | 扱える範囲 |
---|---|---|
int | 2バイトの整数を代入可能。 | -32768~32767 |
long | 4バイトの整数を代入可能 | -2,147,483,648~2,147,483,647 |
float | 4バイトの小数を代入可能。 | 3.4028235×1038~-3.4028235×1038 |
char | 1バイトの値を代入可能。文字列の代入に利用されます。 | -128~127 |
boolean | 0または1のみ代入可能。フラグのON-OFFなどに利用されます。 | 0,1 |
DHT sonsor libraryの説明
温湿度センサDHT11の制御をするために、「DHT sonsor library」を使用します。
このライブラリを使うだけで、簡単にデバイスが取得した温湿度データを扱うことができます。
DHT sonsor libraryの読み出し
プログラム冒頭の宣言部にてDHT sonsor libraryを読み出します。
#include <DHT.h>
DHT型変数の指定
プログラム冒頭の宣言部にてDHT型の変数を定義します。
DHT dht(DATAピン接続ソケット番号 , DHTセンサ型式)
変数「dht」は例であり、任意の変数文字列を指定してください
LiquidCrystal_I2Cライブラリの説明
今回はLCD1602の制御をするために、「LiquidCrystal_I2Cライブラリ」を使用します。
このライブラリを使うだけで、簡単にLCD表示を制御できます。
LiquidCrystal_I2Cライブラリの読み出し
プログラム冒頭の宣言部にてLiquidCrystalライブラリを読み出します。
#include <LiquidCrystal_I2C.h>
LiquidCrystal型変数の指定
プログラム冒頭の宣言部にてLiquidCrystal_I2C型の変数を定義します。
LiquidCrystal_I2C lcd(I2Cアドレス, 桁数, 行数)
変数「lcd」は例であり、任意の変数文字列を指定してください
init()
LCDの表示内容をクリアし、カーソルを左上に移動させます。
lcd型変数.init
setCursor(桁 , 行)
カーソル位置を指定します。テキスト表示開始位置を指定することができます。
lcd型変数.setCursor(桁、行)
桁は左端が「0」、行は上段が「0=1行目」になります。
print(“表示させたい文字列”)
LCDに文字列を表示させます。
lcd型変数.print(“表示させたい文字列”)
backlight()
LCDバックライトを点灯させます。
lcd型変数.backlignt()
プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!
mBlockプログラミング
ここからは、mBlockを使ったプログラムの作り方を解説します。
- デバイスにArduino Uno R3を追加する
- 接続モードを「アップロードモードON」にする
- mBlockプログラムを作成する
- プログラムをArduino本体に転送する
これらの基本操作方法については、こちらの記事を参照してください。
動画を参考にプログラミングしてみよう
DHT温湿度センサ制御ブロックの追加方法
温湿度センサDHT11と接続し、温湿度データを取得するために必要な、専用ブロックを追加します。
mBlockを開いて、拡張ボタンをクリックします。
検索窓に「dht」と入力します。
Temp,Humidity(DHT)を書かれた、拡張ブロックを追加します。
DHT温湿度センサを使うための、専用ブロックが追加されます。
I2Cを使ったLCD制御ブロックの追加方法
LCDを制御(LCD画面クリア、カーソル位置を指定、LCDへの文字列表示など)するために必要な、専用ブロックを追加する必要があります。
mBlockを開いて、拡張ボタンをクリックします。
検索窓に「i2c」と入力します。
I2Cを使ったLCD制御用の拡張ブロックを追加します。
I2Cを使ったLCD制御ブロックが追加されます。
mBlockを使ったプログラム内容
今回は「アップロードモード オン」でのプログラム作成例を紹介しています。
プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。
以下のプログラムが動作プログラムになります。
mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。
動作確認方法
- 液晶ディスプレイに「温度」「湿度」が表示されるか?
- 温度と湿度の値は、環境に応じて更新されるか?
上記項目について確認していきましょう。
液晶ディスプレイに「温度」「湿度」が表示されるか?
今回作成するプログラムでは、下記の表示になります。
LCD表示内容
Temp␣取得した温度値␣C
%RH␣取得した湿度値␣%
もし表示内容が上記と異なっていた場合は、プログラム内での「上段」「下段」表示指示が間違っていないか?表示内容の指示が間違っていないか?確認してください。
温度と湿度の値は、環境に応じて更新されるか?
DHT11は取得した温湿度値の更新に2秒以上かかりますが、検出値に応じて表示が書き換わります。
センサに息を吹きかけてみたりして、LCD表示値が更新されることを確認してください。
サンプリング速度が遅いですが、デバイスの仕様になります。
DHT11は簡単に温湿度データが取得できる(まとめ)
- 温湿度センサDHT11は3本の配線接続で温湿度データが取得できる
- 専用ライブラリ、ブロックを使うことで簡単にデバイス制御できる
- mBlockを使ったブロックプログラミングがシンプルでおすすめ
小学生のお子様には断然、ブロックプログラミングがおすすめです!
mBlockはブロックのドラッグアンドドロップでプログラミングできるため、初心者のかたにも安心して操作ができますよ。
ブロックプログラミングの練習におすすめな、プログラミングロボットです!
最後まで読んでいただき、ありがとうございました。
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
コメント