7 maja 2026

Smartwatch motocyklowy


Zegarek na motocyklu jest bardzo przydatnym urządzeniem. Korzystając z tego środka transportu nie można w prosty sposób sprawdzić czasu spoglądając na zegarek naręczny czy telefon. 8 lat temu zbudowałem do swojego motocykla zegarek, który posiadał dodatkowo pomiar napięcia akumulatora i temperatury powietrza. Tamten projekt, dopasowany wizualnie do licznika motocykla, można zobaczyć tutaj:


Od ponad roku mam nowy motocykl. Jego licznik ma co prawda wbudowany zegarek, ale korzystanie z niego jest niewygodne. Dlatego postanowiłem zbudować nowy zegarek, dopasowany do konsoli nowego pojazdu. Zegarek ten miał mieć sprawdzone już i przydatne funkcje:
  • wyświetlanie bieżącego czasu,
  • wyświetlanie napięcia akumulatora,
  • wyświetlanie temperatury powietrza,
  • alarm o niskiej temperaturze (ślisko),
  • alarm o niskim napięciu (brak ładowania).
Plansza z alarmu o niskim napięciu

Postanowiłem jednak znacznie poszerzyć funkcjonalność nowego urządzenia o obsługę telefonu. Dla niezorientowanych - korzystanie z telefonu na motocyklu jest wybitnie niewygodne. Problemu nie stanowi rozmowa bo do tego używa się wbudowanego w kask zestawu słuchawkowego lub interkomu. Natomiast wyzwaniem jest odebranie/odrzucenie rozmowy czy inicjowanie nowej. Niektórzy motocykliści montują telefon do uchwytu na kierownicy lub baku lecz obsługa dotykowego ekranu w rękawicach to już wyższa ekwilibrystyka. Postanowiłem podejść do tematu inaczej.

Interfejs użytkownika

W moim zegarku do prezentacji informacji zastosowałem okrągły, kolorowy wyświetlacz graficzny, stylistycznie dopasowany do okrągłego licznika głównego. Na ekranie głównym, w centralnym miejscu wyświetlany jest aktualny czas. Powyżej z lewej strony wyświetlana jest temperatura a z prawej napięcie akumulatora. Powyżej wyświetlana jest ikona prezentująca stan baterii telefonu. Na każdym innym ekranie część centralna ekranu wyświetla informacje kontekstowe ale czas pojawia się w górnej jego części. Do obsługi urządzenia służą dwa fizyczne przyciski umieszczone na kierownicy - dostępne kciukiem, dzięki czemu do obsługi nie potrzeba odrywać rąk od kierownicy. Mój smartwatch łączy się za pośrednictwem Bluetooth Low Energy ze smartfonem, dzięki czemu zapewnia dodatkowe przydatne funkcje:
  • odbieranie/odrzucanie przychodzących połączeń telefonicznych,
  • rozłączanie trwającej rozmowy,
  • inicjowanie połączeń poprzez wybór spośród 4 ulubionych/ostatnich numerów telefonów,
  • odczyt przychodzących wiadomości sms/komunikator i nagłówków e-mail.
  • informuje o stanie baterii telefonu i zestawu słuchawkowego
Dodatkowe przyciskami (czerwony i zielony) na kierownicy

Obsługa polega na dłuższym lub krótszym naciskaniu przycisków a ikonki na wyświetlaczu podpowiadają co i jak. W dolnej części ekranu wyświetlają się elementy symbolizujące przyciski i funkcje przez nie obsługiwane. Każdy z dwu przycisków może mieć dwie funkcje dostępne przez krótkie naciśniecie (mała ikonka) i duże naciśnięcie (duża ikonka).

Dla przykładu na ekranie głównym:
  • czerwony krótko - wiadomości tekstowe (liczba określa ile ich czeka na przeczytanie),
  • czerwony długo - ekran nawigacji,
  • zielony krótko - lista ulubionych kontaktów telefonicznych,
  • zielony długo - lista ostatnich połączeń telefonicznych.
Dla przykładu na liście połączeń:
  • czerwony krótko - kursor do góry,
  • zielony krótko - kursor do dołu,
  • czerwony długo - wyjdź do ekranu głównego,
  • zielony długo - wybierz numer.
W trakcie przychodzącego połączenia:
  • zielony - odbierz połączenie,
  • czerwony - odrzuć i powróć do ekranu głównego.
Jeśli jest tylko duża ikonka w obszarze podpowiedzi czas naciśnięcia jest nieistotny.


    

Zaimplementowałem też rozbudowane menu ustawień, które jest dostępne z ekranu głównego - wyjątkowo poprzez jednoczesne naciśnięcie obu przycisków. W menu tym można m.in.:
  • ustawić czas (czas aktualizuje się też z automatycznie ze smartfona),
  • ustawić progi alarmów (napięcie/temperatura),
  • aktywować przypomnienie o braku połączenia z zestawem słuchawkowym.

    


Nawigacja

Dodatkową extra przydatną funkcją jest nawigacja. Telefon można mieć w kieszeni a na ekranie smartwatcha będą się wyświetlać wskazówki nawigacyjne. Nawigację Google należy nastawić i uruchomić na telefonie przed jazdą. Na ekranie wyświetlane są wskazówki nawigacyjne w formie ikonki pod którą wyświetla się dystans. Obok jest wyświetlana krótka wskazówka tekstowa a pod nią informacja ile zostało czasu / dystansu do celu. Jednocześnie na słuchawkach dostajemy wskazówki głosowe nawigacji. Działanie nawigacji można też zakończyć w trakcie. Ale aby ją ustawić lub ponownie aktywować trzeba już użyć ekranu smartfona.

    
Konstrukcja

W konstrukcji urządzenia wykorzystałem 3 gotowe moduły:
  • okrągły wyświetlacz LCD TFT 240x240 sterowany poprzez interfejs SPI ze sterownikiem GC9A01,
  • płytkę rozwojową ESP32-S3 SuperMini,
  • moduł przetwornicy/ładowarki USB (12/24>>5V).
Schemat urządzenia

Aby połączyć te moduły w zwartą całość zaprojektowałem płytkę drukowaną (a raczej 3 płytki), która została wykonana w chińskiej fabryce. Po pocięciu trzy płytki tworzą razem pudełkową konstrukcję w której na górze znajduje się wyświetlacz. Na jednej ściance znajduje się zasilacz/ładowarka a na drugiej moduł procesora ESP32. Dodatkowo na płytce procesora umieściłem też zegar czasu rzeczywistego PCF8563 wraz z bateryjką podtrzymującą oraz czujnik temperatury DS18B20. Na płytce tej znajduje się też 5-pinowe gniazdo służące do podłączenia zasilania (12V z instalacji motocykla "po stacyjce") oraz przyłącze modułu przycisków (zamontowanego dogodnie na kierownicy).

Płytka urządzenia (przed podziałem na 3 części) 
Te trzy płytki są ze sobą połączone (zlutowane na stałe) za pośrednictwem kątowych złącz pinowych. Dodatkowe połączenie stanowi 4 płytka z miedziowanego laminatu, która jest ścianką dolną i jednocześnie pokrywą.

   

Urządzenie zostało zaprojektowane tak, aby pasowało do okrągłej obudowy wykonanej z czarnego plastikowego dekla od farby w sprayu. W dekielku tym wycięto okrągły otwór/okienko w który wkleiłem od środka szybkę wykonaną z pleksi. Użyłem elastycznego, czarnego kleju do naprawy GSM. Obudowa ma przykręcony metalowy wspornik który służy do przymocowania smartwatcha do licznika motocykla. W dolnym deklu przez otwory dostępne jest nie tylko gniazdo przyłączeniowe do zasilania i przycisków ale również gniazdo USB modułu zasilacza, które można wykorzystać do zasilania np. kamerki sportowej zamontowanej na kierownicy (włącza się wtedy automatycznie po przekręceniu stacyjki - jak rejestrator w aucie).

  

  

Oprogramowanie

Oprogramowanie składa się z dwóch części. Zasadniczy program na procesor ESP32-S3 został napisany w środowisku Arduino z wykorzystaniem dedykowanych bibliotek:
  • "RTClib.h" - Real Time Clock PCF8563
  • <OneWire.h> - One Wire Bus
  • <DallasTemperature.h> - DS18B20 temperature sensor
  • <BLEDevice.h> -BLE device lib
  • <BLEUtils.h> - BLE utils lib
  • <BLEServer.h> - BLE server lib
  • "SPI.h" - SPI Bus
  • "Adafruit_GFX.h" - Adafruit Display lib
  • "Adafruit_GC9A01A.h" - Adafruit GC9A01A lib
Dużo czasu zajęło testowanie oprogramowania nawigacji w warunkach bojowych, urządzenie było jeszcze w fazie prototypu zbudowanego na płytce stykowej.


Program musi jednocześnie obsługiwać:
  • wyświetlacz (interfejs ISP)
  • zegar czasu rzeczywistego PCF8563 (interfejs I2C)
  • czujnik temperatury DS18B20 (interfejs 1-wire)
  • pomiar napięcia pokładowego 12V (ADC poprzez dzielnik napięcia)
  • klawiaturę (dwa przyciski na osobnych pinach)
  • komunikację Bluetooth Low Energy
Obsługa wyświetlacza jest dość prosta, chociaż zaprojektowanie przejrzystego i funkcjonalnego interfejsu użytkownika zajęło trochę czasu. Prezentowane informacje są stylistycznie i kolorystycznie dopasowane do licznika motocykla. Wspomogłem się gotowymi symbolami graficznymi oraz cyferkami, które przygotowałem w programie graficznym i wkompilowałem do kodu. Jestem zadowolony z uzyskanego efektu. Wisienką na torcie jest animacja z logo, która wyświetla się po uruchomieniu systemu :-)


Sporym wyzwaniem była komunikacja z telefonem. Do tego powstała osobna apka na smartfona, której napisanie zleciłem znajomemu programiście urządzeń mobilnych. Niestety dopracowanie szczegółów i ustabilizowanie komunikacji zajęło najwięcej czasu. Komunikacja BT-LE polega bowiem na wystawianiu ograniczonych ilościowo i czasowo porcji danych. Sporym wyzwaniem było przysyłanie ze smartfona ikonek nawigacyjnych - opracowany został specjalny autorski algorytm kompresji, który grafiki 96x96 (1152 bajtów) kompresuje kilkukrotnie.

Testy urządzenia wykazały jego ogromną użyteczność. Nie trzeba się zatrzymywać aby sprawdzić: czy sms który nadszedł jest istotny, czy odbierać przychodzące połączenie. Do tego nawigacja, która nie jest aż tak wygodna jak mapa, ale jest naprawdę użyteczna. Niestety prace nad urządzeniem trwały z dużymi przerwami ponad rok. Koszty wykonania nie były wysokie ale wymagały sporej części pracy mechanicznych. Obecnie zabrałbym się za to inaczej są już bowiem dostępne gotowe i przystępne cenowo moduły wyświetlacza z wbudowanym procesorem. Zastosowanie takiego gotowego modułu zminimalizowało by prace mechaniczne a w pracach programistycznych można się znacznie wspomóc AI - ja większość kodu pisałem samodzielnie...

Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl


7 kwietnia 2026

Sterownik (fotokomórka) do automatycznego kosza na śmieci

Na portalach zakupowych można nabyć urządzenie określane jako "Automatyczny kosz na śmieci". Na czym ta "automatyczność" polega? Otóż kosz taki można otworzyć na trzy sposoby:
  • czujnikiem zbliżeniowym - po wykryciu obiektu 10-15 cm nad pokrywą otwiera ją na 5 sekund,
  • czujnikiem wstrząsowym - po "delikatnym" trąceniu kosza ten otwiera się na 5 sekund,
  • przyciskiem - po naciśnięciu którego kosz otwiera się i pozostaje otwarty aż do ponownego naciśnięcia przycisku.


Jak wiadomo w polskiej kuchni kosz znajduje się zwykle w szafce pod zlewozmywakiem. Niestety do takiego umiejscowienia kosz ten zupełnie się nie sprawdził. W założeniach kosz miał sobie stać w szufladzie pod zlewozmywakiem i otwierać się po jej wysunięciu - reagując na ruch (wstrząs). Niestety aby zadziałał czujnik wstrząsowy kosz musiał dostać sporego kopniaka - na lekkie wstrząsy przy wysuwaniu szuflady nie reagował. Zatem klapa musiała być wyzwalana bezdotykowo ale to też było upierdliwe - 5 sekund to często za krótko aby coś wrzucić, zatem często śmieć lądował na pokrywie zamiast w koszu. Na dodatek po wsunięciu szuflady kosza czujnik reagował na zlewozmywak znajdujący się ponad nim i kosz pozostawał otwarty w zamkniętej szufladzie. Ponadto odniosłem wrażenie że szybko wyczerpują się baterie (2 x AA), a raczej kosz przestaje działać pomimo jeszcze znośnego napięcia...

Reasumując - nietrafiony zakup. Czy aby na pewno? Sam kosz pasował wizualnie i gabarytowo. Mechanizm otwierający klapę też działał szybko i pewnie. Jedynie sterownik był nieadekwatny do potrzeb. Postanowiłem to zmienić i wykonać nowy.

Założenia:
  • reagowanie na światło a nie ruch - w zamkniętej szufladzie jest ciemno,
  • klapa powinna otwierać się przy otwarciu szuflady i pozostawać otwarta do jej zamknięcia,
  • możliwe także zamknięcie lub otwarcie klapy przy użyciu przycisku na obudowie.
Płytka starego sterownika była dość prosta. Na górze posiadała przycisk ręcznego otwierania, czujnik zbliżeniowy, diodę LED (wskazującą tryb pracy), sterownik silnika w postaci układu SA8301 w obudowie SOP8 oraz niezidentyfikowany mikrokontroler w obudowie SOP16. Z drugiej strony płytki znajdowały się dwa gniazda przyłączeniowe (baterii i silnika), kondensator elektrolityczny oraz prymitywny przełącznik wstrząsowy.


Moja płytka miała mieć te same gabaryty oraz elementy umiejscowione w tych samych miejscach - tak aby mogła być zamontowana w miejscu starej (którą pozostawiłem nienaruszoną aby możliwy był powrót do oryginału). Nowa płytka drukowana została zaprojektowana w programie Eagle, wykonana metodą termotransferu i pocynowana bezprądowo. W miejscu diody LED umiejscowiony został fotorezystor, pełniący rolę czujnika światła. Ponieważ nie mogłem szybko zakupić sterownika SA8301 zastosowałem inny - dwukanałowy MX1508 (w obudowie SOP16) - kanały zostały połączone równolegle co powinno zwiększyć obciążalność prądową. Jako mikrokontroler zastosowałem stary, poczciwy ATtiny13A.

Fotorezystor FR pracuje w dzielniku z rezystorem R, który jest załączany tylko na czas pomiaru - co obniża znacznie zużycie prądu. Ponadto sam procesor pozostaje cały czas w uśpieniu (SLEEP_MODE_PWR_DOWN) wybudzany watchdogiem co ok. 0,25 sek. tylko na czas pomiaru lub przyciskiem (podłączonym pod pin PB1 - INT0). Program został napisany w języku C i skompilowany w darmowym środowisku AVR-GCC.


Początkowo planowałem wlutować się z programatorem tylko na czas programowania ale podczas montażu przeprowadziłem modyfikację i wmontowałem 6pinowe gniazdo programowania, co umożliwia szybką zmianę programu w razie potrzeby. Stąd na stronie wierzchniej jest kilka krosów i rezystor przewlekany zamiast smd. Gniazdo się przydało gdyż w trakcie testów poprawiłem jeszcze jedną upierdliwą cechę. Otóż zarówno w oryginale jak i w pierwszej wersji programu przycisk uruchamiał silnik klapy natychmiast po jego naciśnięciu, co powodowało przytrzaskiwanie palca przez klapę. Po modyfikacji programu klapa zaczyna ruch dopiero po zwolnieniu przycisku i odczekaniu chwilki na zabranie ręki.


Ostatecznie mogę uznać moją modyfikację za udaną i w pełni spełniającą oczekiwania. Mała rzecz a cieszy :-)


Na temat tej konstrukcji rozpocząłem wątek na forum DIY portalu elektroda.pl