Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Jeszcze jeden czujnik drzwi !! Cóż, motywacją do stworzenia tego czujnika było to, że wiele osób, które widziałem w Internecie, miało jedno lub drugie ograniczenie. Niektóre z celów czujnika dla mnie to:
1. Czujnik powinien być bardzo szybki – najlepiej krócej niż 5 s
2. Czujnik powinien być zasilany z akumulatora litowo-jonowego 3,7 V, ponieważ mam ich dziesiątki w pobliżu
3. Czujnik powinien działać przez wiele miesięcy na jednym ładowaniu baterii. Powinien zużywać <10uA w trybie uśpienia
4. Czujnik powinien być w stanie obudzić się w celu przesłania krytycznych danych, takich jak stan baterii, nawet gdy drzwi nie są obsługiwane przez długi czas.
5. Czujnik powinien przesyłać dane do tematu MQTT, gdy drzwi są otwarte, a także gdy drzwi są zamknięte
6. Czujnik powinien pobierać taką samą ilość energii niezależnie od stanu drzwi
Działanie czujnika:
Czujnik posiada 2 kontrolery główne. Pierwszy to malutki mikrokontroler ATiny 13A. Drugi to ESP, który zwykle jest w trybie uśpienia i budzi się tylko wtedy, gdy ATiny go włączy. Cały obwód można również wykonać za pomocą samego ESP, używając go w trybie uśpienia, ale pobierany przez niego prąd jest znacznie większy niż potrzebny do wielomiesięcznej pracy akumulatora, więc ATTiny przychodzi z pomocą. Służy tylko do budzenia się co N sekund, szukania zdarzenia drzwi lub zdarzenia kontroli stanu, jeśli takie istnieje, trzyma pin CH_PD ESP na HIGH i wysyła odpowiedni sygnał typu zdarzenia do ESP. Na tym kończy się jego rola.
Następnie ESP przejmuje kontrolę, odczytuje typ sygnału, łączy się z Wi-Fi/MQTT, publikuje wymagane komunikaty, w tym poziom naładowania baterii, a następnie wyłącza się, ustawiając pin EN z powrotem na LOW.
Używając tych układów w ten sposób, korzystam z niskiego prądu uśpienia ATtiny i zerowego prądu bezczynności ESP, gdy układ jest wyłączony przez pin CH_PD.
Kieszonkowe dzieci
Wymagania wstępne:
- Znajomość programowania ATTiny i ESP 01
- Znajomość elementów lutowniczych na PCB
ESP-01 (lub dowolny ESP)
ATTiny 13A - AVR
LDO 7333-A - Regulator niskiego spadku napięcia
Rezystory - 1K, 10K, 3K3
Kondensatory: 100 uF, 0,1 uF
Przełącznik przyciskowy, mikro włącznik/wyłącznik - (oba opcjonalne)
Dioda - IN4148 (lub dowolny odpowiednik)
Bateria litowo-jonowa
Kontaktron
Pokrowiec na to wszystko
Lutowane, PCB itp.
Krok 1: Schematy i kod źródłowy
Schemat jest taki, jak pokazano na załączonym schemacie.
Dołączyłem MOSFET kanału P dla ochrony przed odwrotną polaryzacją. Jeśli tego nie potrzebujesz, możesz to pominąć. Dowolny MOSFET kanału P z niskim Rds ON zrobi to.
Obecnie ESP nie ma możliwości OTA, ale to dla przyszłej poprawy.
Kod źródłowy inteligentny czujnik drzwi
Krok 2: Działanie obwodu
Przepływ pracy ATTiny
Magia dzieje się w tym, jak ATTiny monitoruje położenie przełącznika drzwiowego.
Normalną opcją byłoby podłączenie rezystora podciągającego do przełącznika i ciągłe monitorowanie jego stanu. Ma to wadę stałego prądu pobieranego przez rezystor podciągający. Uniknięto tego tutaj, ponieważ użyłem dwóch pinów do monitorowania przełącznika, a nie jednego. Użyłem tutaj PB3 i PB4. PB3 jest zdefiniowany jako wejście, a PB4 jako wyjście z wewnętrznym INPUT_PULLUP na PB3. Normalnie PB4 jest utrzymywany na wysokim poziomie, gdy ATtiny jest w trybie uśpienia. Zapewnia to brak przepływu prądu przez wejściowy rezystor podwyższający, niezależnie od pozycji kontaktronu. tj. Jeśli przełącznik jest zamknięty, oba PB3 i PB4 są WYSOKIE, więc nie płynie między nimi prąd. Jeśli przełącznik jest otwarty, nie ma między nimi ścieżki, a więc prąd wynosi zero. Kiedy ATtiny się budzi, zapisuje LOW na PB4, a następnie sprawdza stan PB3. Jeśli PB3 jest WYSOKI, kontaktron jest OTWARTY, w przeciwnym razie jest ZAMKNIĘTY. Następnie zapisuje z powrotem HIGH na PB4.
Komunikacja między ATtiny i ESP odbywa się za pośrednictwem dwóch pinów PB1/PB2 podłączonych do Tx/RX ESP. Zdefiniowałem sygnał jako
PB1 PB2 ====== Tx Rx
0 0 ====== WAKE_UP (Kontrola stanu zdrowia)
0 1 ====== CZUJNIK_OPEN
1 0 ====== CZUJNIK_ZAMKNIĘTY
1 1 ====== NIEUŻYWANE
Oprócz wysyłania sygnału do ESP, wysyła również impuls HIGH na PB0, który jest podłączony do pinu ESP CH_PD. To budzi ESP. Pierwszą rzeczą, którą robi ESP, aby utrzymać GPIO0 HIGH, który jest podłączony do CH_PD, zapewniając w ten sposób jego moc, nawet jeśli ATTiny zabierze PB0 HIGH. Sterowanie jest teraz z ESP, aby określić, kiedy chce się wyłączyć.
Następnie łączy się z Wi-Fi, MQTT, publikuje wiadomość i wyłącza się, pisząc LOW na GPIO0.
ESP 01 Przepływ roboczy:
Przepływ ESP jest prosty. Budzi się i odczytuje wartości pinów Tx/Rx, aby określić, jaki typ wiadomości ma zostać opublikowany. Łączy się z Wi-Fi i MQTT, wysyła wiadomość i wyłącza się.
Przed wyłączeniem ponownie sprawdza wartości pinów wejściowych, aby zobaczyć, czy zmieniły się od ostatniego odczytu. Ma to zadbać o szybkie otwieranie i zamykanie drzwi. Jeśli nie masz tego sprawdzenia, w niektórych przypadkach możesz przegapić zamknięcie drzwi, jeśli zostaną zamknięte w ciągu 5-6 sekund od otwarcia. Praktyczny scenariusz otwierania i zamykania drzwi w ciągu około 2 sekund jest dobrze uchwycony przez pętlę while, która wysyła wiadomości, dopóki bieżący stan drzwi różni się od poprzedniego. Jedyny scenariusz, który może pominąć, aby zarejestrować wszystkie zdarzenia otwarcia/zamknięcia, to sytuacja, w której drzwi są wielokrotnie otwierane/zamykane w ciągu 4-5 sekund, co jest bardzo mało prawdopodobnym przypadkiem – prawdopodobnie przypadkiem bawiącego się drzwiami dziecka.
Krok 3: Kontrola stanu
Potrzebowałem również sposobu na otrzymanie wiadomości o kontroli stanu z ESP, która wysyła również poziom naładowania baterii ESP, aby upewnić się, że czujnik działa prawidłowo bez ręcznej kontroli. W tym celu ATTiny wysyła sygnał WAKE_UP co 12 godzin. Można go skonfigurować za pomocą zmiennej WAKEUP_COUNT w kodzie ATtiny. Jest to bardzo przydatne w przypadku drzwi lub okien, które są rzadko otwierane, więc możesz nie wiedzieć, czy kiedykolwiek coś jest nie tak z czujnikiem lub jego baterią.
W przypadku, gdy nie potrzebujesz funkcji kontroli stanu, cała koncepcja korzystania z ATTiny nie jest potrzebna. W takim przypadku można znaleźć inne projekty stworzone przez ludzi, w których zasilanie do ESP jest zasilane przez MOSFET, dzięki czemu można osiągnąć zerowy pobór prądu, gdy drzwi nie są obsługiwane. Są inne rzeczy, o które należy zadbać, takie jak pobór prądu, aby był taki sam w pozycji otwartej i zamkniętej drzwi - w tym celu gdzieś widziałem projekt, który wykorzystywał 3-stanowy kontaktron zamiast zwykłego 2-stanu.
Krok 4: Pomiary mocy i żywotność baterii
Zmierzyłem pobór prądu przez obwód i trwa ~30uA podczas snu i wokół. Przechodząc przez arkusze danych ATTiny, powinno to być około 1-4 uA dla całego obwodu, w tym prądu spoczynkowego LDO, ale moje pomiary pokazują 30. MOSFET i LDO zużywają niewielki prąd.
Tak więc bateria 800 mAh powinna działać przez długi czas. Nie mam dokładnych statystyk, ale używam go na 2 moich drzwiach od ponad roku, a każda komórka 18650 z około 800 mAH w nich pozostaje przez około 5-6 miesięcy na moich głównych drzwiach, które otwierają się i zamykają o co najmniej 30 razy dziennie. Ta na drzwiach dachowych, która otwiera się tylko kilka razy w tygodniu, wytrzymuje 7-8 miesięcy.
Krok 5: Przyszłe ulepszenia
1. ESP nie potwierdza dostarczenia komunikatu MQTT. Program można ulepszyć, subskrybując temat, w którym publikuje wiadomość, aby potwierdzić dostarczenie lub bibliotekę Async MQTT można wykorzystać do opublikowania wiadomości z QoS 1.
2. Aktualizacja OTA: Kod ESP można zmodyfikować, aby odczytać temat MQTT w celu aktualizacji, a więc wejść w tryb OTA, aby otrzymać plik.
3. ESP01 można zastąpić ESP-12, aby uzyskać dostęp do większej liczby PIN-ów wejściowych, a tym samym podłączyć więcej czujników do tego samego. W takim przypadku komunikacja za pomocą metody 2 bitowej nie jest możliwa. Można to następnie ulepszyć, aby wdrożyć komunikację I2C między ATtiny i ESP. Jest to trochę skomplikowane, ale wykonalne. Mam to działające w innej konfiguracji, w której ATTiny wysyła wartości enkodera obrotowego do ESP przez linię I2C.
4. Obwód prądowy monitoruje wewnętrzne Vcc ESP. Jeśli używamy ESP12, można to zmodyfikować, aby odczytać rzeczywisty poziom naładowania akumulatora za pomocą pinu ADC.
5. W przyszłości opublikuję również modyfikację do tego, która może być używana jako samodzielny czujnik bez potrzeby stosowania MQTT lub jakiegokolwiek systemu automatyki domowej. Czujnik będzie działał samodzielnie i po uruchomieniu może nawiązać połączenie telefoniczne - oczywiście do tego potrzebne jest połączenie z Internetem.
6. A lista jest długa…
7. Odwrotna ochrona baterii - GOTOWE (rzeczywiste zdjęcia urządzenia są stare i nie odzwierciedlają MOSFET)