超音波ワイヤレス水位インジケーター–ソーラーパワー

問題を排除するために楽器を試してください





超音波水位コントローラーは、物理的な接触なしにタンク内の水位を検出し、ワイヤレスGSMモードでデータを遠隔LEDインジケーターに送信できるデバイスです。

この投稿では、Arduinoを使用して超音波ベースの太陽光発電ワイヤレス水位インジケーターを構築します。Arduinoは2.4GHzのワイヤレス周波数で送受信します。従来の電極法の代わりに超音波を使用してタンク内の水位を検出します。



概要概要

あなたが家を所有している、あるいは賃貸住宅に住んでいるなら、水位インジケーターは必需品です。 A 水位インジケーター は、エネルギーメーターの測定値と同じくらい重要な、家の1つの重要なデータ、つまり、残りの水量を示しています。水の消費量を追跡できるようにするため、水タンクにアクセスして水がどれだけ残っているかを確認するために2階に登る必要がなく、蛇口からの水の突然の停止もありません。

私たちは2018年(この記事の執筆時点)以降に住んでおり、世界中のどこにでも瞬時に通信でき、宇宙への電気レースカーの打ち上げ、火星への衛星とローバーの打ち上げ、さらには人間の着陸も可能です月にいる存在、まだ私たちの水タンクに残っている水量を検出するための適切な商品はありませんか?



水位指標は、学校でのサイエンスフェアのために5年生の生徒によって作成されていることがわかります。このような単純なプロジェクトが私たちの日常生活にどのように影響しなかったのでしょうか。答えは、水タンクのレベル指標は、5年生が私たちの家のために作ることができる単純なプロジェクトではないということです。沢山あります 実用的な考慮事項 設計する前に。

•後で水が漏れる可能性のある電極用に、水タンクの本体に穴を開ける必要はありません。
•誰も水タンクの近くで230 / 120VACワイヤーを走らせたくありません。
•毎月電池を交換したいと思う人はいません。
•家を建てるときに事前に計画されていないため、水位表示のために部屋にぶら下がっている追加の長いワイヤーを走らせたくはありません。
•電極の金属腐食が混入した水は誰も使いたくない。
•タンク(内部)を掃除している間、誰も水位インジケーターのセットアップを取り外したくありません。

上記の理由のいくつかはばかげているように見えるかもしれませんが、これらの短所を持つ市販の製品では満足のいくものではありません。そのため、これらの製品の普及率は平均的な世帯では非常に少なくなっています*。
*インド市場で。

これらの重要なポイントを考慮した後、私たちは言及された短所を取り除くべき実用的な水位インジケーターを設計しました。

私たちのデザイン:

•超音波センサーを使用して水位を測定するため、腐食の問題はありません。
•2.4GHzでのリアルタイムの水位のワイヤレス表示。
•2階建ての高層ビルに十分な、優れた無線信号強度。
•太陽光発電でAC電源を使用したり、バッテリーを交換したりする必要はありません。
•タンク充填中のタンク満杯/オーバーフローアラーム。

回路の詳細を調べてみましょう。

送信機:

ザ・ 無線送信機回路 タンクに配置された水位データは、24時間年中無休で5秒ごとに送信されます。送信機は、Arduino nano、超音波センサーHC-SR04、nRF24L01モジュールで構成され、送信機と受信機を2.4GHzでワイヤレスで接続します。

300mAの電流出力を備えた9V〜12Vのソーラーパネルが送信機回路に電力を供給します。バッテリー管理基板がリチウムイオンバッテリーを充電するので、日光が当たっていなくても水位を監視できます。

超音波センサーを水タンクに配置する方法を調べてみましょう。

サーキットを盛り上げ、雨や直射日光から保護するには、創造性を発揮する必要があることに注意してください。

超音波センサーを配置するためにタンクの蓋の上に小さな穴を開け、見つけたある種の接着剤で密封します。

水タンクに超音波センサーを配置する

次に、タンクの底から蓋までの全高を測定し、メートル単位で書き留めます。次に、上の画像に示すようにタンクの保水能力の高さを測定し、メートル単位で書き留めます。
これらの2つの値をコードに入力する必要があります。

送信機の概略図:

水位制御用の超音波送信機接続

注:VccはArduinoの5V出力に接続しないため、nRF24L01は3.3Vを使用します。

送信機用電源:

超音波水位コントローラー電源設計

ソーラーパネルの出力電力、つまり出力(ボルトx電流)が3ワットを超えていることを確認してください。ザ・ ソーラーパネル 9Vから12Vである必要があります。

市場で簡単に見つけることができる12Vおよび300mAパネルをお勧めします。バッテリーは約3.7V1000mAhである必要があります。

5V 18650リチウムイオン充電モジュール:

次の画像は標準を示しています 18650充電器回路

入力は、USB(未使用)またはLM7805ICからの外部5Vにすることができます。上記のように正しいモジュールを入手していることを確認してください。 TP4056 低いバッテリーカットオフと短絡保護を備えた保護。

この出力はXL6009の入力に供給され、より高い電圧にブーストされます。Arduinoの場合、XL6009の小さなドライバー出力を9Vに調整する必要があります。

XL6009 DC-DCブーストコンバーターの図:

これで送信機のハードウェアは終わりです。

送信機のコード:

// ----------- Program Developed by R.GIRISH / Homemade-circuits .com ----------- //
#include
#include
RF24 radio(9, 10)
const byte address[6] = '00001'
const int trigger = 3
const int echo = 2
const char text_0[] = 'STOP'
const char text_1[] = 'FULL'
const char text_2[] = '3/4'
const char text_3[] = 'HALF'
const char text_4[] = 'LOW'
float full = 0
float three_fourth = 0
float half = 0
float quarter = 0
long Time
float distanceCM = 0
float distanceM = 0
float resultCM = 0
float resultM = 0
float actual_distance = 0
float compensation_distance = 0
// ------- CHANGE THIS -------//
float water_hold_capacity = 1.0 // Enter in Meters.
float full_height = 1.3 // Enter in Meters.
// ---------- -------------- //
void setup()
{
Serial.begin(9600)
pinMode(trigger, OUTPUT)
pinMode(echo, INPUT)
digitalWrite(trigger, LOW)
radio.begin()
radio.openWritingPipe(address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.stopListening()
full = water_hold_capacity
three_fourth = water_hold_capacity * 0.75
half = water_hold_capacity * 0.50
quarter = water_hold_capacity * 0.25
}
void loop()
{
delay(5000)
digitalWrite(trigger, HIGH)
delayMicroseconds(10)
digitalWrite(trigger, LOW)
Time = pulseIn(echo, HIGH)
distanceCM = Time * 0.034
resultCM = distanceCM / 2
resultM = resultCM / 100
Serial.print('Normal Distance: ')
Serial.print(resultM)
Serial.println(' M')
compensation_distance = full_height - water_hold_capacity
actual_distance = resultM - compensation_distance
actual_distance = water_hold_capacity - actual_distance
if (actual_distance <0)
{
Serial.print('Water Level:')
Serial.println(' 0.00 M (UP)')
}
else
{
Serial.print('Water Level: ')
Serial.print(actual_distance)
Serial.println(' M (UP)')
}
Serial.println('============================')
if (actual_distance >= full)
{
radio.write(&text_0, sizeof(text_0))
}
if (actual_distance > three_fourth && actual_distance <= full)
{
radio.write(&text_1, sizeof(text_1))
}
if (actual_distance > half && actual_distance <= three_fourth)
{
radio.write(&text_2, sizeof(text_2))
}
if (actual_distance > quarter && actual_distance <= half)
{
radio.write(&text_3, sizeof(text_3))
}
if (actual_distance <= quarter)
{
radio.write(&text_4, sizeof(text_4))
}
}
// ----------- Program Developed by R.GIRISH / Homemade-circuits .com ----------- //

測定したコードの次の値を変更します。

// ------- CHANGE THIS -------//
float water_hold_capacity = 1.0 // Enter in Meters.
float full_height = 1.3 // Enter in Meters.
// ---------- -------------- //

これで送信機は終わりです。

受信機:

超音波水位レシーバーコントローラーの概略図

受信機は5つのレベルを表示できます。タンクの充填中にタンクが絶対最大保水容量に達したときのアラーム。 100〜75%-4つのLEDがすべて点灯、75〜50%3つのLEDが点灯、50〜25%2つのLEDが点灯、25%以下の1つのLEDが点灯します。
受信機は9V電池またはから電力を供給できます USBへのスマートフォン充電器 mini-Bケーブル。

受信者のコード:

// ----------- Program Developed by R.GIRISH / Homemade-circuits .com ----------- //
#include
#include
RF24 radio(9, 10)
int i = 0
const byte address[6] = '00001'
const int buzzer = 6
const int LED_full = 5
const int LED_three_fourth = 4
const int LED_half = 3
const int LED_quarter = 2
char text[32] = ''
void setup()
{
pinMode(buzzer, OUTPUT)
pinMode(LED_full, OUTPUT)
pinMode(LED_three_fourth, OUTPUT)
pinMode(LED_half, OUTPUT)
pinMode(LED_quarter, OUTPUT)
digitalWrite(buzzer, HIGH)
delay(300)
digitalWrite(buzzer, LOW)
digitalWrite(LED_full, HIGH)
delay(300)
digitalWrite(LED_three_fourth, HIGH)
delay(300)
digitalWrite(LED_half, HIGH)
delay(300)
digitalWrite(LED_quarter, HIGH)
delay(300)
digitalWrite(LED_full, LOW)
delay(300)
digitalWrite(LED_three_fourth, LOW)
delay(300)
digitalWrite(LED_half, LOW)
delay(300)
digitalWrite(LED_quarter, LOW)
Serial.begin(9600)
radio.begin()
radio.openReadingPipe(0, address)
radio.setChannel(100)
radio.setDataRate(RF24_250KBPS)
radio.setPALevel(RF24_PA_MAX)
radio.startListening()
}
void loop()
{
if (radio.available())
{
radio.read(&text, sizeof(text))
Serial.println(text)
if (text[0] == 'S' && text[1] == 'T' && text[2] == 'O' && text[3] == 'P')
{
digitalWrite(LED_full, HIGH)
digitalWrite(LED_three_fourth, HIGH)
digitalWrite(LED_half, HIGH)
digitalWrite(LED_quarter, HIGH)
for (i = 0 i <50 i++)
{
digitalWrite(buzzer, HIGH)
delay(50)
digitalWrite(buzzer, LOW)
delay(50)
}
}
if (text[0] == 'F' && text[1] == 'U' && text[2] == 'L' && text[3] == 'L')
{
digitalWrite(LED_full, HIGH)
digitalWrite(LED_three_fourth, HIGH)
digitalWrite(LED_half, HIGH)
digitalWrite(LED_quarter, HIGH)
}
if (text[0] == '3' && text[1] == '/' && text[2] == '4')
{
digitalWrite(LED_full, LOW)
digitalWrite(LED_three_fourth, HIGH)
digitalWrite(LED_half, HIGH)
digitalWrite(LED_quarter, HIGH)
}
if (text[0] == 'H' && text [1] == 'A' && text[2] == 'L' && text[3] == 'F')
{
digitalWrite(LED_full, LOW)
digitalWrite(LED_three_fourth, LOW)
digitalWrite(LED_half, HIGH)
digitalWrite(LED_quarter, HIGH)
}
if (text[0] == 'L' && text[1] == 'O' && text[2] == 'W')
{
digitalWrite(LED_full, LOW)
digitalWrite(LED_three_fourth, LOW)
digitalWrite(LED_half, LOW)
digitalWrite(LED_quarter, HIGH)
}
}
}
// ----------- Program Developed by R.GIRISH / Homemade-circuits .com ----------- //

これで受信者は終わりです。

注:LEDが点灯していない場合、つまり受信機が送信機から信号を受信できない場合。受信機回路をオンにした後、送信機からの信号を受信するまで5秒待つ必要があります。

著者のプロトタイプ:

送信機:

超音波送信機のプロトタイプ

レシーバー:

超音波受信機のプロトタイプ

この太陽光発電超音波無線水位制御回路についてご不明な点がございましたら、コメント欄でお気軽にご連絡ください。迅速な返信が期待できます。




前:シンプルなブーストコンバータ回路の作り方 次へ:フライバックコンバーターの設計方法–包括的なチュートリアル