Ultrazvukový bezdrátový indikátor hladiny vody - solární

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





Ultrazvukový regulátor hladiny vody je zařízení, které dokáže detekovat hladinu vody v nádrži bez fyzického kontaktu a odesílat data na vzdálený indikátor LED v bezdrátovém režimu GSM.

V tomto příspěvku se chystáme zkonstruovat bezdrátový indikátor hladiny vody na solární energii využívající Arduino, ve kterém by Arduinos vysílal a přijímal na bezdrátové frekvenci 2,4 GHz. Hladinu vody v nádrži budeme detekovat pomocí ultrazvuku místo tradiční elektrodové metody.



Přehled

Indikátor hladiny vody je nutností, pokud vlastníte dům nebo dokonce žijete v pronajatém domě. A ukazatel hladiny vody zobrazuje jeden důležitý údaj pro váš dům, který je stejně důležitý jako odečet vašeho měřiče energie, to znamená, kolik vody ještě zbývá? Abychom mohli sledovat spotřebu vody a nemuseli jsme stoupat nahoru, abychom se dostali do nádrže na vodu, abychom zkontrolovali, kolik vody zbývá, a už žádné náhlé zastavení vody z faucetu.

Žijeme v roce 2018 (v době psaní tohoto článku) nebo později, můžeme okamžitě komunikovat kdekoli na světě, vypustili jsme elektrické závodní auto do vesmíru, vypustili jsme satelity a rovery na Mars, dokonce jsme schopni přistát člověka bytosti na Měsíci, stále žádný vhodný komerční produkt pro zjišťování, kolik vody zbývá v našich vodních nádržích?



Můžeme najít ukazatele hladiny vody, které vyrábějí studenti 5. ročníku pro vědecký veletrh ve škole. Jak se takové jednoduché projekty nedostaly do našeho každodenního života? Odpovědí je, že ukazatele hladiny vodní nádrže nejsou jednoduché projekty, které může žák 5. ročníku udělat pro náš domov. Je jich mnoho praktické úvahy než jeden navrhneme.

• Nikdo nechce vyvrtat otvor na těle nádrže na vodu pro elektrody, které by později mohly vytékat z vody.
• Nikdo nechce vést vodič 230/220 V stř. Poblíž nádrže na vodu.
• Nikdo nechce vyměňovat baterie každý měsíc.
• Nikdo nechce provozovat další dlouhé dráty visící na místnosti pro indikaci hladiny vody, protože to není předem plánováno při stavbě domu.
• Nikdo nechce používat vodu smíchanou s kovovou korozí elektrody.
• Při čištění nádrže (uvnitř) nikdo nechce odstranit nastavení ukazatele hladiny vody.

Některé z výše uvedených důvodů mohou vypadat hloupě, ale u komerčně dostupných produktů s těmito nevýhodami najdete méně uspokojivé. Proto je penetrace těchto produktů v průměrných domácnostech velmi malá *.
* Na indickém trhu.

Po zvážení těchto klíčových bodů jsme navrhli praktický indikátor hladiny vody, který by měl odstranit zmíněné nevýhody.

Náš design:

• Používá ultrazvukový senzor k měření hladiny vody, takže nedochází k problémům s korozí.
• Bezdrátová indikace hladiny vody v reálném čase na 2,4 GHz.
• Dobrá síla bezdrátového signálu, dostačující pro 2patrové budovy.
• Solární napájení, žádné další střídavé napájení nebo výměna baterie.
• Při plnění nádrže alarm plného / přetečení nádrže.

Prozkoumejme podrobnosti okruhu:

Vysílač:

The obvod bezdrátového vysílače který je umístěn na nádrži, bude odesílat údaje o hladině vody každých 5 sekund 24/7. Vysílač se skládá z Arduino nano, ultrazvukového senzoru HC-SR04, modulu nRF24L01, který bezdrátově propojí vysílač a přijímač na 2,4 GHz.

Solární panel 9 V až 12 V s proudovým výstupem 300 mA bude napájet obvod vysílače. Li-ion baterie bude nabíjena obvodovou deskou pro správu baterie, abychom mohli monitorovat hladinu vody, i když na ní není sluneční světlo.

Prozkoumejme, jak umístit ultrazvukový senzor do nádrže na vodu:

Vezměte prosím na vědomí, že musíte použít svou kreativitu k obchvatu okruhu a ochraně před deštěm a přímým slunečním světlem.

Vyřízněte malý otvor nad víkem nádrže pro umístění ultrazvukového senzoru a zalepte ho lepidlem, které najdete.

umístění ultrazvukového senzoru do nádrže na vodu

Nyní změřte celou výšku nádrže od dna po víko, zapište si ji v metrech. Nyní změřte výšku kapacity zadržování vody v nádrži, jak je znázorněno na obrázku výše, a zapište ji v metrech.
Tyto dvě hodnoty musíte zadat do kódu.

Schéma vysílače:

připojení ultrazvukového vysílače pro regulaci hladiny vody

POZNÁMKA: nRF24L01 používá 3,3 V, protože Vcc se nepřipojuje k 5V výstupu Arduina.

Napájení vysílače:

návrh napájecího zdroje ultrazvukového regulátoru hladiny vody

Ujistěte se, že výstupní výkon vašeho solárního panelu, tj. Výstup (volt x proud), je větší než 3 watty. The solární panel by měla být 9V až 12V.

Doporučuje se panel 12V a 300mA, který snadno najdete na trhu. Baterie by měla být kolem 3,7 V 1 000 mAh.

5V 18650 Li-ion nabíjecí modul:

Následující obrázek ukazuje standard Nabíjecí obvod 18650

Vstup může být USB (nepoužívá se) nebo externí 5V z LM7805 IC. Ujistěte se, že máte správný modul, jak je uvedeno výše, který by měl mít TP4056 ochrana, která má nízkou kapacitu baterie a ochranu proti zkratu.

Výstup z toho by měl být přiváděn na vstup XL6009, který se zvýší na vyšší napětí, pomocí malého výstupu šroubováku XL6009 by měl být pro Arduino nastaven na 9V.

Ilustrace převaděče zesílení DC na DC XL6009:

Tím je hardware vysílače ukončen.

Kód pro vysílač:

// ----------- 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 ----------- //

V měřeném kódu změňte následující hodnoty:

// ------- CHANGE THIS -------//
float water_hold_capacity = 1.0 // Enter in Meters.
float full_height = 1.3 // Enter in Meters.
// ---------- -------------- //

Tím je vysílač ukončen.

Příjemce:

ultrazvuková řídicí jednotka přijímače hladiny vody

Přijímač může zobrazit 5 úrovní. Alarm, když nádrž při plnění nádrže dosáhla absolutní maximální kapacity zadržování vody. 100 až 75% - všechny čtyři LED budou svítit, 75 až 50% budou svítit tři LED, 50 až 25% budou svítit dvě LED, 25% a méně bude svítit jedna LED.
Přijímač lze napájet z 9V baterie nebo z nabíječka smartphonu na USB kabel mini-B.

Kód pro přijímač:

// ----------- 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 ----------- //

Tím je přijímač uzavřen.

POZNÁMKA: pokud nesvítí žádná LED, znamená to, že přijímač nemůže přijímat signál z vysílače. Po zapnutí obvodu přijímače byste měli počkat 5 sekund na příjem signálu z vysílače.

Autorovy prototypy:

Vysílač:

prototyp ultrazvukového vysílače

Přijímač:

prototyp ultrazvukového přijímače

Máte-li jakékoli dotazy týkající se tohoto solárního napájeného ultrazvukového bezdrátového vodního okruhu, neváhejte vyjádřit v komentáři, můžete očekávat rychlou odpověď.




Předchozí: Jak si vyrobit obvody převaděče Simple Boost Další: Jak navrhnout převaděč Flyback - komplexní výukový program