Witam,
poniższy mini-projekt powstał z inspiracji tematem kolegi 0x5261647A6975.
Założenia obejmowały:
-zrobić jakiś przydatny prezent dla dziewczyny
-przypomnieć sobie po kilku latach programowanie uC AVR
-wdrożyć się w robienie dwustronnych PCB
-zrobić coś z ultra niskim poborem prądu (zasilanie 3xAA szeregowo ma wystarczyć na długo).
Część elektroniczna
Urządzenie bazuje na dwóch PCB (4x wyświetlacz LED + płyta główna) połączonych ze sobą taśmą flex z jakiejś drukarki. Wyświetlacze to wylutowane z czegoś 7-segmentowe pojedyńcze kostki ze wspólną anodą i czerwonym filtrem do kompletu.
Płyta główna zawiera:
-enkoder obrotowy z przyciskiem, debouncing po 100nF na każdy pin
-podstawkę pod arduino mini pro
-4x mosfet typu P do sterowania multipleksowaniem LED (z odzysku)
-1x mosfet N do sterowania buzzerem z wbudowanym generatorem
Sama płytka z arduino jest właściwie tylko po to, żeby łatwo było zainstalować uC. Została ona mocno zmodyfikowana, wyrzucone wszystkie zbędne elementy jak LED'y, stabilizator, kwarc wymieniony na zegarkowy 32768Hz (+ przestawione fusebity). Użyte są dwa sprzętowe timery, jeden zlicza sekundy, drugi multipleksuje LEDy. Enkoder obsługiwany jest przez przerwania PCINT, ponieważ zwykłe INT0,1 znajdowały się w porcie do obsługi 8-śmiu segmentów LED. Mosfety mają po dwa rezystory - ograniczający prąd bramki + rozładowujący bramkę. Budowa urządzenia jest w sumie tak prosta, że schemat nie powstał, wystarczył projekt płytki, który został zrobiony w programie DIPtrace. Żeby zgrać ze sobą obie warstwy sklejałem z papieru kredowego "koperty" do wsunięcia w nie płytki, a dopasowanie wyglądało tak, że postawiłem do góry nogami naczynie żaroodporne, w którym znajdowała się latarka. Zakres zasilania to 3-5V, czyli idealnie na 3 baterie paluszki w całym ich cyklu zycia.
Część software'owa
Kod napisany w MKclipse. Żeby przypomnieć sobie C, na początku własnoręcznie najlepiej jak umiałem, potem zasięgnąłem internetu żeby zoptymalizować go i zapożyczyć niektóre fragmenty z innych konstrukcji.
Główne bloki kodu to:
-usypianie uC do trybu Power-Down (0,1uA @ 4,5V) i potem budzenie
-wyłącznie nieużywanych części sprzętowych w PRR (power reduction register)
-podciągnięcie nieużywanych pinów do pullupów
-obsługa enkodera w przerwaniu, które ustawia "flagi" obsługiwane w pętli głównej
-multipleksowanie LED i odliczanie czasu dzięki przerwaniom od timerów
-prosty alarm na "delay'ach" żeby już nie używac trzeciego timera
Obsługa jest banalnie prosta. Wciśnięcie enkodera budzi urządzenie, obroty zmieniają nastawę czasu. W zakresie <10min krok jest co 30sek, >10min co 1min. Wciśnięcie enkodera startuje odliczanie. W trakcie można zwiększać/zmniejszać nastawę bez przerywania odliczania. Wciśnięcie enkodera w trakcie odliczania wyłącza urządzenie i zeruje licznik. Jeżeli odliczanie dojdzie do 0, to rozpoczyna się optyczno-dźwiękowy alarm, który po kilku sekundach sam zamilknie usypiając urządzenie, lub można go przerwać wciskając enkoder.
Podczas kręcenia gałką można zobaczyć delikatne "glicze" na LED, przez to, że uC jest tak wolno taktowany, ale to nie przeszkadza.
I teraz PROTIP - długo walczyłem czemu w losowych momentach przejścia do stanu uśpienia uC zamiast 0,1uA pobierał aż 227uA. Doszedłem w końcu do przyczyny, którą było to, że piny wejściowe obsługujące gałkę zostawały w sleepie podciągnięte do pullupów. Czasem enkoder zostawał w pozycji "zwarte do VCC", a czasem "zwarte do GND". Wpadłem na to, żeby przed uśpieniem sprawdzać w jakim stanie są wejścia i ustawiać pullup lub nie. To był dobry wybór i teraz zawsze pobór prądu jest znikomy. W trakcie wybudzenia działa BOD 2,7V, który w uśpieniu jest wyłączany.
Część mechaniczna
Obudowa wykonana z użyciem wkrętarki, ręcznej piłki do metalu, papieru ściernego, kleju wikol i epoksydowego najlepiej jak umiałem (co nie znaczy, że dobrze). Wszystko zrobione z pociętego kawałka sklejki. Obudowa jest dwuczęściowa: przód+góra oraz reszta. Po wykręceniu czterech śrubek można wymienić baterie. Gałka to dwa kawałki sklejki wycięte otwornicą, nabite na chwilę na wkrętarkę, przeszlifowane papierem ściernym i sklejone wikolem. Ostre krawędzie samej obudowy też przeszlifowane. Całość na koniec pobejcowana 2 warstwami. Na spód naklejone gumowe nóżki, i zamontowany buzzer w dolnej ściance. Baterie i buzzer podłączone przez goldpiny.
Na koniec filmik z działania (przyśpieszony w niektórych momentach). Zakres nastawy to 30sek-99min i jest dokładny co do sekundy na maksymalnym ustawieniu.
W załączniku dodaję:
-program w C
-płytki w formacie DIPtrace
-płytki w formacie BMP
Pozdrawiam
Fajne? Ranking DIY