このArduinoベースの自動水位インジケーターとコントローラープロジェクト では、超音波センサーを使用して水位を測定します。超音波距離測定の基本原理はECHOに基づいています。音波が環境に伝わると、障害物に当たった後、エコーとして原点に戻ります。したがって、両方の音の移動時間を計算するだけで、障害物にぶつかった後の発信時間と原点への復帰時間を意味します。そして、いくつかの計算の後、距離である結果を得ることができます。このコンセプトは、タンク内の水位が低くなるとウォーターモーターポンプが自動的にオンになるウォーターコントローラープロジェクトで使用されています。このプロジェクトのより単純なバージョンについては、この単純な水位インジケーター回路を確認することもできます。
コンポーネント
- Arduino Uno
- 超音波センサーモジュール
- 16x2 LCD
- リレー6ボルト
- ULN2003
- 7806
- PVT
- 銅線
- 9ボルト電池または12ボルトタダプター
- 接続線
超音波センサーモジュール
超音波センサーHC-SR04を使用して、2cm〜400cmの範囲の距離を3mmの精度で測定します。センサーモジュールは、超音波送信機、受信機、および制御回路で構成されています。
超音波センサーモジュールは、音のエコーの自然現象に作用します。モジュールをトリガーするために、約10usのパルスが送信されます。その後、モジュールは自動的に8サイクルの40 KHz超音波信号を送信し、そのエコーをチェックします。障害物に当たった後の信号は戻ってきて、受信機によってキャプチャされます。したがって、センサーからの障害物の距離は、次の式で簡単に計算されます。
距離=(時間x速度)/ 2。
ここでは、速度と時間の積を2で割っています。これは、時間が障害物に到達して戻るのにかかった合計時間だからです。したがって、障害物に到達する時間は、かかる合計時間の半分にすぎません。
自動水位コントローラーの動作
このプロジェクトの作業は非常に簡単です。水槽に音波を送り、音波の反射を検出する超音波センサーモジュールを使用しました。これがECHOです。まず、超音波センサーモジュールをトリガーしてArduinoを使用して信号を送信し、ECHOの受信を待つ必要があります。Arduinoは、ECHOをトリガーしてから受信するまでの時間を読み取ります。音速は約340m / sです。したがって、次の式を使用して距離を計算できます。
距離=(移動時間/ 2)*音速
音速は毎秒約340mです。
この方法を使用することにより、センサーから水面までの距離を取得します。その後、水位を計算する必要があります。
次に、水タンクの全長を計算する必要があります。水タンクの長さがわかっているので、タンクの全長から超音波から得られる距離を引くことによって水位を計算できます。そして、水位距離を取得します。これで、この水位を水のパーセントに変換して、LCDに表示できます。完全な水位インジケータープロジェクトの動作は、以下のブロック図に示されています。
回路図と説明
示すように、水位制御回路 下記、超音波センサモジュールの「トリガー」および「エコー」ピンは、直接ピン10とアルドゥイーノの11に接続されています。 16x2LCDは4ビットモードでarduinoに接続されています。制御ピンRS、RW、Enはarduinoのピン7、GND、6に直接接続されています。データピンD4-D7はarduinoの5、4、3、2に接続され、ブザーはピン12に接続されています。6ボルトリレーはまた、ウォーターモーターポンプをオンまたはオフにするために、ULN2003を介してarduinoのピン8に接続されています。電圧レギュレータ7805は、リレーと残りの回路に5ボルトを供給するためにも使用されます。
この回路では、デモンストレーションのために超音波センサーモジュールがバケツ(水タンク)の上部に配置されています。このセンサーモジュールは、センサーモジュールと水面の間の距離を読み取り、LCD画面に「タンク内の水スペースは次のとおりです」というメッセージとともに距離を表示します。これは、ここでは、水位ではなく、水の距離または体積の空の場所を示していることを意味します。この機能により、このシステムはどの水タンクでも使用できます。空の水位が約30cmの距離に達すると、Arduinoはリレーを駆動してウォーターポンプをオンにします。そして今、LCDは「低水位」「モーターがオンになっています」と表示し、リレーステータスLEDが点灯し始めます
ここで、空きスペースが約12 cmの距離に達すると、arduinoはリレーをオフにし、LCDに「タンクがいっぱいです」「モーターがオフになりました」と表示されます。ブザーもしばらく鳴り、リレーステータスLEDが消灯します。
プログラミング
水位コントローラー用にArduinoをプログラムするには、最初に、リレー、LCD、ブザーなどの外部デバイスとのインターフェースにプロジェクトで使用するすべてのピンを定義します。
#define trigger 10 #define echo 11 #define motor 8 #define buzzer 12
次に、プロジェクトで使用されるすべてのデバイスを初期化します。
lcd.begin(16,2); pinMode(trigger、OUTPUT); pinMode(echo、INPUT); pinMode(モーター、出力); pinMode(ブザー、出力); lcd.print( "水位"); lcd.setCursor(0,1); lcd.print( "インジケーター"); delay(2000);
次に、超音波センサーモジュールを初期化し、pulseIn(pin)を使用して超音波または音の送受信時間を読み取ります。次に、適切な機能を使用して計算を実行し、結果を16x2LCDに表示します。
digitalWrite(trigger、HIGH); delayMicroseconds(10); digitalWrite(trigger、LOW); delayMicroseconds(2); 時間= pulseIn(echo、HIGH); 距離=時間* 340/20000; lcd.clear(); lcd.print( "Water Space In"); lcd.setCursor(0,1); lcd.print( "タンクは:"); lcd.print(distance); lcd.print( "Cm");
その後、水槽が満杯か水位が低いかを確認し、対応します。
if(distance <12 && temp == 0){digitalWrite(motor、LOW); digitalWrite(ブザー、HIGH); lcd.clear(); lcd.print( "水タンクがいっぱい"); lcd.setCursor(0,1); lcd.print( "モーターがオフになりました"); delay(2000); digitalWrite(ブザー、LOW); delay(3000); temp = 1; } else if(distance <12 && temp == 1){digitalWrite(motor、LOW); lcd.clear(); lcd.print( "水タンクがいっぱいです"); lcd.setCursor(0,1); lcd.print( "モーターがオフになりました"); delay(5000); }