Spisu treści:

Zasilany bateryjnie czujnik drzwiowy z integracją automatyki domowej, WiFi i ESP-NOW: 5 kroków (ze zdjęciami)
Zasilany bateryjnie czujnik drzwiowy z integracją automatyki domowej, WiFi i ESP-NOW: 5 kroków (ze zdjęciami)

Wideo: Zasilany bateryjnie czujnik drzwiowy z integracją automatyki domowej, WiFi i ESP-NOW: 5 kroków (ze zdjęciami)

Wideo: Zasilany bateryjnie czujnik drzwiowy z integracją automatyki domowej, WiFi i ESP-NOW: 5 kroków (ze zdjęciami)
Wideo: Jak zrobić z dzwonka standardowego Dzwonek Smart 2024, Listopad
Anonim
Image
Image

W tej instrukcji pokazuję, jak zrobiłem czujnik drzwi zasilany bateryjnie z integracją automatyki domowej. Widziałem inne fajne czujniki i systemy alarmowe, ale sam chciałem taki zrobić.

Moje cele:

  • Czujnik, który szybko wykrywa i zgłasza otwarcie drzwi (<5 sekund)
  • Czujnik wykrywający zamknięcie drzwi
  • Czujnik, który jest zasilany bateryjnie i działa przez kilka miesięcy na baterii

Sprzęt i oprogramowanie są inspirowane

  • Trigboard Kevina Darraha (TPL5111 i TPS73733).
  • Ten film

Zrobiłem czujnik do drzwi wejściowych i drzwi tylnych. Jedyną różnicą jest pozycja diody i zewnętrzny wyłącznik zasilania (na czujniku backdoora).

Zrobiłem kilka ulepszeń podczas rozwoju sprzętu i oprogramowania, co widać na zdjęciach.

Kieszonkowe dzieci

Kupiłem komponenty elektroniczne od Aliexpressa, główne części:

  • Akumulator LiPo
  • TPS73733 LDO
  • TPL5111
  • Kontaktron
  • Mosfet z kanałem P: IRLML6401TRPBF
  • Magnes
  • Płyta adaptera PCB do elementów SMD i innych.

Krok 1: Sprzęt - obwód

Sprzęt - obwód
Sprzęt - obwód
Sprzęt - obwód
Sprzęt - obwód
Sprzęt - obwód
Sprzęt - obwód

Zobacz załączone schematy obwodu. Przylutowałem części SMD do płytki PCB adaptera i przylutowałem wszystkie komponenty do dwustronnej płytki perf. Podłączyłem ESP-01 za pomocą żeńskich nagłówków, więc mogłem go usunąć, aby zaprogramować go za pomocą adaptera pokazanego w kroku 3 tej instrukcji.

Obwód działa w następujący sposób:

  • Gdy drzwi są otwarte, TPL5111 otrzymuje strzał w pin DELAY/M_DRV i włącza TPS73733 LDO, który zasila ESP-01. W przypadku tej operacji EN/ONE_SHOT musi być wyciągnięty nisko, patrz arkusz danych TPL5111.
  • Po uruchomieniu programu (patrz krok Oprogramowanie), ESP-01 wysyła sygnał Done do TPL5111, który następnie wyłącza TPS73733, co skutkuje bardzo niskim stanem poboru mocy dla TPL5111 i TPS73733.

Używam kontaktronów z połączeniami NO i NC. Podłączyłem przewód NC, ponieważ kontaktron musi zamykać obwód, gdy magnes jest wyjęty (drzwiczki otwarte) i otwierać się, gdy magnes jest blisko (drzwiczki zamknięte).

Do czujnika backdoora dodałem trochę kondensatorów i rezystorów, gdy odkryłem pewne niestabilności, jednak niestabilność była spowodowana przez oprogramowanie (esp_now_init), jak odkryłem później.

Krok 2: Sprzęt - obudowa

Sprzęt - obudowa
Sprzęt - obudowa
Sprzęt - obudowa
Sprzęt - obudowa
Sprzęt - obudowa
Sprzęt - obudowa

Zaprojektowałem obudowę w Autodesk Fusion360, zainspirowany tym filmem przez „faceta ze szwajcarskim akcentem”.

Pliki STL z trzech części:

  • Skrzynka
  • Pokrywa
  • Uchwyt magnetyczny

są publikowane na mojej stronie Thingiverse.

Krok 3: Oprogramowanie

Oprogramowanie
Oprogramowanie

Program jest na moim Github.

Przebieg programu pokazano na rysunku. Zobacz moje inne Instructable, aby dowiedzieć się, jak korzystam z ESP-NOW.

Gdy moduł jest włączony, najpierw próbuje wysłać komunikat „OPEN” przez ESP-NOW. Jeśli to się nie powiedzie, przełącza się na połączenie Wi-Fi i MQTT.

Dowiedziałem się, że przynajmniej w mojej konfiguracji komunikat „ZAMKNIĘTY” nie został pomyślnie wysłany przez ESP-NOW, więc usunąłem to z programu i używam tylko WiFi i MQTT.

W czasie, gdy drzwi są otwarte i moduł czeka na zamknięcie drzwi, wykorzystuje ten czas na połączenie z WiFi i MQTT, więc gdy drzwi są zamknięte, musi tylko wysłać zmierzone napięcie i komunikat ZAMKNIĘTE, a następnie bezpośrednio idzie spać.

Program sprawdza, czy odbiorca odbiera zamkniętą wiadomość poprzez odsłuchanie wiadomości MQTT na odpowiedni temat.

Krok 4: Automatyka domowa i telegram

Automatyka domowa i telegram
Automatyka domowa i telegram
Automatyka domowa i telegram
Automatyka domowa i telegram
Automatyka domowa i telegram
Automatyka domowa i telegram

Moje czujniki drzwiowe komunikują się z moją automatyką domową Openhab na moim Raspberry Pi Zero.

Główne zastosowania:

  • Odczytaj stan drzwi: OTWARTE lub ZAMKNIĘTE.
  • Alarmuj mnie za pomocą telegramu, jeśli drzwi są otwarte (jeśli włączony jest alarm lub funkcja monitorowania).
  • Przeczytaj, kiedy ostatnio otwierano lub zamykano drzwi.
  • Policz liczbę otwarć, które czujnik drzwi może obsłużyć, zanim bateria się wyczerpie.

Na przykład, jeśli jesteśmy na wakacjach, a sąsiad przyjdzie podlać rośliny, dostaję wiadomość. Zobacz wideo we wstępie.

Moje elementy Openhab, zasady i pliki map witryn znajdują się na moim Github. W tych plikach można również zobaczyć mój czujnik drzwi szopy, który wykorzystuje zwykły przewodowy kontaktron i mały stykowy (końcowy) wyłącznik z drukarki 3D w otworze zamka (patrz zdjęcia).

Jak korzystać z akcji Telegram w Openhab, opisano tutaj.

Krok 5: Ulepszenia i dalsze ulepszenia

Ulepszenia i dalsze ulepszenia
Ulepszenia i dalsze ulepszenia
Ulepszenia i dalsze ulepszenia
Ulepszenia i dalsze ulepszenia

W ostatnich miesiącach dokonałem następującej poprawy.

Obsługuj długie otwarcia drzwi za pomocą samoczynnie przełączającego się sygnału impulsowego

Latem zostawiamy otwarte tylne drzwi na kilka godzin, kiedy jesteśmy w domu. Działający ESP-01 z połączeniem Wi-Fi niepotrzebnie rozładowałby baterię. Dlatego dołączyłem włącznik/wyłącznik, aby móc wyłączyć moduł w takich sytuacjach.

Czasami jednak skutkowało to trwale wyłączonym modułem (kiedy zapomniałem go włączyć) i rozładowaną baterią po kilku popołudniach przy otwartych drzwiach i uruchomionym module (kiedy zapomniałem go wyłączyć).

Dlatego chciałem mieć możliwość wyłączenia modułu za pomocą oprogramowania po tym, jak moduł był włączony przez określony czas (1 minuta).

Jednak tam, gdzie impuls „DONE” ESP-01 wyłączył TPL5111, gdy drzwi były zamknięte, dowiedziałem się, że TPL5111 nie został wyłączony przez impuls „DONE”, podczas gdy pin DELAY/M_DRV był WYSOKI. Ten WYSOKI sygnał na pinie DELAY/M_DRV spowodowany był otwartymi drzwiczkami i stykiem NC kontaktronu podłączonego do napięcia akumulatora.

Tak więc sygnał do pinu DELAY/M_DRV nie powinien być ciągle wysoki, ale powinien być impulsowy. W arkuszu danych TPL5111 można znaleźć, że powinien to być impuls > 20 ms. Ten samoprzełączający się sygnał wykonałem przez mosfet z kanałem P, kondensator i rezystor 10K i 300K, patrz dołączony schemat.

Działa w następujący sposób:

  • Jeśli styk NC kontaktronu jest zamknięty, bramka jest w stanie LOW, a Mosfet jest włączony, co skutkuje sygnałem HIGH na pinie DELAY/M_DRV, który aktywuje moduł.
  • Kondensator jest szybko ładowany, co powoduje wzrost napięcia na bramce.
  • Po około 20 ms napięcie na bramce wynosi 97% napięcia akumulatora (300K/(300K+10K), które jest WYSOKIE, a Mosfet jest wyłączony, co skutkuje sygnałem LOW na pinie DELAY/M_DRV.
  • Gdy pin DELAY/M_DRV jest w stanie LOW, sygnał DONE ESP-01 powoduje wyłączenie modułu.

Jest to zaimplementowane w oprogramowaniu; pętla while nie tylko sprawdza, czy drzwi są nadal otwarte, ale także sprawdza, czy moduł nie jest włączony zbyt długo. Włączona zbyt długo publikuje wartość NULL (niezdefiniowany stan drzwi). W tym przypadku nie wiem, czy drzwi są otwarte, czy zamknięte i nie osiągam wszystkich celów wymienionych we wstępie, ale żywotność baterii jest ważniejsza i najczęściej otwieramy drzwi ponownie później tego samego dnia, co skutkuje potwierdzonym stanem zamkniętym drzwi.

Ważne jest, aby użyć Mosfeta z kanałem P, który jest odpowiedni dla stosowanego tutaj zakresu napięcia. Mosfet musi być całkowicie włączony przy VGS około -3,8 V i całkowicie wyłączony przy VGS około -0,2 V. Wypróbowałem kilka Mosfetów i dowiedziałem się, że IRLML6401TRPBF działa dobrze w tym celu w połączeniu z rezystorami 10K i 300K. Kondensator 1 uF działa dobrze, aby uzyskać długość impulsu około 20 ms. Większy kondensator powoduje dłuższy impuls, który nie jest konieczny, ponieważ TPL5111 został aktywowany. Do sprawdzenia napięć i długości impulsów użyłem mojego oscyloskopu DSO150.

Planowana poprawa: aktualizacja OTA

Planuję włączyć aktualizację OTA za pomocą poniższej procedury, która jest już częściowo zawarta w obecnym oprogramowaniu

  • Za pośrednictwem Openhab z NodeRed publikuję zachowaną wiadomość 'aktualizacji' i 'temat aktualizacji'.
  • Jeśli moduł jest włączony i połączony z serwerem MQTT oraz subskrybowany w 'temacie aktualizacji', otrzymuje wiadomość o aktualizacji.
  • Komunikat o aktualizacji uniemożliwi wyłączenie modułu i uruchomi
  • Za pośrednictwem strony internetowej HTTPUpdateServer można zaktualizować oprogramowanie.
  • Za pośrednictwem Openhab z NodeRed publikuję zachowaną „pustą” wiadomość i „aktualizację tematu”.

Planowana poprawa: wyłączenie sprzętu po określonym czasie

W obecnym schemacie używam rezystora 200K pomiędzy DELAY/M_DRV i GND TPL5111. Powoduje to włączenie modułu na ponad 2 godziny (patrz 7.5.3. karty katalogowej TPL5111). Nie chcę jednak, aby moduł był tak długo włączony, bo bateria jest wtedy rozładowana. Jeśli rozwiązanie programowe (patrz wyżej) nie wyłączy modułu lub komunikat aktualizacji niezamierzony ustawi moduł w tryb aktualizacji, moduł pozostaje włączony przez długi czas.

Dlatego lepiej jest zastosować mniejszy rezystor między DELAY/M_DRV a GND TPL5111, aby moduł został wyłączony po krótkim czasie, na przykład rezystor 50K, co daje czas 7 minut.

Zalecana: