Elektroda.pl
Elektroda.pl
X
BotlandBotland
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino Uno+jako kierownica - enkoder optyczny.

05 Sty 2017 19:23 2118 19
  • Poziom 6  
    Witam wszystkich.
    Otóż posiadam Arduino Uno r3 i chciałbym użyć enkodera optycznego jako czujnika na kierownicy.
    Problem w tym, że nie bardzo wiem jakie polecenia wpisać w programie, aby działało to tak, jak bym chciał.
    Jeśli jest to możliwe, chciałbym żeby ktoś napisał mi gotowe polecenia, które będą działać bez opóźnień, bez nakładania się wartości, przy szybkich zmianach kierunku kierownicy.
    Tarcza enkodera ma 100 szczelin, wygląda on tak:
    Arduino Uno+jako kierownica - enkoder optyczny.tr.JPG Download (23.86 kB)
  • BotlandBotland
  • Poziom 6  
    dondu napisał:
    Enkoder ten odczytujesz jak przycisk, czyli wykrywać zmiany stanu pinu.
    Różnica do przycisku jest taka, że nie ma zjawiska drań styków, więc jest prościej.


    Prosiłbym o przykład,liczy mi tylko 1 i 0.
  • BotlandBotland
  • Poziom 15  
    dondu napisał:
    Enkoder ten odczytujesz jak przycisk, czyli wykrywać zmiany stanu pinu.
    Różnica do przycisku jest taka, że nie ma zjawiska drań styków, więc jest prościej.
    Nie do końca tak samo.
    W tym przypadku trzeba jeszcze "odczytać" zmianę kierunku ruchu kierownicy.
  • Moderator Mikrokontrolery Projektowanie
    ASMnauka_ napisał:
    Nie do końca tak samo.
    W tym przypadku trzeba jeszcze "odczytać" zmianę kierunku ruchu kierownicy.

    Odczyt jest taki sam jak przycisku - reakcja na zbocze.
    Ty piszesz natomiast o wykorzystaniu informacji o wykrytym zboczu, a to nie ma nic wspólnego z sposobem odczytu sygnału, tylko z algorytmem wykorzystania wykrytego zdarzenia.
  • Poziom 15  
    Marcinn212 pod tym linkiem kryje się częściowa odpowiedź na Twoje pytanie.
    A dokładniej ten cytat:
    Warto zauważyć, iż sygnał 1 na przewodach wyjściowych (niebieski i żółty przewód) jest przesunięty względem nich o 90 stopni. Jest to dobre rozwiązanie ułatwiające odczytanie w którą stronę obraca się tarcza enkodera, ponieważ sygnał na jednym przewodzie pojawi się wcześniej niż na drugim.
    Ja zrobiłbym to w następujący sposób.
    Przewód Niebieski (sygnałowy) podłączył do jednego przerwania zewnętrznego.
    Przewód Żółty (sygnałowy) podłączył do drugiego przerwania zewnętrznego.
    Piny D2 i D3 (o ile jest to ATmega 328).
    Następnie odczytujesz co się stało na obu przerwaniach.
    Jeśli pin D2 równa się jeden a pin D3 równa się zero to kierunek równa się prawo.
    I odwrotnie w przypadku obrotu w lewą stronę.
    Oczywiście to tylko teoria.
    A co do zliczania.
    Jeżeli już odczytasz kierunek obrotu to w przerwaniu zwiększasz każdy impuls (dodajesz jeden do istniejącego odczytu).
    Jeżeli ilość odczytu równa się 100 to zerujesz odczyt (zmienną).
    Jako że ten enkoder ma tarczę o 100 szczelinach.
    Nie wiem w jakim języku piszesz więc zbyt wiele Ci nie mogę pomóc :(
    Pozdrawiam
  • Poziom 6  
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 11 [minuty]:

    Mam takie pytanie,jak podpiąć do UNO kierownicę przez USB,żeby emulować ją w panelu sterowania? Wtedy bym wykorzystał sterowniki urządzenia które mam do kierownicy i sterowałbym z pull up kierownicą z enkodera a resztę przycisków normalnie z kierownicy.
    Chciałbym odczytać dane z tej kierownicy,żeby emulować ją.

    Dodano po 4 [godziny] 8 [minuty]:

    ASMnauka_ napisał:
    Marcinn212 pod tym linkiem kryje się częściowa odpowiedź na Twoje pytanie.
    A dokładniej ten cytat:
    Warto zauważyć, iż sygnał 1 na przewodach wyjściowych (niebieski i żółty przewód) jest przesunięty względem nich o 90 stopni. Jest to dobre rozwiązanie ułatwiające odczytanie w którą stronę obraca się tarcza enkodera, ponieważ sygnał na jednym przewodzie pojawi się wcześniej niż na drugim.
    Ja zrobiłbym to w następujący sposób.
    Przewód Niebieski (sygnałowy) podłączył do jednego przerwania zewnętrznego.
    Przewód Żółty (sygnałowy) podłączył do drugiego przerwania zewnętrznego.
    Piny D2 i D3 (o ile jest to ATmega 328).
    Następnie odczytujesz co się stało na obu przerwaniach.
    Jeśli pin D2 równa się jeden a pin D3 równa się zero to kierunek równa się prawo.
    I odwrotnie w przypadku obrotu w lewą stronę.
    Oczywiście to tylko teoria.
    A co do zliczania.
    Jeżeli już odczytasz kierunek obrotu to w przerwaniu zwiększasz każdy impuls (dodajesz jeden do istniejącego odczytu).
    Jeżeli ilość odczytu równa się 100 to zerujesz odczyt (zmienną).
    Jako że ten enkoder ma tarczę o 100 szczelinach.
    Nie wiem w jakim języku piszesz więc zbyt wiele Ci nie mogę pomóc :(
    Pozdrawiam


    Tylko nie wiem co w jakiej linijce :D
  • Poziom 6  
    Pobrałem program teensy,ale przy wgrywaniu programu wyskakuje mi taki błąd.
    Czy ktoś pomoże? Arduino Uno+jako kierownica - enkoder optyczny.
  • Poziom 6  
    dondu napisał:
    Nie znam, ale w ostatnim zdaniu jest napisane co powinieneś zrobić.

    Zrobiłem i nic to nie dało..

    Dodano po 1 [minuty]:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 1 [minuty]:

    Jeśli pin D2 równa się jeden a pin D3 równa się zero to kierunek równa się prawo.
    I odwrotnie w przypadku obrotu w lewą stronę.
    Gdzie to mam wrzucić?

    Dodano po 41 [sekundy]:

    Jeżeli już odczytasz kierunek obrotu to w przerwaniu zwiększasz każdy impuls (dodajesz jeden do istniejącego odczytu).
    Jeżeli ilość odczytu równa się 100 to zerujesz odczyt (zmienną).
  • Poziom 37  
    Marcinn212 napisał:
    Witam wszystkich.
    Otóż posiadam Arduino Uno r3 i chciałbym użyć enkodera optycznego jako czujnika na kierownicy.


    Ja tu nawiążę do pierwszego postu:


    To zależy w jakim sensie ten czujnik ma oddziaływac.
    Jezeli spodziewasz się aby wskazywał odchylenie od poziomu poprzeczki kierownicy, to takiej funkcji nie osiągniesz tym enkoderem.
    Owszem mozesz to odchylenie mierzyc od jakiegoś nieokreślonego położenia przyjętego jako zerowe w momencie włączenia układu, lecz jednak po wyłaczeniu i ponownym włączeniu ta informacja o położeniu kierownicy jest gubiona.
    Aby skutecznie i niezależnie określic położenie kierownicy (ogólnie objektu obrotowego) musiałbyś zastosowac encoder absolutny zamiast incrementalnego. Róznica jest w rodzaju tarczy i ilości kanałów. Twój encoder jest dwukanałowy, z czego wynika że output jest 2-bitowy. Ilośc działek na tarczy, wskazuje tylko na rozdzielczośc, która i tak ostatecznie będzie zależała od oprogrowania. W efekcie możesz stosowac metodę pomiaru z pojedyncza evaluacją, lub podwójną a nawet poczwórną evaluacją.
    Encoder absolutny dla odmiany ma kilka kanałów (zwykle 8 lub więcej) i do tego odpowiednio zmodyfikowana tarcza pozwalająca jednoznacznie określic połozenie wałka natychmiast po włączeniu. Z tego powodu wymaga ustawienia orientacji/synchronizacji z punktem odniesienia podczas montażu.
    Aby łatwiej zrozumiec funkcjonalnośc i kod dla twojego encodera prześledź ten króki video-clip.
    https://www.youtube.com/watch?v=HQuLZHsGZdI

    Co prawda przykład ten jest oparty na zwykłym ręczny impulsatorze ALPHA, lecz ten twój nie wiele różni się od użytego w pokazie . W swoim masz inną rozdzielczośc i wyeliminowane drganie styków, wobec czego możesz pominąc pierwsze 6 minut pokazu; pozostała częśc warta uwagi i przestudiowania.
    Masz tam też gotowy kod jezeli będziesz mógł to zastosowac.

    e marcus
  • Poziom 6  
    Kierownice logitech i niektóre fanatec korzystaja z takiej tarczy jaką mam i działają.
    Czyli mam sobie dać spokój,bo enkoder absolutny kosztuje kilkaset złotych,za tyle to kupię lepszą używaną kierownicę :)
    Dzięki wszystkim za udział w temacie. :)
  • Poziom 37  
    Marcinn212 napisał:
    Kierownice logitech i niektóre fanatec korzystaja z takiej tarczy jaką mam i działają.

    Nie pisałeś że chodzi tu o kierownicę do Games
    Oczywiście ‘działają’ bo dekodowanie i synchronizacja z punktem odniesienia jest częścią softu. Posługując się taką ‘kierownicą’ nie piszesz własnej applikacji jak dekodowac sygnał z encodera.
    Po włączeniu soft automatycznie mappuje encoder do defaultowej wartości w applikacji. Zupełnie analogicznie jak mysz komputerowa. - Zauważ że po włączeniu, kursor myszy ukazuje się zawsze w tej samej defaultowej pozycji na ekranie, a nie gdzieś pod biurkiem lub za ścianą.
    Te też nie mają wbudowanych encoderów absolutnych.

    e marcus
  • Poziom 6  
    emarcus napisał:
    Marcinn212 napisał:
    Kierownice logitech i niektóre fanatec korzystaja z takiej tarczy jaką mam i działają.

    Nie pisałeś że chodzi tu o kierownicę do Games
    Oczywiście ‘działają’ bo dekodowanie i synchronizacja z punktem odniesienia jest częścią softu. Posługując się taką ‘kierownicą’ nie piszesz własnej applikacji jak dekodowac sygnał z encodera.
    Po włączeniu soft automatycznie mappuje encoder do defaultowej wartości w applikacji. Zupełnie analogicznie jak mysz komputerowa. - Zauważ że po włączeniu, kursor myszy ukazuje się zawsze w tej samej defaultowej pozycji na ekranie, a nie gdzieś pod biurkiem lub za ścianą.
    Te też nie mają wbudowanych encoderów absolutnych.

    e marcus


    Dlatego chciałem emulować inne urządzenie z Arduino,żeby korzystać ze sterownika softu.
  • Poziom 11  
    Mikrokontroler 328P w tym arduino nie odczytuje portu USB, a ten moduł kierownicy najprawdopodobniej takowy posiada prawda? Więc nie da się wykonać czegoś takiego niestety. W sensie Ty nie wykonasz, ponieważ masz za małą wiedzę (ja również). Używałeś programu, który odczytywał informacje z arduino portem szeregowym i sterowałeś gazem i hamulcem prawda, czy źle zrozumiałem? To podepnij resztę przycisków z kiery do ardu i po temacie i odpowiednio napisany kod do enkodera również umożliwi super-hiper szybką reakcję i prawidłowe działanie. Będzie można nawet zrobić kierownicę tylko obrotową ile się chce. Nie znam tego programu, ale jeżeli odczytywał by np kąt wychylenia (który obliczał by program wgrany w arduino) to by funkcjonował czy reaguje tylko na 1,0 czy analogowo? Też można by to w jakiś sposób obliczyć np. kierownica na prosto to 0 w lewo o jedną szczelinę to jeden i na odwrót. Kolejna szczelina to kolejna cyfrowa 1, którą program dodaje, lub odejmuje, a wynik to liczba, którą program (w komputerze przerobi na skręt o kąt) obliczy i wyśle. A dla rozróżnienia kierunku lewego i prawego to skręt w prawo to dodawanie (+1) a skręt w lewo to odejmowanie (-1).
  • Poziom 6  
    A nie można gotowego przykładu z językiem C?
    Wtedy byłoby dużo prościej dla mnie :)
  • Poziom 11  
    Jak nie użyłeś wyszukiwarki to my tego za Ciebie nie zrobimy...
    Uwierz mi, że tak dla nas też by było prościej.
  • Poziom 6  
    Jest język C proszę go użyć,chyba ta opcja została dodana z myślą o tym :)
  • Poziom 11  
    Jest taki język ale nie każdy go zna. To nie takie proste jak by się mogło zdawać, a jeżeli jest to zrób to :3