Ултразвуков безжичен индикатор за нивото на водата - Слънчево захранване

Опитайте Нашия Инструмент За Премахване На Проблемите





Ултразвуков контролер за нивото на водата е устройство, което може да открива нивата на водата в резервоар без физически контакт и да изпраща данните към отдалечен светодиоден индикатор в безжичен GSM режим.

В тази публикация ще изградим ултразвуков индикатор за ниво на безжична вода на слънчева енергия, използващ Arduino, в който Arduinos ще предава и приема с безжична честота 2,4 GHz. Ще откриваме нивото на водата в резервоара, използвайки ултразвук, вместо традиционния електроден метод.



Общ преглед

Индикаторът за нивото на водата е задължително устройство, ако притежавате къща или дори живеете в наета къща. A индикатор за нивото на водата показва една важна информация за къщата ви, която е толкова важна, колкото показанията на вашия електромер, тоест колко вода остава? За да можем да следим консумацията на вода и не е нужно да се изкачваме горе, за да влезем в резервоара за вода, за да проверим колко вода е останала и да няма повече внезапно спиране на водата от крана.

Живеем през 2018 г. (към момента на писане на тази статия) или по-късно, можем да комуникираме с всяка точка на света незабавно, пуснахме електрическа състезателна кола в космоса, пуснахме сателити и роувъри до Марс, дори можем да кацнем хора същества на Луната, все още няма подходящ търговски продукт, който да открие колко вода остава в нашите резервоари за вода?



Можем да открием, че показателите за нивото на водата са направени от ученици от 5 клас за панаир на науката в училище. Как такива прости проекти не се превърнаха в нашето ежедневие? Отговорът е, че индикаторите за нивото на резервоара за вода не са прости проекти, които ученик от 5 клас може да направи за нашия дом. Има много практически съображения преди да проектираме такъв.

• Никой не иска да пробива дупка в корпуса на резервоара за вода за електроди, които по-късно може да пропускат вода.
• Никой не иска да прокарва 230/120 VAC проводник близо до резервоара за вода.
• Никой не иска да сменя батериите всеки месец.
• Никой не иска да прокарва допълнителни дълги проводници, окачени на стая за индикация на нивото на водата, тъй като това не е предварително планирано по време на строителството на къщата.
• Никой не иска да използва водата, която е смесена с метална корозия на електрода.
• Никой не иска да премахне настройката на индикатора за нивото на водата, докато почиства резервоара (отвътре).

Някои от споменатите по-горе причини може да изглеждат глупаво, но ще намерите по-малко задоволителни при предлаганите в търговската мрежа продукти с тези минуси. Ето защо навлизането на тези продукти е много по-малко сред средните домакинства *.
* На индийския пазар.

След като разгледахме тези ключови точки, ние разработихме практичен индикатор за нивото на водата, който трябва да премахне споменатите минуси.

Нашият дизайн:

• Използва ултразвуков сензор за измерване на нивото на водата, така че да няма проблем с корозията.
• Безжична индикация за нивото на водата в реално време при 2,4 GHz.
• Добра сила на безжичния сигнал, достатъчна за двуетажни високи сгради.
• Слънчево захранване няма повече мрежа за променлив ток или подмяна на батерията.
• Аларма за пълен / преливник на резервоара, докато пълните резервоара.

Нека да проучим подробностите за веригата:

Предавател:

The схема на безжичен предавател който е поставен върху резервоара, ще изпраща данни за нивото на водата на всеки 5 секунди 24/7. Предавателят се състои от Arduino nano, ултразвуков сензор HC-SR04, модул nRF24L01, който ще свърже предавателя и приемника безжично на 2,4 GHz.

Слънчев панел от 9 V до 12 V с токов изход 300 mA ще захранва веригата на предавателя. Една платка за управление на батерията ще зарежда Li-ion батерията, така че да можем да наблюдаваме нивото на водата дори когато няма слънчева светлина.

Нека разгледаме как да поставим ултразвуковия сензор в резервоара за вода:

Моля, обърнете внимание, че трябва да използвате креативността си, за да натрупате веригата и да предпазите от дъжд и пряка слънчева светлина.

Изрежете малка дупка над капака на резервоара за поставяне на ултразвуковия сензор и го запечатайте с някакво лепило, което можете да намерите.

поставяне на ултразвуков сензор във воден резервоар

Сега измерете пълната височина на резервоара отдолу до капака, запишете го в метри. Сега измерете височината на капацитета за задържане на вода на резервоара, както е показано на горното изображение и запишете в метри.
Трябва да въведете тези две стойности в кода.

Схематична диаграма на предавателя:

ултразвукови връзки на предавателя за контрол на нивото на водата

ЗАБЕЛЕЖКА: nRF24L01 използва 3.3V, тъй като Vcc не се свързват с 5V изход на Arduino.

Захранване за предавател:

ултразвуков дизайн на захранването на контролер за нивото на водата

Уверете се, че изходната мощност на вашия слънчев панел, т.е. изходната мощност (волт х ток) е по-голяма от 3 вата. The Слънчев панел трябва да бъде 9V до 12V.

Препоръчва се 12V и 300mA панел, който можете лесно да намерите на пазара. Батерията трябва да е около 3.7V 1000 mAh.

5V 18650 Li-ion модул за зареждане:

Следващото изображение показва стандарт 18650 верига на зарядното устройство

Входът може да бъде USB (не се използва) или външен 5V от LM7805 IC. Уверете се, че сте получили правилния модул, както е показано по-горе, той трябва да има TP4056 защита, която има ниско изключване на батерията и защита от късо съединение.

Изходът от това трябва да бъде подаден към входа на XL6009, който ще се увеличи до по-високо напрежение, като се използва малък изход на отвертката на XL6009, който трябва да бъде настроен на 9V за Arduino.

Илюстрация на 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% - И четирите светодиода ще светят, 75 до 50% ще светят три светодиода, 50 до 25% два светодиода ще светят, 25% и по-малко ще свети един светодиод.
Приемникът може да се захранва от 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 ----------- //

Това завършва приемника.

ЗАБЕЛЕЖКА: ако не светят никакви светодиоди, което означава, че приемникът не може да получи сигнал от предавателя. Трябва да изчакате 5 секунди, за да получите сигнала от предавателя след включване на веригата на приемника.

Авторски прототипи:

Предавател:

прототип на ултразвуков предавател

Приемник:

прототип на ултразвуков приемник

Ако имате някакви въпроси относно тази верига с ултразвуков безжичен контролер за нивото на водата, моля не се колебайте да изразите в коментара, можете да очаквате да получите бърз отговор.




Предишна: Как да направим прости схеми за преобразувател на усилване Напред: Как да проектираме Flyback Converter - изчерпателен урок