Skuterowy starter, hardware
Lista zakupowa
- Seeed XIAO BLE nRF52840 - Sklep Strona producenta
- Akumulator Li-Ion 1200mAh - Sklep
- Przetwornica step-up 5V - Sklep
- Czujnik prądu ACS712 20A - Sklep
- Ładowarka samochodowa USB - Użyłem starej dołączonej do kamerki samochodowej, ale sprawdzić się powinno cokolwiek
- Buzzer - Sklep
- Wyświetlacz OLED, kolorowy 16bit, 96x64 pikseli - Sklep
- Moduł z 4 przekaźnikami - Sklep
- Moduł z 1 przekaźnikiem - Sklep
- Przełączniki, przełączniki, kontrolki, kontrolki, jeszcze więcej kontrolek
- Płytka prototypowa, przewody, lutownica, cyna, filament to drukarki 3D, gniazdo na bezpiecznik, goldpiny, gniazda i inne takie drobnostki
Zasilanie
Mózgiem wszystkiego jest mikrokontroler XIAO BLE - miniaturowy, podobno energooszczędny moduł z Bluetoothem, który potrafi ładować podłączone do niego akumulatorki litowo-jonowe.
Xiao posiada dwie linie zasilania: 5V oraz 3.3V. W stanie czuwania, całość zasilana jest z akumulatorka, który jest w stanie zasilić tylko linię 3.3V. Aby móc ładować akumulatorek, oraz dostać dostęp do linii 5V, postanowiłem wykorzystać samochodową ładowarkę USB (która generalnie jest przetwornicą 12V->5V). Wpięta jest ona do zasilania skutera "za stacyjką" - po przekręceniu kluczyka, lub oszukaniu skutera, że się to zrobiło, 12V z akumulatora pójdzie na ładowarkę, która zasili Xiao.
Wszystkie przekaźniki, które mam, są zasilane napięciem 5V, więc żebym mógł ich w ogóle użyć, konieczne było podbicie napięcia do 5V - użyłem do tego przetwornicy step-up. W całym projekcie potrzebuję łącznie 4:
- Do włączenia zasilania,
- Do zasymulowania wciśnięcia hamulca,
- Do zasymulowania wciśnięcia przycisku rozrusznika,
- Do gaszenia silnika.
Istniała duża szansa, że wszystkie cztery przekroczą możliwości przetwornicy, postanowiłem więc rozdzielić je na dwie części. Moduł z jednym przekaźnikiem zasilany byłby z przetwornicy step-up i służyłby tylko do włączenia zasilania skutera. Po zrobieniu tego, w kontrolerze pojawia się napięcie 5V, które mogę użyć do bezpośredniego zasilenia pozostałych przekaźników.
Dźwięk i obraz
Ponieważ całość docelowo schowana miała być wewnątrz skutera, stwierdziłem, że przyda się możliwość dźwiękowego powiadomienia o stanie kontrolera - połączeniu, rozłączeniu, błędzie... Do takiego zastosowania spokojnie wystarczy jednotonowy bzyczek.
Na czas pracy, w celach debuggowych oraz dla zabawy, postanowiłem dodać kolorowy wyświetlacz, żeby móc podglądnąć co się aktualnie dzieje bez konieczności patrzenia na systemowe logi.
Schemat
Kolory użyte na schemacie:
- 🟥 Czerwony - Linia 3.3V
- 🟧 Pomarańczowy - Linia 5V
- ⬛ Czarny - Masa
- Magenta - Sterowanie przekaźnikami
- 🟦 Niebieski - Sterowanie ekranem
- Cyjan - Sterowanie bzyczkiem
- 🟩 Zielony - Pozostałe
Na środku, u góry, widoczny jest Xiao. Po lewej stronie są cztery przekaźniki. Pierwszy z góry ma wyjście podłączone inaczej niż pozostałe. Gaszenie silnika polega na zwarciu linii 60V idącej z okolic silnika do masy. Stwierdziłem, że w razie utraty zasilania przez kontroler lepiej jak silnik zgaśnie, niż będzie pracował w nieskończoność. Z tego powodu, przekaźnik od gaszenia podłączony jest w stanie domyślnie zwartym, na czas odpalania linia ta jest rozwierana.
Ostatni przekaźnik, na samym dole, odpowiada za włączenie zasilania. Po wysłaniu sygnału, zwierane są jego linie COM1
oraz NO1
, dzięki czemu prąd z akumulatora może dotrzeć do zasymilowanej ładowarki samochodowej, która z kolei zasila Xiao i daje mu dostęp do napięcia 5V.
Widoczne z prawej strony dwa oporniki to dzielnik napięcia, który zamienia 5V na 2.5V podłączone do pinu ADC. Potrzebuję sposobu na wykrycie czy zasilanie zostało poprawnie włączone, sprawdzenie dostępności linii 5V wydawało się najprostsze. Konieczne jednak było zbicie napięcia, ponieważ ADC w Xiao obsługuje maksymalnie 3.6V.
W prawym, dolnym rogu widoczny jest czujnik prądu, który finalnie wyleciał, bo nie udało mi się go okiełznać.
Co do wyświetlacza, w momencie gdy okazało się, że jednak potrzebne będzie więcej przekaźników, potrzebowałem wyczarować skądś dodatkowy pin GPIO. Postanowiłem pin RST wyświetlacza na stałe wpiąć w linię 3.3V. Początkowo wydawało się to działać, dużo później jednak okazało się, że czasem ekran nie wstaje poprawnie. W kolejnych iteracjach projektu pewnie pomyślę o XIAO nRF52840 Plus, który ma "kilka" GPIO więcej ( ͡° ͜ʖ ͡°)
Połączenie
We wczesnej wersji, jeszcze na płytce stykowej, całość wyglądała tak:
W tamtym momencie jeszcze myślałem, że wystarczą mi dwa przekaźniki. Użyłem modułu z dwoma, zasilanego napięciem 12V (okazuje się, że jest możliwe podbicie 3.3V do tego poziomu; w tamtym czasie nie widziałem na Botlandzie przekaźników na niższe napięcie ;_; ). Dla ułatwienia pisania, Xiao był wpięty w oficjalną płytę rozszerzeń, który ma sensowniejszy przycisk do resetowania. Na wszelki wypadek miałem też podłączone Raspberry Pi Pico, które miało pełnić rolę debuggera/programatora.
Kiedy program był już w miarę gotowy, mogłem przenieść wszystko z płytki stykowej na prototypową.
Luty nie są piękne, musiałem kilka razy przelutowywać niektóre przewody, a do tego przygrzałem kilka izolacji i swoje palce, ale wydaje się, że finalnie wszystko się trzyma i podpięte jest prawidłowo. Po zakończeniu lutowania, można było wydrukować obudowę i wszystko do niej upchać.
W pierwotnym planie akumulatorek miał być schowany wewnątrz obudowy, ale stwierdziłem, że lepiej mieć możliwość łatwego wyciągnięcia go, więc finalnie jest na zewnątrz. Na wszelki wypadek samochodowa ładowarka została dokładnie owinięta taśmą izolacyjną, bo nie chciałem ryzykować przecieku 12V na którykolwiek element, a już na pewno nie na akumulatorek pełen wybuchowej mieszanki litu i jonów.
Co dalej?
...pozostaje sprawdzić jak obudowa i luty wytrzymają wibracje i wstrząsy podczas jazdy.
Komentarze