Arduino를 사용한 자동 관개 회로

문제를 제거하기 위해 도구를 사용해보십시오





이 게시물에서는 arduino 및 토양 수분 센서를 사용하여 작은 정원을위한 자동화 된 물 관개 시스템을 구축 할 것입니다.

소개

제안 된 시스템은 토양 수분 수준 모니터링 토양 수분이 미리 설정된 값 아래로 떨어지면 12V DC 펌프가 미리 결정된 시간 동안 작동됩니다. 토양 수분 수준의 상태 및 시스템의 기타 기능은 실시간으로 16 x 2 LCD 디스플레이를 통해 모니터링 할 수 있습니다.



전 세계에 3 조 그루의 나무가있는 것으로 추정되는데, 이는 우리 고향 은하계의 시작 수인 1,000 억 개보다 더 많은 것입니다. 그러나 우리 인간은 사치품에 대한 기본적인 욕구를 충족시키기 위해 수많은 나무를 자릅니다.

대자연은 피드백 시스템으로 설계되었는데, 어떤 종이 ​​큰 교란을 일으키면 자연이 종을 없애 버릴 것입니다.



인간은 수세기 동안 무의식적으로 자연을 교란 시켰지만 과학과 기술의 대대적 인 발전 후에도 교란의 비율은 줄어들지 않았습니다.

기후 변화가 그 예 중 하나입니다. 우리 종족이 오래 지속되지 않을만큼 과감 해지면
이 프로젝트는 자연을 보존하기 위해 아기 한 걸음 더 나아가 인간의 상호 작용없이 사랑스러운 작은 정원을 관개 할 수 있습니다. 이제 프로젝트의 기술적 세부 사항에 대해 알아 보겠습니다.

토양 수분 센서 :

프로젝트의 핵심은 토양 수분 센서 토양의 수분 함량을 감지 할 수 있습니다. 센서는 아날로그 값을 제공하고 마이크로 컨트롤러는 이러한 값을 해석하고 수분 함량을 표시합니다.

토양에 삽입되는 두 개의 전극이 있습니다. 전극은 비교기 IC, LED, 트리머 저항 입력 및 출력 핀으로 구성된 회로 기판에 연결됩니다.

토양 수분 센서 그림 :

토양 수분 센서 모듈

4 + 2 핀, 전극 연결 용 2 핀이 있으며 나머지 4 핀은 Vcc, GND, 디지털 출력 및 아날로그 출력입니다. 토양 수분을 감지하기 위해 아날로그 출력 핀만 사용할 것입니다.
디지털 출력 핀을 사용하지 않기 때문에 온보드 트리머 저항을 사용하여 센서를 보정하지 않습니다.

이제 토양 수분 센서를 마칩니다.

개략도:

회로는 매우 간단하고 초보자에게 친숙합니다. 회로도는 프로젝트를 복제하면서 혼동을 줄이기 위해 동일한 프로젝트의 두 부분으로 나뉩니다.

자동 관개 시스템의 LCD 배선도

위의 회로도는 LCD에서 Arduino로 배선. LCD 디스플레이의 대비를 조정하기 위해 10K 전위차계가 제공됩니다.

마이크로 컨트롤러 기반 자동 관개 시스템

다음은 토양 수분 센서, 12V DC 펌프, 보정 푸시 버튼 및 12V (1-2A) 전원 공급 장치로 구성된 나머지 회로도입니다. 12V DC 펌프의 정격 전류가 500mA 이상인 전원 공급 장치를 사용하십시오.

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

이 자동 관개 시스템을 보정하는 방법 :

• 완성 된 하드웨어를 사용하여 물이 흐르는 경로 어딘가의 토양에 전극을 삽입합니다.
• 이제 프로그램에서 두 값을 변경합니다. 1) 모든 식물에 물을주는 데 걸리는 시간 (분). 2) arduino가 펌프를 트리거하는 임계 값 수준. 백분율 값은 80, 70, 60, 50, 40, 30, 20 만 설정할 수 있습니다.

int Time = 5 // 시간을 분으로 설정
int threshold = 30 // 임계 값을 80, 70, 60, 50, 40, 30, 20 비율로만 설정합니다.

프로그램에서 값을 변경하십시오.

• arduino에 코드를 업로드하고 회로에 전원을 공급합니다. “pour water and press calibrate”가 표시됩니다. 이제 정원에 충분한 물을 수동으로 물을 주어야합니다.
• 정원에 물을 준 후 보정 버튼을 누릅니다. 이것은 완전히 습기가 많은 토양에서 전기 전도를 결정하고 기준 값을 스냅 샷합니다.
• 이제 시스템이 작은 정원에 서비스를 제공 할 준비가되었습니다. 이 프로젝트에 대한 전원 백업을 추가하십시오. 전원이 차단되면 기준 보정 값이 메모리에서 지워지고 시스템을 다시 보정해야합니다.

저자의 프로토 타입 :

Arduino 기반 자동 관개 프로토 타입 이미지

토양 수분 수준 표시 :

펌프가 켜지면 꺼질 남은 시간 (초)이 표시됩니다.




이전 : 3 스마트 레이저 경보 보호 회로 다음 : OCL 증폭기 설명