Popularny post pawel26021995 Napisano Luty 27, 2025 Popularny post Udostępnij Napisano Luty 27, 2025 Projekt zegarka opartego na GPS jako module czasu rzeczywistego. Po kilku testach układów DS1307 oraz DS3231 stwierdziłem, że nie są one wystarczająco precyzyjne; każdy z nich po jakimś czasie gubi parę minut. Testowałem układy zakupione w Polsce i w Chinach – każdy zachowywał tak samo, uje stąd pomysł na wykorzystanie modułu GPS jako źródła czasu rzeczywistego. Cena modułu GPS w Chinach to około 8 zł, więc porównywalnie do ceny układów DS. Zastosowanie LED-ów WS2812B 5V pozwala na tworzenie różnych animacji i wybór kolorów spośród 16 777 216 możliwości oraz wybór jasności 0–255. W ostatecznej wersji programu pozostałem przy jednym kolorze, który najbardziej mi odpowiada. Program umożliwia łatwą zmianę koloru i ilości użytych diod. Zastosowano 28 modułów LED WS2812B 8-bitowych tworzących wyświetlacze 7-segmentowe: LED-y 0–7 – segment a, 8–15 – segment b itd. Każde 8 LED-ów tworzy osobny wyświetlacz i jest podłączone do innego wyjścia Arduino. Podzielone są na dziesiątki godzin, godziny, dziesiątki minut i minuty oraz dwukropek, który jest zrobiony z dwóch diod LED WS2812B z taśmy LED. Ponieważ jasność diod LED w nocy może być oślepiająca, zastosowałem warunek, który zmienia jasność diod LED na 10 w godzinach 20–6. Można też całkowicie wyłączyć zegarek w tych godzinach. Minimalna jasność dobrze się sprawdza w nocy, w szczególności po przebudzeniu. Strefa czasowa jest ustawiona na stałe na +1 względem czasu UTC. Strefę czasową można zmienić za pomocą komunikacji szeregowej, wysyłając żądaną wartość. Program korzysta ze standardowych bibliotek NeoPixel oraz TinyGPS++. Całość przyklejona jest do plexy z podświetlania z zepsutego monitora. Podgrzana hotair aby była plastyczna do formowania w kształt V. Podłączenie jest tak proste, że nie potrzeba schematu. Całkowity koszt budowy zegarka około 50zł kupując części w chinach. Zachęca do wspierania Polskich sklepów takich jak botland. Opis programu: //wykorzystane biblioteki do obsługi GPS oraz ledów ws2812. #include <Adafruit_NeoPixel.h> #include <TinyGPS++.h> // Definicja segmentów ósemki (po 8 LED na segment) const uint8_t segments[8][8] = { {0, 1, 2, 3, 4, 5, 6, 7}, // Segment A {8, 9, 10, 11, 12, 13, 14, 15}, // Segment B {16, 17, 18, 19, 20, 21, 22, 23}, // Segment C {24, 25, 26, 27, 28, 29, 30, 31}, // Segment D {32, 33, 34, 35, 36, 37, 38, 39}, // Segment E {40, 41, 42, 43, 44, 45, 46, 47}, // Segment F {48, 49, 50, 51, 52, 53, 54, 55} // Segment G }; W tym miejscu można dowolnie zmieniać ilość zastosowanych ledów podzielonych na segmenty. // Mapowanie cyfr na segmenty (0 = wyłączony, 1 = włączony) const uint8_t digitMap[10][7] = { {1, 1, 1, 1, 1, 1, 0}, // 0 {0, 1, 1, 0, 0, 0, 0}, // 1 {1, 1, 0, 1, 1, 0, 1}, // 2 {1, 1, 1, 1, 0, 0, 1}, // 3 {0, 1, 1, 0, 0, 1, 1}, // 4 {1, 0, 1, 1, 0, 1, 1}, // 5 {1, 0, 1, 1, 1, 1, 1}, // 6 {1, 1, 1, 0, 0, 0, 0}, // 7 {1, 1, 1, 1, 1, 1, 1}, // 8 {1, 1, 1, 1, 0, 1, 1} // 9 }; Tworzenie mapy ledów tak, aby cały segment 8 LED był wykorzystywany jako jeden LED. uint8_t newBrightness = (hour >= 20 || hour < 6) ? 2 : 10;//Operator trójargumentowy działa w postaci: warunek ? wartość_jeśli_prawda : wartość_jeśli_fałsz; Sprawdzanie aktualnego czasu i dostosowywanie jasności zegara. // Funkcja wyświetlająca czas na wszystkich ósemkach void displayTime(int hour, int minute, int second) { displayDigit(strip1, hour / 10, strip1.Color(100, 100, 0)); // Dziesiątki godzin displayDigit(strip2, hour % 10, strip2.Color(100, 100, 0)); // Jedności godzin displayDigit(strip3, minute / 10, strip3.Color( 100, 100, 0)); // Dziesiątki minut displayDigit(strip4, minute % 10, strip4.Color(100, 100, 0)); // Jedności minut } Podział czasu na dziesiątki i jedności oraz wybór koloru. Zdjęcia projektu: Dla porównania zegarek oparty o DS1307 ustawiony 01.02.2025 równo z GPS, spieszy o około 1,5 minuty. Cały program można pobrać z Google dysku 7egment_ws2812b_gps_nano.zip Arduino nano LED WS2812B GPS 5
Popularny post ethanak Luty 27, 2025 Popularny post Udostępnij Luty 27, 2025 Jedna uwaga: brak automatycznego uwzględniania zmiany czasu. Reszta OK. 3
jand Luty 27, 2025 Udostępnij Luty 27, 2025 5 minut temu, ethanak napisał: brak automatycznego uwzględniania zmiany czasu Powiem więcej - nie mogę się dopatrzeć w programie jakiejkolwiek możliwości zmiany strefy czasowej. 1
orb777 Luty 27, 2025 Udostępnij Luty 27, 2025 (edytowany) Projekt fajny, ale dodałbym to, o czym wspominają przedmówcy, wtedy zegar będzie bardziej bezobsługowy. Wyliczanie stref względem utc jest proste, +/- 1h na każde 15 stopni długości geograficznej. Letnia/zimowa zmiana czasu - tu jest trochę więcej roboty, jeżeli zegar miałby być "ogólnoświatowy". Dla samej Polski nie będzie skomplikowane, ostatnia niedziela marca/października, ale nie w każdym kraju tak jest. W opisie podałeś link do gps od "waveshare", ale na zdjęciu jest "ublox neo-6m". Sprawdzałeś może jego dokładność przy oknie? Mam neo-8m, ale przy oknie "gubi" pozycję na ~10-15m, czasem 20. Edytowano Luty 27, 2025 przez orb777 1
farmaceuta Luty 27, 2025 Udostępnij Luty 27, 2025 13 minut temu, orb777 napisał: Sprawdzałeś może jego dokładność przy oknie? Mam neo-8m, ale przy oknie "gubi" pozycję na ~10-15m, czasem 20. Zazwyczaj w mieszkaniu nie chce załapać fix'a a jak się uda to są duże odchyłki w pozycji...sprawdź ile satelit złapałeś, dla przykładu w autopilocie modelarskim GPS musi złapać minimum 6 satelit żeby brać pod uwagę pozycję 2
pawel26021995 Luty 27, 2025 Autor tematu Udostępnij Luty 27, 2025 @orb777 caly zegarek mam ponad 1m od okna i nie było z nim problemów, podczas programowania i testów był około 2-3m od okna i też dobrze działał 1
orb777 Luty 27, 2025 Udostępnij Luty 27, 2025 (edytowany) @pawel26021995 , dzięki. Chociaż czas/data są szybciej (i łatwiej) uzyskiwane w mieszkaniu niż pozycja, z tego co zauważyłem na 8m. @farmaceuta , i to by się zgadzało. Nie chcę offtopować autorowi w jego wątku, ale bazując na $GNGGA (poz 6 i 7), $GNGSA (poz 2): $GNGGA,124638.00,****.*****,N,*****.*****,E,2,12,0.80,133.4,M,34.8,M,,0000*4A\r\n $GNGSA,A,3,18,16,23,26,27,10,15,08,,,,,1.36,0.67,1.18*12\r\n Czyli fix jest (3D, DGPS) + 12 używanych satelit. Generuję link do google maps za pomocą ich api, sprawdzam na mapie i... błąd wynosi średnio 8-15 m względem aktualnej pozycji. Edytowano Luty 27, 2025 przez orb777 +$GNGSA 1
pawel26021995 Luty 27, 2025 Autor tematu Udostępnij Luty 27, 2025 @ethanak @jand Na początku kodu jest strefa czasowa na stałe ustalona, można to zmieniać //Zmienna strefy czasowej int timezoneOffset = 1; // Przesunięcie czasowe względem UTC w godzinach
jand Luty 27, 2025 Udostępnij Luty 27, 2025 (edytowany) Oczywiście że można to zmienić, ale program trzeba przekompilowaći i wgrać na nowo. Dwa razy w roku. Edytowano Luty 27, 2025 przez jand
kostuch Luty 27, 2025 Udostępnij Luty 27, 2025 2 godziny temu, farmaceuta napisał: Zazwyczaj w mieszkaniu nie chce załapać fix'a a jak się uda to są duże odchyłki w pozycji...sprawdź ile satelit złapałeś, dla przykładu w autopilocie modelarskim GPS musi złapać minimum 6 satelit żeby brać pod uwagę pozycję Do czytania czasu z gps nie musisz mieć fixa. Wystarczy że jest jakiś tam sygnał z jednego satelity. U mnie pod blaszanym dachem NEO6 widzi średnio 8 satelitów nawet w pochmurną pogodę. Apropo strefy czasowej, to chyba widziałem jakąś bibliotekę do obsługi - podaje się kraj i sama przelicza.
farmaceuta Luty 27, 2025 Udostępnij Luty 27, 2025 2 godziny temu, kostuch napisał: Do czytania czasu z gps nie musisz mieć fixa. Wystarczy że jest jakiś tam sygnał z jednego satelity. Tak tak..zgadza się odpowiedź moja była w stronę pobierania pozycji @orb777 jest taki program do konfiguracji GPS który się nazywa u-center, można tam zmienić wszystko...być może masz coś nie tak w konfiguracji jak sobie więcej przypomnę to Cię poinformuję
kostuch Luty 28, 2025 Udostępnij Luty 28, 2025 23 godziny temu, ethanak napisał: Czyli są kraje w których to nie zadziała Jakie to kraje? Jak masz na myśli Trumpoland z kilkoma strefami, to też działa. https://github.com/JChristensen/Timezone
ethanak Luty 28, 2025 Udostępnij Luty 28, 2025 Jest kilka krajów gdzie offset nie jest pełną godziną.
kostuch Luty 28, 2025 Udostępnij Luty 28, 2025 Jak na szybko patrzyłem w kod, to offset podaje się w minutach. Więc takie wynaturzenia jak w np Nepalu, też są obsługiwane.
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »