Arduino Nano温度計作ってみた!(DHT11+LDC)

Arduino Nano温度計作ってみた!(DHT11+LDC)

はじめに

こんにちは!香月です。

電子工作について、勉強したことのアウトプットとして
ブログで情報発信をしています!

勉強中のみですので、間違っていること等ありましたら
公式ラインに連絡していただけると幸いです。

今回は、LDCディスプレイとDHT11モジュールを使って温度計を作っていきます。

つかうもの

この記事で使っているものを紹介します。
*このリンクは、アフィリエイトリンクです。
こちらのリンクから購入されると、投稿主にインセンティブが発生します。
より良い記事のために、ぜひ購入する際は以下のリンクよりお願いします。。

購入はここをクリック
*画像はリンク先より引用

購入はここをクリック
*画像はリンク先より引用

購入はここをクリック
*画像はリンク先より引用

購入はここをクリック
*画像はリンク先より引用

モジュール解説

まずは、LDCディスプレイです。
今回使用するのはI2C通信で使用できるものです。
本体の裏にあるモジュールが、本来16本必要なところたったの4本で通信・表示できるようにしています。

こちらは、DHT11という温度・湿度を取得できるモジュールです。
1秒に1回取得することが可能です。
DHTシリーズには、様々なものがあります。
今回は、3本のジャンパー線で使用できるものを使います。

それでは、1づつ動かした後、温度計の制作にはいります。

回路1(ディスプレイ表示)

まずは、LDCディスプレイに文字を表示させていきましょう。

以下の画像のように回路を組んでください。

回路が組めたらプログラムを書き込んでいきます。

プログラム1

プログラムを書き込む前に以下のライブラリをインストールしてください。
*依存関係のものもすべてインストールしてください。

以下のプログラムを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

書き込むと、、、

文字が表示されました!
プログラムの()の中の文字を変更して再度書き込みを行うと、、、

文字が変わりました!
これでディスプレイは終了です。

回路2(DHT11)

続いて、DHT11から取得した温度と湿度の値をシリアルモニターに表示させていきましょう。

まずは、以下の画像を参考にして、回路を組んでください。

回路が組めたら、プログラムを書き込んでいきます。

プログラム2

プログラムを書き込む前に以下のライブラリをインストールしてください。
*依存関係のものはすべてインストールしてください。

以下の以下のプログラムを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

プログラムを書き込むと、、、

シリアルモニターに温度と湿度が表示されていきます。
息を吹きかけてみると、、、

値が変化しました!
これでDHT11は終了です。

回路3(ディスプレイ+DHT11)

それでは、2つのモジュールを使って温度計を作成していきます。

まずは、以下の画像を参考に回路を組み立ててください。

回路ができたらプログラムを書き込んでいきます。

プログラム3

プログラムを書き込む前にライブラリのインストールをしていきます。
「DHT kxn」と「LiquidCrystal I2C」をインストールします。
*依存関係のものもすべてインストールしてください。

ライブラリがインストール出来たら、以下のプログラムを書き込んでいきます。

#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

プログラムを書き込むと、、、

キチンと表示されました!
こちらも息を吹きかけてみると、、、

値が変化しました!

これで温度計の制作は終了です。
*動作しないときは以下の項目を確認してください。

動作しないとき

配線の確認

まずは、ジャンパー線のつなぐ位置が間違っていないかを確認してください。
ジャンパー線が断線している可能性もありますので、1度他のジャンパー線を使ってみるなどしてください。

プログラムの確認

プログラムを書き込む際に何もエラーが起きていないか確認して下さい。
きちんとコピペして、マイコンやポートの選択が問題なくできていれば動作するはずです。

公式ラインに連絡

解決しない場合は、公式ラインに連絡ください。
できる限りサポートさせていただきます。
まだまだ勉強中のみですので、すべて解決できるわけではありませんが、ご了承ください。

友だち追加

まとめ

今回は、LDCディスプレイとDHT11を使って温度計を制作しました。
いかがだったでしょうか。

このブログでは、マイコンを使った電子工作などについて情報発信しています。
ぜひ、やってほしい企画等ありましたら、公式ラインに連絡ください!

では、また次回の記事でお会いしましょう。

Arduino_Nanoカテゴリの最新記事