Skuterowy starter, wstęp

Co zrobić, jak styki w stacyjce skutera zaśniedziały, a ty masz mikrokontroler z bluetoothem?

Odpowiedź: Zrobić urządzenie, które pozwoli ci uruchomić silnik używając telefonu.

Kontekst

Mam chiński skuterek, w którego stacyjce styki czasem nie stykają. Jestem fanatykiem Raspberry Pi, mam też kilka Raspberry Pi Pico. Stwierdziłem - czemu by nie pobawić się w zrobienie układu, który będzie potrafił po pierwsze włączyć zasilanie (równoważne przekręceniu kluczyka w stacyjce), a następnie zakręcić rozrusznikiem?

Założenia projektowe

  • Sterowane przez bluetootha
    • Ręczne odpalenie naciskając przycisk w aplikacji
    • Automatyczne odpalenie/włączenie zasilania jak będę obok
  • Odpalenie używając kluczyka ma dalej być możliwe,
  • Czuwanie na baterii, po włączeniu zasilania ładowanie jej z akumulatora/prądnicy,
  • Kontrolery przeważnie mają gniazdo USB, więc do zasilania można użyć samochodowy adapter 12V-USB,

Lista zakupowa

Hardware

  • Seeed XIAO BLE nRF52840 Sense - mikrokontroler z bluetoothem
  • Ekran OLED - do wyświetlania stanu, głównie debugowo
  • Bzyczek - do robienia hałasu, głównie debugowo
  • Dwa przekaźniki - sterowane napięciem 3.3V
  • Przetwornica step-up do 5V - do zasilenia przekaźników mając tylko dostęp do 3.3V
  • Czujnik natężenia prądu - do wykrycia czy silnik się odpalił
  • Płytki stykowe, przewody, przewody, przewody...
  • Dodatkowo: Seeeduino Xiao Expansion Board - dla łatwiejszego resetowania kontrolera i ewentualnego debugowania
  • Dodatkowo: Raspberry Pi Pico - jako programator

Software

Początkowo planowałem napisać program w Pythonie, ale był problem z dostępnością sterowników do wszystkiego. Potem testowałem Arduino IDE, ale wyświetlacz wyciągał jedną klatkę na sekundę. Finalnie stanęło na pójściu na całość i ogarnięciu Zephyra - na szczęście miałem kogo prosić o pomoc.

Stan prac

Aktualnie mam piękną pajęczynę na płytce stykowej. Miałem problem z wyświetlaczem, bo:

  1. Zephyr nie ma sterownika do ekranu SSD1331
  2. Dokumentacja ekranu nie jest zbyt oczywista i trochę zajęło mi ogarnięcie w jakim formacie wysyłać piksele

Ogarnięcie go było na tyle ciekawe, że zasługuje na osobny wpis.

Przy okazji, pisanie w C po latach używania C++ jest ciekawym przeżyciem i pozwala docenić wszystkie bajery tam dostępne, które normalnie wydają się oczywiste (jak chociażby std::vector=D )

Komentarze