
Joseph Goodman
0
767
104
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ć, w tym jego wewnętrzny pasek.
Aby utrzymać swoje Arduino w synchronizacji z otaczającym go światem, będziesz potrzebować tak zwanego “Moduł 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 podanego przez zegar systemowy. Jest to bardzo przydatne, ale większość projektów Arduino zaprojektowano tak, aby można było z nich korzystać z dala od komputera - w tym momencie, za każdym razem, gdy zasilanie zostanie odłączone lub Arduino zostanie zrestartowane, absolutnie nie będzie wiedział, która jest godzina. Zegar wewnętrzny zostanie zresetowany i zacznie odliczanie od zera przy następnym uruchomieniu.
Jeśli Twój projekt ma coś wspólnego z potrzebą czasu - na przykład mój nocny i wschodni budzik Projekt Arduino Lampka nocna i Alarm wschodu Słońca Projekt Arduino Lampka nocna i Alarm wschodu słońca Dzisiaj wykonamy budzik wschodu słońca, który delikatnie i powoli budzę cię bez uciekania się do ofensywnej maszyny hałasującej. - to z pewnością będzie problem. W tym projekcie obejdziemy ten problem, ręcznie ustawiając godzinę każdej nocy w dość prymitywny sposób - użytkownik naciska przycisk reset tuż przed pójściem spać, zapewniając ręczną synchronizację czasu. 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ć w serwisie eBay za około 5–10 USD. Najprawdopodobniej będziesz musiał dostarczyć własną baterię (nielegalne jest wysyłanie ich za granicę do wielu miejsc) i niektóre nagłówki (szpilki, które wsuwają się w otwory, które musisz wlutować w siebie).
To jest moduł, który mam:
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ą protokołu I2C, co oznacza, że używane są tylko dwa piny - jeden dla “zegar” (szeregowy zegar danych komunikacyjnych, 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ź na stronie Adafruit wybór innych urządzeń I2C, które możesz dodać, ponieważ jest wiele!
Pierwsze kroki
Podłącz moduł TinyRTC zgodnie z poniższym schematem - różowa linia DS nie jest potrzebna, ponieważ dotyczy to czujnika temperatury.
Następnie pobierz biblioteki Time i DS1307RTC i umieść w nim foldery wynikowe / biblioteki teczka.
Wyjdź i uruchom ponownie środowisko Arduino, aby załadować biblioteki i przykłady.
Znajdziesz dwa przykłady w menu DS1307RTC: 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.
#include #include #include 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.Hour); Serial.write (':'); print2digits (tm.Minute); Serial.write (':'); print2digits (tm.Second); Serial.print (", Date (D / M / Y) ="); Serial.print (tm.Day); Serial.write ('/'); Serial.print (tm.Month); Serial.write ('/'); Serial.print (tmYearToCalendar (tm.Year)); 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ź obwody.”); 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 prędkości 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 do tego kod debugowania lub logiczny “Jeśli” oświadczenie, takie jak wydrukowanie czasu lub zareagowanie na niego.
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 graficzne: Snootlab Via Flickr