Zegar cyfrowy LED z bajerami – Część V: czas na bajery ;)

Zegar cyfrowy LED z bajerami – Część V: czas na bajery ;)

Po krótkiej przerwie przyszedł czas, na ostatnią już część nieco przydługiego cyklu o zegarku. Troszkę mnie poniosło i rozpisałem się o nim na 5 artykułów, a chciałbym Wam jeszcze pokazać przynajmniej jeden mój INNY projekt, wiec dziś zepnę się w sobie i postaram jak najmniej przynudzać.

Ja sam tytuł wskazuje zegar miał być z bajerami, no to będzie. Na razie mamy samą matrycę, no jak już wspomniałem w poprzednim wpisie za moment podłączymy moduł zegara czasu rzeczywistego. Mimo, że to prosty układzik, zdecydowałem się na gotowy moduł, który wygląda tak:

RTC-spod rtc-bateria

 

Opublikuj swój projekt i odbierz 50% rabatu do wykorzystania w sklepie Nettigo.pl

 

 

 

 

 

 

Drabinkę goldpinów przylutowałem sam, dlatego tak krzywo :D

Używać będziemy tylko 4 z nich:

  • SCL -> Arduino pin ANALOG5
  • SDA -> Arduino pin ANALOG4
  • GND -> Arduino GND
  • VCC -> Arduino 5V

Jak już wspominałem w poprzedniej części układ DS1307 komunikuje się ze światem przy pomocy dwukierunkowej magistrali I2C, która ze względów patentowych nazywa się w Arduino TWI (Two Wire Interface). Mamy gotową bibliotekę do komunikacji poprzez ten interfejs, która nazywa sie Wire.h. A do komunikacji z samym układem zegara wykorzystamy bibliotekę RTClib, pobraną ze strony: https://github.com/adafruit/RTClib. (Bibliotekę trzeba pobrać, i rozpakować do katalogu …/Moje Dokumenty/Arduino/libraries/ i zrestartować Arduino IDE)

No to kodujemy, czyli to co tygryski lubią najbardziej ;)

Jak widać obsługa układu zegara czasu rzeczywistego jest banalnie prosta. Myślę, że nie wymaga chyba żadnego dodatkowego omówienia. Może tylko wspomnę, że czas jest na sztywno ustawiany w trakcie kompilacji poleceniem:

Gdyby zegar się rozregulował, albo co bardziej prawdopodobne skończyła się bateryjka i będziemy zmuszeni znów ustawić prawidłowy czas – programujemy układ od nowa. Mało to wygodne – wiem, może w wersji 1.1 pomyślę o jakimś sprytnym ustawianiu czasu bez użycia komputera.

No to sprawę czasy mamy niejako z głowy, to teraz pozostał czas na tytułowe BAJERY.

Jak pewnie zauważyliście, prócz funkcji wyświetlającej godzinę, mamy także w kodzie funkcję wyświetlania daty, której do tej pory nie wykorzystaliśmy. Początkowo pomyślałem sobie, że będę wyświetlał datę co minutę na jedną sekundę, a to bez sensu. Znając życie zawsze jak chciałbym sprawdzić godzinę to akurat wyświetlałaby się data, i odwrotnie. Więc trzeba zrobić jakiś „kontroler”.

Jako że zegar ma docelowo stać na dosyć wysokim regale, przycisk też byłby mało wygodny. Sięgnąłem do „szuflad” i znalazłem:

srf05

Ultradźwiękowy czujnik odległości. Wykorzystam go sobie jako kontroler :D Wystarczy stanąć przed regałem i „pomachać do zegarka”, aby pokazał datę.

Jak to działa?

Jak prosty sonar. Po podaniu stanu wysokiego (trwającego przynajmniej 10us)  na pin oznaczony Trig  (TRIGGER), układ wystrzeliwuje przed siebie ultradźwiękową wiązkę o częstotliwości 40 kHz, po czym przełącza stan pinu ECHO na stan wysoki. Po „usłyszeniu” przez układ echa odbitego od przeszkody sygnału, stan ten przełączany jest na niski. Zatem czas trwania impulsu na wyjściu ECHO, jest proporcjonalny do odległości od przeszkody. Według danych producenta (http://www.robot-electronics.co.uk/htm/srf05tech.htm) wystarczy długość impulsu podzielić przez 58 aby otrzymać odległość w centymetrach.

Cała procedura pomiaru będzie zatem wyglądać mniej więcej tak:

Pojawiła się nam tutaj nowa funkcja:

unsigned long  pulseIn(numer_pinu, poziom_impulsu, timeout);

Funkcja zwraca w mikrosekundach długość trwania impulsu na pinie podanym jako pierwszy parametr. Drugi parametr może przyjmować wartości HIGH/LOW i mówi funkcji czy mierzymy długość trwania stanu wysokiego/niskiego. Timeout to czas (w mikrosekundach) po jakim funkcja przestaje nasłuchiwać i zwraca zero.

Dlaczego w naszym przykładzie ustawiłem timeout na 29ms? Ponieważ czujnik SFR-5 ma sprzętowy timeout po 30ms po którym sam „wygasi” wysoki sygnał na pinie ECHO, więc nie ma sensu nasłuchiwać dłużej.

Zanim przejdziemy do podłączania czujnika do zegara, jeszcze jeden „bajer”. W przepastnych czeluściach szuflad znalazłem też takie cudo, które oczywiście zaraz podłączymy do zegara:

DHT11

To czujnik temperatury i wilgotności powietrza. Kosztował jakieś 8 peelenów i niestety okazał się być nieco „niestabilny”. Czasem wariuje. Jakieś 80% czasu działa, pozostałe 20% czasu pokazuje bzdury. Może trafił mi się jakiś wadliwy. Przy okazji kolejnych zakupów wymienię na mniej chiński :D

Do jego obsługi możemy wykorzystać gotową bibliotekę DHT11.h (http://playground.arduino.cc/Main/DHT11Lib), a sama procedura obsługi jest znów niezwykle prosta. Podam najprostszy przykład:

Oczywiście, my nie będziemy odczytywać w głównej pętli loop, tylko napiszemy sobie specjalną funkcję. No to chyba najwyższy czas podłączyć bajery do Arduno i rozbudować kod o obsługę czujników:

No i mamy gotowy zegar! Efekt wygląda tak:

I w zasadzie to już prawie koniec. Tyle, że żeby postawić mój projekt w ostatecznej wersji na półce musiałbym tam wpakować moje jedyne Arduino! Co to to nie. Zatem musiałem polutować sobie osobną płytkę pod atmegę z gotowymi gniazdami na peryferia i modułem zasilania. Efekt poniżej:

plyta-glowna

plyta-spod

plyta-z-czujnikami

Jedynym wolnym prockiem jakim dysponowałem była Atmega328PU. Prawie taki sam jak w Arduino Uno. Ale okazało się, że Arduino IDE nie chciało współpracować i już przy próbie wgrania bootloadera powiedziało, że nie zgadza mu sie sygnatura układu. Znów poszukałem po internetach i okazało się, że wystarczy na chwilę podmienić w pliku avrdude.conf wpis:

na

 i wszystko elegancko się wgrywa i działa bez zarzutu. Zaprogramowałem układ, powpinałem czujniki, poskładałem całość w prowizoryczną kupkę, podłączyłem do prądu i efekt ostateczny wygląda tak:

done

GOTOWE.

Do zrobienia jeszcze:

  • wymienić czujnik temperatury na lepszy
  • jakaś zgrabniejsza obudowa
  • dodać obsługę  drugiego czujnika temperatury (zewnętrznego za okno)
  • dodać możliwość ustawianiu czasu i daty bez użycia programatora.

Gratuluję wszystkim którzy dzielnie dotrwali do końca tego cyklu. Mam nadzieję, że tych, którzy nie mieli wcześniej do czynienia z podobnymi projektami zainteresowałem i przekonałem, że nie taki diabeł straszny. A tych dla których nie było to nic nowego, zachęciłem do zrobienia ambitniejszych projektów. Dzięki za wszystkie komentarze i konstruktywną krytykę. Do znów :)

Ocena: 4.55/5 (głosów: 47)
Nettigo - patron działu Elektronika

Podobne posty

20 komentarzy do “Zegar cyfrowy LED z bajerami – Część V: czas na bajery ;)

Odpowiedz

anuluj

Zegar cyfrowy LED z bajerami – Część V: czas na bajery ;)

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?