Ultradźwiękowy miernik pojemności zbiornika wody deszczowej: 10 kroków (ze zdjęciami)
Ultradźwiękowy miernik pojemności zbiornika wody deszczowej: 10 kroków (ze zdjęciami)
Anonim
Ultradźwiękowy miernik pojemności zbiornika wody deszczowej
Ultradźwiękowy miernik pojemności zbiornika wody deszczowej

Jeśli jesteś kimś takim jak ja i masz trochę świadomości ekologicznej (albo jesteś po prostu krzesiwami, które chcą zaoszczędzić kilka dolców - czyli ja…), możesz mieć zbiornik na deszczówkę. Mam zbiornik do zbierania dość rzadkiego deszczu, jaki mamy w Australii - ale chłopcze, o rany, kiedy tu pada, to NAPRAWDĘ pada! Mój zbiornik ma około 1,5 m wysokości i jest na cokole, co oznacza, że muszę wyjść po schodach, aby sprawdzić poziom wody (lub - ponieważ jestem taki leniwy, balansuję niepewnie na starej butli z gazem z grilla, który teraz wziął stałego zamieszkania jako „schodek” obok zbiornika).

Chciałem w jakiś sposób móc sprawdzić poziom wody w zbiorniku, bez wspinania się i wiszenia jedną ręką na rynnie (martwiąc się o to, jakie pająki mogą się za tym kryć – słyszałeś o australijskich pająkach – prawda?) … Tak więc, z odnowionym późnym zainteresowaniem elektroniką i tanimi klonami Arduino z Chin na ebayu, postanowiłem spróbować zbudować „widget”, który wykonałby dla mnie pracę.

Teraz mój „wymarzony” widżet miał być na stałe zainstalowany w zbiorniku, korzystać ze źródła energii ładowanej energią słoneczną, ze zdalnym odczytem w garażu, a może nadajnika bezprzewodowego przez Bluetooth, który mógłbym sprawdzić z telefonu, a może nawet Urządzenie typu ESP z automatycznie aktualizowaną stroną internetową, dzięki której mogę sprawdzić poziom wody w moim zbiorniku z dowolnego miejsca na świecie przez internet… ale tak naprawdę – po co mi to wszystko? Więc cofnąłem nieco moje wielkie ideały (cóż, całkiem znacznie) i zrezygnowałem z bezprzewodowości rozwiązania, stałej instalacji, ładowania słonecznego i możliwości sprawdzania poziomu mojego zbiornika z tyłu (zawsze zakładając, że na zapleczu jest dostępne WiFi, to znaczy…)

Powstały projekt został zdegradowany do widocznej powyżej jednostki ręcznej, którą można po prostu przytrzymać nad otworem zbiornika i aktywować za pomocą przycisku z cyfrowym odczytem, który można odczytać z poziomu gruntu - o wiele bardziej praktyczne.

Krok 1: Matematyka…

Po zabawie z kilkoma pomysłami, jak określić poziom wody - zdecydowałem się na ultradźwiękowy nadajnik/odbiornik jako podstawę dla mojego widżetu i użycie Arduino do odczytów i wszystkich obliczeń matematycznych. Odczyty zwracane z czujnika są (pośrednio) w postaci odległości - od czujnika ultradźwiękowego do powierzchni, od której się odbił (powierzchnia wody - lub dna zbiornika, jeśli jest pusty) i z powrotem, więc potrzebujemy zrobić z tym kilka rzeczy, aby uzyskać procent pozostający w zbiorniku.

NB - w rzeczywistości wartość zwracana z czujnika to tak naprawdę czas, w którym sygnał opuszcza stronę nadajnika i wraca do odbiornika. To jest w mikrosekundach - ale znajomość prędkości dźwięku wynosi 29 mikrosekund na cm (Co? Nie wiedziałeś o tym? Pfft…) ułatwia konwersję z okresu czasu na pomiar odległości.

Obraz
Obraz

Po pierwsze - oczywiście musimy podzielić odległość przez 2, aby uzyskać odległość czujnika od powierzchni. Następnie odejmij stałą odległość od czujnika do „maks.” głębokości wody. Pozostała wartość to głębokość wody, która została wykorzystana. Następnie odejmij tę wartość od maksymalnej głębokości wody, aby znaleźć głębokość wody pozostałej w zbiorniku.

Ta wartość jest zatem podstawą do innych obliczeń, takich jak obliczenie tej głębokości wody jako procent maksymalnej głębokości lub pomnożenie głębokości przez stałą „powierzchnię”, aby uzyskać objętość wody, którą można wyświetlić w litrach (lub galonach, lub jakiejkolwiek innej jednostce - o ile znasz matematykę, aby to zrobić - dla uproszczenia trzymam się procentu).

Krok 2: Praktyczne

Urządzenie może być trzymane w ręku, ale wprowadza to niewielką możliwość drobnych niedokładności, jeśli urządzenie nie jest trzymane w tym samym miejscu i za każdym razem pod tym samym kątem. Chociaż byłby to tylko bardzo drobny błąd i prawdopodobnie nawet taki, który by się nie zarejestrował, byłby to rodzaj rzeczy, które mnie dręczyły.

Jednak bycie trzymanym w ręku daje znacznie większą możliwość, że przeklęty przedmiot wpadnie do zbiornika i nigdy więcej go nie zobaczy. Tak więc, aby złagodzić OBU tych możliwości, zostanie on przymocowany do kawałka drewna, który jest następnie umieszczany nad otworem zbiornika - tak, aby pomiar był dokonywany za każdym razem z dokładnie tej samej wysokości i kąta (i jeśli zostanie upuszczony w zbiornika, przynajmniej drewno będzie pływać).

Przycisk aktywuje jednostkę (eliminując tym samym potrzebę włączania/wyłączania i możliwość przypadkowego rozładowania baterii) i odpala szkic w Arduino. Pobiera to pewną liczbę odczytów z HC-SR04 i pobiera z nich średnią (w celu złagodzenia wszelkich błędnych odczytów).

Dołączyłem również trochę kodu, aby sprawdzić, czy na jednym z cyfrowych pinów we/wy Arduino jest wysoki lub niski, i użyć go do wprowadzenia urządzenia w tryb, który nazwałem „kalibracją”. W tym trybie wyświetlacz po prostu pokazuje rzeczywistą odległość (podzieloną przez 2) zwróconą przez czujnik, dzięki czemu mogłem sprawdzić jej dokładność na taśmie mierniczej.

Krok 3: Składniki

Urządzenie składa się z trzech głównych elementów…

Obraz
Obraz
  1. Ultradźwiękowy moduł nadajnika/odbiornika HC-SR04
  2. Mikrokontroler Arduino Pro Mini
  3. 4-cyfrowy 7-segmentowy wyświetlacz LED lub „moduł” wyświetlacza, taki jak TM1637

Wszystkie powyższe można łatwo znaleźć w serwisie eBay, po prostu wyszukując terminy pokazane pogrubioną czcionką.

W tej aplikacji wyświetlacz po prostu używa 3 cyfr do wyświetlania wartości procentowej 0-100 lub 4 cyfr do pokazania liczby litrów (maksymalnie 2000 w moim przypadku), więc wystarczy dowolny 4-cyfrowy wyświetlacz - nie musisz martw się, czy moduł ma kropki dziesiętne czy dwukropki. „Moduł” wyświetlacza (dioda LED zamontowana na płytce zaciskowej, z układem interfejsu) jest łatwiejszy, ponieważ wykorzystuje mniej połączeń pinów, ale surowy wyświetlacz LED z 12 pinami może być przystosowany do Arduino z niewielkimi modyfikacjami kodu (w rzeczywistości mój oryginalny projekt był oparty na tej konfiguracji). Należy jednak pamiętać, że użycie surowego wyświetlacza LED wymaga również 7 rezystorów, aby ograniczyć prąd pobierany przez każdy segment. Zdarzyło mi się mieć dostępny moduł wyświetlania zegara TM1637, więc postanowiłem go użyć.

Dodatkowe bity i bobsleje obejmują zacisk na baterię 9V (i oczywiście baterię), chwilowy przełącznik przyciskowy „naciśnij, aby zrobić”, skrzynkę projektową, kołki nagłówka, przewody łączące i długość drewna 2 "x 4", która przekracza średnica otworu zbiornika.

Dodatkowe bity i bobsleje (oprócz kawałka drewna) zostały zakupione w mojej lokalnej sieci sklepów z elektroniką hobbystyczną - czyli Jaycar w Australii. Wyobrażam sobie, że Maplin w Wielkiej Brytanii byłby realną alternatywą i myślę, że jest ich kilka w USA, takich jak Digikey i Mouser. W przypadku innych krajów, obawiam się, że nie wiem, ale jestem pewien, że jeśli nie masz odpowiedniego outletu lub dostawcy internetowego w swoim kraju, to chińscy sprzedawcy ebay przyjdą po ciebie, jeśli nie pamiętaj, czekając kilka tygodni na dostawę (jak na ironię, mimo że jesteśmy jednym z naszych najbliższych sąsiadów, 6 tygodni lub dłużej nie jest niczym niezwykłym w przypadku dostawy do Australii z Chin!).

Upewnij się, że masz wystarczająco duże pudełko projektowe – zgadłem, że moje, zanim dostępne będą komponenty, i jest to naprawdę bardzo ciasny uścisk – być może będę musiał zdobyć inny przycisk, który zajmuje mniej miejsca.

Aha, a tak przy okazji, drewno pochodziło właśnie z resztek złomu, które trzymam w kącie mojego garażu (jako dom dla tych uroczych pająków).

Gdy zrozumiesz schemat i funkcjonalność, możesz zdecydować się na dostosowanie swojej wersji i dołączyć włącznik/wyłącznik lub użyć źródła zasilania 18650 Li-Ion, z panelem słonecznym i kontrolerem ładowania, aby zapewnić ciągłe doładowywanie i gotowość do pracy, lub zmień prosty wyświetlacz LED na wielowierszowy wyświetlacz LCD lub graficzny wyświetlacz OLED z większą liczbą opcji wyświetlania informacji, takich jak wyświetlanie procentu ORAZ pozostałych litrów w tym samym czasie. Możesz też wybrać śpiewającą, tańczącą bezprzewodową jednostkę IoT zainstalowaną na stałe w zbiorniku Z ładowaniem słonecznym. Chciałbym usłyszeć o twoich odmianach i modyfikacjach.

Krok 4: Testowanie prototypu (i kodu)

Po zakupie HC-SR04 z taniego chińskiego źródła na ebayu, nie spodziewałem się, że otrzymam bardzo dokładną jednostkę, więc najpierw chciałem przetestować ją na płytce prototypowej, na wypadek gdybym musiał dodać jakiś kod korekcji odległości do mój szkic.

W tym momencie szukałem podstawowych informacji o tym, jak podłączyć i używać HC-SR04, i muszę potwierdzić instruktażowy przykład jsvestera „Simple Arduino i HC-SR04”. Jego przykład i doświadczenie były dla mnie świetnym punktem wyjścia do programowania.

Znalazłem bibliotekę funkcji NewPing dla HC-SR04, która zawiera wbudowaną funkcjonalność do wykonywania średniej z wielu odczytów, dzięki czemu mój kod jest znacznie prostszy.

Znalazłem również bibliotekę dla modułu wyświetlania zegara TM1637, która znacznie uprościła wyświetlanie liczb. W moim oryginalnym kodzie (dla 4-cyfrowego 7-segmentowego wyświetlacza) musiałem podzielić numer na pojedyncze cyfry, a następnie zbudować każdą indywidualną cyfrę na wyświetlaczu, wiedząc, które segmenty podświetlić, a następnie przejść przez każdą cyfrę w numerze i budowanie tej liczby na odpowiedniej wyświetlanej cyfrze. Ta metoda nazywa się multipleksowaniem i skutecznie wyświetla tylko jedną cyfrę na raz, ale przechodzi od jednej cyfry do drugiej tak szybko, że ludzkie oko nie zauważa i oszukuje, że wszystkie cyfry są włączone w tym samym czasie. Podobnie jak biblioteka HC-SR04 ułatwiająca operacje pomiarowe, ta biblioteka wyświetlaczy zajmuje się wszystkimi multipleksowaniem i obsługą cyfr. Strony Arduino Reference, do których linki znajdują się powyżej, zawierają kilka przykładów i oczywiście każda biblioteka zawiera przykładowy kod, który może być bardzo pomocny.

Obraz
Obraz
Obraz
Obraz

n

Powyższe zdjęcia pokazują moje stanowisko testowe - dla uproszczenia testuję je na moim Arduino Uno, ponieważ jest ono już skonfigurowane do tymczasowych połączeń wielokrotnego użytku do prototypowania. Urządzenie pracuje tutaj w trybie 'Kalibracji' (zauważ, że cyfrowy pin 10 - biały przewód - jest podłączony do masy) i dokładnie odczytuje 39 cm z pudełka, które losowo przed nim umieściłem, co pokazuje taśma miernicza. W tym trybie wyświetlam małe „c” przed pomiarem, aby wskazać, że nie jest to normalny pomiar.

Oprócz Vcc (5v) i uziemienia, HC-SR04 potrzebuje 2 innych połączeń - wyzwalacza (żółty do pinu 6) i echa (zielony do pinu 7). Wyświetlacz potrzebuje również Vcc (5v) i uziemienia oraz 2 dodatkowych połączeń - zegara (niebieski do pinu 8) i DIO (fioletowy do pinu 9). Jak już wspomniano, tryb pracy jest kontrolowany przez wysoki lub niski na pinie 10 (biały). Połączenia będą wykorzystywać te same piny w Arduino Pro Mini, ale będą trwale lutowane. Tryb pracy będzie można wybrać za pomocą zworki na dwóch z trzech styków nagłówka, podłączonych odpowiednio do Vcc, styku 10 i masy.

Oficjalne specyfikacje HC-SR04 mówią o maksymalnym błędzie wynoszącym zaledwie 3 milimetry do maksymalnej projektowanej odległości roboczej wynoszącej 4 metry, więc wyobraź sobie moje zdziwienie, że moja jednostka z pewnością była dokładna do tego stopnia do 2 metrów – co znacznie przekracza to, czego potrzebuję. Z powodu ograniczonej przestrzeni na szybką i brudną konfigurację testową, moje wyniki testów poza tą odległością były zniekształcane przez odbicia od powierzchni innych niż mój cel testowy, ponieważ wiązka z nadajnika rozchodziła się i obejmowała większy obszar. Ale póki jest dobre do 1,5 metra - to mi zrobi ładnie, bardzo dziękuję:-)

Krok 5: Szkic miernika wody deszczowej Ino

Pełny kod jest załączony, ale poniżej zamieszczę kilka fragmentów, aby wyjaśnić niektóre z kroków.

Przede wszystkim konfiguracja…

#włączać

#include #include // piny dla HC-SR04 #define pinTrig 6 #define pinEcho 7 NewPing sonar(pinTrig, pinEcho, 155); // 400cms to max dla HC-SR04, 155cms to max dla zbiornika // Piny podłączenia modułu LED (Digital Pins) #define CLK 8 #define DIO 9 TM1637Wyświetlacz wyświetlacza (CLK, DIO); // Inne piny #define opMode 10

Oprócz bibliotek TM1637 i NewPing dołączyłem również bibliotekę Math, która daje mi dostęp do funkcji „zaokrąglania”. Używam tego w niektórych matematykach, aby na przykład wyświetlić procent z dokładnością do 5%.

Następnie definiuje się piny dla dwóch urządzeń i inicjuje urządzenia.

Na koniec definiuję pin 10 dla trybu pracy.

// wyłącz wszystkie segmenty dla wszystkich cyfr

uint8_t bytes = { 0x00, 0x00, 0x00, 0x00 }; display.setSegments(bajty);

Ta sekcja kodu przedstawia jeden sposób sterowania modułem wyświetlacza, umożliwiając indywidualną kontrolę każdego segmentu w każdej cyfrze. Ustawiłem 4 elementy w tablicy o nazwie bajty na zero. Oznacza to, że każdy bit każdego bajtu wynosi zero. 8 bitów jest używanych do sterowania każdym z 7 segmentów i kropką dziesiętną (lub dwukropkiem na wyświetlaczu typu zegarowego). Więc jeśli wszystkie bity są zerowe, to żaden z segmentów nie będzie się świecił. Operacja setSegments wysyła zawartość tablicy na wyświetlacz i nie pokazuje (w tym przypadku) niczego. Wszystkie segmenty są wyłączone.

Obraz
Obraz

Najbardziej znaczący bit w bajcie kontroluje DP, a pozostałe 7 bitów kontroluje 7 segmentów od G do A w odwrotnej kolejności. Na przykład, aby wyświetlić liczbę 1, wymagane są segmenty B i C, więc reprezentacja binarna to „0b00000110”. (Dzięki CircuitsToday.com za powyższy obrazek).

// Wykonaj 10 odczytów i użyj mediany czasu trwania.

int czas trwania = sonar.ping_median(10); // czas trwania w mikrosekundach if(duration == 0) // Błąd pomiaru - niejednoznaczny lub brak echa { uint8_t bytes = { 0x00, 0b01111001, 0b01010000, 0b01010000 }; // Segmenty do przeliterowania "Err" display.setSegments(bytes); }

Tutaj mówię HC-SR04, aby wykonał 10 odczytów i podał mi średni wynik. Jeśli nie zostanie zwrócona żadna wartość, oznacza to, że jednostka jest poza zakresem. Następnie używam tej samej techniki, co powyżej, aby kontrolować określone segmenty na 4 cyfrach, aby przeliterować litery (puste), E, r i r. Korzystanie z notacji binarnej ułatwia powiązanie poszczególnych bitów z segmentami.

Krok 6: Ładowanie kodu do Arduino Pro Mini (bez USB)

Jak powiedziałem wcześniej, produkty od chińskich sprzedawców w serwisie eBay często potrzebują 6 tygodni lub więcej, a wiele z moich prototypów i pisania kodu zostało wykonanych podczas oczekiwania na przybycie niektórych komponentów – jednym z nich jest Arduino Pro Mini.

Jedną rzeczą, której nie zauważyłem w Pro Mini, dopóki go nie zamówiłem, jest to, że nie ma na nim portu USB do pobrania szkicu. Tak więc, po szaleńczym googlowaniu, odkryłem, że w tym przypadku istnieją dwa sposoby ładowania szkicu – jeden wymaga specjalnego kabla, który biegnie od USB w twoim komputerze do 6 konkretnych pinów w Pro Mini. Ta grupa 6 pinów jest znana jako piny ISP (in-system programmer) i możesz użyć tej metody na dowolnym Arduino, jeśli chcesz - ale ponieważ interfejs USB jest dostępny w prawie wszystkich innych wariantach Arduino (I pomyśl), użycie tej opcji jest znacznie prostsze. Druga metoda wymaga posiadania innego Arduino z interfejsem USB, aby działał jako „pośrednik”.

Na szczęście posiadanie mojego Arduino Uno oznaczało, że mogłem skorzystać z drugiej metody, którą opiszę poniżej. Nazywa się to używaniem „Arduino jako ISP”. Krótko mówiąc, ładujesz specjalny szkic na Arduino „pośrednikiem”, który zamienia go w interfejs szeregowy. Następnie załaduj swój rzeczywisty szkic, ale zamiast normalnej opcji przesyłania użyj opcji z menu IDE, która przesyła „używając Arduino jako ISP”. Arduino „pośrednik” pobiera twój rzeczywisty szkic z IDE i przekazuje go do pinów ISP Pro Mini, zamiast ładować go do własnej pamięci. Nie jest to trudne, gdy już zorientujesz się, jak to działa, ale jest to dodatkowa warstwa złożoności, której możesz chcieć uniknąć. Jeśli tak jest lub nie masz innego Arduino, którego możesz użyć jako „pośrednika”, możesz kupić Arduino Nano lub jeden z innych modeli o małej obudowie, który zawiera interfejs USB i sprawia, że programowanie staje się prostsze.

Oto kilka zasobów, które mogą okazać się pomocne w zrozumieniu tego procesu. Arduino Reference odnosi się konkretnie do nagrywania nowego bootloadera na urządzeniu docelowym, ale równie łatwo można załadować szkic w ten sam sposób. Zauważyłem, że film Juliana Iletta czyni tę koncepcję o wiele jaśniejszą, chociaż pomija on część w referencji Arduino, która wyjaśnia, jak połączyć oba Arduino razem, i zamiast tego programuje goły układ na płytce prototypowej.

  • Arduino Reference Manual - używanie Arduino jako dostawcy usług internetowych
  • Film Juliana Iletta na YouTube - używanie Arduino jako dostawcy usług internetowych

Ponieważ Pro Mini nie ma wygodnie zgrupowanych 6 pinów ISP, musisz zdekodować, które z pinów cyfrowych odnoszą się do 4 pinów programowania (pozostałe dwa połączenia to tylko Vcc i Gnd - więc są dość proste). Na szczęście dla ciebie już przez to przeszedłem - i jestem gotów podzielić się z tobą wiedzą - jaka jestem wspaniałomyślną osobą!!

Arduino Uno i wiele innych z rodziny Arduino ma 6 pinów zręcznie ułożonych w bloku 3x2, tak jak ten (zdjęcie z www.arduino.cc).

Obraz
Obraz

Niestety Pro Mini nie. Jak widać poniżej, w rzeczywistości są one dość łatwe do zidentyfikowania i nadal są ułożone w 2 bloki po 3 szpilki. MOSI, MISO i SCK są takie same jak cyfrowe piny 11, 12 i 13 odpowiednio w Pro Mini i Arduino Uno, a do programowania ISP wystarczy podłączyć 11 do 11, 12 do 12 i 13 do 13. Pro Pin Reset Mini powinien być podłączony do pinu Uno 10, a Vcc (5v)/Ground Pro Mini powinien być podłączony do Arduino + 5v/Ground. (Zdjęcie z www.arduino.cc)

Obraz
Obraz

Krok 7: Montaż

montaż
montaż

Jak wspomniałem, wziąłem się za sprawę i żałowałem tego. Zmieścić wszystkie elementy w środku było prawdziwym uciskiem. W rzeczywistości musiałem wygiąć styki przycisku na boki i umieścić trochę opakowania na zewnątrz, aby go podnieść nieco dalej, aby zmieścił się w głębi pudełka, i musiałem zeszlifować 2-3 mm z każdej strony płyta modułu wyświetlacza, aby również pasowała.

Wywierciłem w obudowie 2 otwory, przez które przeszły czujniki ultradźwiękowe. Wywierciłem otwory trochę za małe, a następnie stopniowo je powiększałem za pomocą małej szlifierki rotacyjnej, aby uzyskać dobre dopasowanie. Niestety były zbyt blisko boków, aby móc korzystać z młynka od wewnątrz pudełka, a to trzeba było robić z zewnątrz, co skutkowało wieloma rysami i śladami łyżew w miejscach, w których młynek się poślizgnął – no cóż, to wszystko na dole zresztą - kogo to obchodzi…?

Następnie wyciąłem na jednym końcu szczelinę, która ma odpowiedni rozmiar, aby wyświetlacz mógł się przebić. Znowu – moje przypuszczenia co do rozmiaru pudełka ugryzły mnie z tyłu, ponieważ szczelina pozostawiła mi bardzo smukły kawałek nad wyświetlaczem, który nieuchronnie pękł, gdy go gładko piłowałem. No cóż - właśnie do tego wynaleziono super klej…

Wreszcie, mając wszystkie elementy z grubsza rozmieszczone w pudełku, zmierzyłem, gdzie umieścić otwór w pokrywie, aby korpus przycisku wpadł w końcową dostępną przestrzeń. WŁAŚNIE!!!

Następnie przylutowałem wszystkie komponenty razem, aby przetestować, że wszystkie nadal działają po zginaniu, szlifowaniu i przycinaniu, zanim zmontowałem je w obudowie. Możesz zobaczyć połączenie zworki tuż pod modułem wyświetlacza, z pinem 10 na Arduino (biały przewód) podłączonym do Gnd, co wprowadza urządzenie w tryb kalibracji. Wyświetlacz pokazuje 122cm od mojej ławki - musiał odebrać sygnał odbity od górnej części ramy okiennej (jest zbyt nisko jak na sufit).

Obraz
Obraz

Potem była sprawa wyłamania pistoletu do klejenia na gorąco i wpięcia wszystkich elementów na miejsce. Po wykonaniu tej czynności odkryłem, że niewielki prześwit między górną częścią modułu wyświetlacza a pokrywą, gdy moduł został przyklejony na miejscu, pozostawił trochę wybrzuszenia, w którym pokrywa nie pasuje tak ściśle, jak bym chciał. Być może pewnego dnia spróbuję coś z tym zrobić - lub, co bardziej prawdopodobne, nie…

Obraz
Obraz

Krok 8: Gotowy artykuł

Po kilku testach pomontażowych i poprawce w kodzie uwzględniającym głębokość kawałka drewna, do którego przykręciłem urządzenie (co kompletnie przeoczyłem w swoich obliczeniach – och!!), wszystko gotowe. Wreszcie!

Zmontowane testy

Gdy urządzenie leży twarzą w dół na mojej ławce, oczywiście nie będzie sygnału odbitego, więc urządzenie poprawnie pokazuje stan błędu. To samo byłoby prawdą, gdyby najbliższa powierzchnia odbijająca znajdowała się poza zasięgiem urządzenia.

Obraz
Obraz

Wygląda na to, że od blatu mojej ławki do podłogi ma 76cm (cóż, 72cm plus 4cm głębokości kawałka drewna).

Obraz
Obraz

Spód urządzenia, pokazujący nadajnik i odbiornik zwisające z kawałka drewna – naprawdę powinienem przestać nazywać to kawałkiem drewna – będzie odtąd określany jako Platforma Stabilizacji Wskaźnika i Precyzyjnego Rozmieszczania! Na szczęście to chyba ostatni raz, kiedy o tym wspomnę;-)

Ooh - na tym widać te wszystkie paskudne zadrapania i ślady łyżew…

Obraz
Obraz

… a oto gotowy przedmiot, umieszczony w normalnym trybie pracy, faktycznie mierzący pojemność mojego zbiornika z dokładnością do 5%. To było (bardzo) deszczowe niedzielne popołudnie, kiedy skończyłem ten projekt, stąd krople deszczu na urządzeniu i bardzo przyjemny 90% odczyt.

Obraz
Obraz

Mam nadzieję, że podobało ci się czytanie tej instrukcji i że nauczyłeś się trochę o programowaniu Arduino, fizyce i wykorzystaniu odbicia sonaru/ultradźwiękowego, pułapkach związanych z wykorzystaniem zgadywania w planowaniu projektu i że zainspirował cię do własny wskaźnik zbiornika na deszczówkę - a następnie zainstalować zbiornik na deszczówkę, aby go używać, jednocześnie pomagając trochę środowisku i oszczędzając na rachunkach za wodę.

Proszę czytaj dalej - co się stało następnego dnia…!

Krok 9: Postscript – sto (i pięć) procent?

Tak więc w poniedziałek po deszczowej niedzieli zbiornik był tak pełny, jak to tylko możliwe. Ponieważ jest to jeden z nielicznych przypadków, w których widziałem go całkowicie zapełniony, pomyślałem, że to idealny moment na porównanie wskaźnika, ale zgadnij co - zarejestrował się jako 105%, więc najwyraźniej coś było nie tak.

Wyjąłem bagnet i stwierdziłem, że moje pierwotne założenia 140 cm jako maksymalnej głębokości wody i 16 cm nad głową (oparte na szacunkach wizualnych z zewnątrz zbiornika) nieco odbiegały od rzeczywistych pomiarów. Tak więc uzbrojony w prawdziwe dane do mojego 100% testu porównawczego, mogłem poprawić swój kod i ponownie załadować Arduino.

Okazuje się, że maksymalna głębokość wody wynosi 147 cm, a punkt pomiarowy znajduje się na 160 cm, co daje 13 cm przestrzeni nad głową (suma nad głową w zbiorniku, wysokość szyjki zbiornika i głębokość kawałka… łoaaaaaaaaaaaaaaau, nie, co?! Mam na myśli głębokość platformy stabilizacji i precyzyjnego pozycjonowania!).

Po odpowiednim skorygowaniu zmiennych maxDepth i headroom, a także zresetowaniu maksymalnego zasięgu obiektu sonaru do 160 cm, szybki ponowny test wykazał 100%, który spadł do 95%, gdy lekko podniosłem miernik (aby zasymulować niewielką ilość zużytej wody).

Zadanie wykonane!

PS - to moja pierwsza próba instruktażu. Jeśli podoba Ci się mój styl, poczucie humoru, uczciwość w przyznawaniu się do błędów (hej – nawet ja nie jestem idealna…) itd. – daj mi znać, a może to da mi impuls do zrobienia kolejnego.

Krok 10: Refleksje

Pojemność użytkowa

Minęło już kilka tygodni, odkąd opublikowałem ten Instruktaż i otrzymałem wiele komentarzy w odpowiedzi, z których niektóre sugerowały alternatywne mechanizmy - zarówno elektroniczne, jak i ręczne. Ale to dało mi do myślenia i jest coś, na co prawdopodobnie powinienem zwrócić uwagę na początku.

  • Mój zbiornik ma pompę, która jest zamontowana na poziomie gruntu - nieco poniżej podstawy zbiornika. Ponieważ pompa jest najniższym punktem w systemie, a woda z pompy jest pod ciśnieniem, mogę wykorzystać całą pojemność mojego zbiornika.
  • JEDNAK - jeśli Twój zbiornik nie ma pompy i opiera się na zasilaniu grawitacyjnym, to efektywna pojemność zbiornika jest ograniczona przez wysokość kranu. Gdy woda pozostająca w zbiorniku jest niższa niż kran, woda nie będzie płynąć.

Tak więc, niezależnie od tego, czy używasz wskaźnika elektronicznego, ręcznego wziernika, czy systemu typu pływak i flaga, po prostu pamiętaj, że bez pompy efektywna "podstawa" twojego zbiornika to w rzeczywistości wysokość wylotu zbiornika lub uzyskiwać.

Zalecana: