4.7 プロジェクト:温度制御システム
このプロジェクトでは、温湿度センサー、ファン、LCD1602ディスプレイを使用して、インテリジェントな温湿度制御システムを構築する方法を説明します。
このシステムは、周囲の温度と湿度を測定し、必要に応じてファンを制御して冷却します。温度が設定されたしきい値を超えると、ファンが自動的にオンになり、周囲温度を設定値以下に下げます。同時に、現在の温度と湿度の値がLCD1602に表示されます。
したがって、周囲の温度と湿度の自動調整を実現し、これらの機能を必要とするプロジェクトに最適です。

4.7.1 フロー図

4.7.2 温湿度センサー
説明:
DHT11温湿度センサーはデジタル信号を出力します。アナログ信号の取得と変換、および温湿度センシング技術の原理を応用しているため、長期安定性と高い信頼性を特徴としています。さらに、このセンサーは高精度抵抗式湿度センサーと抵抗式感熱温度センサーを統合し、8ビット高性能MCUに接続されています。

DHT11通信手段:
DHT11は、データ交換と制御を行うモノバス(単一バス)を介して通信します。
モノバスはデータビットを送信します。
モノバスのデータ形式:毎回40ビットのデータを送信し、上位ビットが最初です。
8ビット湿度整数値 + 8ビット湿度小数値 + 8ビット温度整数値 + 8ビット温度小数値 + ビットパリティ。
注:湿度の小数値は0です。
パリティビット:
8ビット湿度整数値 + 8ビット湿度小数値 + 8ビット温度整数値 + 8ビット温度小数値。
8ビットパリティは、結果の末尾8ビットに等しいです。
タイミング図:

注:
ホストは常にDHT11から前回の測定の温湿度値を読み取ります。したがって、2回の測定間隔が長い場合は、2回連続して検出して2回目の結果を採用してください。
詳細については、ASAIR公式サイトをご覧ください:http://www.aosong.com/products-21.html
配線図:
温湿度センサーをio17に接続します。
注意:黄色をS(信号)、赤をV(電源)、黒をGNDに接続します。逆接続しないでください!

テストコード:
シリアルポートとセンサーを初期化します。

シリアルモニターは、湿度と温度の値を1秒ごとに表示し、更新します。

完全なコード:

テスト結果:

シリアルモニターを開くと、現在の温度と湿度の値が表示されます。

4.7.3 LCD 1602モジュール
説明:
LCD 1602は、標準の14ピン(バックライトなし)または16ピン(バックライトあり)インターフェースを備えており、MCUのピンを節約します。そのディスプレイは、I2C制御を実現するためにICを駆動します。

I2Cシリアル通信:
I2C通信は、Inter-Integrated Circuit (IIC) または Two-Wire Interface (TWI) とも呼ばれ、Phillips Semiconductor(米国NXP Semiconductorsが買収)によって開発された、一般的に使用されるデュアルバス(ホストとスレーブ)通信プロトコルです。
最大の利点は、2本のワイヤーだけでデータ伝送が完了し、回路が大幅に簡素化されることです。I2Cバスは合計127個のノードを並列に接続できるため、複数のホストとスレーブをサポートします。
一般的に、I2Cバスはスレーブに電力を供給するため、スレーブには外部電源は不要です。

I2Cバスは8ビットデータ伝送を介してデータを送信します。通常、1バイトのデータは9つのクロック信号で構成され、そのうち8つがデータを送信し、最後の1つが伝送の終了を示します。
さらに、I2Cバスは上記のプロセスを連続して繰り返すことで、マルチバイトデータ伝送をサポートします。
I2Cプロトコルは基本的に以下で構成されます。
開始信号:伝送前に、送信側は開始信号を送信して、受信側に開始点を通知します。
アドレス:データが誰に送信されているかを受信側に通知します。
データ:一度に1バイトずつ、ビットごとに送信されます。
終了信号:伝送が終了すると、送信側は終了信号でデータを終了し、受信側にプロセスが終了したことを通知します。
シリアルプロトコルのタイミング図:
詳細については、公式サイトをご覧ください:https://www.nxp.com/


I2Cプロトコル用のライブラリファイルWire.hを提供しており、その中の関数を直接呼び出してI2C/TWIデバイスと通信できます。
ライブラリの詳細については、以下を参照してください。
https://www.arduino.cc/reference/en/language/functions/communication/wire/
配線図:
以下に示すように、LCDをI2C BUSに接続します。
注意:黄色をS(信号)、赤をV(電源)、黒をGNDに接続します。逆接続しないでください!

テストコード:
LCDのI2Cアドレスを初期化し、バックライトをオンにします。

LCDカーソル位置をX軸とY軸に設定します(X軸は最大16文字、Y軸は最大2列を表示します)。

印刷内容を入力します(16文字を超えると、完全には表示されません)。

完全なコード:

テスト結果:
LCD1602のバックライトが点灯し、「 HELLO WORLD 0 」と「 HELLO WORLD 1 」が表示されます。

4.7.4 ファンモジュール
説明:
130モーターはPWMを介して速度を調整できます。このプロセスでは、制御のために2つのピンを接続する必要があります。
このモジュールは、コンピューターの放熱や工業生産など、複数のアプリケーションに適しています。さらに、コンパクトで設置が簡単で、非常に実用的です。

回路図:

配線図:
モーターをio18とio19に接続します。
注意:黄色をS(信号)、赤をV(電源)、黒をGNDに接続してください。逆接続しないでください!

テストコード:
ファンピンINAを設定します。

ファンの回転方向を決定するINAの電力レベル状態を設定します。

ファンピンINBを設定します。

回転速度を決定するINBのアナログ出力を設定します。
INAがハイの場合、INBのアナログ出力が低いほど、ファンは速く回転します。
INAがローの場合、INBのアナログ出力が大きいほど、ファンは速く回転します。

テスト結果:
130モーターは2秒ごとに左右に交互に回転します。

注記:
回転方向の変更中に断続的な停止が発生します。これは、反転時の過電流を防ぐためです。そうしないと、開発ボードの電力供給不足により強制リセットが発生する可能性があります。
4.7.5 温度制御システム
説明:
ここでは、モノバス通信を介してDHT11温湿度センサーの値を読み取り、その値がLCDに表示されます。値が設定されたしきい値を超えると、農場の動物や植物を保護するために、除湿と冷却のためにファンが作動します。特筆すべきは、このシステムはPWMによる速度制御やモノバスによるデータ伝送など、複数の機能を備え、設置が簡単であることです。
全体として、これは農家がリアルタイムの状態を監視および制御し、生産効率を向上させるのに役立つ実用的なシステムです。
配線図:
温湿度センサーをio17に接続します。
モーター(ファン)モジュールをio18とio19に接続します。
LCD1602をBUS I2Cに接続します。
注意:黄色をS(信号)、赤をV(電源)、黒をGNDに接続してください。逆接続しないでください!

テストコード:
コードフロー:

コード:
LCDを初期化してアドレスを設定し、表示をクリアします。バックライトをオンにし、カーソル位置を設定します。

DHT11センサーを初期化し、対応するピンを選択します。温度と湿度の値として2つの変数を定義します。

ループ内で、検出された値をそれぞれ2つの変数に割り当てます。

LCDに値を表示します。

温度と湿度の値を決定します。温度が29°を超えるか、湿度が80を超える場合、ファンが回転します。

完全なコード:

テスト結果:
温度が29°Cに達すると、ファンが作動して熱を放散します。29°Cを下回ると、ファンは停止し(ファンは熱放散をシミュレートするだけなので、効果は良くありません)、農場のエネルギーを節約します。
4.7.6 FAQ
#Q: 温湿度センサーは防水ですか?
A: いいえ。周囲の温度と湿度(空気中)を検出するため、水に入れないでください。
#Q: ファンが回転するとESP32ボードがリセットされます。
A: ファンが回転すると、他のセンサーよりも多くの電流が必要となるため、回路内の電圧と電流が変動する可能性があります。特にファンの反転時には、変動が大きくなりすぎて、ESP32開発ボードの電圧と電流が極端に低くなるためにリセットが発生する可能性があります。