かつては高級品とされていたAC(エアコン)は、大きなホテル、映画館、レストランなどでしか見られませんでしたが、今ではほとんどの人が夏を乗り切るために家にACを持っています。冬とそれを持っている人は、1つの一般的なことを心配します。それは彼らの高い電力消費とそれによる充電器です。このプロジェクトでは、部屋の温度に基づいてAC温度を自動的に変化させることにより、充電器を最小限に抑えることができる小さな自動温度制御回路を作成します。設定温度を定期的に変化させることで、ACがより低い温度値で長時間動作することを回避し、消費電力を削減できます。
私たちのほとんどは、一日中快適に過ごすために、エアコンの設定温度を1日のさまざまな時間帯にさまざまな値に変更しなければならない状況を経験したでしょう。このプロセスを自動化するために、このプロジェクトでは、部屋の現在の温度を読み取る温度センサー(DHT11)を使用し、その値に基づいて、ACのリモートと同様のIRブラスターを介してACにコマンドを送信します。ACは、リモートに反応しているかのようにこれらのコマンドに反応し、温度を調整します。部屋の温度が変化すると、ArduinoはACの設定温度も調整して、希望どおりの温度に維持します。かっこいいですね…作成方法を見てみましょう。
必要な材料:
- Arduino Mega 2560
- TSOP1738(HS0038)
- IR主導
- DHT11温度/湿度センサー
- 任意のカラーLEDと1K抵抗(オプション)
- ブレッドボード
- 接続線
作業方法:
私たちがテレビ、ホームシアター、ACなどを制御するために使用する私たちの家のすべてのリモコンは、IRブラスターの助けを借りて動作します。IRブラスターは、反復パルスによって信号をブラスター可能性が何もなく、IR LEDではありません。この信号は、電子機器の受信機によって読み取られます。リモートの異なるボタンごとに、固有の信号が発信され、受信機によって読み取られた後、特定の事前定義されたタスクを実行するために使用されます。リモートから出力されるこの信号を読み取ることができれば、その特定のタスクを実行する必要があるときに、IRLEDを使用して同じ信号を模倣できます。以前、ユニバーサルIRリモート用のIRブラスター回路を作成しました。
A TSOPは、リモコンからの信号をデコードするために使用できることがIR受信機です。このレシーバーはArduinoとインターフェースして各ボタンの信号を送信し、IRLedをArduinoで使用して必要に応じて信号を模倣します。このようにして、Arduinoを使用してACを制御できます。
あとは、DHT11を使用して温度値を読み取り、それに応じてIR信号を使用してACに指示するだけです。プロジェクトをより魅力的でユーザーフレンドリーに見せるために、現在の温度、湿度、AC設定温度を表示するOLEDディスプレイも追加しました。ArduinoでOLEDを使用する方法の詳細をご覧ください。
前提条件:
この自動AC温度コントローラープロジェクトは、初心者レベル向けに少し進んでいますが、他のいくつかのチュートリアルの助けを借りて、誰でも時間の問題でこれを構築できます。したがって、OLED、DHT11、またはTSOPのまったくの初心者である場合は、以下のチュートリアルに戻って、基本とこれらの使用を開始する方法を学ぶことができます。リストは少し長いように見えるかもしれませんが、それは簡単で学ぶ価値があると私を信じてください。また、それは多くの新しいプロジェクトへの扉を開くでしょう。
- TSOPとIRLEDを使用した基本回路
- DHT11とArduinoの基本的なインターフェースガイド
- ArduinoとOLEDの基本的なインターフェースガイド
- TSOPをArduinoとインターフェースしてIRリモート値を読み取る
あなたが持っていることを確認してくださいArduinoのメガコードサイズが重いですので、とのArduinoの他のバージョンを。また、以下のリンクから次のArduinoライブラリをインストールしていない場合は、インストール済みかどうかを確認してください。
- TSOPおよびIRブラスター用のIRリモートライブラリ
- OLED用Adafruitライブラリ
- OLED用GFXグラフィックライブラリ
- 温度センサー用のDHT11センサーライブラリ
ACリモコンの動作:
プロジェクトに進む前に、少し時間を取って、ACリモコンがどのように機能するかを確認してください。ACリモコンは、TV、DVDIRリモコンとは少し異なる方法で動作します。リモコンには10〜12個のボタンしかない場合がありますが、さまざまな種類の信号を送信できます。つまり、リモートは同じボタンに対して毎回同じコードを送信するわけではありません。たとえば、下ボタンを使用して温度を下げて24°C(摂氏)にすると、一連のデータを含む信号が得られますが、もう一度押して25°Cに設定すると、同じものは得られません。温度が24ではなく25になっているため、データ。同様に、25のコードもファン速度、スリープ設定などによって異なります。したがって、すべてのオプションをいじくり回さず、温度値のみを他の設定の定数値に集中させましょう。 。
もう一つの問題は、送信と各ボタンの押しのために送られているデータを、通常のリモコンの量のいずれか24ビットか48ビットが、ACリモートかもしれないが、228ビットまで送り、各信号は温度、ファン速度などの多くの情報を含んでいるので、スリープタイミング、スイングスタイルなど。これが、より良いストレージオプションのためにArduinoMegaが必要な理由です。
回路図と説明:
幸い、この自動AC温度制御プロジェクトのハードウェアセットアップは非常に簡単です。ブレッドボードを使用して、以下に示すように接続するだけです。
次の表を使用して、接続を確認することもできます。
S.No: |
コンポーネントピン |
Arduinoピン |
1 |
OLED – Vcc |
5V |
2 |
OLED – Gnd |
Gnd |
3 |
OLED- SCK、D0、SCL、CLK |
4 |
4 |
OLED- SDA、D1、MOSI、データ |
3 |
5 |
OLED- RES、RST、RESET |
7 |
6 |
OLED- DC、A0 |
5 |
7 |
OLED- CS、チップセレクト |
6 |
8 |
DHT11 – Vcc |
5V |
9 |
DHT11 – Gnd |
Gnd |
10 |
DHT11 –信号 |
13 |
11 |
TSOP – Vcc |
5V |
12 |
TSOP – Gnd |
Gnd |
13 |
IR主導–アノード |
9 |
14 |
IR Led –カソード |
Gnd |
接続が完了すると、次のようになります。私は物事を片付けるためにブレッドボードを使用しましたが、すべてのコンポーネントを接続するためにオスからメスのワイヤーを直接接続することもできます
ACリモート信号のデコード:
ACを制御するための最初のステップは、TSOP1738を使用してACリモートコントロールIRコードをデコードすることです。回路図に示されているようにすべての接続を行い、記載されているすべてのライブラリがインストールされていることを確認します。次に、 [ファイル]-> [例]-> [IRremote]-> [IRrecvDumpV2]に あるサンプルプログラム「 IRrecvDumpV2 」を 開き ます。プログラムをArduinoMegaにアップロードし、シリアルモニターを開きます。
リモコンをTSOPに向けて、任意のボタンを押します。ボタンを押すたびに、それぞれの信号がTSOP1738によって読み取られ、Arduinoによってデコードされ、シリアルモニターに表示されます。リモコンの温度が変化するたびに、異なるデータが取得されます。メインプログラムで使用するため、このデータを保存します。シリアルモニターは次のようになります。コピーしたデータを保存したWordファイルも表示しました。
スクリーンショットは、ACリモコンの温度を26°Cに設定するためのコードを示しています。リモートに基づいて、異なるコードのセットを取得します。同様に、すべての異なるレベルの温度のコードをコピーします。このチュートリアルの最後にあるArduinoコードですべてのエアコンリモコンIRコードを確認できます。
主なArduinoプログラム:
完全なメインArduinoのプログラムは、このページの下部に見つけることができますが、あなたは、同じプログラムを使用することはできません。上記のサンプルスケッチから取得した信号コード値を変更する必要があります。Arduino IDEでメインプログラムを開き、以下に示すこの領域までスクロールダウンします。ここで、配列値をリモート用に取得した値に置き換える必要があります。
私は10個のアレイを使用し、そのうち2個はACのオンとオフを切り替え、残りの8個は異なる温度の設定に使用していることに注意してください。たとえば、Temp23はACに23°Cを設定するために使用されるため、そのアレイのそれぞれのコードを使用します。それが完了したら、コードをArduinoにアップロードし、ACの反対側に配置して、CoolBreezeを楽しむだけです。
コードの説明は次のとおりです。まず、DHT1温度センサーを使用して温度と湿度を読み取り、OLEDに表示する必要があります。これは、次のコードによって実行されます。
DHT.read11(DHT11_PIN); //温度と湿度を読み取りますMeasured_temp = DHT.temperature + temp_error; Measured_Humi = DHT.humidity; //テキスト表示テストdisplay.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.print( "Temperature:"); display.print(Measured_temp); display.println( "C"); display.setCursor(0,10); display.print( "湿度:"); display.print(Measured_Humi); display.println( "%");
部屋の温度がわかったら、それを目的の値と比較するだけです。この望ましい値は、私のプログラムで27°C(摂氏)として設定されている定数値です。したがって、この比較に基づいて、以下に示すように対応するAC温度を設定します。
if(Measured_temp == Desired_temperature + 3)// ACがオンで、測定温度が希望よりも非常に高い場合{irsend.sendRaw(Temp24、sizeof(Temp24)/ sizeof(Temp24)、khz); delay(2000); //信号を送信して24 * C AC_Temp = 24を設定します。}
ここでは、測定温度が30°CのときにACが24°Cに設定されます(必要な温度が27であるため)。同様に、以下に示すように、測定された温度に基づいて異なるレベルの温度を設定するために、多くの If ループを作成できます。
if(Measured_temp == Desired_temperature-1)// ACがオンで、測定温度が目的の値よりも低い場合{irsend.sendRaw(Temp28、sizeof(Temp28)/ sizeof(Temp28)、khz); delay(2000); //信号を送信して28 * C AC_Temp = 28を設定します。} if(Measured_temp == Desired_temperature-2)// ACがオンで、測定温度が目的の値よりも非常に低い場合{irsend.sendRaw(Temp29、sizeof(Temp29)/ sizeof(Temp29)、khz); delay(2000); //信号を送信して29 * C AC_Temp = 29を設定します。} if(Measured_temp == Desired_temperature-3)// ACがオンで、測定温度が非常に低い場合望ましい値{irsend.sendRaw(Temp30、sizeof(Temp30)/ sizeof(Temp30)、khz); delay(2000); //信号を送信して30 * C AC_Temp = 30を設定します。}
自動AC温度制御システムの動作:
コードとハードウェアの準備ができたら、コードをボードにアップロードすると、OLEDがこれに似たものを表示していることに気付くはずです。
次に、エアコンの反対側に回路を配置すると、部屋の温度に基づいてACの温度が制御されていることがわかります。下のビデオに示すように、DHT11センサーの近くの温度を上げて、ACの温度が制御されているかどうかを確認できます。
プログラムを微調整して、任意のアクションを実行できます。必要なのは、サンプルスケッチから取得したコードだけです。この自動温度コントローラープロジェクトを理解し、非常によく似たものを作成することを楽しんだことを願っています。ここには行き詰まる場所がたくさんあることは知っていますが、心配しないでください。フォーラムまたはコメントセクションを使用して問題を説明するだけで、ここの人々が問題を解決するのに確実に役立ちます。