Prezentowane urządzenie nie jest ogranicznikiem prędkości, który wymagałby dokonania modyfikacji w pojeździe, ale alarmem sygnalizującym osiągnięcie (i przekroczenie) zadanej prędkości. Aby nie absorbować wzroku, urządzenie ma brzęczyk, który wyda dwa długie sygnały dźwiękowe w przypadku przekroczenia wybranej prędkości, natomiast dwa krótkie sygnały dźwiękowe zasygnalizują, że pojazd zwolnił do akceptowalnej prędkości.
Cztery ustawienia wstępne
Monitor prędkości ma cztery programowalne ustawienia ograniczeń prędkości, które powinny wystarczyć w przypadku większości, napotkanych w podróży, przypadków. Co więcej, ekran praktycznie nie pozwala na wyświetlenie więcej niż czterech limitów. Podczas jazdy kierowca powinien mieć możliwość szybkiego wyboru ustawienia wstępnego, w miarę możliwości bez patrzenia na urządzenie. Nie chciałem używać ekranu dotykowego – kierowca powinien fizycznie poczuć naciśnięcie przycisku. Ze względów ergonomicznych przyciski umieszczono nad czterema ograniczeniami prędkości wyświetlanymi na ekranie.
Dobry pretekst, aby spróbować wersji 32-bitowej
Moje pierwsze programy wykorzystujące 8-bitowy mikrokontroler ATmega328 skojarzony z modułem GPS szybko pokazały, że jego 32 kB pamięci flash nie wystarczą do bardziej zaawansowanych aplikacji, szczególnie jeśli dane mają być wyświetlane graficznie na ekranie TFT. Dlatego też, pomimo wielu zalet mikrokontrolera ATmega328, zdecydowałem się przejść na wyższy poziom i wypróbować 32-bitowy mikrokontroler STM32. Najbardziej odpowiednią formą dla majsterkowiczów, takich jak ja, jest płytka BluePill z jej mikrokontrolerem STM32F103C8. Ta niewielka płytka znacznie ułatwia obsługę tego mikrokontrolera. Można ją łatwo zaprogramować poprzez port USB za pomocą Arduino IDE (pod warunkiem, że płytka zostanie wcześniej zaprogramowana za pomocą odpowiedniego bootloadera), jest kompaktowa i niedroga (cena to tylko kilka euro).
Rozmiary pamięci flash
Projekt ten jest pierwszą próbą zastosowania STM32F103C8. Należy zauważyć, że oficjalnie C8 jest wyposażony w 64 kB pamięci flash, podczas gdy wersja CB ma 128 kB, jednak czasami C8 ma aż 128 kB (podrabiane części?). Dzięki temu chętni będą mogli kontynuować naukę poprzez dodanie kolejnych urządzeń peryferyjnych, takich jak karta SD, moduł SIM, transmisja danych drogą radiową itp.
Moduł GPS
Moduł GPS zastosowany w tym projekcie to moduł NEO-6 firmy u-blox. Korzystanie z niego jest łatwe, ponieważ biblioteka TinyGPS+ [2] wykonuje całą pracę polegającą na dekodowaniu strumienia danych w formacie NMEA 0183 wysyłanego przez moduł GPS. Główne dane jakie w ten sposób uzyskujemy to:
- data i godzina UTC;
- długość i szerokość geograficzna w stopniach dziesiętnych;
- prędkość;
- kierunek;
- wysokość;
- liczba widocznych satelitów;
- wartość HDOP.
Poziome rozmycie precyzji, czyli HDOP [2] zależy od pozycji satelitów widzianych przez odbiornik GPS. Im niższa jest ta wartość (blisko 1), tym lepsza jest precyzja współrzędnych. Wartość HDOP równa 10 wskazuje, że współrzędne nie są zbyt dokładne lub nawet nieprawidłowe. Monitor prędkości nie używa tego parametru.
Wyświetlacz TFT
Jako wyświetlacza użyłem zwykłego modułu TFT 2,2″ z układem sterownika ILI 9341 i interfejsem SPI. Ma rozdzielczość 320×240 pikseli, co w zupełności wystarczy na dane, które chcemy wyświetlić (cztery wartości ograniczenia prędkości z krótkim komunikatem informującym o ewentualnym osiągnięciu (lub przekroczeniu) ograniczenia prędkości prędkości).
Monitor prędkości ma dwa główne tryby prezentacji wyników podczas normalnego użytkowania. Bieżący tryb wyświetlania jest zapisywany w pamięci EEPROM i przywoływany po ponownym włączeniu systemu. Wstępnie ustawione ograniczenia prędkości są również przechowywane w pamięci EEPROM. Używanych jest tylko sześć bajtów tej pamięci EEPROM: cztery bajty na ograniczenia prędkości, jeden bajt na ostatni wybrany ekran i jeden bajt na ostatnio wybrane ograniczenie prędkości.