Reklama

Utrzymywanie czasu na projektach Arduino nie jest tak łatwe, jak mogłoby się wydawać: gdy nie ma połączenia z komputerem, Twoje niezasilone Arduino po prostu przestaje działać, łącznie z wewnętrznym paskiem.

Aby utrzymać Arduino w synchronizacji z otaczającym go światem, będziesz potrzebować tak zwanego „modułu zegara czasu rzeczywistego”. Oto jak użyć jednego.

Jaki jest sens zegara czasu rzeczywistego (RTC)?

Komputer najprawdopodobniej synchronizuje czas z Internetem, ale nadal ma wewnętrzny zegar, który działa nawet bez połączenia z Internetem lub zasilania. Gdy korzystasz z Arduino podłączonego do komputera, ma on dostęp do dokładnego czasu zapewnionego przez zegar systemowy. To całkiem użyteczne, ale większość projektów Arduino zaprojektowano z myślą o pracy z dala od komputera - na którym punkt, za każdym razem, gdy zasilanie zostanie odłączone lub Arduino uruchomi się ponownie, nie będzie absolutnie żadnego pojęcia o której godzinie to jest. Zegar wewnętrzny zostanie zresetowany i zacznie odliczanie od zera przy następnym uruchomieniu.

instagram viewer

Jeśli twój projekt ma coś wspólnego z potrzebowaniem czasu - na przykład mój budzik nocą i wschodem słońca Projekt Arduino Night Light i Sunrise AlarmDzisiaj wykonamy budzik o wschodzie słońca, który delikatnie i powoli obudzi cię bez uciekania się do ofensywnej maszyny hałasującej. Czytaj więcej - to z pewnością będzie problem. W tym projekcie obejdziemy ten problem, ręcznie ustawiając godziny każdej nocy w dość przybliżony sposób sposób - użytkownik naciska przycisk reset tuż przed pójściem spać, zapewniając ręczny czas synchronizacja Oczywiście nie jest to idealne rozwiązanie na długi czas.

Moduł RTC to dodatkowy kawałek obwodu, wymagający niewielkiej baterii pastylkowej, która nadal odlicza czas, nawet po wyłączeniu Arduino. Po jednorazowym ustawieniu - zachowa ten czas do końca życia baterii, zwykle dobry rok lub mniej więcej.

TinyRTC

Najpopularniejszy RTC dla Arduino nazywa się TinyRTC i można go kupić za około 5–10 USD w serwisie eBay. Najprawdopodobniej będziesz musiał dostarczyć własną baterię (nielegalne jest wysyłanie ich za granicę do wielu miejsc) i niektóre nagłówki (szpilki wsuwające się w otwory, które musisz wlutować w siebie).

To jest moduł, który mam:

moduł rtc

Ma nawet wbudowany czujnik temperatury, chociaż bateria wytrzyma dłużej, jeśli go nie używasz.

Liczba dziur w tej rzeczy wygląda dość przerażająco, ale potrzebujesz tylko czterech z nich; GND, VCC, SCL i SDA - możesz użyć odpowiednich pinów po obu stronach modułu RTC. Rozmawiasz z zegarem za pomocą Protokół I2C, co oznacza, że ​​używane są tylko dwa piny - jeden dla „zegara” (zegar danych komunikacji szeregowej, nie ma nic wspólnego z czasem) i jeden dla danych. W rzeczywistości łączysz nawet 121 urządzeń I2C na tych samych dwóch pinach - sprawdź ta strona Adafruit do wyboru innych urządzeń I2C, które można dodać, ponieważ jest ich wiele!

Pierwsze kroki

Podłącz moduł TinyRTC zgodnie z poniższym schematem - różowa linia DS nie jest potrzebna, ponieważ dotyczy to czujnika temperatury.

okablowanie

Następnie pobierz Czas i DS1307RTC biblioteki i umieść powstałe foldery w swoim /libraries teczka.

Wyjdź i uruchom ponownie środowisko Arduino, aby załadować biblioteki i przykłady.
ds1307rtc-przykładowe menu

W menu DS1307RTC znajdziesz dwa przykłady: prześlij i uruchom SetTime przykład pierwszy - ustawi RTC na prawidłowy czas. Rzeczywisty kod nie jest wart szczegółów. Po prostu wiedz, że musisz go uruchomić raz, aby wykonać początkową synchronizację czasu.

Następnie spójrz na przykładowe użycie z ReadTest.


#zawierać 
#zawierać 
#zawierać  void setup () {Serial.begin (9600); while (! Serial); // czekaj na opóźnienie szeregowe (200); Serial.println („Test odczytu DS1307RTC”); Serial.println (""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print („Ok, Time =”); print2digits (tm. Godzina); Serial.write (':'); print2digits (tm. Minuta); Serial.write (':'); print2digits (tm. Druga); Serial.print (", Date (D / M / Y) ="); Numer seryjny (tm. Dzień); Serial.write ('/'); Numer seryjny (tm. Miesiąc); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Rok)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println („DS1307 jest zatrzymany. Uruchom SetTime ”); Serial.println („przykład, aby zainicjować czas i zacząć działać.”); Serial.println (); } else {Serial.println („Błąd odczytu DS1307! Sprawdź obwód. "); Serial.println (); } opóźnienie (9000); } opóźnienie (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (number); }

Pamiętaj, że zawarliśmy również rdzeń Wire.h biblioteka - jest dostarczana z Arduino i służy do komunikacji przez I2C. Prześlij kod, otwórz konsolę szeregową przy 9600 bodów i obserwuj, a Twój Arduino wysyła bieżącą godzinę co sekundę. Cudowny!

Najważniejszym kodem w tym przykładzie jest utworzenie pliku tmElements_t tm - to jest Struktura że wypełnimy bieżący czas; i RTC.read (tm) funkcja, która pobiera aktualny czas z modułu RTC, umieszcza go w naszym tm struktury i zwraca true, jeśli wszystko poszło dobrze. Dodaj kod debugowania lub logiczny do instrukcji „if”, np. Wydrukuj czas lub zareaguj na nie.

Teraz, gdy wiesz, jak uzyskać właściwy czas z Arduino, możesz spróbować przepisać projekt alarmu wschodu słońca lub utworzyć zegar słowny LED - możliwości są nieograniczone! Co zrobisz

Kredyty obrazkowe: Snootlab Via Flickr

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.