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:
- Zephyr nie ma sterownika do ekranu SSD1331
- 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
:0