2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Ten projekt powstał, ponieważ chciałem dowiedzieć się więcej o algorytmach sterowania i jak skutecznie zaimplementować funkcjonalne pętle PID. Projekt jest nadal w fazie rozwoju, ponieważ nie został jeszcze dodany moduł Bluetooth, który umożliwi sterowanie robotem ze smartfona obsługującego technologię Bluetooth.
Zastosowane silniki N20 DC były stosunkowo tanie, a co za tym idzie mają w sobie spory luz. Prowadzi to do niewielkiego szarpnięcia, gdy silniki pokonują „luz”, który wywiera moment obrotowy na koła. W związku z tym osiągnięcie idealnie płynnego ruchu jest prawie niemożliwe. Napisany przeze mnie kod jest dość prosty, ale skutecznie demonstruje możliwości algorytmu PID.
Podsumowanie projektu:
Podwozie robota jest drukowane w 3D za pomocą drukarki Ender 3 i jest zaprojektowane tak, aby pasowało do siebie na wcisk.
Robot jest sterowany przez Arduino Uno, które pobiera dane z czujników z MPU6050 i steruje silnikami prądu stałego poprzez zewnętrzny sterownik silników. Działa na baterii 7,4 V, 1500 mAh. Sterownik silnika reguluje to do 5 V, aby zasilić Arduino i dostarcza 7,4 V do silników.
Oprogramowanie zostało napisane od podstaw przy pomocy bibliotek 'Arduino-KalmanFilter-master' i 'Arduino-MPU6050-master' z gitHub.
Kieszonkowe dzieci:
- Części drukowane w 3D
- Arduino UNO
- Czujnik 6-osiowy MPU6050
- Sterownik silnika prądu stałego
- Silniki prądu stałego N20 (x2)
- Bateria 9V
Krok 1: Budowa robota
Druk i montaż
Cała konstrukcja powinna być dobrze dopasowana, ale użyłem superglue, aby zabezpieczyć komponenty, aby zapewnić całkowitą sztywność robota podczas wyważania.
Zaprojektowałem części w Fusion 360 i zoptymalizowałem każdą część do drukowania bez podpór, aby zapewnić węższe tolerancje i czystsze wykończenie powierzchni.
Ustawienia użyte w drukarce Ender 3 były następujące: Wysokość warstwy 0,16 mm @ 40% wypełnienia dla wszystkich części.
Krok 2: Robot druku 3D
Podwozie (x1)
Lewe koło (x2)
Lewa obudowa silnika (x2)
Obudowa Arduino (x1)
Krok 3: Algorytm sterowania PID
Napisałem od podstaw algorytm sterowania PID, korzystając z bibliotek „Arduino-KalmanFilter-master” i „Arduino-MPU6050-master” z gitHub.
Założenie Algorytmu jest następujące:
- Odczytaj surowe dane z MPU6050
- Użyj filtra Kalmana do analizy danych z żyroskopu i akcelerometru, aby wyeliminować niedokładności w odczytach żyroskopu spowodowane przyspieszeniem czujnika. Zwraca to stosunkowo wygładzoną wartość nachylenia czujnika w stopniach do dwóch miejsc po przecinku.
- Oblicz błąd w kącie, tj.: kąt między czujnikiem a wartością zadaną.
- Oblicz błąd proporcjonalności jako (stała proporcjonalności x błąd).
- Oblicz błąd całkowy jako sumę bieżącą (stała całkowania x błąd).
- Oblicz błąd pochodnej jako stałą jako [(stała różniczkowania) x (zmiana błędu / zmiana w czasie)]
- Zsumuj wszystkie błędy, aby uzyskać prędkość wyjściową, która ma zostać wysłana do silników.
- Oblicz, w którym kierunku obracać silniki na podstawie znaku kąta błędu.
- Pętla będzie działać w nieskończoność i będzie opierać się na danych wyjściowych, gdy dane wejściowe będą się zmieniać. Jest to pętla sprzężenia zwrotnego, wykorzystująca wartości wyjściowe jako nowe wartości wejściowe do następnej iteracji.
Ostatnim krokiem jest dostrojenie parametrów Kp, Ki i Kd pętli PID.
- Dobrym punktem wyjścia jest powolne zwiększanie Kp, aż robot oscyluje wokół punktu równowagi i złapie upadek.
- Następnie rozpocznij Kd przy około 1% wartości Kp i powoli zwiększaj, aż oscylacje znikną, a robot będzie płynnie ślizgał się po naciśnięciu.
- Wreszcie, zacznij od Ki około 20% Kp i zmieniaj, aż robot „przekroczy” zadaną wartość, aby aktywnie złapać upadek i powrócić do pionu.