Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino Uno+jako kierownica - enkoder optyczny.

Marcinn212 05 Sty 2017 19:23 1134 19
  • #1 05 Sty 2017 19:23
    Marcinn212
    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)

  • #3 06 Sty 2017 00:30
    Marcinn212
    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.

  • #5 06 Sty 2017 10:13
    ASMnauka_
    Poziom 14  

    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.

  • #6 06 Sty 2017 12:24
    dondu
    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.

  • #7 06 Sty 2017 18:55
    ASMnauka_
    Poziom 14  

    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

  • #8 08 Sty 2017 22:01
    Marcinn212
    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

  • #9 09 Sty 2017 10:35
    Marcinn212
    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.

  • #11 09 Sty 2017 13:43
    Marcinn212
    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ą).

  • #12 09 Sty 2017 16:17
    emarcus
    Poziom 34  

    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

  • #13 09 Sty 2017 17:34
    Marcinn212
    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. :)

  • #14 10 Sty 2017 04:47
    emarcus
    Poziom 34  

    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

  • #15 10 Sty 2017 09:21
    Marcinn212
    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.

  • #16 11 Sty 2017 13:12
    ElectronicRideTV
    Poziom 10  

    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).

  • #17 11 Sty 2017 16:21
    Marcinn212
    Poziom 6  

    A nie można gotowego przykładu z językiem C?
    Wtedy byłoby dużo prościej dla mnie :)

  • #18 12 Sty 2017 10:18
    ElectronicRideTV
    Poziom 10  

    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.

  • #19 13 Sty 2017 11:49
    Marcinn212
    Poziom 6  

    Jest język C proszę go użyć,chyba ta opcja została dodana z myślą o tym :)

  • #20 25 Sty 2017 10:39
    ElectronicRideTV
    Poziom 10  

    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

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME