Skuterowy starter, część 1
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?
Lista zakupowa
- 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
Założenia
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
Żeby móc osiągnąć to:
Musiałem przejść przez:
^ Czcionka wyrenderowana do bitmapy i przerobiona na zwykłą tablicę bajtów, bo zwykły font TTFowy zajmuje więcej, niż mam dostępnej pamięci na kontrolerze.
Pisanie w C po latach używania C++ jest ciekawym przeżyciem i pozwala docenić wszystkie bajery tam dostępne (jak chociażby std::vector
=D )
Komentarze
:0