Skocz do zawartości

Elvis

Nowy
  • Zawartość

    2694
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    198

Posty napisane przez Elvis

  1. PS/2 jest łatwo dekodować, trudniej byłoby w przypadku myszki po USB.

    Ale moim celem nie było używanie całej myszy w robocie. Chciałem sprawdzić, czy ma sens wylutowanie sensora z myszki i użycie we własnym projekcie.

    Po eksperymentach widzę, że największy problem to część mechaniczna. Soczewkę i czujnik trzeba bardzo dokładnie umieścić - najprościej wykorzystać kawałek obudowy myszki.

    Spostrzeżeniami postanowiłem się podzielić i stąd ten artykuł 🙂

  2. Wydawało mi się, że opis jest czytelny. Przeróbka była bardzo prosta. Pewnie inne myszki będą miały w innych miejscach podłączenia, więc nie piszę co gdzie jest na płytce. Każdy powinien szybko zorientować się co i jak.

    1) podłączyłem GND płytki ewaluacyjnej do GND myszki (pin 6 układu PAW3101DB)

    2) zasilanie 5V podłączone do zasilania myszy (pin 7)

    3) wolny pin IO z płytki (wybrałem PG0) podłączyłem do SCLK (pin 4)

    4) kolejny wolny pin IO (u mnie PG1) podłączyłęm do SDIO (pin 3)

    Jedynie pkt.4 był ciekawy, pozostałe to proste podłączenie przewodów. Na płytce pompy linia SDIO była połączona przez rezystor 100Ohm. Dzięki temu podczas przełączania wysyłanie/odbieranie danych nie występuje zwarcie. Więc podłączyłem płytkę przez ten rezystor.

    Pozostało jeszcze odłączyć układ który był w oryginalnej myszce - wystarczyło przeciąć ścieżki od SDIO i SCLK do niego.

  3. W niniejszym artykule chciałbym opisać eksperyment z użyciem czytnika z myszki optycznej.

    Jak chyba każdy początkujący fan robotyki po zmontowaniu pierwszego, prostego robota zacząłem zastanawiać się, co do niego można dodać.

    W wielu postach pojawia się podobne pytanie: jak odczytać położenie robota.

    Informację o otoczeniu można zbierać na wiele sposobów, jednak jeśli chcemy zbudować robota, który potrafi uczyć się otocznia, niezbędne jest określenie jego pozycji.

    Szukając sposobu pomiaru przebytej drogi brałem pod uwagę różne możliwości.

    Najbardziej chyba oczywiste było zastosowanie enkoderów. Niestety pomiar który zapewniają jest jedynie pośredni. Poślizg, czy zablokowanie kół robota niweczy trud włożony w zastosowanie enkoderów. Poza tym każdy kto ma jakieś doświadczenie z enkoderami zapewne wie, że niełatwo się ich używa.

    Wśród różnych rozwiązań trafiłem na jedno, bardzo obiecujące. We właściwie każdej, obecnie sprzedawanej myszce optycznej znajduje się czytnik przesunięcia. Ma on postać kamery oraz procesora DSP analizującego przesunięcie obrazu (a więc i ruch myszki).

    Postanowiłem sprawdzić, jak taki czytnik sprawdza się w praktyce.

    W najbliższym sklepie kupiłem najtańszą myszkę, którą akurat mieli. Dokładniejszy jej opis jest na

    stronie sklepu:

    http://www.komputronik.pl/index.php/product/34671/Peryferia/Myszki-i-Klawiatury/A4-TECH_SWOP-3_czarna_2_x_click.html

    Myszka wyposażona była w łącze PS/2. Po rozkręceniu okazało się, że oparta jest na układzie

    PAW3101DB.

    Dokładny opis układu jest pod adresem:

    http://www.pixart.com.tw/upload/PAW3101DB_SPEC_V31_20081009154102.pdf

    Udało się przy okazji wylutować kilka switchy oraz impulsator (całkiem przyzwoity).

    Po analizie datasheeta i układu płytki okazało się, że do eksperymentów można wykorzystać płytkę

    myszki, nie trzeba nawet wylutowywać układu detektora.

    Wylutowywanie okazało się z resztą, całkiem sporym wyzwaniem. Myszka jest wykonana lutem bezołowiowym, więc wymontowanie elementów to niemały wysiłek.

    Po wstępnej analizie ustaliłem, że:

    • * elektronika myszki zasilana jest z 5V (więc idealnie dla AVR-ów)
    • * wystarczy przeciąć 1 ścieżkę i 1 zworkę, aby podłączyć przewody do komunikacji z sensorem

    Do celów eksperymentalnych wykorzystałem płytkę ewaluacyjną (więcej info na stronie:

    http://www.shop.kristech.eu/product_info.php?cPath=22_41&products_id=64).

    Połączenie między elektroniką myszki i płytki ewaluacyjnej wykonałem za pomocą 4-żyłowego przewodu.

    Wykorzystane linie:

    1) GND - masa

    2) 5V - zasilanie

    3) SCLK - linia zegarowa, generatorem jest procesor

    4) SDIO - linia danych, do transmisji w obu kierunkach

    Po sprawdzeniu poprawności połączeń i podłączeniu zasilania nastąpił czas na przygotowanie softu.

    Metoda komunikacji okazała się bardzo prosta. Sensor wyposażony jest w ponumerowane rejestry, do

    każdego możemy zapisać lub odczytać 8-bitową wartość.

    W praktyce do pracy wystarczą 3 rejestry:

    Rejestr 0x16 - z niego odczytujemy flagę, czy w kolejnych rejestrach są gotowe dane

    Rejestr 0x17 - przesunięcie X

    Rejestr 0x18 - przesunięcie Y

    W rejestrze 0x16 wystarczy sprawdzić najwyższy bit. Jeśli jest 1, to wykonujemy odczyt przesunięcia.

    Rejestry 0x17 i 0x18 przechowują przesunięcie, jako 8-bitowe liczby ze znakiem.

    Kod służący do odczytania przesunięcia wygląda wiec następująco:

    byte = mouse_read_reg(0x16); 
    if (byte & 0x80) { 
    dx = mouse_read_reg(0x17); 
    dy = mouse_read_reg(0x18); 
    x += dx; 
    y += dy; 
    } 
    

    Otrzymane wyniki są w jednostkach domyślnych pracy sensora. Ponieważ ma on rozdzielczość 800dpi, więc

    jednostką jest 1/800 cala.

    Pozostała część programu to przeliczanie wyników na mm i wyświetlanie na LCD.

    Rezultat okazał się bardzo interesujący, wyniki są dokładne, ale niestety dał znać o sobie istotny

    mankament rozwiązania:

    Czujnik musi być umieszczony w odpowiedniej odległości od podłoża, nawet minimalna zmiana odległości

    uniemożliwia odczyt.

    Na szczęście nie wyrzuciłem obudowy myszki, więc testy wykonywałem po umieszczeniu elektroniki w

    resztkach obudowy.

    Nie wiem jak układ spisywałby się w gotowym robocie. Zagwarantowanie dokładnego przylegania czujnika

    do podłoża może być trudne.

    Z drugiej strony czujnik pozwala na łatwe i tanie odczytanie położenia (właściwie przemieszczenia)

    robota.

    Jest jeszcze jeden mały problem. Odczyty przesunięć muszą być wykonywane bardzo często. Rejestry przesunięć nie są buforowane, więc jeśli nie odczytamy danych na czas stracimy je.

    Nie analizowałem jeszcze jak często dane z sensora spływają, ale może okazać się konieczne dodanie oddzielnego procesora do odczytywania danych z sensora. Jednak mała płyteczka z atmega8 jest o wiele łatwiejsza do realizacji niż przygotowanie części mechanicznej.

    Zalety rozwiązania:

    • * działa, i to bardzo dokładnie
    • * jest łatwe w implementacji i tanie
    • * daje rezultaty lepsze niż typowy enkoder
    • * odczytuje przesunięcia poprzeczne i wymuszone np. zderzeniem

    Wady:

    • * wymaga bardzo precyzyjnego umocowania względem podłoża
    • * nie na każdym podłożu odczytuje przemieszczenie (jak myszka optyczna)
    • * wymaga bardzo częstych odczytów danych (najlepiej dodatkowego procesora)

    MouseMove.c

    • Lubię! 2
  4. Drugi link nie działa, więc ciężko mi powiedzieć jak podłączyć serwo, przydałyby się opis sterownika.

    Natomiast co do LCD to możesz podłączyć pod dowolny port którego nie wykorzystujesz (tutaj niezbędny jest schemat płyty prototypowej, jak podeślesz, postaram się podpowiedzieć). Jedyne co ważne to linie danych podłącz do jednego portu, inaczej będzie dużo roboty programowo - chociaż i to się da zrobić.

  5. Dopiero teraz przeczytałem edycję posta. Wygląda mi na problem z indukcją silnika.

    Na pewno masz ukłąd L293D - chodzi o D ? Bo inne wersje nie mają diód i trzeba dodać na zewnątrz.

    Na próbę możesz takie diody dodać, najlepiej schotky. Kiedyś miałem podobny problem z silnikiem krokowym i sterowaniem przez MOSFETa. Indukowało się ponad 100V.

  6. Właśnie podłączyłem u mnie L293D. Działa bez problemu. Co prawda przy zasilaniu 5V na silniku jest tylko 3,7V, ale to już urok tego układu.

    Na razie nie używałem PWM-a, na piny EN dałem 1, na 3A->0, 4A->1 i silnik się kręci.

    W moim układzie nie dałem kondensatorów, ale one raczej pomogą, niż zaszkodzą.

    Sprawdź miernikiem piny układu L293, czy są napięcia jak powinny, zobacz, czy nie masz gdzieś zwarcia. Poza tym nie mam pomysłu dlaczego nie działa.

  7. Temat jakby umarł. Trochę szkoda bo zbudowanie sonaru to bardzo ciekawa sprawa.

    Z moich doświadczeń mogę powiedzieć, że schemat wklejony przez nes86 działa - jest to kit AVT-2822 (odbiornik 100% skopiowany, w nadajniku avt jest przetwornica).

    Po eksperymentach z kit-em planuję zrobić własny układ, wszelka pomoc mile widziana 🙂

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.