Opis projektu
Ten projekt wykorzystuje czujnik efektu Halla M5Stack do śledzenia prędkości roweru. Zaczęliśmy od przymocowania trzech małych magnesów do wewnętrznej obręczy koła i solidnego zamontowania czujnika Halla na ramie. Gdy koło się obraca, magnesy obracają się razem z nim, a za każdym razem, gdy magnes mija czujnik Halla, generuje on sygnał elektryczny.
Aby obliczyć prędkość, najpierw mierzymy obwód koła. Następnie rejestrujemy interwał czasowy między dwoma sygnałami, aby określić, ile czasu zajmuje magnesowi wykonanie pełnego obrotu. Dzieląc obwód koła przez zmierzony czas, otrzymujemy prędkość roweru.
Niezbędne jest wprowadzenie mechanizmu antydrganiowego w kodzie, aby uniknąć wielokrotnych wyzwalaczy podczas powolnego obracania się koła. Bez tego czujnik może rejestrować fałszywe sygnały, co prowadzi do nieprecyzyjnych odczytów prędkości. Ten projekt pokazuje, jak skutecznie stosować czujniki, zapewniając jednocześnie dokładność i niezawodność dzięki przemyślanej implementacji.
Funkcjonalne cechy
- Wyświetlanie prędkości w czasie rzeczywistym: Aktualna prędkość roweru jest wyświetlana na ekranie M5StickC Plus 2 w czasie rzeczywistym, zapewniając dokładne pomiary prędkości dla precyzyjnego doświadczenia jazdy.
- Wykrywanie czujnika efektu Halla: System wykorzystuje czujnik efektu Halla M5Stack do obliczania prędkości poprzez pomiar częstotliwości, z jaką magnes przechodzi nad czujnikiem, zapewniając dokładne i spójne śledzenie prędkości.
- Mechanizm przeciwdrganiowy: Wbudowany algorytm przeciwdrganiowy zapobiega wielokrotnym wyzwoleniom sygnału spowodowanym niskimi prędkościami kół lub nierównościami drogowymi, zwiększając dokładność wyświetlania prędkości.
- Lekka konstrukcja: Dzięki kompaktowemu i lekkiego M5StickC Plus 2 jako kontrolerowi, system idealnie pasuje do rowerów, zajmując minimalną przestrzeń, a jednocześnie zapewniając solidną funkcjonalność.
Instalacja i Obsługa
Warunek wstępny
Zależność oprogramowania: Arduino IDE itd. Wymagania sprzętowe: kabel USB-C, M5StickCPlus2, jednostka efektu Halla itd. Zależności: biblioteka M5StickCPlus2, biblioteka Arduino itd.
Instalacja zależności
1. Po zainstalowaniu Arduino IDE, otwórz menu Ustawienia, wklej link do płytki rozwojowej M5 w odpowiednie pole i kliknij OK, aby zapisać zmiany.
2. Otwórz Narzędzia->Płytka->Menedżer Płytek
3. Wyszukaj M5Stack w Menedżerze Bibliotek Arduino i zainstaluj ją. Ponieważ jest już zainstalowana na tym systemie, nie będę powtarzał procesu instalacji.
4. Wybierz wersję rozwojową, Narzędzia->Płytka->M5Stack Arduino->M5StickCPlus2
5. Następnie zainstaluj bibliotekę M5StickCPlus2, wybierając Narzędzia -> Zarządzaj bibliotekami, wyszukując 'M5StickCPlus2' i klikając Zainstaluj. Jeśli biblioteka jest już zainstalowana, proces instalacji zostanie pominięty.
1. Najpierw uzyskujemy jednostkę efektu Halla i dowiadujemy się, że za każdym razem, gdy magnes zbliża się, wskaźnik na pinie wyjściowym się zapala, a sygnał elektryczny jest wysyłany z pinu I.
2. Najpierw zaczęliśmy od zdefiniowania pinów odbiorczych dla sygnałów elektrycznych czujnika Halla.
#define WHEEL_CIRCUMFERENCE 2000 // Obwód opony w mm #define HALL_PIN 33 // Piny czujnika Halla #define DEBOUNCE_TIME 50 // Czas eliminacji drgań w milisekundach #define INPUT_PIN 26
3. Inicjalizacja wyświetlacza Plus 2.
// Initialize M5StickC Plus2 M5.begin(); // Setting the orientation and font of the display M5.Lcd.setRotation(1); M5.Lcd.setTextSize(4); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE);
4. Projekt przeciwdziałający drganiom: Poprzez wykrywanie odstępu między sygnałami elektrycznymi z czujnika Halla, możemy określić, czy wystąpiły powtarzające się wykrycia.
int counter = 0; // Zapisz liczbę rotacji opon unsigned long lastPulseTime = 0; // Czas ostatniego wykrytego impulsu unsigned long lastDisplayTime = 0; // Ostatni czas wyświetlenia aktualizacji unsigned long currentTime = 0; currentTime = millis(); // Read Hall sensor status bool stanHalla = digitalRead(HALL_PIN); // Changes in Hall sensors are detected and jitter has to be filtered out if (hallState == LOW && (currentTime - lastPulseTime > DEBOUNCE_TIME)) { counter++; // Zwiększona liczba wskazuje na jedną rotację opony. lastPulseTime = currentTime; // Aktualizuj czas ostatniego impulsu }
5. Kluczem do uzyskania prędkości jest jej obliczenie poprzez zmierzenie odstępu czasu między dwoma sygnałami i połączenie tego z obwodem koła, a następnie wyświetlenie wyniku na ekranie M5StickC Plus 2.
// Update screen display every 1 second if (currentTime - lastDisplayTime >= 1000) { M5.Lcd.fillScreen(BLACK); M5.Lcd.setCursor(20, 20); // Calculation of v'elocity in millimeters per second, converted to meters per second double speed = ((double)counter * (double)WHEEL_CIRCUMFERENCE) / 1000.0; // Create a character buffer to store the formatted speed value char buffer[20]; snprintf(buffer, sizeof(buffer), ' Speed: %.2f m/s', speed); // Prints formatted speed value to LCD M5.Lcd.print(buffer); // Reset Counter counter = 0; // Update the displayed time lastDisplayTime = currentTime; }
Kompiluj i Uruchom
1. Najpierw pobierz archiwum zip. Po zakończeniu pobierania rozpakuj je i otwórz speed.ino plik.
2. Podłącz M5StickC Plus 2 do komputera za pomocą kabla USB-C. Następnie przejdź do Narzędzia -> Port i wybierz odpowiedni port.
3. Kliknij Kompiluj, a po zakończeniu kompilacji kliknij Prześlij.
Prezentacja Projektu