Ultradźwiękowy bezprzewodowy wskaźnik poziomu wody - zasilany energią słoneczną

Wypróbuj Nasz Instrument Do Eliminowania Problemów





Ultradźwiękowy kontroler poziomu wody to urządzenie, które może bez kontaktu fizycznego wykryć poziom wody w zbiorniku i przesłać dane do odległego wskaźnika LED w trybie bezprzewodowym GSM.

W tym poście zamierzamy zbudować oparty na ultradźwiękach bezprzewodowy wskaźnik poziomu wody zasilany energią słoneczną za pomocą Arduino, w którym Arduino będzie nadawać i odbierać na częstotliwości bezprzewodowej 2,4 GHz. Poziom wody w zbiorniku będziemy wykrywać za pomocą ultradźwięków zamiast tradycyjnej metody elektrodowej.



Przegląd

Wskaźnik poziomu wody to gadżet, który musisz mieć, jeśli jesteś właścicielem domu, a nawet mieszkasz w wynajmowanym domu. ZA wskaźnik poziomu wody pokazuje jedną ważną informację dla twojego domu, która jest tak samo ważna jak odczyt twojego licznika energii, to znaczy ile wody pozostało? Dzięki temu możemy śledzić zużycie wody i nie musimy wspinać się na górę, aby uzyskać dostęp do zbiornika wody, aby sprawdzić, ile wody pozostało, i uniknąć nagłego zatrzymywania się wody z kranu.

Żyjemy w 2018 roku (w momencie pisania tego artykułu) lub później, możemy natychmiast komunikować się z dowolnym miejscem na świecie, wystrzeliliśmy w kosmos elektryczny samochód wyścigowy, wystrzeliliśmy satelity i łaziki na Marsa, możemy nawet wylądować na ludziach istoty na Księżycu, wciąż nie ma odpowiedniego produktu komercyjnego do wykrywania, ile wody pozostało w naszych zbiornikach wodnych?



Możemy znaleźć wskaźniki poziomu wody wykonane przez uczniów klas 5 na targi naukowe w szkole. Jak takie proste projekty nie wpłynęły na nasze codzienne życie? Odpowiedź brzmi: wskaźniki poziomu wody w zbiorniku nie są prostymi projektami, które może wykonać piątoklasista w naszym domu. Jest wiele względy praktyczne zanim go zaprojektujemy.

• Nikt nie chce wywiercić otworu w korpusie zbiornika wody pod kątem elektrod, z których później może wyciekać woda.
• Nikt nie chce prowadzić przewodu 230/120 VAC w pobliżu zbiornika na wodę.
• Nikt nie chce wymieniać baterii co miesiąc.
• Nikt nie chce poprowadzić dodatkowych długich przewodów wiszących w pomieszczeniu w celu wskazania poziomu wody, ponieważ nie jest to z góry zaplanowane podczas budowy domu.
• Nikt nie chce używać wody, która jest zmieszana z korozją metalu elektrody.
• Nikt nie chce zdejmować konfiguracji wskaźnika poziomu wody podczas czyszczenia zbiornika (wewnątrz).

Niektóre z wyżej wymienionych powodów mogą wyglądać głupio, ale mniej satysfakcjonujące będą dostępne na rynku produkty z tymi wadami. Dlatego też penetracja tymi produktami jest znacznie mniejsza wśród przeciętnych gospodarstw domowych *.
* Na rynku indyjskim.

Po rozważeniu tych kluczowych punktów zaprojektowaliśmy praktyczny wskaźnik poziomu wody, który powinien usunąć wymienione wady.

Nasz projekt:

• Wykorzystuje czujnik ultradźwiękowy do pomiaru poziomu wody, więc nie ma problemu z korozją.
• Bezprzewodowe wskazanie poziomu wody w czasie rzeczywistym przy częstotliwości 2,4 GHz.
• Dobra siła sygnału bezprzewodowego, wystarczająca dla dwupiętrowych budynków.
• Zasilanie energią słoneczną, koniec z zasilaniem sieciowym lub wymianą baterii.
• Alarm pełnego / przepełnienia zbiornika podczas napełniania zbiornika.

Zbadajmy szczegóły obwodu:

Nadajnik:

Plik obwód nadajnika bezprzewodowego umieszczony na zbiorniku będzie wysyłał dane o poziomie wody co 5 sekund przez całą dobę. Nadajnik składa się z Arduino nano, czujnika ultradźwiękowego HC-SR04, modułu nRF24L01, który połączy nadajnik i odbiornik bezprzewodowo na częstotliwości 2,4 GHz.

Panel słoneczny o napięciu od 9 V do 12 V z wyjściem prądowym 300 mA będzie zasilał obwód nadajnika. Płytka do zarządzania akumulatorem ładuje akumulator litowo-jonowy, dzięki czemu możemy monitorować poziom wody nawet wtedy, gdy nie ma światła słonecznego.

Przyjrzyjmy się, jak umieścić czujnik ultradźwiękowy w zbiorniku na wodę:

Pamiętaj, że musisz wykorzystać swoją kreatywność, aby kopać tor i chronić go przed deszczem i bezpośrednim działaniem promieni słonecznych.

Wytnij mały otwór nad pokrywą zbiornika do umieszczenia czujnika ultradźwiękowego i uszczelnij go jakimś klejem, który możesz znaleźć.

umieszczenie czujnika ultradźwiękowego w zbiorniku na wodę

Teraz zmierz pełną wysokość zbiornika od dołu do pokrywy, zapisz ją w metrach. Teraz zmierz wysokość pojemności zbiornika na wodę, jak pokazano na powyższym obrazku i zapisz w metrach.
Musisz wprowadzić te dwie wartości w kodzie.

Schemat ideowy nadajnika:

złącza nadajnika ultradźwiękowego do kontroli poziomu wody

UWAGA: nRF24L01 wykorzystuje 3,3 V, ponieważ Vcc nie łączy się z wyjściem 5 V Arduino.

Zasilanie nadajnika:

ultradźwiękowy projekt zasilania kontrolera poziomu wody

Upewnij się, że moc wyjściowa panelu słonecznego, tj. Moc wyjściowa (wolt x prąd), jest większa niż 3 waty. Plik panel słoneczny powinien wynosić od 9 V do 12 V.

Zalecany jest panel 12V i 300mA, który można łatwo znaleźć na rynku. Bateria powinna mieć około 3,7 V 1000 mAh.

Moduł ładowania litowo-jonowego 5 V 18650:

Poniższy rysunek przedstawia standard 18650 obwód ładowarki

Wejście może być USB (nie używane) lub zewnętrzne 5 V z układu LM7805. Upewnij się, że masz odpowiedni moduł, jak pokazano powyżej, powinien mieć TP4056 Zabezpieczenie, które ma niskie odcięcie baterii i zabezpieczenie przed zwarciem.

Wyjście tego powinno być doprowadzone do wejścia XL6009, które podniesie do wyższego napięcia, za pomocą małego śrubokręta wyjście XL6009 powinno być ustawione na 9V dla Arduino.

Ilustracja konwertera podwyższającego napięcie DC na DC XL6009:

Na tym kończy się sprzęt nadajnika.

Kod nadajnika:

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

Zmień następujące wartości w mierzonym kodzie:

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

Na tym kończy się nadajnik.

Odbiornik:

Schemat sterownika odbiornika ultradźwiękowego poziomu wody

Odbiornik może wyświetlać 5 poziomów. Alarm, gdy zbiornik osiągnął absolutną maksymalną pojemność przechowywania wody podczas napełniania zbiornika. 100 do 75% - wszystkie cztery diody LED będą się świecić, 75 do 50% trzy diody będą świecić, 50 do 25% dwie diody LED będą świecić, 25% i mniej jedna dioda LED będzie się świecić.
Odbiornik może być zasilany z baterii 9V lub z ładowarka do smartfona na USB kabel mini-B.

Kod odbiorcy:

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

Na tym kończy się odbiornik.

UWAGA: jeśli żadna dioda LED się nie świeci, oznacza to, że odbiornik nie może odebrać sygnału z nadajnika. Po włączeniu obwodu odbiornika należy odczekać 5 sekund na odebranie sygnału z nadajnika.

Prototypy autora:

Nadajnik:

prototyp nadajnika ultradźwiękowego

Odbiorca:

prototyp odbiornika ultradźwiękowego

Jeśli masz jakiekolwiek pytania dotyczące tego obwodu ultradźwiękowego bezprzewodowego kontrolera poziomu wody zasilanego energią słoneczną, prosimy o wyrażenie w komentarzu, możesz spodziewać się szybkiej odpowiedzi.




Poprzedni: Jak zrobić proste obwody konwertera doładowania Dalej: Jak zaprojektować konwerter Flyback - kompleksowy samouczek