Autonomiczny rejestrator zamknięć bramy

Autonomiczny rejestrator zamknięć bramy

INFORMACJA: Poniższy post znajduje się w Poczekalni.

Witam,

Pewnego razu naszła mnie myśl: zmontować tani, bezprzewodowy układ, pozwalający na rejestrowanie godzin, w których została zamknięta furtka. Jak postanowiłem, tak też zrobiłem. Układ został zmontowany już ponad rok temu, i od tamtej pory działa nieprzerwanie. Pozwoliłem sobie go tutaj pokrótce opisać.

Podczas otwarcia furtki, odpowiedni czujnik rejestruje to zdarzenie, a następnie połączony z nim mikrokontroler (tu: ESP8266-01) uruchamia odpowiedni skrypt php na zewnętrznym serwerze. Zadaniem tego skryptu jest dodanie rekordu do bazy danych(MySQL) zawierającego dokładną godzinę zajścia zdarzenia. Wyniki zarejestrowanych zdarzeń są również prezentowane na stronie Internetowej. Cały układ nie wymaga zewnętrznego zasilania ani zmiany baterii, gdyż zastosowałem układ ładowania bazujący na ogniwie słonecznym.

Na początku artykułu napisałem o rejestrowaniu godziny, o której została otwarta furtka – oczywiście projekt ten można odnieść nie tylko do rejestrowania tej czynności, ale równie dobrze może to być zamykanie bramy wjazdowej, okna, czy choćby skrzynki na listy, dlatego w całym opisie będę odnosił się do różnych wersji tego projektu.

 

Co będzie potrzebne

  • ESP8266-01 – dobrze znany mikrokontroler w swojej najprostszej odsłonie
  • Akumulator 18650 – popularna „bateria” do latarek z Ali
  • TP4506 – moduł ładowarki dla akumulatorów 18650
  • mcp1700-3302e – stabilizator napięcia LDO na 3.3V
  • ogniwo fotowoltaiczne – użyłem takiego o deklarowanej mocy 1.25W i napięciu 5V
  • rezystor 10000 omów
  • kontaktron – normalnie otwarty
  • a oprócz tego  przydadzą się przewody, magnes neodymowy, szczelne pudełko(może być słoik) i klej na gorąco

Całkowity koszt budowy układu przy wykorzystaniu znanego chińskiego portalu powinien zamknąć się w kwocie mniejszej niż 30 zł.

 

Budowa układu

Połączenie wszystkich elementów zaprezentowałem na poniższym rysunku, który wykonałem w najlepszym programie do tworzenia tego typu schematów(MS Paint!). W razie jakichś wątpliwości, zamieszczam również poniżej opis słowny połączeń:

Panel słoneczny połączyłem z wejściem układu ładującego baterię, natomiast baterię połączyłem z wyjściem tegoż układu. Ujemny biegun baterii połączony jest również z pinem GND stabilizatora napięcia oraz pinem GND mikrokontrolera, natomiast dodatni biegun baterii połączony jest z pinem VIN stabilizatora. Pin VOUT stabilizatora podłączony jest do zasilania mikrokontrolera. Między piny GND oraz RESET mikrokontrolera wpiąłem rezystor, natomiast między piny RESET i VCC wpiąłem kontaktron(normalnie otwarty). Całość prezentuje poniższy rysunek:

 

 

 

Działanie układu:

 Gdy świeci słońce, jest ładowane ogniwo 18650. Ogniwo to dostarcza energię do zasilania mikrokontrolera. Podczas otwierania furtki, połączenie między pinami 7. i 8. mikrokontrolera jest zrywane(należy tak podłączyć kontaktron, aby z przyłożonym do niego magnesem przewodził prąd). Otwarcie furtki powoduje zmianę stanu na pinie RST z wysokiego(przez kontaktron nie płynie już prąd) na niski (dostarczany przez rezystor pull-down). Podając stan niski na pin RST, mikrokontroler restartuje się.

Kiedy na pinie RST przestanie być obecny stan niski (furtka zostanie ponownie zamknięta, a magnes zewrze ponownie styki kontaktronu, powodując pojawienie się stanu wysokiego na pinie RST), mikrokontroler uruchomi się i wykona wgrany na niego program.

Działanie programu wgranego na płytkę polega na połączeniu się mikrokontrolera z siecią WiFi, a następnie na odpaleniu skryptu php umieszczonego na serwerze(w moim przypadku był to serwer hostowany przez CBA). Po wykonaniu tych działań mikrokontroler przechodzi w stan uśpienia, który potrwa do ponownego otwarcia furtki.

 

Kod, serwer FTP, baza danych:

Cały kod programu mikrokontrolera, oraz wszystkie pliki potrzebne do uruchomienia projektu są dostępne w serwisie GitHub pod adresem:

https://github.com/przerek/ESP8266-rejestrator-wejsc

Na mikrokontroler należy wgrać program zawarty w pliku kod.ino

Na wybranym serwerze FTP należy utworzyć kolejne pliki w katalogu o nazwie „projekt_esp”:

  • add.php – plik jest uruchamiany podczas każdego otwarcia furtki przez mikrokontroler, a jego zadaniem jest dodanie rekordu do bazy danych, zawierającego dane o czasie, w którym nastąpiło wywołanie. Dane te pochodzą z procedury php:  getdate().
  • index.php – plik, który jest stroną startową, prezentującą dzisiejsze zebrane dane zamknięć furtki, w formie tabeli,
  • wszystko.php – plik wyświetlający wszystkie zebrane dotychczas informacje w formie tabeli,
  • histogram.php – plik prezentujący w formie graficznej ilość zamknięć furtki w poszczególnych godzinach, na przestrzeni wszystkich przeprowadzonych pomiarów,
  • polaczenie.php – plik zawierający dane dotyczące połączenia z bazą danych:

 

Modyfikacji wymagają pliki polaczenie.php (należy podać własne dane dotyczące połączenia z bazą danych MySQL), oraz kod programu na ESP8266(lina 8. oraz 18.).

 

Na koniec zostało utworzyć w bazie danych MySQL tabelę o nazwie „test”, której strukturę odzwierciedla poniższy rysunek:

Po wykonaniu tego kroku, oraz zmontowaniu wyżej przedstawionego układu, wszystko powinno działać jak należy.

Efekty:

Na poniższych zdjęciach zaprezentowałem efekty pracy:

 

Widok strony startowej, prezentującej dzisiejsze zebrane dane:

 

Widok podstrony prezentującej wszystkie zebrane dotychczas dane:

 

 

Widok podstrony prezentującej zebrane dane w formie graficznej:

 

Część zmontowanego układu, w celu zabezpieczenia zalanego klejem na gorąco:

 

 

Zmontowany układ(w szczelnym pojemniku, przykryty dla dodatkowej ochrony kubeczkiem):

 

 

Magnes na ruchomym elemencie bramy, oraz kontaktron zalany klejem na nieruchomym elemencie bramy:

 

 

 

Na poniższym rysunku zaznaczono również to, które części układu należy umieścić w szczelnej obudowie- ja użyłem słoika; które należy zamocować na nieruchomym elemencie bramy (np. słup służący jako montaż samej bramy), a które na ruchomym elemencie bramy, np. ruchomej furtce(umieszczamy tam tylko magnes).

Podsumowanie i wnioski:

Jak już napisałem we wstępnie, wszystko działa nieprzerwanie od ponad roku, bez żadnych zabiegów konserwujących z mojej strony. A to przecież najważniejsze- “ważne że działa”! Układ, a właściwie sam akumulator bez przeszkód zniósł zimę(choć nie była zbyt mroźna tego roku).

Co do samego układu, można dodać wedle uznania (lub noty katalogowej poszczególnych elementów, takich jak mikrokontroler czy przetwornica napięcia) kilka kondensatorów, których zadaniem będzie podtrzymanie ciągłości zaopatrzenia urządzeń w energię elektryczną.

Ponadto warto wspomnieć o tym, iż jako pojemnik na akumulator 18650 został użyty stary powerbank – jest to dobre rozwiązanie, gdyż w łatwy sposób umożliwia montaż akumulatora oraz połączenie go z innymi elementami układu.

Co do samego kodu użytego w tym projekcie, to nie wszystkie linie kodu są opatrzone komentarzami, gdyż po prostu nie chciało mi się tego robić :) lecz myślę, iż kod ten nie jest zbyt skomplikowany.

Co do sugestii i dalszego rozwoju, w celu bezpieczeństwa, sugerowałbym zabezpieczenie w jakiś sposób dodawania kolejnych rekordów do bazy, w taki sposób, aby nie było możliwe ich dodawanie poprzez odpalenie skryptu add.php z dowolnego urządzenia, np. z użyciem adresu MAC mikrokontrolera.

Dodatkowo warto nadmienić, iż zmieniając zmienną $ile_minut_w_przedziale w pliku histogram.php istnieje możliwość zmiany wielkości przedziałów przedstawianych na histogramie(domyślnie jest to godzina).

Bibliografia:

https://learnduino.pl/zapis-danych-za-pomoca-esp-do-bazy-danych-mysql/

https://canvasjs.com/php-charts/animated-chart/

INFORMACJA: Oceń artykuł aby pomóc mu trafić na stronę główną Majsterkowa.

UWAGA: Zaloguj się, aby móc zagłosować na ten projekt.

Ocena: 5/5 (głosów: 3)

Podobne posty

3 komentarzy do “Autonomiczny rejestrator zamknięć bramy

  • Dolutowanie takie jest wymagane w przypadku, gdy chcemy, aby ESP8266 sam się obudził po określonym czasie, tutaj natomiast mikrokontroler jest usypiany na “czas nieskończony”, i wybudzić go może tylko sygnał z zewnątrz(tu: zmiana stanu wywołanego otwarciem furtki).

    Odpowiedz
  • Czy ja dobrze widzę, że z poziomu ESP wywołujesz HTTP GET ?
    Oczywiście to działa, ale jest to antypatern – operacja GET powinna być wywoływana by “pobrać” zasób, coś co nie zmienia stanu witryny/serwera.
    W twoim przypadku powinien to być HTTP PUT lub HTTPS POST

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?