Spisu treści:

Użyj Arduino do wyświetlania obrotów silnika: 10 kroków (ze zdjęciami)
Użyj Arduino do wyświetlania obrotów silnika: 10 kroków (ze zdjęciami)

Wideo: Użyj Arduino do wyświetlania obrotów silnika: 10 kroków (ze zdjęciami)

Wideo: Użyj Arduino do wyświetlania obrotów silnika: 10 kroków (ze zdjęciami)
Wideo: Sterownik talerza obrotowego do filmowania i timelapse'ów (część 1) 2024, Listopad
Anonim
Użyj Arduino do wyświetlania obrotów silnika
Użyj Arduino do wyświetlania obrotów silnika
Użyj Arduino do wyświetlania obrotów silnika
Użyj Arduino do wyświetlania obrotów silnika
Użyj Arduino do wyświetlania obrotów silnika
Użyj Arduino do wyświetlania obrotów silnika

W tym przewodniku opisano, w jaki sposób korzystałem z Arduino UNO R3, wyświetlacza LCD 16x2 z I2C i paska LED, który ma być używany jako wskaźnik prędkości silnika i światło zmiany biegów w moim samochodzie gąsienicowym Acura Integra. Jest napisany w kontekście kogoś z pewnym doświadczeniem lub kontaktem z oprogramowaniem Arduino lub ogólnie kodowaniem, oprogramowaniem matematycznym MATLAB oraz tworzeniem lub modyfikowaniem obwodów elektrycznych. W przyszłości może to zostać zmienione, aby było łatwiejsze do zrozumienia dla kogoś, kto ma niewielkie lub żadne doświadczenie w tych tematach.

Krok 1: Wybierz przewód Sigal

Wybierz przewód Sigal
Wybierz przewód Sigal

Potrzebny będzie sygnał skorelowany z prędkością obrotową silnika. Możliwe jest dodanie systemu mierzącego prędkość obrotową silnika, ale o wiele bardziej praktyczne jest podłączenie do istniejącego przewodu, który przenosi informacje o prędkości obrotowej silnika. Pojedynczy samochód może mieć wiele źródeł tego zjawiska i może się to bardzo różnić nawet z roku na rok w przypadku jednego modelu pojazdu. Na potrzeby tego tutoriala posłużę się przykładem mojego auta, zmodyfikowanej gąsienicy 2000 Acura Integra LS. Znalazłem w moim silniku (B18B1 z OBD2) niewykorzystane napięcie, które jest wysokie na 12V i spada do 0V po zakończeniu pełnego obrotu.

Rzeczy, które pomogą zidentyfikować potencjalny sygnał prędkości silnika:

  • Schemat połączeń dla twojego pojazdu
  • Wyszukiwanie forów dla Twojego pojazdu z wykorzystaniem sygnałów silnika/ECU
  • Przyjazny mechanik lub pasjonat samochodów

Krok 2: Przedłuż przewód do płyty Arduino

Przedłuż przewód do płytki Arduino
Przedłuż przewód do płytki Arduino
Przedłuż przewód do płytki Arduino
Przedłuż przewód do płytki Arduino

Po wybraniu odpowiedniego sygnału musisz go rozszerzyć na miejsce, w którym umieścisz swoją płytkę Arduino. Zdecydowałem się umieścić mój w pojeździe, w którym kiedyś było radio, więc poprowadziłem nowy przewód z silnika, przez gumową przelotkę w ścianie przeciwpożarowej i prosto do obszaru radiowego. Ponieważ istnieje już wiele poradników dotyczących zdejmowania izolacji, lutowania i zabezpieczania okablowania, nie będę wyjaśniał tego procesu.

Krok 3: Analiza sygnału

Analiza sygnału
Analiza sygnału

Tutaj sprawy mogą się skomplikować. Posiadanie ogólnej wiedzy na temat analizy sygnałów i elementów sterujących pomoże ci na dłuższą metę, ale jest to wykonalne przy niewielkiej wiedzy.

Wybrany przewód sygnałowy najprawdopodobniej nie będzie podawać dokładnej wartości prędkości obrotowej silnika. Będzie musiał zostać ukształtowany i zmodyfikowany, aby dać dokładną liczbę obrotów silnika, jaką chcesz. Ze względu na to, że każdy wybrany samochód i przewód sygnałowy może być inny, od tego momentu wyjaśnię, jak wykorzystałem sygnał położenia z dystrybutora na mojej Integra.

Mój sygnał to normalnie 12V i spada do 0V po wykonaniu jednego pełnego obrotu. Jeśli znasz czas na wykonanie jednego pełnego obrotu lub jednego pełnego cyklu, można to łatwo przełożyć na obroty/min przy użyciu kilku podstawowych pojęć.

1 / (sekundy na cykl) = cykle na sekundę lub Hz

Obroty na minutę = Hz * 60

Krok 4: Zakoduj swoją analizę sygnału

Zakoduj swoją analizę sygnału
Zakoduj swoją analizę sygnału

Ta metoda wymaga uzyskania czasu potrzebnego na zakończenie jednego pełnego cyklu sygnału wejściowego. Na szczęście oprogramowanie Arduino IDE ma polecenie, które dokładnie to robi, PulseIn.

To polecenie będzie czekać na sygnał, który przekroczy próg, rozpocznie zliczanie i zatrzyma zliczanie po ponownym przekroczeniu progu. Jest kilka szczegółów, na które należy zwrócić uwagę podczas korzystania z polecenia, dlatego zamieszczę tutaj link do informacji o PulseIn:

PulseIn zwróci wartość w mikrosekundach, a żeby matematyka była prosta, należy ją natychmiast przekonwertować na normalne sekundy. Postępując zgodnie z matematyką z poprzedniego kroku, ten czas można zrównać bezpośrednio z RPM.

Uwaga: po próbach i błędach odkryłem, że dystrybutor wykonuje dwa obroty na każdy obrót wału korbowego silnika, więc po prostu podzieliłem swoją odpowiedź przez 2, aby to uwzględnić.

Krok 5: Zidentyfikuj filtr

Zidentyfikuj filtr
Zidentyfikuj filtr

Jeśli masz szczęście, sygnał nie będzie miał „szumów” (wahań), a prędkość silnika będzie dokładna. W moim przypadku z dystrybutora dochodził spory szum, który często podawał napięcia dalekie od oczekiwanego. To zamienia się w bardzo fałszywe odczyty rzeczywistej prędkości obrotowej silnika. Ten hałas będzie musiał zostać odfiltrowany.

Po pewnej analizie sygnału, prawie wszystkie szumy dochodziły do częstotliwości (Hz) znacznie wyższych niż te, które wytwarzał sam silnik (co jest prawdą w przypadku większości rzeczywistych systemów dynamicznych). Oznacza to, że filtr dolnoprzepustowy jest idealnym kandydatem, aby się tym zająć.

Filtr dolnoprzepustowy przepuszcza niskie częstotliwości (pożądane) i tłumi wysokie częstotliwości (niepożądane).

Krok 6: Filtrowanie: część 1

Filtrowanie: część 1
Filtrowanie: część 1
Filtrowanie: część 1
Filtrowanie: część 1
Filtrowanie: część 1
Filtrowanie: część 1

Projektowanie filtra można wykonać ręcznie, jednak użycie MATLAB znacznie przyspieszy to, jeśli masz dostęp do oprogramowania.

Filtr dolnoprzepustowy można przyrównać do funkcji transferu (lub frakcji) w domenie Laplace'a (domena częstotliwości). Częstotliwość wejściowa zostanie pomnożona przez ten ułamek, a wyjściem będzie przefiltrowany sygnał, który zawiera tylko te informacje, których chcesz użyć.

Jedyną zmienną w funkcji jest tau. Tau jest równe 1 / Omega, gdzie Omega jest żądaną częstotliwością graniczną (musi być w radianach na sekundę). Częstotliwość graniczna to granica, przy której częstotliwości wyższe od niej zostaną usunięte, a częstotliwości niższe od tej wartości zostaną zachowane.

Ustawiam częstotliwość odcięcia równą obrotom, których mój silnik nigdy nie osiągnie (990 obr./min lub 165 Hz). Wykresy FFT pokazują w przybliżeniu, jakie częstotliwości niósł mój surowy sygnał oraz częstotliwości, które wyszły z filtra.

Krok 7: Filtrowanie: część 2

Filtrowanie: część 2
Filtrowanie: część 2
Filtrowanie: część 2
Filtrowanie: część 2

Tutaj MATLAB został ponownie wykorzystany ze względu na czas. Definiowana jest częstotliwość graniczna, z której wyświetlana jest wynikowa funkcja transferu. Należy pamiętać, że ta część dotyczy tylko domeny Laplace i nie może być bezpośrednio używana na mikrokontrolerze opartym na czasie, takim jak Arduino UNO R3.

Krok 8: Filtrowanie: część 3

Filtrowanie: część 3
Filtrowanie: część 3
Filtrowanie: część 3
Filtrowanie: część 3

MATLAB ma polecenie, które przekształci funkcję ciągłą (dziedzina częstotliwości) na funkcję dyskretną (domena czasu). Dane wyjściowe tego polecenia zapewnią równanie, które można łatwo włączyć do kodu Arduino IDE.

Krok 9: Filtrowanie: część 4

Filtrowanie: część 4
Filtrowanie: część 4
Filtrowanie: część 4
Filtrowanie: część 4

W szkicu Arduino uwzględnij zmienne u i y przed konfiguracją. Polecenie float po prostu definiuje, w jaki sposób zmienna będzie przechowywać dane (rzeczy takie jak wartość maksymalna, ułamki dziesiętne itp.), a link do dalszych informacji na ten temat zostanie podany tutaj: https://www.arduino.cc/reference/en/language /waria…

W pętli, w której odbywa się konwersja z nieprzetworzonego sygnału na prędkość silnika, należy uwzględnić zmienną u oraz wielokrotne równanie y. Istnieje wiele sposobów wykorzystania tego, ale zmienna u powinna być ustawiona na równą mierzonemu surowemu sygnałowi wejściowemu, a zmienna y będzie wartością filtrowaną.

Zalecana: