초음파 무선 수위 표시기 – 태양열

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





초음파 수위 컨트롤러는 물리적 인 접촉없이 탱크의 수위를 감지하고 무선 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 : 플라이 백 컨버터를 설계하는 방법 – 포괄적 인 자습서