Pomysł na ten projekt podsunął mi kolega. Poprosił o analizę problemu zliczania klientów wchodzących do sklepu.
Zaproponowałem taki projekt:
- kontaktoron reagujący na otwarcie drzwi lub tor optyczny,
- rejestracja zdarzeń w pliku na karcie SD,
- rejestracja kazdego zdarzenia wraz z godziną – uzycie RTC
- zasilanie całości z baterii – dzięki temu będzie mniej przewodów.
W czasie opracowywania doszły dodatkowe uwagi:
- ostrzeżenie o słabej baterii,
- alarm otwartych drzwi (dla wersji z kontaktronem – po minucie sygnał dźwiękowy).
W efekcie powyższych założeń i ustaleń powstało takie oto urządzenie.
Wykonane zostały trzy egzemplarze. Są właściwie identyczne – różnią się mało istotnymi szczegółami (np. jeden nie ma wlutowanych goldpinów do podłączenia programatora, inny kolor diod).
W urządzeniu wykorzystałem gotowy moduł kart micro SD i gotowy moduł RTC z układem DS3231. Oszczedza to nieco pracy a koszt przy tak małej liczbie egzemplarzy jest własciwie zaden. Zarówno moduł karty jak i zegara ma podciągnięte linie danych do Vcc rezystorami 10K – zatem brak ich na schemacie (dla karty SD nie jest to konieczne).
Jako mikrokontroler jest użyta Atmega328P – dysponuje na tyle dużą ilością pamięci Flash i RAM, ze bez problemu obsługuje system plików FAT (wykorzystałem FatFS).
Na płytce jest jeszcze buzer piezo wraz ze zworką, która można go odłączyć całkowicie.
Jest też układ do pomiaru napięcia baterii. Wykorzystywany jest w tym celu przetwornik ADC wraz z wewnętrznym źródłem odniesienia 1,1V. Układ pomiarowy składa się z dzielnika napięcia (2:1) oraz tranzystora, który go załącza (w tej roli BC547). Dzielnik jest załączany do masy na czas pomiaru, aby nie pobierał prądu, kiedy nie jest potrzebny. Przypominam, że układ jest zasilany z baterii.
Układ projektowany jest do zasilania z dwóch baterii AA. Zatem wymagało to podejścia minimalizującego pobór prądu. W oczekiwaniu na zdarzenie procesor jest w trybie Power Down i wybudzany jest przerwaniem (Pin change interrupt). W tym stanie cały układ pobiera 160-170uA. Szczegółowy pomiar wykazuje, że około 95% z tego jest pobieranych mniej więcej po równo przez kartę SD i układ DS3231. Problemem jest realizacja wejścia kontaktronu. Jest ono podciągnięte do zasilania przez rezystor 10k. Przy zastosowaniu kontaktronu normalnie otwartego (większość dostępnych) dochodzi ok. 0,3mA. Sumarycznie wychodzi zatem niecałe 0,5mA. Praktyczny test wykaże, na ile realnie wystarczy komplet baterii, zakładam, że będzie to co najmniej kilka tygodni.
W programie napisanym w C wykorzystałem biblioteki FatFS. Wykonałem w nich dwie przeróbki – do obsługi karty SD wykorzystałem sprzętowy interfejs SPI. Druga zmiana – data modyfikacji pliku pobierana jest z układu Ds3231 – co jest zupełnie logicznym rozwiązaniem, wziąwszy pod uwagę dostępność aktualnego czasu. Zegar jest ustawiany przy pomocy specjalnego pliku konfiguracyjnego, który należy umieścić na karcie pamięci.
W czasie komunikacji z kartą uSD zegar procesora wynosi 8MHz – w pozostałym czasie zegar jest zwalniany do 1MHz (bit CKDIV8). Źródło – oscylator wewnętrzny RC.
Do wpisu załączam instrukcję obsługi urządzenia – są tam szczegóły dotyczące konfiguracji.
Załączam także próbkę logu. Zawiera on godzinę zdarzenia, temperaturę otoczenia (układ DS3231 posiada wbudowany niezły termometr), co 10. pomiar zawiera również pomierzone napięcie baterii.
Układ posiada alarm otwartych drzwi (sygnał dźwiękowy po minucie). Posiada alarm rozładowanych baterii.
Cały czas trwają testy układu, zapewne nie obędzie się bez drobnych poprawek kodu.
Udostępniam projekt płytki i schemat w KiCadzie. Nie będzie tym razem kodu, ale chętnie odpowiem na pytania o sposób realizacji (projekt wg mojego rozeznania ma potencjał komercyjny i nie chcę podrzucać komuś gotowca). Dodatkowo instrukcja i próbka logu.
O projekcie można poczytać również na
mojej stronie:
Jeszcze jeden obrazek:


Zaproponowałem taki projekt:
- kontaktoron reagujący na otwarcie drzwi lub tor optyczny,
- rejestracja zdarzeń w pliku na karcie SD,
- rejestracja kazdego zdarzenia wraz z godziną – uzycie RTC
- zasilanie całości z baterii – dzięki temu będzie mniej przewodów.
W czasie opracowywania doszły dodatkowe uwagi:
- ostrzeżenie o słabej baterii,
- alarm otwartych drzwi (dla wersji z kontaktronem – po minucie sygnał dźwiękowy).
W efekcie powyższych założeń i ustaleń powstało takie oto urządzenie.
Wykonane zostały trzy egzemplarze. Są właściwie identyczne – różnią się mało istotnymi szczegółami (np. jeden nie ma wlutowanych goldpinów do podłączenia programatora, inny kolor diod).
W urządzeniu wykorzystałem gotowy moduł kart micro SD i gotowy moduł RTC z układem DS3231. Oszczedza to nieco pracy a koszt przy tak małej liczbie egzemplarzy jest własciwie zaden. Zarówno moduł karty jak i zegara ma podciągnięte linie danych do Vcc rezystorami 10K – zatem brak ich na schemacie (dla karty SD nie jest to konieczne).
Jako mikrokontroler jest użyta Atmega328P – dysponuje na tyle dużą ilością pamięci Flash i RAM, ze bez problemu obsługuje system plików FAT (wykorzystałem FatFS).
Na płytce jest jeszcze buzer piezo wraz ze zworką, która można go odłączyć całkowicie.
Jest też układ do pomiaru napięcia baterii. Wykorzystywany jest w tym celu przetwornik ADC wraz z wewnętrznym źródłem odniesienia 1,1V. Układ pomiarowy składa się z dzielnika napięcia (2:1) oraz tranzystora, który go załącza (w tej roli BC547). Dzielnik jest załączany do masy na czas pomiaru, aby nie pobierał prądu, kiedy nie jest potrzebny. Przypominam, że układ jest zasilany z baterii.

Układ projektowany jest do zasilania z dwóch baterii AA. Zatem wymagało to podejścia minimalizującego pobór prądu. W oczekiwaniu na zdarzenie procesor jest w trybie Power Down i wybudzany jest przerwaniem (Pin change interrupt). W tym stanie cały układ pobiera 160-170uA. Szczegółowy pomiar wykazuje, że około 95% z tego jest pobieranych mniej więcej po równo przez kartę SD i układ DS3231. Problemem jest realizacja wejścia kontaktronu. Jest ono podciągnięte do zasilania przez rezystor 10k. Przy zastosowaniu kontaktronu normalnie otwartego (większość dostępnych) dochodzi ok. 0,3mA. Sumarycznie wychodzi zatem niecałe 0,5mA. Praktyczny test wykaże, na ile realnie wystarczy komplet baterii, zakładam, że będzie to co najmniej kilka tygodni.
W programie napisanym w C wykorzystałem biblioteki FatFS. Wykonałem w nich dwie przeróbki – do obsługi karty SD wykorzystałem sprzętowy interfejs SPI. Druga zmiana – data modyfikacji pliku pobierana jest z układu Ds3231 – co jest zupełnie logicznym rozwiązaniem, wziąwszy pod uwagę dostępność aktualnego czasu. Zegar jest ustawiany przy pomocy specjalnego pliku konfiguracyjnego, który należy umieścić na karcie pamięci.
W czasie komunikacji z kartą uSD zegar procesora wynosi 8MHz – w pozostałym czasie zegar jest zwalniany do 1MHz (bit CKDIV8). Źródło – oscylator wewnętrzny RC.
Do wpisu załączam instrukcję obsługi urządzenia – są tam szczegóły dotyczące konfiguracji.
Załączam także próbkę logu. Zawiera on godzinę zdarzenia, temperaturę otoczenia (układ DS3231 posiada wbudowany niezły termometr), co 10. pomiar zawiera również pomierzone napięcie baterii.
Układ posiada alarm otwartych drzwi (sygnał dźwiękowy po minucie). Posiada alarm rozładowanych baterii.
Cały czas trwają testy układu, zapewne nie obędzie się bez drobnych poprawek kodu.
Udostępniam projekt płytki i schemat w KiCadzie. Nie będzie tym razem kodu, ale chętnie odpowiem na pytania o sposób realizacji (projekt wg mojego rozeznania ma potencjał komercyjny i nie chcę podrzucać komuś gotowca). Dodatkowo instrukcja i próbka logu.
O projekcie można poczytać również na
mojej stronie:
Jeszcze jeden obrazek:

Cool? Ranking DIY