Popularny post Lukasc Napisano 27 lutego Popularny post Udostępnij Napisano 27 lutego (edytowany) System monitorowania poziomu wody w studni z funkcją stacji pogodowej Mój ogród, podobnie jak wiele innych, jest uzależniony od wody ze studni. Często borykałem się z problemem nieregularnego napełniania się studni, szczególnie w okresach suszy. Wielokrotnie zdarzało się, że pompa pracowała na sucho, co prowadziło do jej zapowietrzenia. Stworzyłem system monitoringu poziomu wody w studni, który sprawdza poziom wody i jej temperaturę. Pierwotnie w skład projektu wchodziły dwa urządzenia- nadajnik oparty o Pi Pico W umieszczony przy studni oraz odbiornik jako urządzenie oparte na Raspberry Pi pico. Oba urządzenia komunikowały się radiowo poprzez NRF24L01. Ze względu na problemy ze stabilizacją działania tych modułów radiowych projekt obecnie oparty jest na jednym Pi Pico W w specjalnie zaprojektowanej obudowie znajdującej się przy studni. Wysyła ono dane na serwer oparty na systemie Fedora Server. Serwer ten wstawia dane do bazy danych oraz generuje stronę www, która w sposób estetyczny pokazuje wyniki pomiarów. def send_data(data): ''' Sending data to the server''' try: # Determining the server address addr_info = socket.getaddrinfo('000.000.000.000', 5001) addr = addr_info[0][-1] # Creating and connecting a socket s = socket.socket() s.connect(addr) data = data.replace(' ', '+') # Preparing and sending an HTTP request request = "GET /update?data=" + str(data) + " HTTP/1.1\r\nHost: 000.000.000.000\r\nConnection: close\r\n\r\n" lcd.move_to(14,1) lcd.putstr('s1') s.send(bytes(request, 'utf8')) except: print(f'Failed to send data.') Przejdźmy do szczegółów. Do pomiaru poziomu wody użyłem wodoodpornego czujnika ultradźwiękowego JSN-SR04T. Swoją drogą naprawdę go polecam bo działa już 3 sezon bez żadnych problemów. Kluczem było tutaj odpowiednie zawieszenie sensora tak aby w jego zasięgu znajdowało się wyłącznie lustro wody a nie ścianki studni. Jego zakres pomiarowy to 20-450 cm a kąt pomiarowy mniej niż 50 stopni. Dokładność pomiarów +-3mm jak dla mnie wystarczająca do tego zastosowania. def get_distance(): count_d = 0 d = sensor.distance_cm() while d < 5: actual_time = formated_time() lcd.move_to(0,0) lcd.putstr(actual_time[9:18]) lcd.move_to(14,1) lcd.putstr('d' + str(count_d)) print('Proba uzyskania glebokosci studni: ' + str(count_d)) d = sensor.distance_cm() sleep(1) count_d = count_d + 1 if count_d >5: return 0 break # print('Distance:', distance, 'cm') #sleep(0.1) lcd.move_to(14,1) lcd.putstr(' ') return d W wodzie zanurzony jest kolejny z czujników kupiony zresztą też w sklepie Botland: DS18B20. Zakres pomiaru temperatury: -55°C do +125°C z dokładnością +- 0,5 stopnia. Nie sądzę abym za mojego życia potrzebował szerszego zakresu pomiarowego do pomiaru wody w studni 😉 Ja kupiłem wersję z 5 metrowym przewodem, ale z tego co widzę są wersje z krótszymi przewodami i dłuższymi. Do projektu dołożyłem także czujnik do pomiaru temperatury powietrza, wilgotności i ciśnienia atmosferycznego BME280. Zakres pomiarowy jest bardzo przyzwoity, temperaturę mierzy w zakresie-40°C - 85°C przy dokładności ±1°C. Wilgotność: 10% RH do 80% RH, dokładność ±3% RH. Ciśnienie powietrza: 300 hPa do 1100 hPa, dokładność ±1 hPa. temp, pressure, humidity = bme.read_compensated_data() temperature = temp / 100 # Temperatura w °C pressure = pressure / 100 / 256 # Ciśnienie w hPa humidity = humidity / 1024 # Wilgotność w % temperature = "{:02d}".format(round(temperature)) pressure = "{:02d}".format(round(pressure)) humidity = "{:02d}".format(round(humidity)) Co prawda z poziomu serwera można zarządzać czasem pomiaru to jednak dodałem niejako standardowo do projektu zegar DS1302 RTC. Urządzenie aktualizuje swój czas po włączeniu. def get_current_datetime(): response = urequests.get("http://worldtimeapi.org/api/timezone/Europe/Warsaw") data = response.json() datetime = data["datetime"] return datetime def set_ds1302_datetime(datetime_str): #print("Received datetime string:", datetime_str) datetime_obj = utime.localtime(utime.mktime((int(datetime_str[0:4]), int(datetime_str[5:7]), int(datetime_str[8:10]), int(datetime_str[11:13]), int(datetime_str[14:16]), int(datetime_str[17:19]), 0, 0,))) datetime_list = [datetime_obj[0], datetime_obj[1], datetime_obj[2], datetime_obj[6] + 1, datetime_obj[3], datetime_obj[4], datetime_obj[5], 0] #print("Converted datetime list:", datetime_list) ds.date_time(datetime_list) Moduł przy studni zawiera także wyświetlacz aby można było sprawdzić parametry będąc koło studni. Jest to typowy LCD 2x16 z konwerterem I2C LCM1602 W kodzie programu będzie widoczny import biblioteki NRF24L01. Mam ciągły „uraz” po pomimo dodania kondensatora elektronicznego i ceramicznego bezpośrednio przy VCC i GND modułu, nie byłem wstanie okiełznać w sposób zadowalający jego działania. Może kiedyś... W tym sezonie chciałbym rozbudować urządzenie o funkcję automatycznego włączania i wyłączania pompy w zależności od poziomu wody. Na zdjęciach obudowy można zobaczyć specjalne porty na kable wejściowe i wyjściowe. Jest także miejsce przekaźnik 250 VAC z optoizolacją. Pod jego 4 złącza podłączę w przyszłości zarówno pompę jak i elektrozawory poszczególnych linii nawadniania. Wyniki pomiarów mogę przeglądać na specjalnej stronie hostowanej na własnym serwerze. Dostosowana jest ona zarówno do smartfonów jak i do czytnika ebook. Strona pokazuje w sposób graficzny poziom napełnienia studni oraz jej poziom sprzed 5 minut. Na koniec- samodzielnie zaprojektowana obudowa, w której każdy element ma swoje miejsce. Zapraszam także do obejrzenia filmu prezentującego rozwiązanie: link do youtube. Będę bardzo wdzięczny za wszelkie rady ale także i konstruktywną krytykę. Edytowano 28 lutego przez Lukasc anonimizacja i dodanie zdjec 5 1 Link do komentarza Share on other sites More sharing options...
SOYER 28 lutego Udostępnij 28 lutego Cześć bardzo ciekawy i praktyczny projekt. Mnie zaś ciekawi co innego, jak się robi takie fajne filmy? Używasz jakiegoś konkretnego jednego programu, kilku różnych? Napisz coś w tym temacie. Link do komentarza Share on other sites More sharing options...
Popularny post Lukasc 28 lutego Autor tematu Popularny post Udostępnij 28 lutego (edytowany) @SOYER dziękuję. Jeśli chodzi o film, animacja obudowy zrobiona jest w programie do edycji grafiki 3D -Blender. Skoro już zaprojektowałem tam obudowę to łatwiej mi było tam przygotować całą animację. Reszta obróbki, napisy itp zmontowane w programie DaVinci Resolve. Również darmowym. Projektowania w Blenderze nauczyłem się z przymusu po zakupie drukarki 3D. Edytowano 28 lutego przez Lukasc 2 1 Link do komentarza Share on other sites More sharing options...
SOYER 28 lutego Udostępnij 28 lutego Bardzo dziękuję, już się ściąga. Wygląda ten Twój filmik bardzo profesjonalnie, jak na moje niewprawne oko;), mam nadzieję, że też tak będę potrafił. 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »