Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Robot klasy linefollower "ERROR1"

nanab 26 Jun 2011 00:47 9232 11
  • Robot klasy linefollower "ERROR1"
    Witam wszystkich.
    Przedstawiam moją pierwszą w życiu autonomiczną maszynę-robota typu "linefollower", którego nazwałem "ERROR 1". Mimo kilku ewidentnych słabości jestem z niego naprawdę zadowolony.
    Elektronika składa się z dwóch płytek:
    - Płytka z sensorami, zasilaniem diod i rezystorami podciągającymi. Po podaniu zasilania (stabilizowane 5V) zwraca analogowe sygnały. Sensory to 5szt. popularnych CNY70.
    - Płytka z mikrokontrolerem, zasilaniem i mostkami H do sterowania dwóch silników. "Mózgiem" jest atmega8 w ceglastej obudowie dip, mostek to l293d. Całość jest zaprojektowana tak, aby ten moduł był najbardziej uniwersalny-po podłączeniu płytki z innymi sensorami i tylnej części z innymi silnikami bez żadnego problemu można zrobić na niej np. robota minisumo, prostą machinę kroczącą itd. Poza miejscem pod taśmę są jeszcze dodatkowo wyprowadzone piny I/O(7szt) pozwalające m.in. na dołączenie zewnętrznego kwarcu, użycie wyjścia timera 2, podłączenie kilku serw, użycie piątego kanału ADC, itd... Dodatkowo na płytce są gotowe ścieżki i pola lutownicze pozwalające na zmontowanie dzielnika napięcia do pomiaru napięcia zasilania(piąty kanał ADC). Można znaleźć tam jeszcze dwie diody led, dwa switche i wyprowadzenia do zasilania zewnętrznych peryferiów: 5V, GND i Vcc(bezpośrednio z baterii zasilającej). Do Aref można zamontować kondensator lub potencjometr zależnie od wybranego źródła napięcia odniesienia.
    Połączenie między płytkami zbudowane jest z taśmy (po której idzie zasilanie przedniej płytki i sygnały z sensorów) i dwóch prętów węglowych fi 2mm zamontowanych w tulejach wyjętych z kostek elektrycznych. Takie połączenie pozwala na regulację pozycji płytki z sensorami w praktycznie każdej osi i każdym kierunku. Jest też dość solidne i niesamowicie lekkie- obie płytki razem z połączeniem ważą 25g. Jeśli za mało jeszcze nasłodziłem, to dodam, że bez najmniejszych przeróbek da radę zrobić z tego przegubowca(czego nie omieszkam spróbować) :)

    Jakość wykonania płytek poniżej dna-bez soldermaski i lekko podtrawione(tylko powierzchniowo). Przesadziłem trochę z temperaturą roztworu wytrawiacza.
    Zasilanie stanowi bateryjka Li-Pol 2S 0,8Ah, docelowo 3S.

    Napęd stanowią dwa przerobione silniki z przekładniami firmy micromotors(hl149). W silnikach zastosowałem takie modyfikacje:
    - wzmocnienie przekładni-wymieniłem plastikowe koła zębate na metalowe
    - skrócenie i minimalne odelżenie silników-pozbyłem się plastikowych osłon tylnych części i skróciłem wystające z tyłu wały
    - przystosowanie do kół pololu - wały "D" 4mm spiłowałem na wał "D" 3mm
    - wymiana konektorów - na zwykłe goldpiny, bo standardowe raczej nie nadają się do niczego
    - przewoltowanie - silniki zbudowane do zasilania z 6V, ja zasilam je z baterii 3S

    Silniki te oceniam bardzo dobrze, może nie wygram nimi zawodów, ale nie da się znaleźć lepszych w tej cenie(a nawet 2x drożej). Dodatkowo są bardzo solidne-nie muszę się bać, że komutatory albo zęby przekładni znikną po kilku biegach. Silniki mają przekładnie 1:10, które planuję użyć w przyszłości razem z innymi silnikami(180 lub 265). Jedna metalowa przekładnia waży 19g. Silniki umieściłem w prostej ramce wykonanej z blaszki aluminiowej 0,75mm

    Software: W obecnej wersji regulator P, ale w przyszłości prawdopodobnie będzie PD albo PID.

    Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1" Robot klasy linefollower "ERROR1"

    Pierwsze uruchomienie:
    Po wgraniu programu testowego i podłączeniu zasilania "prawie" sukces. PWM, kontrolki, switche, łączność z mostkiem H, konfiguracja wyprowadzeń - OK. Jednak okazało się, że mostek jest uszkodzony(uwalony jeden z górnych tranzystorów prawego silnika)-prawy silnik nie kręci do przodu. Po wymianie ruszył. Zrezygnowałem z ADC-sensory bardzo dobrze sobie radzą jako cyfrowe.
    Po testach przyszedł czas na pierwsze jazdy:



    Film z najprostszym programem(bez regulacji prędkości-tylko zmiana kierunku obrotów), zasilanie bateria 2S 0,8Ah(docelowo 3S-chociaż to trochę ryzykowne przy tym mostku).
    Trasa "0":



    Jedno kółko to 2m, czas okrążenia ~3,5s, prędkość wychodzi niecałe 0,6m/s. W następnej wersji softu (regulator P-następny film) zszedłem poniżej 2,8s . Chyba nie jest źle jak na pierwszą konstrukcję. Możliwe, że jeszcze poprawię ten wynik-jedyne co mnie teraz ogranicza to ilość sensorów, ale biorę pod uwagę dodanie jeszcze kilku.

    Filmy jak narazie finalnej wersji(regulator P):
    Trasa "0" - o długości 2m.



    Tor testowy, długość 10m:



    Średnia prędkość ponad 0,7m/s-kilkoma linijkami programu zyskałem prawie 15cm/s.


    Koszty:
    Silniki+przekładnie: 20zł
    Koła pololu 60mm: 25zł
    Sensory, atmega, mostek: ~30zł
    Drobnica <10zł
    Reszta drobiazgi za grosze.



    W załączniku plik hex, PCB, schemat montażowy, ideowy, wykaz elementów i uwagi.
    Attachments:

    Cool? Ranking DIY
    About Author
    nanab
    Level 27  
    Offline 
    Has specialization in: płyty główne, bga, Radiówka do 50GHz
    nanab wrote 1088 posts with rating 237, helped 90 times. Live in city Bydgoszcz. Been with us since 2008 year.
  • #2
    grala1
    VAG group specialist
    Jak na pierwszego robota to nieźle Ci to wyszło.
    Można prosić o kawałek kodu gdzie jest regulator P i opis?
  • #3
    galgann
    Level 16  
    Widzę, że poradziłeś sobie z mostkami. Konstrukcja prosta, zwarta i działa. Nie myślałeś o zastosowaniu silników pololu? Domyślam się, że silniki masz od Dawida z all... Jednak teraz są po 14zł sztuka. Gdzie znajdę taniej?
    Widzę, że masz możliwość zmiany odległości czujników od osi silników, bardzo przydatna opcja.
    Ciekawe wykonanie punktu podparcia.
    Zastrzeżenie budzi umiejscowienie pakietu zasilającego. Środek ciężkości robota jest sporo przed osią napędową. Widzę, że miałeś pakiet zainstalowany tuż za silnikami, jak wtedy robot się sprawował? Silniki chyba nie są aż tak zrywne, aby przód się unosił a jeśli tak, to spróbuj umieścić pakiet zasilający pomiędzy płytką a silnikami.
    Konstrukcja moim skromnym zdaniem udana, pomyśl następnym razem o większej liczbie czujników. Ja zastosowałem 7 sztuk i jest ok. Do atmegi8 11 nawet można dać, wtedy już bardzo ładnie jeździ.
    Nie jestem znawcą, bo PID to dla mnie wciąż magia ale chyba masz za duże wzmocnienie, dlatego tak szarpie, jakbyś miał tylko 2 skrajne czujniki.
  • #4
    nanab
    Level 27  
    Dzięki za wszystkie opinie :)
    Quote:
    Gdzie kolega kupuje ten szary laminat?

    Kupiłem go na znanym portalu aukcyjnym od użytkownika "elektrotech".
    Quote:

    Można prosić o kawałek kodu gdzie jest regulator P i opis?

    Nie jestem zwolennikiem dawania gotowych programów, bo to prosta droga do bezmyślnego kopiowania, ale do czegoś tak prostego mogę chyba zrobić wyjątek :)
    Code: vbnet
    Log in, to see the code

    Mpos - pozycja linii odczytana z sensorów
    Kp - wzmocnienie(w moim programie zmieniane przyciskami na płytce w zakresie 1-40, standardowo 15)
    Pwm - wartość pwm do jazdy prosto (155)
    Wyp1, Wyp2 - wartości obliczone do wpisania do rejestrów oc1a i oc1b. Oczywiście trzeba je jeszcze przefiltrować żeby mieściły się w zakresie 0-255. Jeśli wyjdą ujemne, to trzeba zmienić też kierunek obrotów. Wszystkie zmienne trzeba też zdefiniować na początku. Kp i Pwm mieszczą się w jednym bajcie. Mpos, Wyp1, Wyp2 i P mogą przyjmować wartości ujemne więc muszą być zapisane jako integer(bascom) lub short int(C).
    Quote:
    Czym namalowałeś te czarne linie na podłodze, chyba nie farbą olejną.

    Wykleiłem z czarnej taśmy izolacyjnej 19mm.
    Quote:
    Nie myślałeś o zastosowaniu silników pololu? Domyślam się, że silniki masz od Dawida z all... Jednak teraz są po 14zł sztuka. Gdzie znajdę taniej?

    Kiedy je kupowałem (ok. miesiąca temu), to na chwilę potaniały do 10zł/szt, ale widzę, że znowu podrożały.
    Pololu nie kupiłem z dwóch powodów:
    - za drogie
    - zbyt prądożerne jak na ten mostek. Oczywiście mógłbym kupić słabsze wersje bez "HP" w nazwie, ale kosztują tyle samo co mocniejsze, wiec moim zdaniem to wybitnie nieopłacalne. Pololu kupię do następnego-w moich zapasach czekają już na nie dwa mostki TB6612.
    Quote:

    Ciekawe wykonanie punktu podparcia.

    Typowa improwizacja :) Na początku miała być mała kulka podporowa w jarzmie wkręcanym w nakrętkę wklejoną w przednią część płytki z sensorami, ale trochę pomyliłem się przy wymiarowaniu i musiałem wymyślić coś na szybko.
    Quote:
    Zastrzeżenie budzi umiejscowienie pakietu zasilającego. Środek ciężkości robota jest sporo przed osią napędową.

    Bateryjka i elektronika są bardzo lekkie, silniki ciężkie. Faktycznie ść jest ok. 20mm przed osią.Dla porównania: rozstaw kół to 155mm.Ść jest mniej-więcej na łączeniu laminatu z ramką silników.
    Quote:
    Widzę, że miałeś pakiet zainstalowany tuż za silnikami, jak wtedy robot się sprawował?

    Jeździł z sensorami w górze albo z doklejonym ołowiem na płytce sensorów ;) Silniki są dość zrywne, już przy 7,4V i PWM 155 przód podskakuje przy stracie. Przy 11,1V lfr wywraca się na plecy, a dociążony z przodu osiąga ok. 1,5m/s.
    Quote:
    Konstrukcja moim skromnym zdaniem udana, pomyśl następnym razem o większej liczbie czujników.

    W zapasach mam 12szt ktir0711. W następnej konstrukcji planuję użyć 8-12szt. Kilka chciałem użyć do innych projektów, ale z tego co widzę, to poniżej 10szt. nie ma co zaczynać szybszych robotów.
    Quote:
    Nie jestem znawcą, bo PID to dla mnie wciąż magia ale chyba masz za duże wzmocnienie, dlatego tak szarpie, jakbyś miał tylko 2 skrajne czujniki.

    To wina zbyt małej rozdzielczości-tylko 5 sensorów, więc mogę z nich odczytać tylko 11 stanów(nie licząc śmieci). Przy "wagach" poszczególnych stanów rosnących liniowo, np.:
    - linia po środku= 0
    - linia lekko z prawej = 1
    - bardziej z prawej = 2, 3, 4 itd. Miałem problemy z wyregulowaniem członu P. Albo szarpał jak głupi, albo jeździł płynnie, ale promień skrętu wynosił pół metra.
    Żeby rozwiązać ten problem musiałem wprowadzić nieliniowość. "Wagi" poszczególnych stanów zamiast -5, -4, -3, -2, -1, 0, ... ustawiłem -15, -8, -4, -2, -1, 0,...
  • #5
    galgann
    Level 16  
    Quote:
    To wina zbyt małej rozdzielczości-tylko 5 sensorów, więc mogę z nich odczytać tylko 11 stanów(nie licząc śmieci). Przy "wagach" poszczególnych stanów rosnących liniowo, np.:
    - linia po środku= 0
    - linia lekko z prawej = 1
    - bardziej z prawej = 2, 3, 4 itd. Miałem problemy z wyregulowaniem członu P. Albo szarpał jak głupi, albo jeździł płynnie, ale promień skrętu wynosił pół metra.
    Żeby rozwiązać ten problem musiałem wprowadzić nieliniowość. "Wagi" poszczególnych stanów zamiast -5, -4, -3, -2, -1, 0, ... ustawiłem -15, -8, -4, -2, -1, 0,...


    Słabo szukasz ;). Odsyłam Cię do kolegi fisha, pralata, bluszcza i może też zaja i pawel z forum o robotyce, bo ja też tam się obracam. Ich roboty także mają po 5 czujników (zaja i pawel 6) i jeżdżą bardzo płynie. Pogadaj z fishem, zają chętnie pomogą, bo sam się konsultowałem z nimi.
  • #6
    nanab
    Level 27  
    Quote:

    Słabo szukasz :wink:. Odsyłam Cię do kolegi fisha, pralata, bluszcza i może też zaja i pawel z forum o robotyce, bo ja też tam się obracam. Ich roboty także mają po 5 czujników (zaja i pawel 6) i jeżdżą bardzo płynie. Pogadaj z fishem, zają chętnie pomogą, bo sam się konsultowałem z nimi.

    Problem w tym, że narazie jeżdżę na samym P, a wszyscy wymienieni koledzy(może poza Zaja, ale on ma więcej sensorów, dodatkowo zupełnie inaczej rozmieszczone) mają PD albo PID. Ale dzięki za polecenie, jeśli będę miał problemy z PD(właśnie go piszę), to zagadam :)
  • #7
    gervee
    Automation specialist
    Gdzie kupiłeś te kółka? Nie ma gotowców na wałek tego silniczka tak, żeby nie trzeba było zmniejszać średnicy?
  • #8
    nanab
    Level 27  
    Koła kupiłem na electropark.pl. Kół na wał 4mm jeszcze nie widziałem.
  • #9
    Sabre
    Level 18  
    Powiem szczerze, że gdy zobaczyłem zdjęcie ukończonego robota na diodzie to spodziewałem się czegoś więcej po nim. Jeśli chodzi o płynność jazdy to nie zawsze chodzi o ilość czujników, ważna jest też odległość między czujnikami, która daje większą rozdzielczość. Na samym P również da się jeździć płynnie, no ale wymaga to trochę doświadczenia w budowie i programowaniu lfr'ów. Mi osobiście bardzo przeszkadza ta miedź podtrawiona bądź utleniona na płytkach, wygląda to fatalnie.
  • #10
    galgann
    Level 16  
    Napisz jeszcze jaki prąd pobierają silniki podczas jazdy.
  • #11
    lukas12
    Level 17  
    Witam mam takie same silniki i problem z połączeniem ich do kółeczek zębatych od roweru, macie jakieś pomysły jak mam to zrobić, bo pojęcie nie mam :(
    Proszę was, abyście mi pomogli :!:
  • #12
    nanab
    Level 27  
    Quote:
    Jeśli chodzi o płynność jazdy to nie zawsze chodzi o ilość czujników, ważna jest też odległość między czujnikami, która daje większą rozdzielczość.

    W tej chwili odległość jest tak dobrana, że rozdzielczość jest maksymalna. Gdybym ją zwiększył powstało by sporo martwego pola między sensorami, a gdybym zmniejszył spadła by. Przemyślałem całą konstrukcję i algorytmy(obecnie mam PD) i moim zdaniem winne mogą być dwie rzeczy:
    - za mała sztywność konstrukcji- płytka z sensorami jest połączona tylko z płytką z resztą elektroniki, a ta dopiero do ramy z silnikami. Laminat jest dość cienki, więc pod obciążeniem wygina się. Powinienem połączyć mechanicznie płytkę z sensorami bezpośrednio z ramą silników-wtedy "zawieszenie" było by twardsze, a moment obrotowy był by szybciej przekazywany przez koła na ziemię.
    - za duża bezwładność silników w połączeniu z dużymi kołami+luzy na przekładni
    Quote:
    Na samym P również da się jeździć płynnie, no ale wymaga to trochę doświadczenia w budowie i programowaniu lfr'ów.

    Niestety, ale akurat tego mi najbardziej brakuje :)

    Prądu w czasie jazdy nie mam jak zmierzyć. Zmierzyłem poza lf'em. Silniki zasilane bezpośrednio (bez spadków napięć na mostku) biorą:
    - przy 8,4V 130mA bez obciążenia, 1,1A zatrzymany
    - przy 12,6V 160mA bez obciążenia, 2A zatrzymany
    średni prąd w czasie jazdy to ok. 350mA/silnik. Puściłem go na pół godziny i sprawdziłem ile w baterii zostało, więc to tylko przybliżony pobór prądu, być może obarczony sporym błędem.