Spisu treści:

Alarm wody IoT: 5 kroków (ze zdjęciami)
Alarm wody IoT: 5 kroków (ze zdjęciami)

Wideo: Alarm wody IoT: 5 kroków (ze zdjęciami)

Wideo: Alarm wody IoT: 5 kroków (ze zdjęciami)
Wideo: Momenty w Które Byście Nie Uwierzyli Gdyby Nie Zostały Nagrane - Część 5 2024, Listopad
Anonim
Alarm wody IoT
Alarm wody IoT

Niedawno doświadczyłem kopii zapasowej odpływu kuchennego. Gdybym nie był wtedy w domu, spowodowałoby to uszkodzenie podłogi i płyt kartonowo-gipsowych w moim mieszkaniu. Na szczęście byłem świadomy problemu i gotowy nabrać wody wiadrem. To sprawiło, że pomyślałem o zakupie alarmu przeciwpowodziowego. Odkryłem wiele niedrogich produktów na Amazon, ale te z dostępem do Internetu miały znaczny procent negatywnych recenzji, głównie z powodu problemów z zastrzeżonymi usługami powiadamiania. Dlatego postanowiłem stworzyć własny alarm wody IoT, który korzystałby z wybranych przeze mnie zaufanych środków powiadamiania.

Krok 1: Zasada działania

Zasada działania
Zasada działania

Alarm ma w roli mózgu mikrokontroler AVR ATtiny85. Pobiera odczyty napięcia z akumulatora i czujnika wody i porównuje je z wcześniej zdefiniowaną wartością, aby wykryć obecność wody lub stan niskiego poziomu naładowania akumulatora.

Czujnik wody to po prostu dwa przewody oddalone od siebie o około 1 mm. Jeden z przewodów jest podłączony do 3,3 V, a drugi jest podłączony do pinu czujnikowego w mikrokontrolerze, który jest również podłączony do masy przez rezystor 0,5 MOhm. Zwykle rezystancja między przewodami czujnika jest bardzo wysoka (znacznie ponad 10 MOhm), więc bolec czujnikowy jest ściągnięty do 0 V. Jednak gdy między przewodami jest woda, rezystancja spada do mniej niż 1 MOhm, a pin pomiarowy widzi jakieś napięcie (w moim przypadku około 1,5 V). Gdy ATtiny85 wykryje to napięcie na pinie czujnikowym, aktywuje MOSFET, aby zasilić brzęczyk i wysyła sygnał wybudzenia do modułu ESP8266, który jest odpowiedzialny za wysyłanie alertów (powiadomienia e-mail i push). Po minucie brzęczenia alarm jest rozbrojony i można go zresetować tylko przez wyłączenie zasilania.

To urządzenie działa z dwóch ogniw alkalicznych lub NiMH. Mikrokontroler przez większość czasu śpi, aby oszczędzać baterie, budzi się co jakiś czas, aby sprawdzić czujnik wody oraz napięcie baterii. W przypadku niskiego poziomu baterii mikrokontroler wybudza moduł ESP8266, aby wysłać ostrzeżenie o niskim stanie baterii. Po ostrzeżeniu alarm zostaje rozbrojony, aby zapobiec nadmiernemu rozładowaniu baterii.

Ponieważ moduł ESP8266 jest odpowiedzialny za wysyłanie zarówno ostrzeżeń o niskim stanie baterii, jak i o zalaniu, wymaga sygnału sterującego z ATiny85. Ze względu na ograniczoną liczbę dostępnych pinów, ten sygnał sterujący jest generowany przez ten sam pin, który odpowiada za sygnalizację LED baterii. Podczas normalnej pracy (alarm jest uzbrojony i baterie są naładowane) dioda LED miga w sposób przerywany. Po wykryciu niskiego stanu baterii dioda LED włącza się, aby dostarczyć wysoki sygnał do pinu RX modułu ESP. W przypadku wykrycia wody dioda LED baterii zgaśnie, gdy ESP8266 nie śpi.

Krok 2: Projekt i montaż

Projekt i montaż
Projekt i montaż
Projekt i montaż
Projekt i montaż
Projekt i montaż
Projekt i montaż

Zaprojektowałem układ do zbudowania na dwustronnej płytce prototypowej 4x6 cm, używając głównie części SMD 0805. Przedstawione schematy są oparte na tej konstrukcji, ale można ją łatwo dostosować do elementów przewlekanych (wskazówka: aby zminimalizować miejsce, lutuj rezystory przewlekane pionowo).

Wymagane są następujące części:

- Rezystory: 330 Ω x 1; 470 Ω x 1; 680Ω x 1; 1kΩ x 1; 10kΩ x 3; 470 kΩ x 3; - Jeden kondensator ceramiczny 10 µF - Jeden N-kanałowy MOSFET poziomu logicznego (np. RFP30N06LE lub AO3400) - Jedna czerwona i jedna żółta dioda LED (lub inne kolory, jeśli chcesz). - Dwuprzewodowe złącza śrubowe x 3 (nie są absolutnie konieczne, ale ułatwiają podłączanie i odłączanie peryferii podczas testów) - Głośny brzęczyk piezoelektryczny, dobry na 3,3 V - Mikrokontroler ATtiny85 (wersja PDIP) - 8-pinowe gniazdo PDIP dla mikrokontrolera - Moduł ESP-01 (można go zastąpić innym modułem opartym na ESP8266, ale w tym przypadku będzie dużo zmian w układzie) - Przetwornica boost 3,3 V DC-DC dostarczająca prądy 200 mA (500 mA burst) przy 2,2 V Wejście. (Polecam https://www.canton-electronics.com/power-converter… ze względu na bardzo niski prąd spoczynkowy)- Jedno 3-pinowe złącze żeńskie- Dwa 4-pinowe złącza żeńskie lub jedno złącze 2x4- Przewody stałe 22 AWG do czujnika wody - linka 22 AWG (lub inny rodzaj cienkiego drutu odsłoniętego do tworzenia śladów)

Zalecam wartości rezystorów wymienione powyżej, ale większość z nich można by zastąpić podobnymi wartościami. W zależności od rodzaju diod LED, których chcesz użyć, może być konieczne dostosowanie wartości rezystora ograniczającego prąd, aby uzyskać pożądaną jasność. MOSFET może być przewlekany lub SMT (SOT23). Tylko orientacja rezystora 330 Ohm ma wpływ na typ tranzystora MOSFET. Bezpiecznik PTC (np. o obciążalności 1 A) jest zalecany, jeśli planujesz używać tego obwodu z akumulatorami NiMH. Nie jest to jednak potrzebne przy bateriach alkalicznych. Wskazówka: części wymagane do tego alarmu można tanio kupić w serwisie eBay lub aliexpress.

Dodatkowo do zaprogramowania modułu ESP-01 potrzebna będzie płytka stykowa, kilka przewlekanych rezystorów 10k, wiele zworek męsko-męskich i żeńsko-męskich („dupont”) oraz przejściówka USB-UART.

Czujnik wody można wykonać na wiele sposobów, ale najprostszy to dwa przewody 22 AWG z odsłoniętymi końcami (długość 1 cm) oddalonymi od siebie o około 1 mm. Celem jest uzyskanie rezystancji mniejszej niż 5 MΩ między stykami czujnika, gdy obecna jest woda.

Obwód został zaprojektowany z myślą o maksymalnej oszczędności baterii. Pobiera tylko 40-60 µA w trybie monitorowania (z usuniętą diodą LED zasilania na module ESP-01). Po wyzwoleniu alarmu obwód będzie pobierał 300-500 mA (na wejściu 2,4 V) przez sekundę lub krócej, po czym prąd spadnie poniżej 180 mA. Gdy moduł ESP zakończy wysyłanie powiadomień, pobór prądu spadnie poniżej 70 mA do momentu wyłączenia się brzęczyka. Wtedy alarm sam się rozbroi, a pobór prądu będzie poniżej 30 µA. W ten sposób zestaw baterii AA będzie w stanie zasilać układ przez wiele miesięcy (prawdopodobnie ponad rok). Jeśli użyjesz innego konwertera doładowania, powiedzmy z prądem spoczynkowym 500 µA, baterie będą musiały być wymieniane znacznie częściej.

Wskazówki montażowe:

Użyj markera permanentnego, aby oznaczyć wszystkie ślady i komponenty na płycie prototypowej, aby ułatwić lutowanie. Zalecam postępowanie w następującej kolejności:

- górne diody LED SMT i izolowane mostki druciane

- MOSFET boczny od góry (uwaga: jeśli posiadasz MOSFET SOT-23, umieść go po przekątnej jak na zdjęciu. Jeśli używasz MOSFET-a przewlekanego, umieść go poziomo z bolcem bramki w pozycji I3.)

- górne części przewlekane (uwaga: brzęczyk nie jest lutowany i nie trzeba nawet montować do płytki drukowanej)

- części i ślady odwrotnej strony SMT (np. pojedyncze żyły z drutu AWG22)

Krok 3: Oprogramowanie układowe

Kod C dla ATtiny85

Main.c zawiera kod, który należy skompilować i wgrać do mikrokontrolera. Jeśli zamierzasz używać płytki Arduino jako programisty, schemat połączeń znajdziesz w tym samouczku. Musisz wykonać tylko następujące sekcje (pomiń pozostałe):

– Konfiguracja Arduino Uno jako ISP (Programowanie w systemie)

– Połączenie ATtiny85 z Arduino Uno.

Aby skompilować i wgrać oprogramowanie, będziesz potrzebować CrossPack (dla Mac OS) lub AVR toolchain (dla Windows). Aby skompilować kod, należy wykonać następujące polecenie:

avr-gcc -Os -mmcu=attiny85 -c main.c; avr-gcc -mmcu=attiny85 -o main.elf main.o; avr-objcopy -j.text -j.data -O ihex main.elf main.hex

Aby wgrać oprogramowanie, wykonaj następujące czynności:

avrdude -c arduino -p attiny85 -P /dev/cu.usbmodem1411 -b 19200 -e -U flash:w:main.hex

Zamiast "/dev/cu.usbmodem1411" prawdopodobnie będziesz musiał wstawić port szeregowy, do którego podłączone jest twoje Arduino (możesz go znaleźć w Arduino IDE: Tools Port).

Kod zawiera wiele funkcji. deep_sleep() powoduje, że mikrokontroler przechodzi w stan bardzo niskiego poboru mocy na około 8 sekund. read_volt() służy do pomiaru napięcia baterii i czujnika. Napięcie baterii jest mierzone względem wewnętrznego napięcia odniesienia (2,56 V plus lub minus kilka procent), podczas gdy napięcie czujnika jest mierzone względem Vcc = 3,3 V. Odczyty są porównywane z BATT_THRESHOLD i SENSOR_THRESHOLD zdefiniowanymi odpowiednio jako 932 i 102, co odpowiada ~2,3 i 0,3 V. Możesz zmniejszyć wartość progową baterii, aby wydłużyć żywotność baterii, ale nie jest to zalecane (szczegółowe informacje znajdują się w rozdziale Uwagi dotyczące baterii).

active_alarm() powiadamia moduł ESP o wykryciu wody i uruchamia brzęczyk. low_batt_notification() powiadamia moduł ESP, że bateria jest słaba, a także włącza brzęczyk. Jeśli nie chcesz budzić się w środku nocy, aby wymienić baterię, usuń "| 1< " w low_batt_notification().

Szkic Arduino dla ESP-01

Zdecydowałem się zaprogramować moduł ESP za pomocą Arduino HAL (skorzystaj z linku, aby uzyskać instrukcje dotyczące konfiguracji). Dodatkowo skorzystałem z dwóch bibliotek:

ESP8266 Wyślij e-mail przez Górász Péter

ESP8266 Pushover autorstwa zespołu Arduino Hannover

Pierwsza biblioteka łączy się z serwerem SMTP i wysyła alert na Twój adres e-mail. Po prostu utwórz konto Gmail dla swojego ESP i dodaj poświadczenia do kodu. Druga biblioteka wysyła powiadomienia push za pośrednictwem usługi Pushover (powiadomienia są bezpłatne, ale za instalację aplikacji na telefonie/tablecie trzeba zapłacić jednorazowo). Pobierz obie biblioteki. Umieść zawartość biblioteki Send Email w folderze szkicu (arduino utworzy ją, gdy otworzysz szkic arduino po raz pierwszy). Zainstaluj bibliotekę Pushover przez IDE (Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę. ZIP).

Aby zaprogramować moduł ESP-01 możesz postępować zgodnie z poniższym samouczkiem: https://www.allaboutcircuits.com/projects/breadbo… Nie musisz zawracać sobie głowy przelutowywaniem jednego rzędu pinów jak pokazano w poradniku - wystarczy użyć dupontu damsko-męskiego przewody do podłączenia pinów modułu do płytki stykowej. Nie zapominaj, że konwerter boost i adapter USB-UART muszą mieć wspólną masę (uwaga: możesz użyć wyjścia 3,3 V adaptera USB-UART zamiast konwertera boost, ale najprawdopodobniej nie być w stanie wyprowadzić wystarczającą ilość prądu).

Krok 4: Uwagi dotyczące baterii

Dostarczony kod oprogramowania układowego jest wstępnie skonfigurowany do wysyłania ostrzeżenia o niskim poziomie naładowania baterii i wyłączenia przy ~2,3 V. Ten próg jest oparty na założeniu, że dwa akumulatory NiMH są używane szeregowo. Nie zaleca się rozładowywania pojedynczego ogniwa NiMH poniżej 1 V. Zakładając, że oba ogniwa mają jednakową pojemność i charakterystykę rozładowania, oba zostaną odcięte przy ~1,15 V - dobrze w bezpiecznym zakresie. Jednak ogniwa NiMH, które były używane przez wiele cykli rozładowania, mają zwykle różną pojemność. Do 30% różnicy pojemności może być tolerowane, ponieważ nadal powoduje to najniższy punkt odcięcia ogniwa napięciowego około 1 V.

Chociaż możliwe jest zmniejszenie progu niskiego poziomu naładowania baterii w oprogramowaniu sprzętowym, spowoduje to usunięcie marginesu bezpieczeństwa i może spowodować nadmierne rozładowanie i uszkodzenie baterii, podczas gdy należy oczekiwać jedynie marginalnego wzrostu żywotności baterii (ogniwo NiMH jest > 85% rozładowane przy 1,15 V).

Innym czynnikiem, który należy wziąć pod uwagę, jest zdolność konwertera doładowania do zapewnienia co najmniej 3,0 V (2,5 V według niepotwierdzonych dowodów) przy prądzie szczytowym 300-500 mA na słabych akumulatorach. Niska rezystancja wewnętrzna akumulatorów NiMH powoduje jedynie znikomy spadek o 0,1 V przy prądach szczytowych, więc para ogniw NiMH rozładowanych do 2,3 V (obwód otwarty) będzie w stanie dostarczyć do przetwornicy co najmniej 2,2 V. W przypadku baterii alkalicznych sprawa jest jednak bardziej skomplikowana. Przy parze baterii AA o napięciu 2,2-2,3 V (obwód otwarty) należy spodziewać się spadku napięcia o 0,2-0,4 V przy prądach szczytowych. Chociaż sprawdziłem, że obwód działa z zalecanym konwerterem doładowania przy zaledwie 1,8 V dostarczanym przy prądach szczytowych, prawdopodobnie powoduje to chwilowy spadek napięcia wyjściowego poniżej wartości sugerowanej przez Espressiff. Tak więc próg odcięcia 2,3 V pozostawia niewielki margines bezpieczeństwa przy bateriach alkalicznych (należy pamiętać, że pomiar napięcia wykonywany przez mikrokontroler jest dokładny tylko w granicach plus-minus kilku procent). Aby mieć pewność, że moduł ESP nie będzie trzaskał przy słabych bateriach alkalicznych, zalecam zwiększenie napięcia odcięcia do 2,4 V (#define BATT_THRESHOLD 973). Przy napięciu 1,2 V (obwód otwarty) ogniwo alkaliczne jest rozładowane w około 70%, co jest tylko o 5-10 punktów procentowych niższym niż stopień rozładowania przy 1,15 V na ogniwo.

Zarówno ogniwa NiMH, jak i alkaliczne mają zalety i wady w tym zastosowaniu. Baterie alkaliczne są bezpieczniejsze (nie zapalają się w przypadku zwarcia) i mają znacznie niższy współczynnik samorozładowania. Jednak akumulatory NiMH gwarantują niezawodną pracę ESP8266 w dolnym punkcie odcięcia dzięki niskiej rezystancji wewnętrznej. Ale ostatecznie oba typy można stosować z pewnymi środkami ostrożności, więc jest to tylko kwestia osobistych preferencji.

Krok 5: Zastrzeżenie prawne

Ten obwód został zaprojektowany przez nieprofesjonalnego hobbystę wyłącznie do zastosowań hobbystycznych. Ten projekt jest udostępniany w dobrej wierze, ale bez żadnej gwarancji. Używaj go i udostępniaj innym na własne ryzyko. Odtwarzając obwód, zgadzasz się, że wynalazca nie będzie ponosić odpowiedzialności za jakiekolwiek szkody (w tym między innymi utratę majątku i obrażenia ciała), które mogą wystąpić bezpośrednio lub pośrednio w wyniku nieprawidłowego działania lub normalnego użytkowania tego obwodu. Jeśli przepisy obowiązujące w Twoim kraju unieważnią lub zabraniają zrzeczenia się odpowiedzialności, nie możesz używać tego projektu. Jeśli udostępniasz ten projekt lub zmodyfikowany obwód oparty na tym projekcie, musisz przyznać oryginalnemu wynalazcy, wskazując adres URL tej instrukcji.

Zalecana: