はじめに
![](https://kouduki.jp/wp-content/uploads/2023/12/cropped-Anime_Pastel_Dream_Light_about_18_years_old_guy_black_hair_whi_1.jpg)
こんにちは!香月です。
電子工作について、勉強したことのアウトプットとして
ブログで情報発信をしています!
勉強中のみですので、間違っていること等ありましたら
公式ラインに連絡していただけると幸いです。
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0622-1024x768.jpg)
今回は、LDCディスプレイとDHT11モジュールを使って温度計を作っていきます。
つかうもの
この記事で使っているものを紹介します。
*このリンクは、アフィリエイトリンクです。
こちらのリンクから購入されると、投稿主にインセンティブが発生します。
より良い記事のために、ぜひ購入する際は以下のリンクよりお願いします。。
![](https://kouduki.jp/wp-content/uploads/2024/03/DHT11.jpg)
購入はここをクリック
*画像はリンク先より引用
![](https://kouduki.jp/wp-content/uploads/2024/03/LDCディスプレイ.jpg)
購入はここをクリック
*画像はリンク先より引用
![](https://kouduki.jp/wp-content/uploads/2024/05/aruduinonano_gokan.jpg)
購入はここをクリック
*画像はリンク先より引用
![](https://kouduki.jp/wp-content/uploads/2024/01/ジャンパー線+ミニブレッドボード.jpg)
購入はここをクリック
*画像はリンク先より引用
モジュール解説
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0634-1024x768.jpg)
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0635-1024x768.jpg)
まずは、LDCディスプレイです。
今回使用するのはI2C通信で使用できるものです。
本体の裏にあるモジュールが、本来16本必要なところたったの4本で通信・表示できるようにしています。
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0633-1024x768.jpg)
こちらは、DHT11という温度・湿度を取得できるモジュールです。
1秒に1回取得することが可能です。
DHTシリーズには、様々なものがあります。
今回は、3本のジャンパー線で使用できるものを使います。
それでは、1づつ動かした後、温度計の制作にはいります。
回路1(ディスプレイ表示)
まずは、LDCディスプレイに文字を表示させていきましょう。
以下の画像のように回路を組んでください。
![](https://kouduki.jp/wp-content/uploads/2024/05/電子工作-43-1024x724.jpg)
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0628-1024x768.jpg)
回路が組めたらプログラムを書き込んでいきます。
プログラム1
プログラムを書き込む前に以下のライブラリをインストールしてください。
*依存関係のものもすべてインストールしてください。
![](https://kouduki.jp/wp-content/uploads/2024/05/ライブラリ2.png)
以下のプログラムをArduino Stdioを使って書き込んでいきます。
#include <LiquidCrystal_I2C.h>
// LiquidCrystal_I2Cオブジェクトを初期化します。
// I2Cアドレスは0x27、16列2行のディスプレイを使用します。
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
lcd.init(); // LCDの初期化
lcd.clear(); // LCD表示をクリア
lcd.backlight(); // バックライトをオンにします。
// LCDの両行にメッセージを表示します。
lcd.setCursor(2, 0); // 0行目の2文字目にカーソルを設定
lcd.print("Hello world!");
lcd.setCursor(2, 1); // 1行目の2文字目にカーソルを移動
lcd.print("LCD Tutorial");
}
void loop() {
// ループ内に何も書かれていません。セットアップでメッセージを表示するだけです。
}
コードのくわしい解説は↓をクリック
ここ!!!!
ライブラリのインクルードとオブジェクトの初期化
#include <LiquidCrystal_I2C.h>
// LiquidCrystal_I2Cオブジェクトを初期化します。
// I2Cアドレスは0x27、16列2行のディスプレイを使用します。
LiquidCrystal_I2C lcd(0x27, 16, 2);
- LiquidCrystal_I2C.h:ライブラリをインクルードして、I2Cを介してLCDディスプレイを制御するための機能を提供します。
- lcdという名前のLiquidCrystal_I2Cオブジェクトを作成し、LCDディスプレイのI2Cアドレスを0x27、16列2行のディスプレイとして初期化します。
setup関数
void setup() {
lcd.init(); // LCDの初期化
lcd.clear(); // LCD表示をクリア
lcd.backlight(); // バックライトをオンにします。
// LCDの両行にメッセージを表示します。
lcd.setCursor(2, 0); // 0行目の2文字目にカーソルを設定
lcd.print("Hello world!");
lcd.setCursor(2, 1); // 1行目の2文字目にカーソルを移動
lcd.print("LCD Tutorial");
}
- lcd.init():LCDを初期化します。
- lcd.clear():LCDの表示をクリア(初期状態に戻します)。
- lcd.backligh():LCDのバックライトをオンにします。
- lcd.setCursor():LCDのカーソルを0行目の2文字目に設定します。
- lcd.print(“Hello world”)::指定した位置に「Hello world!」というメッセージを表示します。
- lcd.setCursor(2,1):LCDのカーソルを1行目の2文字目に移動します。
- lcd.print(“LCD Tutorial”);:指定した位置に「LCD Tutorial」というメッセージを表示します。
loop関数
今回は1度表示させた文字を変更することがないので何も記述しません。
実行1
書き込むと、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0630-1024x768.jpg)
文字が表示されました!
プログラムの()の中の文字を変更して再度書き込みを行うと、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0631-1024x768.jpg)
文字が変わりました!
これでディスプレイは終了です。
回路2(DHT11)
続いて、DHT11から取得した温度と湿度の値をシリアルモニターに表示させていきましょう。
まずは、以下の画像を参考にして、回路を組んでください。
![](https://kouduki.jp/wp-content/uploads/2024/05/電子工作-44-1024x724.jpg)
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0632-1024x768.jpg)
回路が組めたら、プログラムを書き込んでいきます。
プログラム2
プログラムを書き込む前に以下のライブラリをインストールしてください。
*依存関係のものはすべてインストールしてください。
![](https://kouduki.jp/wp-content/uploads/2024/05/ライブラリ1.png)
以下の以下のプログラムをArduino Stdioで書き込んでいきます。
#include <DHT.h>
DHT dht(2, DHT11); // ピン2にDHT11センサーを接続します。
void setup() {
Serial.begin(9600);
dht.begin(); // センサーを初期化します。
}
void loop() {
delay(2000); // 2秒待機します。
float temperature = dht.readTemperature(); // 温度を読み取ります。
float humidity = dht.readHumidity(); // 湿度を読み取ります。
if (!isnan(temperature) && !isnan(humidity)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
} else {
Serial.println("Failed to read from DHT sensor!");
}
}
コードの詳しい解説は↓をクリック!
ここ!!!
初期化
#include <DHT.h>
DHT dht(2, DHT11); // ピン2にDHT11センサーを接続します。
ライブラリ「DHT.h」をインクルードします。
setup関数
void setup() {
Serial.begin(9600); // シリアル通信を9600ボーレートで初期化します。
dht.begin(); // センサーを初期化します。
}
シリアル通信を9600ボーレートで初期化し、DHT11センサーを初期化します。
loop関数
void loop() {
delay(2000); // 2秒待機します。
// 温度と湿度を読み取ります。
float temperature = dht.readTemperature(); // 温度
float humidity = dht.readHumidity(); // 湿度
// 温度と湿度の読み取りが成功した場合、シリアルモニタに表示します。
if (!isnan(temperature) && !isnan(humidity)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
} else {
// 読み取りが失敗した場合はエラーメッセージを表示します。
Serial.println("Failed to read from DHT sensor!");
}
}
- 2秒待機します。
- DHT11センサーから温度と湿度を読み取ります。
- 読み取りが成功した場合、温度と湿度をシリアルモニタに表示します。読み取りが失敗した場合はエラーメッセージを表示します。
実行2
プログラムを書き込むと、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/DHTonly1.png)
シリアルモニターに温度と湿度が表示されていきます。
息を吹きかけてみると、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/DHTonly2.png)
値が変化しました!
これでDHT11は終了です。
回路3(ディスプレイ+DHT11)
それでは、2つのモジュールを使って温度計を作成していきます。
まずは、以下の画像を参考に回路を組み立ててください。
![](https://kouduki.jp/wp-content/uploads/2024/05/電子工作-45-1024x724.jpg)
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0612-1024x768.jpg)
回路ができたらプログラムを書き込んでいきます。
プログラム3
プログラムを書き込む前にライブラリのインストールをしていきます。
「DHT kxn」と「LiquidCrystal I2C」をインストールします。
*依存関係のものもすべてインストールしてください。
![](https://kouduki.jp/wp-content/uploads/2024/05/ライブラリ1.png)
![](https://kouduki.jp/wp-content/uploads/2024/05/ライブラリ2.png)
ライブラリがインストール出来たら、以下のプログラムを書き込んでいきます。
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 は LCD の I2C アドレスです。16x2 の LCD を使用している場合は適宜変更してください。
DHT dht(2, DHT11);
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000); // 2 秒待つ
float temperature = dht.readTemperature(); // 温度を読み取る(摂氏)
float humidity = dht.readHumidity(); // 湿度を読み取る
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
lcd.clear(); // 画面をクリア
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
}
コードの詳しい解説は↓をクリック
ここ!!!!
ライブラリ+オブジェクトの初期化
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
// LCDのI2Cアドレスとディスプレイのサイズを指定してLiquidCrystal_I2Cオブジェクトを初期化します。
LiquidCrystal_I2C lcd(0x27, 16, 2);
// DHTセンサーをデジタルピン2に接続し、センサータイプをDHT11に設定します。
DHT dht(2, DHT11);
- ライブラリ「DHT.h」と「LiquidCrystal_I2C.h」をインクルードします。
- 「LiquidCrystal_I2C」オブジェクト「lcd」を作成し、I2Cアドレス「0x27」および16×2のLCDディスプレイを指定します。
- 「DHT」オブジェクト「dht」を作成し、DHT11センサーをデジタルピン2に接続します。
setup関数
void setup() {
// LCDを初期化し、バックライトをオンにします。
lcd.init();
lcd.backlight();
// シリアル通信を9600ボーレートで初期化し、DHTセンサーを開始します。
Serial.begin(9600);
dht.begin();
}
- 「lcd.init()」: LCDを初期化します。
- 「lcd.backlight()」: LCDのバックライトをオンにします。
- 「Serial.begin(9600)」: シリアル通信を9600ボーレートで初期化します。
- 「dht.begin()」: DHTセンサーを開始します。
loop関数
void loop() {
// 2秒間待機します。
delay(2000);
// 温度と湿度を読み取ります。
float temperature = dht.readTemperature(); // 温度(摂氏)
float humidity = dht.readHumidity(); // 湿度
// 温度または湿度の読み取りが失敗した場合、エラーメッセージを表示して処理を終了します。
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 温度と湿度をシリアルモニタに表示します。
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
// LCDの画面をクリアします。
lcd.clear();
// LCDに温度を表示します。
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.print(temperature);
lcd.print(" C");
// LCDに湿度を表示します。
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print(" %");
}
- 「delay(2000)」: ループを2秒間待機させます。
- 「float temperature = dht.readTemperature()」: DHTセンサーから温度を読み取ります。
- 「float humidity = dht.readHumidity()」: DHTセンサーから湿度を読み取ります。
- 「if (isnan(temperature) || isnan(humidity)) { … }」: 温度または湿度の読み取りが失敗した場合、エラーメッセージを表示してループを終了します。
- シリアルモニタに湿度を表示します。
実行3
プログラムを書き込むと、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0622-1024x768.jpg)
キチンと表示されました!
こちらも息を吹きかけてみると、、、
![](https://kouduki.jp/wp-content/uploads/2024/05/IMG_0627-1024x768.jpg)
値が変化しました!
これで温度計の制作は終了です。
*動作しないときは以下の項目を確認してください。
動作しないとき
配線の確認
まずは、ジャンパー線のつなぐ位置が間違っていないかを確認してください。
ジャンパー線が断線している可能性もありますので、1度他のジャンパー線を使ってみるなどしてください。
プログラムの確認
プログラムを書き込む際に何もエラーが起きていないか確認して下さい。
きちんとコピペして、マイコンやポートの選択が問題なくできていれば動作するはずです。
公式ラインに連絡
解決しない場合は、公式ラインに連絡ください。
できる限りサポートさせていただきます。
まだまだ勉強中のみですので、すべて解決できるわけではありませんが、ご了承ください。
まとめ
今回は、LDCディスプレイとDHT11を使って温度計を制作しました。
いかがだったでしょうか。
このブログでは、マイコンを使った電子工作などについて情報発信しています。
ぜひ、やってほしい企画等ありましたら、公式ラインに連絡ください!
では、また次回の記事でお会いしましょう。