Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Licznik z rejestratorem na karcie SD

Limonit 20 Kwi 2015 14:00 7569 17
  • Pomysł na ten projekt podsunął mi kolega. Poprosił o analizę problemu zliczania klientów wchodzących do sklepu.

    Licznik z rejestratorem na karcie SD

    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.

    Licznik z rejestratorem na karcie SD



    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:
    Licznik z rejestratorem na karcie SD


    Fajne!
  • #2 20 Kwi 2015 23:17
    anu
    Poziom 17  

    Witam! Mała, ale fajna rzecz. Mam pytanie: czy i jak został rozwiązany problem ograniczonej ilości liczby cykli zapisu na karcie SD?

  • #3 20 Kwi 2015 23:33
    Limonit
    Poziom 13  

    Dzięki.
    Ciekawe pytanie - ze strony urządzenia brak takiego rozwiązania.
    O ile mi wiadomo wiele kart ma wbudowany wear leveling i zakładam, że to wystarczy.
    Mamy jak na razie zwykłe karty, chyba san disk 2GB i praktyka pokaże ile da radę wytrzymać.

  • #4 21 Kwi 2015 02:42
    anu
    Poziom 17  

    Pierwsze małe karty pamięci chyba nie miały tego, ale ręki sobie uciąć nie dam.

    Przy wielokrotnym zapisie masz 2 poziomy problemu:
    - wielokrotny zapis tego samego sektora dla każdej nowej linijki tekstu;
    - aktualizacja FAT.

    Można kombinować z trzymaniem tego w pamięci, ale jest wtedy problem bezpieczeństwa.

    Projekt OK. Sam coś podobnego potrzebuję, tyle że na więcej wejść. Ja swoje rzeczy zawsze pisałem w ASM, więc pewne sprawy związane z C (np. brak widocznej kontroli nad drobnymi szczegółami) mnie nurtują niesamowicie. Ale to nie ten czas jeszcze... :)

    Ciekawi mnie też, czy ten RTC daje radę, czy trzeba go "kalibrować" laptopem i programatorem co tydzień? :D

  • #5 21 Kwi 2015 07:19
    gdkj
    Poziom 26  

    W następnej edycji może jakiś eprom plus bezpośrednia komunikacja z komputerem ? (np.uart,wifi,etc)
    A w komputerze aplikacja do robienia statystyk połączona z programem magazynowym i załoga sklepu przeszczęśliwa, we wtorki wystawiamy majtki a środy papierosy... ;)
    Pozdrawiam.
    PS. Jeżeli są wątpliwości do do wytrzymałości karty to nie lepiej zrobić na karcie zapis raz na jakiś czas ? Ja kiedyś robiłem moduł do szafy grającej to dane z dnia procek zapisywał do pamięci przy wyłączaniu szafy. Teoretycznie dało mi to 100 tyś, dni.
    Prędzej szafa się rozpadnie...

  • #6 21 Kwi 2015 09:39
    Limonit
    Poziom 13  

    Kombinowałem, zeby zrobić w pamięci procka bufor i zapisywać np co 10-20 zdarzeń na kartę, teoretycznie powinno to wydłuzyć tylokrotnie jej zywotność. Jeśli bedzie problem ze zbyt szybko padającymi kartami, na pewno dorobię takie rozwiązanie.
    Tak swoją drogą - np tego typu karty w wideorejestratorach samochodowych - nie maja lekkiego życia. Może ktos się orientuje, ile wytrzymują.

    Rozważałem zastosowanie "autorskiego" interfejsu do komputera (własnie jakiś UART albo transmisję bezprzewodową), ale jednak to wymaga aplikacji po drugiej stronie. Jednak dla uzytkownika karta z plikiem csv jest chyba najwygodniejsza. Nie ma problemu czy jest to Windows, Linux, MacOS. Byle jaki PC z byle jakim arkuszem kalkulacyjnym wystarczy żeby obejrzec sobie logi, zrobić statystyki.

    Dodatkową zaletą użycia karty w roli pamięci nieulotnej jest to, że jej wymiana w razie awarii w zasadzie nie wymaga wysiłku a i cena tez raczej nie jest problemem.

  • #8 21 Kwi 2015 12:12
    scooba
    Poziom 15  

    Super pomysl, pokusilbym sie tylko o normalne zasilanie , chyba , ze urzadzenie ma byc mobilne, wypozyczane do sklepow.
    Bardzo podoba mi sie pomysl wiazki na wysokosci np. 1metra.
    Ograniczanie sie z zapasem energi urzadzenia wydaje mi sie dyskfalifikowac je jako profesjonalne, oczywiscie to jest moja subiektywna ocena.
    Sam pomysl oraz projekt oczywiscie nie moge ocenic inaczej jak tylko na plus. A moja subiektywna ocena wynika tylko i wylacznie z mojego maloekologicznego widzimisie.
    Piszac to ,zastanawiam sie .. Skoro ma to pracowac na baterii, to rownie dobrze moze miec jakies male ogniwo fotowoltaiczne, wszak w sklepie jest przewaznie sporo swiatla i zamiast baterii siedzielby aku doladowywany w czasie pracy sklepu. A jak w sklepie ciemno w nocy przechodzi w stan uspienia. Pozdrawiam

  • #9 21 Kwi 2015 12:44
    Limonit
    Poziom 13  

    Zasilanie fotowoltaiczne - powinno być wykonalne w 100%, ilość energii wymagana przez urzadzenie jest znikoma.
    Do podtrzymania w okresie ciemności wystarczyłby nawet (super)kondensator ~1F.
    Zasialnie z baterii moim zdaniem upraszcza montaż, nie trzeba kombinować z przewodami.

    W jednym z urzadzeń kolega ma zamiar użyć toru optycznego i z racji, że taka fotokomórka wymaga juz zasilania sieciowego, sam rejestrator zostanie równiez podłaczony niejako przy okazji. W ogólnosci nie jest to zaden problem.

    Odnośnie dokładności DS3231 - padło takie pytanie. Teoretycznie bardzo dobra, praktycznie za krótko mam te układy, żeby powiedzieć. Tutaj odsyłam do DS - prawdopodobnie w okolicach kwoty kilka-kilkanascie zł nie będzie nic lepszego.
    Sam moduł RTC ma swoje podtrzymanie bateryjką CR1220, która powinna starczyć na długie lata.

  • #10 21 Kwi 2015 12:47
    LA72
    Poziom 39  

    Limonit napisał:
    Sam moduł RTC ma swoje podtrzymanie bateryjką CR1220, która powinna starczyć na długie lata.


    Myślałem o podtrzymywaniu zasilania dla uC. Miałbyś wtedy możliwość wykonywania wpisów dna kartę pamięci co jakiś czas.

  • #11 21 Kwi 2015 12:57
    Limonit
    Poziom 13  

    LA72 napisał:
    Limonit napisał:
    Sam moduł RTC ma swoje podtrzymanie bateryjką CR1220, która powinna starczyć na długie lata.


    Myślałem o podtrzymywaniu zasilania dla uC. Miałbyś wtedy możliwość wykonywania wpisów dna kartę pamięci co jakiś czas.


    Zrozumiałem :)

    Ale skoro całość jest zasilana z baterii, to jak jeszcze podtrzymywać :)
    Procek monitoruje stan baterii - programowa realizacja zrzutu bufora kiedy bateria się wyczerpuje powinna wystarczyć.
    Atmega328P bedzie pracować do napięcia 1,8V, pierwsze odmówią współpracy karta i układ RTC, zatem kiedy napięcie spada w okolice minimum, procesor da radę bezpiecznie wyłączyc całość (tak to jest zresztą zrobione).

  • #12 21 Kwi 2015 16:00
    noel200
    Poziom 22  

    Mam taki moduł rtc na DS3231 i drugi podobny. Oba pracują nieprzerwanie kilka miesięcy i czas względem aktualizowanego czasu w PC rozjechał się jedynie kilka sekund, więc są bardzo dokładne.
    Ciekawe urządzenie. Podoba mi się. Ile czasu zajmuje zapis jednej linijki tych danych na karcie sd dla atmega 328 pracującej na 8MHz?

  • #13 21 Kwi 2015 16:20
    Limonit
    Poziom 13  

    noel200 napisał:
    Ile czasu zajmuje zapis jednej linijki tych danych na karcie sd dla atmega 328 pracującej na 8MHz?


    Czas jest niemierzalny metodami organoleptycznymi - ułamek sekundy. Sprawdzalem na oscyloskopie, transmisja trwa tak krótko, że ciężko ją uchwycić. Ponieważ dokładny pomiar nie był mi potrzebny, odpuściłem dalszą analizę. Teraz nawet trochę szkoda, że nie zmierzyłem - nie mam już tych urzadzeń.
    Dopisanie do pliku, który zajmował już kilka MB nie trwało znacząco dłużej.

    Generalnie SPI pracuje z częstotliwością 4MHz co daje teoretycznie max 4MBit/s. ale do tego dochodzi narzut protokołu, przetwarzanie danych przez procek no i opóźnienia karty (aczkolwiek zakładam, że nie są zbyt duże).

  • #14 21 Kwi 2015 23:06
    dondu
    Moderator Mikrokontrolery Projektowanie

    Limonit napisał:
    LA72 napisał:
    Myślałem o podtrzymywaniu zasilania dla uC. Miałbyś wtedy możliwość wykonywania wpisów dna kartę pamięci co jakiś czas.


    Zrozumiałem :)

    Ale skoro całość jest zasilana z baterii, to jak jeszcze podtrzymywać :)

    ... odłączając za pomocą mikrokontrolera i tranzystora zasilanie karty SD.

    Zastosowanie drogiego RTC DS3231 jest oczywiście jakimś rozwiązaniem, ale dając tak duży mikrokontroler jak ATMEGA328, który ma możliwość podłączenia zewnętrznego kwarcu zegarkowego, nie stosowanie DS3231 znacznie zmniejszyłoby koszty projektu przy zachowaniu niewiele gorszej dokładności odmierzania czasu.

    Generalnie projekt OK :)

  • #15 22 Kwi 2015 21:19
    tank_driver
    Poziom 16  

    Problem z trwałością karty SD można rozwiązać stosując zewnętrzną pamięć RAM z podtrzymaniem bateryjnym, zapisywać w niej bieżąco i zgrywać z niej dane na kartę kilka razy dziennie + dodatkowo przyciskiem na żądanie operatora (dla przykładu przed wyciągnięciem karty z układu, tak aby dane na niej były aktualne).
    http://www.microchip.com/wwwproducts/Devices.aspx?product=23LCV512

    EDIT: możesz również skorzystać z DS3232M, który to oprócz RTC integruje w swojej strukturze 236 bajtów podtrzymywanej pamięci RAM.

  • #16 27 Kwi 2015 13:09
    hektorer
    Poziom 9  

    A czy zadbałeś o to by zbyt krótkie impulsy nie były zapisywane? Chodzi mi o sytuacje kiedy ktoś niezdecydowany ledwie uchyli drzwi, czyli nie przejdzie.

  • #17 27 Kwi 2015 14:07
    Limonit
    Poziom 13  

    Kazdy sygnał powyżej około kilkudziesięciu milisekund jest brany pod uwagę. Urzadzenie właśnie przechodzi testy - bedzie porównywane z zapisem monitoringu i jesli faktycznie pojawią się jakieś możliwości poprawy - np. własnie zmniejszenie czułości - to będe doprogramowywał.

    Co do poboru energii - odłączanie karty SD ma te wadę, że przy włączeniu przechodzi procedurę inicjująca, która trochę trwa i trochę energii potrzebuje. Niekoniecznie to musi się opłacac, aczkolwiek może.

    Dobrym pomysłem byłoby odłaczanie zasilania układu RTC. Na podtrzymaniu bateryjnym pobiera z baterii znacznie mniej prądu niż ze źródła zasilania (jesli zajmuje sie tylko odmierzaniem czasu, bez komunikacji). Mozna nawet pokusic sie o zasilanie bezpośrednio z pinu mikrokontrolera - pobór prądu jest mały.

  • #18 01 Maj 2015 17:01
    anu
    Poziom 17  

    hektorer napisał:
    A czy zadbałeś o to by zbyt krótkie impulsy nie były zapisywane? Chodzi mi o sytuacje kiedy ktoś niezdecydowany ledwie uchyli drzwi, czyli nie przejdzie.

    Dla mnie taka opcja brzmi jak bug, który może wykorzystać zaznajomiony z projektem.
    Alternatywnie można zapisywać takie zdarzenie z oznaczeniem, że tutaj ktoś normalnie otwierał, a tutaj tylko zajrzał.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo