|

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ęśćIleDo czegoUwagi
Płytka ESP32 (DevKit, 30 lub 38 pinów)1mikrokontroler, dwa rdzeniejeden rdzeń rysuje, drugi gra dźwięk
Wyświetlacz OLED 1,3″ 128×64, SH1106, I²C1zegar i animacjeadres 0x3C; 0,96″ SSD1306 wymaga innej biblioteki
Czujnik dźwięku KY-0371wykrywanie klaśnięciamikrofon, komparator LM393, potencjometr czułości; KY-038 działa tak samo
Buzzer pasywny (np. moduł KY-006)1dźwięk wybuchumusi być pasywny – aktywny gra tylko jeden ton
Diody LED 3błyski
Rezystory 220 Ω3ograniczenie prądu LEDok. 6 mA na diodę przy 3,3 V
Moduł RTC DS3231 1czas po zaniku zasilaniabateria 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łuPin ESP32Uwagi
OLED SH1106VCC3.3V
OLED SH1106GNDGND
OLED SH1106SCK (SCL)GPIO 22I²C,
OLED SH1106SDAGPIO 21I²C
KY-037+3.3V
KY-037GGND
KY-037D0GPIO 34wyjście cyfrowe, przerwanie; A0 niepodłączone
LED 1anoda (dłuższa nóżka)GPIO 25 przez 220 Ωkatoda do GND
LED 2anodaGPIO 26 przez 220 Ωkatoda do GND
LED 3anodaGPIO 27 przez 220 Ωkatoda do GND
Buzzer pasywny+ (S)GPIO 14
Buzzer pasywny−GND
DS3231 VCC / GND3.3V / GND
DS3231 SCL / SDAGPIO 22 / GPIO 21ró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

ObszarCo pokazujeCzcionka
Góra, lewoikonka Marsa: tarcza, czapa polarna, kratery, Valles Marineris, Fobosrysunek 23×23 px
Góra, tekst„Sol 54299″ i etykieta MTC, pod spodem godzina MTC HH:MM:SS1 i 2 (duża)
Środekkropkowana linia rozdzielająca–
Dół, lewoikonka Ziemi: tarcza z obwódką, kontynenty, Księżycrysunek 23×23 px
Dół, tekstdata DD.MM.RRRR i strefa CET/CEST, pod spodem godzina HH:MM:SS1 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

BibliotekaPo coKiedy
Adafruit SH110Xsterownik ekranu SH1106zawsze
Adafruit GFX Libraryrysowanie linii, kół, tekstuzawsze (instaluje się z SH110X)
Adafruit BusIOobsługa I²C dla bibliotek Adafruitzawsze (zależność)
RTClib (Adafruit)obsługa DS3231tylko 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

  1. W Arduino IDE dodaj obsługę płytek „esp32 by Espressif Systems” (Menedżer płytek).
  2. Zainstaluj bibliotekę Adafruit SH110X wraz z zależnościami (Menedżer bibliotek).
  3. Umieść plik w folderze o tej samej nazwie: ZegarMarsjanski/ZegarMarsjanski.ino.
  4. Wybierz płytkę „ESP32 Dev Module” oraz właściwy port COM i kliknij Wgraj.
  5. 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łaDomyślnieCo zmienia
UZYJ_RTCwyłączone (komentarz)odkomentowanie włącza DS3231
STREFA_CZASOWACET-1CEST,M3.5.0,M10.5.0/3strefa czasu ziemskiego (format POSIX TZ)
TT_MINUS_UTC69,184 sróżnica TT − UTC; zmienia się tylko po nowej sekundzie przestępnej
REZONANS_HZ2700częstotliwość najgłośniejszej pracy buzzera
CZAS_LOTU_MS900długość lotu meteoru i gwizdu
CZAS_HUKU_MS350długość głównego huku
CZAS_DUDNIENIA_MS3000długość gasnącego dudnienia
PRZERWA_PO_WYBUCHU_MS800jak długo po efekcie ignorować mikrofon
PIN_MIKROFON, PIN_BUZZER, PIN_BUZZER_2, PINY_LED[]34, 14, 13, 25/26/27przypisanie 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

  1. W ciszy kręć niebieskim potencjometrem (jest wieloobrotowy – potrzeba naprawdę wielu obrotów), aż zgaśnie dioda sygnalizacyjna na module.
  2. Przekręć jeszcze odrobinę dalej.
  3. Klaśnij: dioda na module błyska, a na ekranie rusza animacja.
  4. 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

  1. Podłącz moduł równolegle do ekranu (VCC, GND, SCL → 22, SDA → 21).
  2. Zainstaluj bibliotekę RTClib.
  3. Odkomentuj #define UZYJ_RTC i 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

ObjawPrzyczynaRozwiązanie
Czarny ekranzły adres albo zamienione SDA/SCLsprawdź adres 0x3C i piny 21/22
Ekran pokazuje śmieci, obraz przesuniętywyświetlacz SSD1306 zamiast SH1106użyj biblioteki Adafruit SSD1306 albo ekranu SH1106
Wybuch odpala się samza duża czułość KY-037przekręć potencjometr dalej
Brak reakcji na klaśnięcieza mała czułośćcofnij potencjometr; sprawdź, czy D0 jest na GPIO 34
Buzzer cichyczęstotliwość poza rezonansem, minus na GNDdostrój REZONANS_HZ, przełóż minus na GPIO 13
Buzzer piszczy jednym tonembuzzer aktywny, nie pasywnywymień na pasywny
Buzzer się grzejemała rezystancja cewki przy pracy z dwóch pinówrezystor 47 Ω w szereg albo minus na GND
Godzina uciekła po reseciebrak RTC – start od godziny kompilacjidodaj DS3231
Czas przesunięty o godzinęzła strefa w STREFA_CZASOWApopraw napis strefy
ESP32 resetuje się w trakcie wybuchuwatchdog na rdzeniu 0upewnij 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.

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 😎👇


Podobne wpisy

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *