초음파 수위 컨트롤러는 물리적 인 접촉없이 탱크의 수위를 감지하고 무선 GSM 모드에서 원거리 LED 표시기로 데이터를 전송할 수있는 장치입니다.
이 게시물에서는 Arduino가 2.4GHz 무선 주파수에서 송수신하는 Arduino를 사용하여 초음파 기반 태양열 무선 수위 표시기를 구성 할 것입니다. 우리는 전통적인 전극 방식 대신 초음파를 사용하여 탱크의 수위를 감지 할 것입니다.
개요
수위 표시기는 집을 소유하거나 임대 주택에 거주하는 경우 필수 도구입니다. ㅏ 수위 표시기 에너지 미터의 수치만큼 중요한 집에 대한 중요한 데이터, 즉 물이 얼마나 남았습니까? 물 소비량을 추적 할 수 있고 물 탱크에 접근하기 위해 위층으로 올라가 수도꼭지에서 물이 갑작스럽게 멈추지 않고 남은 물의 양을 확인할 필요가 없습니다.
우리는 2018 년 (이 기사 작성 당시) 이후에 살고 있습니다. 우리는 전 세계 어디에서나 즉시 통신 할 수 있고, 전기 경주 용 자동차를 우주로 발사하고, 위성과 탐사선을 화성으로 발사하고, 인간을 착륙시킬 수도 있습니다. 물 탱크에 물이 얼마나 남았는지 감지 할 수있는 적절한 상용 제품이 아직 없습니까?
우리는 학교에서 과학 박람회를 위해 5 학년 학생들이 수위 표시기를 만든 것을 찾을 수 있습니다. 어떻게 그렇게 단순한 프로젝트가 우리의 일상 생활에 적용되지 않았습니까? 답은 물 탱크 수위 표시기는 5 학년이 우리 집을 위해 만들 수있는 단순한 프로젝트가 아니라는 것입니다. 많이있다 실용적인 고려 사항 하나를 디자인하기 전에
• 나중에 물이 새어 나올 수있는 전극을 위해 물 탱크 본체에 구멍을 뚫고 싶은 사람은 없습니다.
• 누구도 물 탱크 근처에서 230/120 VAC 전선을 사용하고 싶어하지 않습니다.
• 매달 배터리 교체를 원하지 않는 사람은 없습니다.
• 집을 짓는 동안 미리 계획되지 않았기 때문에 수위 표시를 위해 방에 추가로 긴 전선을 달고 싶지는 않습니다.
• 전극의 금속 부식과 혼합 된 물을 사용하고 싶은 사람은 없습니다.
• 탱크 (내부)를 청소하는 동안 아무도 수위 표시기 설정을 제거하고 싶지 않습니다.
위에서 언급 한 이유 중 일부는 어리석은 것처럼 보일 수 있지만 이러한 단점이있는 시판되는 제품의 만족도가 떨어집니다. 그렇기 때문에 이러한 제품의 보급률이 일반 가구 * 사이에서 매우 적습니다.
* 인도 시장에서.
이러한 요점을 고려한 후 언급 된 단점을 제거 할 수있는 실용적인 수위 표시기를 설계했습니다.
우리의 디자인 :
• 초음파 센서를 사용하여 수위를 측정하므로 부식 문제가 없습니다.
• 2.4GHz에서 수위 실시간 무선 표시.
• 2 층 높이의 건물에 충분한 무선 신호 강도.
• 태양열로 더 이상 AC 주전원이나 배터리 교체가 필요 없습니다.
• 탱크를 채우는 동안 탱크 가득 참 / 넘침 경보.
회로 세부 사항을 조사해 보겠습니다.
송신기:
그만큼 무선 송신기 회로 탱크에 배치하면 연중 무휴로 5 초마다 수위 데이터를 보냅니다. 송신기는 2.4GHz에서 무선으로 송신기와 수신기를 연결하는 Arduino nano, 초음파 센서 HC-SR04, nRF24L01 모듈로 구성됩니다.
전류 출력이 300mA 인 9V ~ 12V의 태양 전지판이 송신기 회로에 전원을 공급합니다. 배터리 관리 회로 기판은 리튬 이온 배터리를 충전하므로 햇빛이없는 경우에도 수위를 모니터링 할 수 있습니다.
물 탱크에 초음파 센서를 배치하는 방법을 살펴 보겠습니다.
회로를 마 운딩하고 비와 직사광선으로부터 보호하기 위해 창의력을 발휘해야합니다.
초음파 센서를 배치하기 위해 탱크 뚜껑 위에 작은 구멍을 자르고 찾을 수있는 접착제로 밀봉합니다.
이제 바닥에서 뚜껑까지 탱크의 전체 높이를 측정하고 미터 단위로 기록하십시오. 이제 위의 이미지와 같이 탱크의 물 보유 용량의 높이를 측정하고 미터 단위로 기록하십시오.
이 두 값을 코드에 입력해야합니다.
송신기의 개략도 :
참고 : nRF24L01은 Vcc가 Arduino의 5V 출력에 연결되지 않으므로 3.3V를 사용합니다.
송신기 용 전원 공급 장치 :
태양 전지판의 출력 전력, 즉 출력 (볼트 x 전류)이 3 와트보다 큰지 확인합니다. 그만큼 태양 전지 패널 9V ~ 12V 여야합니다.
시장에서 쉽게 찾을 수있는 12V 및 300mA 패널을 권장합니다. 배터리는 약 3.7V 1000mAh 여야합니다.
5V 18650 리튬 이온 충전 모듈 :
다음 이미지는 표준을 보여줍니다. 18650 충전기 회로
입력은 USB (사용되지 않음) 또는 LM7805 IC의 외부 5V 일 수 있습니다. 위에 표시된대로 올바른 모듈을 얻었는지 확인하십시오. TP4056 낮은 배터리 차단 및 단락 보호 기능이 있습니다.
이 출력은 XL6009의 입력에 공급되어 더 높은 전압으로 부스트되어야하며, XL6009의 작은 드라이버 출력을 사용하여 Arduino의 경우 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에 스마트 폰 충전기 미니 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 초 동안 기다려야합니다.
저자의 프로토 타입 :
송신기:
리시버:
이 태양열 초음파 무선 수위 컨트롤러 회로에 대한 질문이 있으시면 언제든지 의견을 보내주십시오. 빠른 답변을 받으실 수 있습니다.
이전 : 간단한 부스트 컨버터 회로를 만드는 방법 Next : 플라이 백 컨버터를 설계하는 방법 – 포괄적 인 자습서