Skocz do zawartości

Mindstorms, silnik działający jak serwo, jak?


Pomocna odpowiedź

Napisano

Jako, że to mój pierwszy post, wypada się przywitać, więc witam się 🙂

A teraz do sedna. Nie wiem jak to zrobić, aby silnik zachowywał się jak serwo (które w mindstormie nie występuje). Czyli ramię przymocowane do osi wychylało się o zadany kąt, odczytywany na bieżąco, ot choćby z czujnika światła. Silnikiem można sterować zadając mu obrót o okreslony kąt, ale to nie to. Nadmienię, że ogarniam tylko ( aż... i to z ogromnym wysilkiem) domyslny program bloczkowy do ev3, żadne tam pisanie kodu 🙂, chociaż z funkcją liniową (podobno tutaj niezbędną) już sobie daję radę 🙂). Pomóżcie "zielonemu" i "humaniście" wybrnąć z twarzą przed synem 8-mio letnim "programistą. "

Zgadza się, tylko ten tryb to jest sterowanie obrotami: w zadanym czasie, w zadanej liczbie obrotów, albo o zadany kąt. Nie da się po prostu przełączyć silnika w tryb serwa, który odczytuje aktualny odchył względem ustalonej pozycji "0". Próbowałem ożenić bloczek mierzący obroty silnika (w stopniach obrotu) z bloczkiem sterowania silnikiem, wsadzając po drodze czujnik światła. Teoretyzowałem, że jak od odczytu ilości światła (0-100) odejmę aktualny odczyt miernika obrotu kątowego (po wcześniejszym zresetowaniu w pozycji "0"), i przeniesieniu wyniku na wejście sterujące obrotem kątowym silnika, otrzymam ładnie działający algorytm odchylający ramię od 0 do 100 stopni... niestety, w praktyce ramię "silnikoserwa" buja się niestabilnie w te i we wte, aż w końcu "rzuca się" w skrajną pozycję i blokuje 🙁

załączam printscrena moich prób.

s_13, bujanie się niestabilnie to z mojego doświadczenia ulubione zachowanie Lego Mindstorms. Z tego co wiem obrót o kąt to najbliżej serwa jak to potrafi niestety.

Szczerze nie lubię tego zestawu. Tyle zmarnowanego potencjału.

No i wspólnymi siłami (ja i potomek) udało się coś tam zdziałać🙂. Nie wkleję teraz screena, ale opiszę (sorry, że zbyt łopatologicznie i niefachowymi terminami się posługuję):

Najpierw kalibruję czujnik, czyli ustawiam nad czarnym tłem i zapisuję wartość jako minimum, potem białe tło i maximum. Wychodzi, że czarne to 0, białe to 100. Tworzę zmienne "odczyt" i "ostatni_odczyt" ustawiam je wstępnie na 50, teraz w pętli: odczyt czujnika, zapis do "odczyt", odejmuję "ostatni_odczyt", wynik wychodzi do sterowania silnika, jako obrót o x stopni (wychył w stopniach od -50 do 50, jeśli nie pasi, to dodać mnożnik). Odczyt z czujnika zapisuję do "ostatni_odczyt" do użycia w następnym przebiegu pętli. Dodaję jeszcze "delay", żeby silnik zdążył się obrócić, wartość jest proporcjonalna do wielkości obrotu w aktualnej pętli, oczywiście wartość bezwzględna i mnożnik, bo to jakieś milisekundy będą. Teraz doświadczalnie dostrajam wszystko za pomocą zmiany dwóch parametrów: mocy silnika i mnożnika "delay". Wszystko chodzi w miarę płynnie, oczywiście bezwładność jakaś tam jest, i to płynna, ale dla moich potrzeb akceptowalna. Da się wyregulować, żeby nie było bujania w te i we wte i przede wszystkim nie rozregulowuje się, czyli "zero" jest zawsze w tym samym położeniu. Dziękuję i polecam się 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...