Arduinoを使用した自動灌漑回路

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





この投稿では、arduinoと土壌水分センサーを使用して、小さな庭用の自動水灌漑システムを構築します。

前書き

提案されたシステムは 土壌水分レベルを監視する 土壌水分がプリセット値を下回ると、12VDCポンプが所定の時間トリガーされます。土壌水分レベルの状態やシステムの他の機能は、16 x 2LCDディスプレイを介してリアルタイムで監視できます。



世界中に3兆本の木があると推定されています。これは、私たちの故郷である天の川銀河の開始数である1,000億本よりも多い数です。しかし、私たち人間は、基本的なニーズから贅沢なニーズを満たすために、無数の木を切ります。

母なる自然はフィードバックシステムで設計されており、種が巨大な障害をもたらすと、自然はその種の存在を一掃します。



人間は何世紀にもわたって無意識のうちに自然を乱していましたが、科学技術が大きく発展した後でも、乱れの割合は減少していません。

気候変動はその一例であり、急激に変化すると、私たちの種は長続きしません。
このプロジェクトは、自然を保護するために赤ちゃんの一歩を踏み出します。人間の介入なしに、あなたの素敵な小さな庭を灌漑することができます。それでは、プロジェクトの技術的な詳細に取り掛かりましょう。

土壌水分センサー:

プロジェクトの中心は 土壌水分センサー 土壌の水分量を感知できます。センサーはアナログ値を出し、マイクロコントローラーはそれらの値を解釈して水分量を表示します。

土壌に挿入される2つの電極があります。電極は、コンパレータIC、LED、トリマー抵抗の入力ピンと出力ピンで構成される回路基板に接続されています。

土壌水分センサーのイラスト:

土壌水分センサーモジュール

4 + 2ピン、電極接続用の2ピンがあり、残りの4ピンはVcc、GND、デジタル出力、アナログ出力です。土壌水分の検知には、アナログ出力ピンのみを使用します。
デジタル出力ピンを使用していないため、センサーのキャリブレーションにオンボードのトリマ抵抗を使用しません。

これで土壌水分センサーは終わりです。

回路図:

回路はかなりシンプルで初心者にも優しいです。回路図は、プロジェクトを複製する際の混乱を減らすために、同じプロジェクトの2つの部分に分割されています。

自動灌漑システムのLCD配線図

上記の回路図は LCDからarduinoへ 配線。 LCDディスプレイのコントラストを調整するために10Kポテンショメータが用意されています。

マイクロコントローラーベースの自動灌漑システム

これは、土壌水分センサー、12V DCポンプ、校正プッシュボタン、および12V(1〜2アンペア)電源で構成される回路図の残りの部分です。少なくとも500mA以上の12VDCポンプの定格電流の電源を使用してください。

システムの全体的な電力効率を改善するために、BJTの代わりにMOSFET IRF540N(または同等のNチャネル)が使用されます。

ポンプはあなたに小さな庭に水をまきます、あなたが常に十分な量の水が利用可能であることを確認してください。

プログラムコード:

//-------------Program Developed By R.Girish-------------//
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2)
int Time = 5 // Set time in minutes
int threshold = 30 // set threshold in percentage 80, 70, 60, 50, 40, 30, 20 only.
int i
int x
int y
int z
int start
int calibrateValue
const int calibrateBTN = A1
const int input = A0
const int motor = 7
boolean calibration = false
boolean rescue = false
void setup()
{
Serial.begin(9600)
pinMode(input, INPUT)
pinMode(calibrateBTN, INPUT)
pinMode(motor, OUTPUT)
digitalWrite(calibrateBTN, HIGH)
lcd.begin(16,2)
lcd.setCursor(0,0)
lcd.print('Pour water and')
lcd.setCursor(0,1)
lcd.print('press calibrate')
while(!calibration)
{
if(digitalRead(calibrateBTN)==LOW)
{
calibrateValue = analogRead(input)
x = 1023 - calibrateValue
x = x/10
Serial.print('Difference = ')
Serial.println(x)
Serial.print('Calibration Value = ')
Serial.println(calibrateValue)
delay(500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Calibration done')
lcd.setCursor(0,1)
lcd.print('successfully !!!')
calibration = true
delay(2000)
}
}
}
void loop()
{
if(analogRead(input)<= calibrateValue)
{
delay(500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 100%')
}
if(analogRead(input) > calibrateValue && analogRead(input) <= calibrateValue+x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 90 to 99%')
}
if(analogRead(input) > calibrateValue+x && analogRead(input) <= calibrateValue+2*x )
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 80 to 90%')
start = 80
}
if(analogRead(input) > calibrateValue+2*x && analogRead(input) <= calibrateValue+3*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 70 to 80%')
start = 70
}
if(analogRead(input) > calibrateValue+3*x && analogRead(input) <= calibrateValue+4*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 60 to 70%')
start = 60
}
if(analogRead(input) > calibrateValue+4*x && analogRead(input) <= calibrateValue+5*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 50 to 60%')
start = 50
}
if(analogRead(input) > calibrateValue+5*x && analogRead(input) <= calibrateValue+6*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 40 to 50%')
start = 40
}
if(analogRead(input) > calibrateValue+6*x && analogRead(input) <= calibrateValue+7*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 30 to 40%')
start = 30
}
if(analogRead(input) > calibrateValue+7*x && analogRead(input) <= calibrateValue+8*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 20 to 30%')
start = 20
}
if(analogRead(input) > calibrateValue+8*x && analogRead(input) <= calibrateValue+9*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: 10 to 20%')
start = 10
}
if(analogRead(input) > calibrateValue+9*x && analogRead(input) <= calibrateValue+10*x)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Soil Moisture')
lcd.setCursor(0,1)
lcd.print('Level: <10%')
rescue = true
}
if(start == threshold || rescue)
{
y = Time
digitalWrite(motor, HIGH)
Time = Time*60
z = Time
for(i=0 i

この自動灌漑システムを較正する方法:

•完成したハードウェアを使用して、電極を土壌の水の流れの経路のどこかに挿入します。
•次に、プログラムの2つの値を変更します。1)すべての植物に水をやるのにかかる時間(分単位)。 2)arduinoがポンプをトリガーするしきい値レベル。パーセンテージ値は80、70、60、50、40、30、20のみ設定できます。

int Time = 5 //時間を分単位で設定
int threshold = 30 //しきい値をパーセンテージ80、70、60、50、40、30、20のみで設定します。

プログラムの値を変更します。

•コードをarduinoにアップロードし、回路に電力を供給します。 「水を注いで校正を押してください」と表示されます。今、あなたは手動であなたの庭に十分なレベルまで水をやらなければなりません。
•庭に水をやった後、キャリブレーションボタンを押します。これにより、完全に湿った土壌での電気伝導が決定され、基準値がスナップショットされます。
•これで、システムは小さな庭にサービスを提供する準備が整いました。このプロジェクトの電源バックアップを追加してみてください。電源に障害が発生すると、基準校正値がメモリから消去され、システムを再度校正する必要があります。

著者のプロトタイプ:

Arduinoベースの自動灌漑プロトタイプ画像

土壌水分レベルの表示:

ポンプがオンになると、オフになるまでの残り時間(秒単位)が表示されます。




前:3つのスマートレーザーアラーム保護回路 次へ:OCLアンプの説明