Zegar marsjański z efektem wybuchu – projekt na ESP32 krok po kroku

Zegar marsjański z efektem wybuchu – projekt na ESP32 krok po kroku
Która jest teraz godzina na Marsie? Pytanie brzmi jak zagadka z quizu, a tymczasem ma zupełnie konkretną odpowiedź i wystarczy policzyć. NASA robi to od lat, bo zespoły obsługujące łaziki przez pierwsze tygodnie misji żyją według czasu marsjańskiego i codziennie przesuwają sobie dzień o kilkadziesiąt minut.
My zrobimy to samo na ESP32 i wyświetlaczu OLED. A ponieważ sam zegar byłby odrobinę zbyt grzeczny, dołożymy do niego coś, co psuje powagę całego urządzenia: po klaśnięciu w dłonie w Marsa uderza meteor. Ekran wybucha napisem BUM!!!, trzy diody LED migają jak alarm, a buzzer gwiżdże, huczy i dudni przez sześć sekund. Potem zegar wraca, jakby nic się nie stało.
To projekt na jeden, maksymalnie dwa wieczory. Nie wymaga lutowania, a wszystko wpina się w płytkę stykową. A przy okazji dotykamy czterech rzeczy, które warto mieć przerobione: przerwań, dwóch rdzeni ESP32 i FreeRTOS, rezonansu buzzera oraz sterowania nim w przeciwfazie. To świetny projekt do nauki elektroniki i majsterkowania.
Nagraliśmy film na youtube 🎬
Na naszym kanale znajdziesz materiał wideo o tym projekcie!
Co właściwie pokazuje to urządzenie?
Ekran OLED jest podzielony poziomą kropkowaną linią na dwie połowy.
Górna połowa – Mars. Numer sola (Mars Sol Date) oraz godzina MTC, czyli czas na południku zerowym Marsa. Obok ikonka planety: czarna tarcza z czapą polarną, kraterami, Valles Marineris i krążącym wokół Fobosem.
Dolna połowa – Ziemia. Data w formacie DD.MM.RRRR, oznaczenie strefy CET albo CEST (zmiana czasu letni/zimowy dzieje się automatycznie) i godzina lokalna. Obok biała tarcza Ziemi z kontynentami i Księżycem.
Styl graficzny jest celowo prosty: czarne rysunki i napisy na białym tle. Wszystkie ikonki są rysowane w kodzie – z kół, linii i pojedynczych pikseli biblioteki Adafruit GFX. Żadnych plików graficznych, żadnych bitmap do konwersji.

Lista części
Osiem pozycji, z czego jedna opcjonalna. Bez zegara RTC urządzenie też działa – startuje wtedy od godziny kompilacji szkicu.
| Część | Ile | Do czego | Uwagi |
|---|---|---|---|
| Płytka ESP32 (DevKit, 30 lub 38 pinów) | 1 | mikrokontroler, dwa rdzenie | jeden rdzeń rysuje, drugi gra dźwięk |
| Wyświetlacz OLED 1,3″ 128×64, SH1106, I²C | 1 | zegar i animacje | adres 0x3C; 0,96″ SSD1306 wymaga innej biblioteki |
| Czujnik dźwięku KY-037 | 1 | wykrywanie klaśnięcia | mikrofon, komparator LM393, potencjometr czułości; KY-038 działa tak samo |
| Buzzer pasywny (np. moduł KY-006) | 1 | dźwięk wybuchu | musi być pasywny – aktywny gra tylko jeden ton |
| Diody LED | 3 | błyski | |
| Rezystory 220 Ω | 3 | ograniczenie prądu LED | ok. 6 mA na diodę przy 3,3 V |
| Moduł RTC DS3231 | 1 | czas po zaniku zasilania | bateria CR2032, adres 0x68 |
| Płytka stykowa, przewody, kabel USB | – | montaż i zasilanie |
Schemat połączeń
Wszystkie moduły zasilamy z pinu 3.3V ESP32, masy są wspólne. Ekran i RTC dzielą jedną magistralę I²C – mają różne adresy, więc nie wchodzą sobie w drogę.
| Moduł | Pin modułu | Pin ESP32 | Uwagi |
|---|---|---|---|
| OLED SH1106 | VCC | 3.3V | |
| OLED SH1106 | GND | GND | |
| OLED SH1106 | SCK (SCL) | GPIO 22 | I²C, |
| OLED SH1106 | SDA | GPIO 21 | I²C |
| KY-037 | + | 3.3V | |
| KY-037 | G | GND | |
| KY-037 | D0 | GPIO 34 | wyjście cyfrowe, przerwanie; A0 niepodłączone |
| LED 1 | anoda (dłuższa nóżka) | GPIO 25 przez 220 Ω | katoda do GND |
| LED 2 | anoda | GPIO 26 przez 220 Ω | katoda do GND |
| LED 3 | anoda | GPIO 27 przez 220 Ω | katoda do GND |
| Buzzer pasywny | + (S) | GPIO 14 | |
| Buzzer pasywny | − | GND | |
| DS3231 | VCC / GND | 3.3V / GND | |
| DS3231 | SCL / SDA | GPIO 22 / GPIO 21 | równolegle z ekranem |
Trzy rzeczy, o których warto wiedzieć przed montażem
GPIO 34 jest pinem tylko wejściowym i nie ma wewnętrznych rezystorów podciągających. W wielu projektach to problem, tutaj nie – komparator LM393 na module KY-037 sam wymusza stan linii, więc podciąganie nie jest potrzebne.
Czułość KY-037 ustawia się śrubokrętem, nie w kodzie. Na module jest mały potencjometr, który ustawia próg komparatora — i to on, a nie żadna linijka programu, decyduje, czy zegar reaguje na klaśnięcie, czy na przejeżdżający tramwaj. Regulacja zajmuje dwie minuty: w ciszy kręć powoli, aż druga dioda na module zgaśnie, a potem jeszcze odrobinę w tę samą stronę. Od tego momentu dioda powinna zapalać się tylko przy klaśnięciu. Ustawiony za czule zegar wybucha sam z siebie co kilkanaście sekund, za mało czuły wymaga klaśnięcia tuż przy mikrofonie. Jeśli kiedykolwiek zmienisz napięcie zasilania modułu albo przeniesiesz zegar do głośniejszego pokoju, próg trzeba przestawić od nowa — komparator porównuje napięcia bezwzględne, więc nie przenosi się sam między warunkami.
Moduł KY-037 zasilamy z 3,3 V, nie z 5 V. To nie jest kwestia gustu: poziom na wyjściu D0 jest równy napięciu zasilania modułu, a wejścia ESP32 nie są tolerancyjne na 5 V. Podpięty pod 5 V KY-037 poda na GPIO 34 pięć woltów i prędzej czy później uszkodzi pin albo cały układ. Przy 3,3V jest tylko odrobinę mniej czuły, co i tak nadrabiasz potencjometrem z poprzedniego punktu. Ta sama uwaga dotyczy wyświetlacza SH1106 i RTC DS3231 wiszących na tej samej magistrali I2C.

Czas marsjański – skąd się bierze numer sola
To najciekawsza matematycznie część projektu i warto ją zrozumieć, zanim wklei się gotową funkcję.
Doba na Marsie, czyli sol, trwa 24 h 39 min 35 s, co daje dokładnie 1,0274912517 doby ziemskiej. Nie jest to przypadkowa liczba wzięta z internetu – pochodzi z pracy Allisona i McEwena (2000), na której opiera się program Mars24 NASA GISS.
Algorytm sprowadza się do trzech kroków.
Krok 1 – z czasu uniksowego na datę juliańską.
Astronomowie liczą czas jako ciągłą liczbę dni od ustalonego punktu, bez miesięcy i lat przestępnych:
JDUT = tunix / 86400 + 2440587,5
Krok 2 – poprawka na czas ziemski (TT).
Wzór na MSD działa w skali czasu, która nie zna sekund przestępnych. Różnica wynosi obecnie 69,184 s (32,184 s plus 37 sekund przestępnych, stan od 2017 roku):
JDTT = JDUT + 69,184 / 86400
Krok 3 – przeliczenie na sole.
Odejmujemy moment zera i dzielimy przez długość sola:
MSD = (JDTT − 2405522,0028779) / 1,0274912517
Część całkowita MSD to numer sola. Część ułamkowa pomnożona przez 24 h daje godzinę MTC – Coordinated Mars Time, marsjański odpowiednik UTC, czyli czas na południku zerowym przechodzącym przez krater Airy-0. Sol 0 zaczął się pod koniec grudnia 1873 roku.
Przykład: 30 września 2026 roku MSD wynosiło około 54299,28 – czyli sol 54299, godzina mniej więcej 06:43 MTC.
I jeszcze jeden smaczek, który dobrze widać na ekranie: marsjańskie godziny, minuty i sekundy są o 2,75 % dłuższe od ziemskich. Sekundy Marsa tykają więc odrobinę wolniej i mniej więcej co 36 sekund rozjeżdżają się z ziemskimi o jedną. Patrzenie na to na żywo jest zaskakująco wciągające.
Ważny szczegół implementacyjny: wszystkie obliczenia muszą iść na typie double. Przy liczbach rzędu 2,4 miliona dni float (24 bity mantysy) gubi już całe sekundy – zegar zacząłby skakać.
Jak działa program
Program ma trzy stany:
1️⃣ Ekran powitalny
2️⃣ Zegar i efekt wybuchu
3️⃣ Po efekcie zawsze wraca do zegara
Ekran powitalny (3 s)
Napis „ZEGAR MARSJANSKI” między Marsem a Ziemią, kilka gwiazdek, zaokrąglona ramka. W tle program ustawia w tym czasie zegar systemowy ESP32 – z RTC albo z godziny kompilacji.

Ekran zegara
| Obszar | Co pokazuje | Czcionka |
|---|---|---|
| Góra, lewo | ikonka Marsa: tarcza, czapa polarna, kratery, Valles Marineris, Fobos | rysunek 23×23 px |
| Góra, tekst | „Sol 54299″ i etykieta MTC, pod spodem godzina MTC HH:MM:SS | 1 i 2 (duża) |
| Środek | kropkowana linia rozdzielająca | – |
| Dół, lewo | ikonka Ziemi: tarcza z obwódką, kontynenty, Księżyc | rysunek 23×23 px |
| Dół, tekst | data DD.MM.RRRR i strefa CET/CEST, pod spodem godzina HH:MM:SS | 1 i 2 (duża) |

Ekran odświeża się przy każdej zmianie sekundy – ziemskiej albo marsjańskiej. Dzięki temu nie marnujemy transmisji I²C na przerysowywanie tego samego obrazu.
Wykrywanie klaśnięcia
Wyjście D0 czujnika KY-037 podpięte jest pod przerwanie w trybie CHANGE. Dlaczego CHANGE, a nie RISING? Bo moduły KY-037 i KY-038 bywają różnie skonfigurowane – jedne przy dźwięku dają stan wysoki, inne niski. Reakcja na każdą zmianę działa niezależnie od wersji modułu.
Sama procedura przerwania nie robi nic poza ustawieniem flagi. Efekt odpala dopiero pętla loop(), która tę flagę sprawdza. To klasyczny i jedyny sensowny wzorzec: krótki impuls z mikrofonu nie zginie nawet wtedy, gdy akurat trwa wysyłanie klatki na ekran.
Po zakończeniu efektu flaga jest przez 0,8 s kasowana – inaczej mikrofon usłyszałby własny buzzer i wybuch odpalałby się w nieskończonej pętli. Prosty mechanizm, bez którego projekt nie nadaje się do użytku.
Efekt wybuchu (ok. 6 s)
Efekt dzieli się na cztery fazy, a w każdej z nich trzy tory – obraz, LED-y i dźwięk – pracują równolegle.
Lot meteoru (0,9 s). Meteor z ogonem spada z prawego górnego rogu na Marsa, LED-y zapalają się po kolei, buzzer gwiżdże opadającym tonem z „wyciem”: 4200 → 1200 Hz.
Huk (0,35 s). Najgłośniejszy moment. Gęsty szum w paśmie rezonansu buzzera, ekran miga odwróconymi kolorami, wszystkie LED-y świecą.
Dudnienie (3 s). Trzaski są coraz rzadsze, co jakiś czas przychodzi wtórny wybuch. Na ekranie trzęsie się napis BUM!!!, rozchodzą się trzy fale uderzeniowe, lecą odłamki, a kula ognia maleje. LED-y migają losowo, z czasem coraz rzadziej. To jedyna faza, w której dźwięk steruje obrazem: każdy wtórny wybuch daje błysk ekranu zsynchronizowany z hukiem.
Dogasanie (ok. 1,9 s). Wszystkie LED-y mrugają razem coraz wolniej, po czym wraca zegar.
Dźwięk na drugim rdzeniu – i dlaczego to konieczne
Tu dochodzimy do najważniejszej decyzji architektonicznej w całym projekcie.
ESP32 ma dwa rdzenie. Dźwięk gra osobne zadanie FreeRTOS przypięte do rdzenia 0, a animacja i LED-y działają w loop() na rdzeniu 1. Powód jest prozaiczny: wysłanie
jednej klatki 128×64 na ekran przez I²C trwa około 25 ms. Gdyby dźwięk generował się na tym samym rdzeniu, co 25 ms miałby dziurę — zamiast wybuchu usłyszelibyśmy serię kliknięć.
Dźwięk jest generowany programowo, bez tone() i bez PWM: pin buzzera jest przełączany z odstępami rzędu mikrosekund. Szum to przełączanie z losowym odstępem wokół częstotliwości rezonansowej — właśnie przy niej buzzer gra najgłośniej.
Jest tu jeden haczyk, o którym łatwo zapomnieć: watchdog. Zadanie, które przez kilka sekund kręci się w ciasnej pętli i nigdy nie oddaje procesora, zostanie uznane za zawieszone i ESP32 się zresetuje. Dlatego co 100 ms zadanie oddaje czas na 1 ms. To wystarczy.
Oba tory — obraz i dźwięk — są zgrane wspólnymi stałymi czasów (CZAS_LOTU_MS, CZAS_HUKU_MS, CZAS_DUDNIENIA_MS) oraz flagą wtornyWybuch, którą zadanie dźwiękowe daje animacji znać o błysku.
Oprogramowanie
Całość to jeden szkic ZegarMarsjanski.ino w Arduino IDE. Kompiluje się na rdzeniu ESP32 w wersji 3.3.11 i zajmuje około 373 kB pamięci programu (28 %) oraz 26 kB RAM (7 %). Miejsca na rozbudowę jest więc aż nadto.
PROGRAM UŻYTY W PROJEKCIE
Do tego projektu przygotowaliśmy gotowy kod do pobrania poniżej:
Biblioteki
| Biblioteka | Po co | Kiedy |
|---|---|---|
| Adafruit SH110X | sterownik ekranu SH1106 | zawsze |
| Adafruit GFX Library | rysowanie linii, kół, tekstu | zawsze (instaluje się z SH110X) |
| Adafruit BusIO | obsługa I²C dla bibliotek Adafruit | zawsze (zależność) |
| RTClib (Adafruit) | obsługa DS3231 | tylko z RTC |
Czas, strefa i automatyczna zmiana czasu korzystają ze standardowych time.h i sys/time.h wbudowanych w rdzeń ESP32 – żadnej dodatkowej biblioteki nie trzeba.
Wgrywanie krok po kroku
- W Arduino IDE dodaj obsługę płytek „esp32 by Espressif Systems” (Menedżer płytek).
- Zainstaluj bibliotekę Adafruit SH110X wraz z zależnościami (Menedżer bibliotek).
- Umieść plik w folderze o tej samej nazwie:
ZegarMarsjanski/ZegarMarsjanski.ino. - Wybierz płytkę „ESP32 Dev Module” oraz właściwy port COM i kliknij Wgraj.
- Jeśli pracujesz bez RTC – wgrywaj od razu po kompilacji. Zegar startuje od godziny kompilacji, więc każda minuta zwłoki to minuta błędu.
Stałe do zmiany na górze pliku
| Stała | Domyślnie | Co zmienia |
|---|---|---|
UZYJ_RTC | wyłączone (komentarz) | odkomentowanie włącza DS3231 |
STREFA_CZASOWA | CET-1CEST,M3.5.0,M10.5.0/3 | strefa czasu ziemskiego (format POSIX TZ) |
TT_MINUS_UTC | 69,184 s | różnica TT − UTC; zmienia się tylko po nowej sekundzie przestępnej |
REZONANS_HZ | 2700 | częstotliwość najgłośniejszej pracy buzzera |
CZAS_LOTU_MS | 900 | długość lotu meteoru i gwizdu |
CZAS_HUKU_MS | 350 | długość głównego huku |
CZAS_DUDNIENIA_MS | 3000 | długość gasnącego dudnienia |
PRZERWA_PO_WYBUCHU_MS | 800 | jak długo po efekcie ignorować mikrofon |
PIN_MIKROFON, PIN_BUZZER, PIN_BUZZER_2, PINY_LED[] | 34, 14, 13, 25/26/27 | przypisanie pinów |
Uruchomienie i kalibracja
Najważniejszy krok po zmontowaniu układu to regulacja czułości KY-037. Bez niej projekt albo odpala wybuch sam z siebie, albo nie reaguje w ogóle – i to jest zdecydowanie najczęstsze źródło frustracji przy tym module.
Czułość mikrofonu KY-037
- W ciszy kręć niebieskim potencjometrem (jest wieloobrotowy – potrzeba naprawdę wielu obrotów), aż zgaśnie dioda sygnalizacyjna na module.
- Przekręć jeszcze odrobinę dalej.
- Klaśnij: dioda na module błyska, a na ekranie rusza animacja.
- Efekt odpala się sam → przekręć dalej. Nie reaguje na klaśnięcie → cofnij.
Stuknięcie w stół działa najlepiej, gdy moduł leży bezpośrednio na blacie – wtedy mikrofon zbiera też drgania przenoszone przez mebel.
Dodanie RTC DS3231
- Podłącz moduł równolegle do ekranu (VCC, GND, SCL → 22, SDA → 21).
- Zainstaluj bibliotekę RTClib.
- Odkomentuj
#define UZYJ_RTCi wgraj szkic.
RTC trzyma czas UTC, a strefa czasowa i zmiana czasu liczone są w programie – to porządkuje sprawę raz na zawsze i oszczędza kłopotów w ostatni weekend marca i października. Przy pierwszym starcie albo po wyczerpaniu baterii program sam ustawia RTC na godzinę kompilacji. Zegar systemowy ESP32 dryfuje, więc co godzinę jest synchronizowany z RTC.
Typowe problemy
| Objaw | Przyczyna | Rozwiązanie |
|---|---|---|
| Czarny ekran | zły adres albo zamienione SDA/SCL | sprawdź adres 0x3C i piny 21/22 |
| Ekran pokazuje śmieci, obraz przesunięty | wyświetlacz SSD1306 zamiast SH1106 | użyj biblioteki Adafruit SSD1306 albo ekranu SH1106 |
| Wybuch odpala się sam | za duża czułość KY-037 | przekręć potencjometr dalej |
| Brak reakcji na klaśnięcie | za mała czułość | cofnij potencjometr; sprawdź, czy D0 jest na GPIO 34 |
| Buzzer cichy | częstotliwość poza rezonansem, minus na GND | dostrój REZONANS_HZ, przełóż minus na GPIO 13 |
| Buzzer piszczy jednym tonem | buzzer aktywny, nie pasywny | wymień na pasywny |
| Buzzer się grzeje | mała rezystancja cewki przy pracy z dwóch pinów | rezystor 47 Ω w szereg albo minus na GND |
| Godzina uciekła po resecie | brak RTC – start od godziny kompilacji | dodaj DS3231 |
| Czas przesunięty o godzinę | zła strefa w STREFA_CZASOWA | popraw napis strefy |
| ESP32 resetuje się w trakcie wybuchu | watchdog na rdzeniu 0 | upewnij się, że zadanie dźwiękowe oddaje procesor co 100 ms |
Pomysły na rozbudowę
- Czas lokalny w miejscu lądowania łazika – np. Perseverance w kraterze Jezero. To MTC przesunięte o długość areograficzną miejsca, czyli jedna dodatkowa linijka obliczeń.
- Synchronizacja z NTP przez Wi-Fi zamiast RTC – ESP32 i tak ma radio na pokładzie.
- Marsjański rok i pora roku – długość areocentryczna Ls, kolejny wzór z tej samej pracy Allisona i McEwena.
- Licznik wybuchów albo kilka różnych animacji losowanych przy każdym klaśnięciu.
- Obudowa z druku 3D w kształcie lądownika.
- Drugi czujnik – np. podwójne klaśnięcie jako przełącznik trybu zamiast pojedynczego.
Podsumowanie
Ten projekt jest dobrym przykładem na to, że „ciekawostka na wieczór” wcale nie musi być bezużyteczna edukacyjnie. Przy okazji rysowania planetek na OLED-zie przerabiamy przerwanie, które tylko ustawia flagę, podział pracy między dwa rdzenie ESP32, rezonans przetwornika piezoelektrycznego i sterowanie obciążeniem w przeciwfazie z dwóch pinów GPIO. Każda z tych rzeczy wróci w poważniejszych konstrukcjach.
A przy okazji – naprawdę warto raz zobaczyć na własnym biurku, jak marsjańskie sekundy powoli uciekają ziemskim. Jest w tym coś, czego żaden artykuł nie odda.
Przydatne linki:
- ⬇️ Pobierz gotowy kod projektu
- 🛒 Koszyk z elementami
- NASA GISS Mars24 Sunclock – algorytm i opis czasu marsjańskiego
- Biblioteka Adafruit SH110X (GitHub)
- Biblioteka Adafruit GFX (GitHub)
- Biblioteka RTClib (GitHub)
Uwaga
- Buzzer musi być pasywny. Buzzer aktywny odegra wyłącznie jeden stały ton.
- GPIO 12 jest pinem konfiguracyjnym ESP32 odczytywanym przy starcie – nie należy go wykorzystywać w tym układzie.
- GPIO 34 jest pinem wyłącznie wejściowym i nie posiada wewnętrznych rezystorów podciągających.
- Bez modułu RTC urządzenie odmierza czas od godziny kompilacji szkicu i traci ustawienie po każdym zaniku zasilania.
FAQ – zegar marsjański na ESP32
1. Czy zrobię ten projekt bez lutowania? Tak. Wszystkie moduły mają goldpiny i wpinają się w płytkę stykową. Jedyne, co może wymagać lutownicy, to goldpiny w samej płytce ESP32 lub module OLED, jeśli trafisz na wersję z pinami luzem.
2. Czy zadziała na ESP8266 albo Arduino UNO? Nie bez przeróbek. Projekt opiera się na dwóch rdzeniach ESP32 – dźwięk gra na osobnym rdzeniu, żeby nie urywał się przy odświeżaniu ekranu. Na jednordzeniowym ESP8266 trzeba by przepisać generowanie dźwięku na timer sprzętowy. Arduino UNO dodatkowo zabrakłoby mocy na płynną animację.
3. Mam wyświetlacz 0,96″ SSD1306 – czy mogę go użyć? Tak, ale trzeba zmienić bibliotekę na Adafruit SSD1306 i poprawić inicjalizację. Oba sterowniki mają ten sam adres 0x3C i tę samą rozdzielczość 128×64, natomiast SH1106 ma wewnętrznie szerszą pamięć obrazu – użycie niewłaściwej biblioteki objawia się przesunięciem obrazu o kilka pikseli i śmieciami na brzegu.
4. Czujnik KY-037 czy KY-038 – jest różnica? Dla tego projektu nie ma. Oba moduły mają ten sam komparator LM393 i to samo wyjście cyfrowe D0, różnią się głównie rozmiarem mikrofonu. Wyjście analogowe A0 w ogóle nie jest nam potrzebne.
5. Dlaczego buzzer musi być pasywny? Buzzer aktywny ma wbudowany generator i po podaniu napięcia gra jeden, stały ton – nie da się nim zagrać opadającego gwizdu ani szumu. Buzzer pasywny to po prostu przetwornik, któremu to mikrokontroler dyktuje częstotliwość..
7. Czy zegar bez RTC jest użyteczny? Do zabawy i demonstracji – jak najbardziej. Startuje od godziny kompilacji szkicu, więc jeśli wgrasz go od razu, pokaże właściwy czas z dokładnością do kilkunastu sekund. Problem zaczyna się po każdym zaniku zasilania i przy dłuższej pracy, bo wewnętrzny oscylator ESP32 potrafi zauważalnie dryfować. DS3231 rozwiązuje oba te problemy za niewielkie pieniądze.
8. Skąd pewność, że numer sola jest prawidłowy? Algorytm pochodzi z pracy Allisona i McEwena z 2000 roku, tej samej, na której opiera się narzędzie Mars24 wydane przez NASA GISS. Najprostsza weryfikacja: porównaj wskazanie zegara z Mars24 albo z dowolnym internetowym kalkulatorem MSD.
9. Dlaczego sekundy na Marsie i na Ziemi się rozjeżdżają? Bo doba marsjańska jest dzielona na 24 godziny tak samo jak ziemska, a jest od niej o 2,75 % dłuższa. Marsjańska sekunda jest więc po prostu dłuższa od ziemskiej i co mniej więcej 36 sekund oba liczniki różnią się o jedną jednostkę. To nie błąd programu, tylko istota czasu MTC.
10. Da się zmienić dźwięk wybuchu na coś innego? Oczywiście – cała generacja dźwięku siedzi w dedykowanych funkcjach, a czasy faz w trzech stałych na górze pliku. Zmiana zakresu gwizdu z 4200 → 1200 Hz na inny albo wydłużenie dudnienia to kwestia jednej liczby.

Prezentowaną w artykule elektronikę znajdziesz oczywiście w naszym sklepie 👉 sklep.msalamon.pl 👈Zapraszamy również na nasze social media, gdzie na bieżąco informujemy o nowych produktach oraz o najciekawszych promocjach 😎👇



Wyświetlacz OLED 0,96" 128x64px I2C biały
Wyświetlacz OLED 0,66" 64x48px dla Wemos D1 Mini
Buzzer aktywny z generatorem 12V 85dB
Wyświetlacz OLED 0,95" 96x64px SPI kolorowy