レッスン28:DHT11温度センサーとTM1637ディスプレイ | Arduinoステップバイステップコース
このArduinoステップバイステップコースのレッスンでは、DHT11温湿度センサーとTM1637 4桁7セグメントディスプレイを組み合わせて、コンパクトでスタンドアロンの温度表示器を作成する方法を探ります。シリアルモニターに頼って測定値を表示する代わりに、このプロジェクトは周囲温度を摂氏と華氏の両方で視覚的に報告する小型の自己完結型ユニットを構築します。これは、電子機器プロジェクト用のユーザーフレンドリーなインターフェースを作成し、データをデジタル世界から物理的なディスプレイに移すための基本的なスキルです。このプロジェクトは、一目でわかる迅速な温度表示が必要なさまざまなアプリケーションにとって実用的な構成要素です。ここにいくつかのアイデアをご紹介します:
- デスクトップ気象ステーション:オフィスや趣味の部屋の温度を監視するための小型の常時表示ディスプレイを構築します。
- サーモスタットモニター:自宅のサーモスタットやHVACベントの近くの温度を確認するための専用ディスプレイを作成します。
- インキュベーターまたはテラリウムゲージ:爬虫類のテラリウム、植物育成チャンバー、またはDIYインキュベーター内の温度を開けずに監視します。
- ワークショップまたはガレージ用温度計:ほこりや薄暗いワークショップでの温度確認に最適な、明るくクリアなディスプレイです。
- 教育用キット:Arduinoでさまざまなタイプのセンサーと出力モジュールを連携させる方法を学ぶための優れたスタータープロジェクトです。
必要なハードウェア
このプロジェクトに沿って進めるには、以下のコンポーネントが必要です:
- Arduino Uno(または互換性のある任意のボード)
- DHT11温湿度センサー(3ピンおよび4ピンのPCBバージョンの両方が示されています)
- TM1637 4桁7セグメントディスプレイモジュール
- ブレッドボード
- ジャンパーワイヤー
配線ガイド
このプロジェクトの配線は簡単で、センサーとディスプレイの両方の接続が必要です。ビデオでは、DHT11センサーの2つの異なるバージョンとTM1637ディスプレイの2つのサイズを使用したセットアップが示されていますが、主要な接続は同じです。
ビデオで説明されているDHT11センサーとTM1637ディスプレイの配線は次のとおりです(ビデオの05:06時点)。



TM1637ディスプレイモジュールの場合、接続は次のとおりです:
- VCCをArduinoの5Vに接続。
- GNDをArduinoのGNDに接続。
- CLK(クロック)をデジタルピン、例えばD2に接続。
- DIO(データ入出力)を別のデジタルピン、例えばD3に接続。
DHT11センサーの場合、接続は次のとおりです:
- VCC(または+ピン)を5Vに接続。
- GND(または-ピン)をGNDに接続。
- Data(またはSピン)をデジタルピン、例えばD2に接続。(注:ビデオでは、センサーのデータピンはピン2に接続されていますが、コードスニペットでもピン2に接続されています。ディスプレイのCLKおよびDIOピンはコードスニペットではピン2と3にあり、これは競合です。ビデオのトランスクリプトではディスプレイにピン5と6が言及されているため、重複を避けるためにこれらを使用します。)
注意:トランスクリプトとコードスニペットには潜在的なピン競合が示されています。コードはDHT11データピンとTM1637 CLKピンの両方をデジタルピン2に定義しています。これを避けるために、ビデオで言及されているように、DHT11をピン2に接続し、TM1637 CLKをピン5、DIOをピン6に接続するなど、別々のピンを使用することをお勧めします。
コードの説明
このプロジェクトのコードは、DHT11センサーとTM1637ディスプレイの両方のライブラリを組み合わせています。ユーザーが設定できる主要な部分は、ピン定義とディスプレイの明るさ設定です。これらは、特定の配線や好みに合わせて調整できます。
まず、DHT11センサーのデータピンが定義されます。センサーをArduinoの別のデジタルピンに接続した場合は、この番号を変更できます。
#define dhtpin 2 // DHT11に接続するピンを設定
次に、TM1637ディスプレイモジュールのピンが定義されます。CLKピンはクロック信号用で、DIOピンはデータ用です。これらは物理的な配線と一致している必要があります。
// モジュール接続ピン(デジタルピン)
#define CLK 5
#define DIO 6
次に、TM1637Displayクラスのオブジェクトが作成され、CLKおよびDIOピン番号を引数として受け取ります。このオブジェクトは、ディスプレイを制御するために必要なすべての関数を提供します。
TM1637Display display(CLK, DIO);
ディスプレイの明るさはsetup()関数で設定されます。0x0fの値は最大の明るさを表します。0x00(オフ)から0x0f(最大)までの値を使用して、環境に合わせてディスプレイの強度を調整できます。
display.setBrightness(0x0f);
loop()関数のメインロジックは、DHT11センサーから温度を読み取り、それを表示します。showNumberDec()関数は、温度値をディスプレイに送信するために使用されます。そのパラメータにより、数値の表示方法を制御できます。例えば、次の行は摂氏の温度を2桁目(位置1)から表示します。
display.showNumberDec(23, false, 2, 1);
この例では、23は表示する数値、falseは先頭ゼロなしを意味し、2は使用する桁数、1はディスプレイ上の開始位置(0から始まるインデックス)です。
ライブプロジェクトデモンストレーション
ビデオでは、プロジェクトがライブで実演されています。発表者は、大きい方と小さい方の両方のTM1637ディスプレイで温度表示を示しています。センサーが機能していることを証明するために、ヒートガンを使用してDHT11に熱が加えられます。
最初に、ディスプレイには摂氏と華氏の両方で室温が表示されます。ヒートガンがセンサーを温めると、温度表示が急速に上昇するのがわかります。このデモンストレーションでは、温度が通常の室温から50°C(123°F)以上に上昇し、センサーが温度変化を正確に読み取り、ディスプレイがデータを正しく表示していることを確認しています。このテストは、すべての接続とコードが正しく機能していることを検証する優れた方法です。
ビデオチャプター
- [00:00] プロジェクトの紹介
- [00:28] TM1637ディスプレイのコードの理解
- [03:04] 摂氏と華氏での温度表示
- [05:06] DHT11をTM1637ディスプレイに配線する
- [06:42] 温度表示のライブデモンストレーション
- [08:23] 小型ディスプレイモジュールでのテスト
- [08:35] 結論とプロジェクトの概要
/*
* Robojax Arduino Step-by-Step Course
* Lesson 28: DHT11 with TM1637
* This is the Arduino code for TM1637 4-digit display.
*
* Please watch video instructions here: https://youtu.be/C-1iaCPzNtU
* This code is available at: http://robojax.com/course1/?vid=lecture11
*
* With over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
* Get the code for the course: http://robojax.com/L/?id=339
*
* Date: December 6, 2017, in Ajax, Ontario, Canada
*
* Original code from: https://github.com/avishorp/TM1637
* Modified for Robojax video on December 6, 2017
*/
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings of TM1637 LED display
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
uint8_t blank[] = { 0x0, 0x0, 0x0, 0x0 };// blank value for all digits
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 2000
// start of settings of TM1637 LED display
void setup()
{
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
Serial.begin(9600);// setting up serial monitor
display.setBrightness(0x0f);
}
void loop()
{
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
display.setSegments(blank);
display.showNumberDec(23, false, 2,1);
delay(TEST_DELAY);
display.setSegments(data);
display.showNumberDec(153, false, 3, 1);
delay(TEST_DELAY);
display.setSegments(data);
for(int i=0; i<=500; i++)
{
display.showNumberDec(i);
}
}
必要かもしれないもの
-
イーベイ
-
アリエクスプレスTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
リソースと参考文献
-
外部DHT11マニュアル(PDF)robojax.com
-
外部GitHubのDHT11ライブラリgithub.com
ファイル📁
Arduinoライブラリ(zip)
-
TM1637 Arduinoライブラリ
TM1637_library.zip1.36 MB
フリッツィングファイル
-
TM1637 セブンセグメントモジュール
TM1637.fzpz0.01 MB -
TM1637 4桁セグメントディスプレイ
TM1637-1.fzpz0.01 MB
他のファイル
-
XY-T01 リレータイマー: DC負荷配線
/download/datasheet/robojax_TM1637_datasheet.pdf