Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Robot'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino, ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 5 wyników

  1. Cześć! Zakładam, że skoro czytasz ten wpis to zapewne interesuje Ciebie elektronika/robotyka/majsterkowanie i zastanawiasz się jak skonstruować swojego robota. A może szukasz inspiracji? Motywacji do dalszego działania? Jeżeli odpowiedź brzmi tak, to zapraszam Ciebie do przeczytania mojego wpisu. Traktuje on o moim pierwszym elektronicznym projekcie - linefollowerze o wdzięcznym imieniu Ianush88. Wpis podzieliłem na poszczególne fragmenty tak, abyś łatwo trafił do sekcji które Ciebie interesują najbardziej. Początek każdego z nich będzie oznaczony pogrubionym tekstem. To tyle jeżeli chodzi o wstęp, zapraszam do lektury! Ważna uwaga: Ze względu na fakt, że jest to mój pierwszy projekt i ma dla mnie głównie charakter edukacyjny w wielu przypadkach zdecydowałem się na wybór prostych rozwiązań, które o wiele łatwiej zaimplementować i ewentualnie naprawić. Nad optymalizacją konstrukcji postanowiłem się skupić w ewentualnej przyszłej ewolucji tego projektu. Konstrukcja & mechanika Ianush88 to klasyczny przedstawiciel rodziny linefollower - składa się z dwóch płytek PCB połączonych ze sobą dwoma kątownikami z tworzywa sztucznego. Do głównej (większej) płytki PCB przymocowane są silniki prądu stałego Pololu HP z przekładnią 10:1 - standardowy wybór zdecydowanej większości konstruktorów linefollowerów ze względu na optymalny balans między maksymalną prędkością obrotową (3000 obr/min) a generowanym momentem (0,22 kg*cm). Do wałów silników zamocowane są koła Solarbotics RW2 - wybrałem je głównie ze względu na ich bezproblemową dostępność i łatwość w połączeniu z całą konstrukcją. Muszę przyznać, że odpowiednio wyczyszczone generują całkiem sporo przyczepności. Niestety nie mam porównania z oponami mini-z czy odlewanymi z silikonu, ale jestem z nich zadowolony. Przednia płytka PCB zawierająca czujniki linii opiera się na podłożu przy pomocy dwóch tranzystorów THT w obudowie TO-92. Ich nóżki przylutowałem do płytki a obudowy przetarłem lekko papierem ściernym tak, by swoimi krawędziami nie zahaczały o nierówności trasy. Elektronika Robot zasilany jest z akumulatora 2S 7.4V (korzystam z trzech o różnych wartościach pojemności: 150mAh, 250mAh i 800mAh). Napięcie z akumulatora jest stabilizowane i obniżane do 5V przez stabilizator napięcia LM1117. Mózgiem całej konstrukcji jest Atmega16A - wybrana przeze mnie ze względu na moją znajomość tej rodziny mikrokontrolerów. Taktowana jest przez sygnał z kwarcu o częstotliwości 16MHz. Posiada istotne ze względu na projekt peryferia: ośmiokanałowy, 10 - bitowy przetwornik ADC, UART do komunikacji z zewnętrznym urządzeniem oraz trzy timery. Każdy z ośmiu kanałów przetwornika został wykorzystany do pomiarów napięcia z kolektorów czujników odbiciowych KTIR0711S. Znajdują się one na wysuniętej z przodu płytce PCB, umiejscowione symetrycznie po obu stronach. Sygnały między płytkami przekazywane są przy pomocy taśmy i złącz FFC. Timer 1 wykorzystałem do generowania dwóch sygnałów PWM sterujących prędkością każdego z silników. Doprowadzone są one do sterownika silników TB6612FNG, który jest układem z dwoma klasycznymi mostkami H. Do wejść UARTu mikrokontrolera poprowadzone są ścieżki ze złącza goldpin, do którego podłączony jest moduł bluetooth HC-05. Wraz z UART wykorzystuje go do komunikacji między robotem a telefonem lub komputerem. Na głównej płytce znajduje się także 6 - pinowe złącze ISP służące do programowania mikrokontrolera oraz przycisk który można dowolnie zaprogramować (ja używam go do ręcznego startowania/zatrzymywania robota). Dodatkowo na głównej płytce PCB umieściłem 8 LEDów prezentujących wskazania poszczególnych czujników odbiciowych. Całość została zaprojektowana przy użyciu oprogramowania Altium Designer. Obie płytki PCB są jednostronne i rozstawienie wszystkich elementów wraz z ich połączeniem było ogromnym wyzwaniem, co jednak udało się osiągnąć (ostatecznie skorzystałem z tylko jednej "przelotki"). Na płytce z czujnikami widoczne są przeróbki w postaci dolutowanych przewodów - jest to efekt złego zaprojektowania płytki i pośpiechu w przygotowaniach do zawodów... Program Do sterowania robotem zaimplementowałem regulator PD. Wartością zadaną jest w tym przypadku położenie czarnej linii względem robota, a sterowaniem wartości wypełnienia sygnału PWM dla poszczególnych silników. Uchyb wyliczany jest na podstawie pomiarów napięcia na kolektorach poszczególnych czujników odbiciowych. Gdy napięcie przekroczy pewną wartość graniczną, przy której uznajemy, że pod czujnikiem znajduje się już czarna linia do uchybu dodawana jest konkretna wartość błędu. Każdy czujnik ma przypisaną swoją "wagę" i przy każdej iteracji regulatora wyznaczany jest średni błąd, a następnie uchyb i sterowanie. Do regulatora PD dorzuciłem pewne wyjątki, które obsługują takie przypadki jak np. zgubienie linii tak, by robot potrafił na nią z powrotem trafić. Mogę tutaj polecić artykuł "Algorytm linefollowera w C – dla początkujących i nie tylko" , który całkiem dobrze opisuje jak zaimplementować regulator pd do robota typu linefollower. Do zmiany ustawień robota, w tym nastaw regulatora przygotowałem aplikację przy pomocy narzędzia MIT App Inventor. Dobrze jego obsługę prezentuje artykuł: "Tworzenie aplikacji Android". Do komunikacji przygotowałem swój własny protokół o określonej ramce danych. Wprowadzanie danych i naciśnięcie odpowiedniego przycisku powoduje wysłanie wiadomości o konkretnej budowie i zawartości do mikrokontrolera, który ją przetwarza i zmienia wartości odpowiednich parametrów. Przemyślenia Już zaprojektowałem nową płytkę czujników, tym razem mam nadzieję że poprawnie. Teraz będą ustawione zdecydowanie bliżej siebie, ponieważ chcę żeby robot szybciej mógł reagować na zmiany trasy. W przyszłym projekcie na pewno skorzystam już z płytek dwustronnych, co pozwoli na gęstsze upakowanie elektroniki, a co za tym idzie zmniejszenie gabarytów i masy robota. A mniejsza masa = lepsze osiągi. Plus brak problemów z połączeniem wszystkich komponentów. Dostrzegłem także, że kluczową sprawą jest przyczepność mechaniczna - nawet gdy silniki mają duży moment i prędkość obrotową bez przyczepności nie przekłada się to na lepsze wyniki. Dlatego planuję w przyszłości wykorzystanie opon mini-z lub odlewanych z silikonu. Na pewno dojdzie także wykorzystanie enkoderów do pomiarów prędkości obrotowych silników i implementacja regualtorów PID dla silników. Pozwoli to na płynną regulację prędkościami i w konsekwencji mniejszą ilością uślizgów kół. Myślę także o ulepszeniu regulatora dla całego robota, sprawdzeniu kilku ciekawych rozwiązań. To już koniec! Jeżeli masz pytania lub zainteresował Ciebie jakiś temat poruszony w tym wpisie to daj mi znać w komentarzu! Powodzenia przy tworzeniu nowych konstrukcji!
  2. Cześć! Skończyłem budowę mojego pierwszego robota. Jest to też mój pierwszy większy projekt, więc proszę o wyrozumiałość, komentarze, porady mile widziane. Z racji tego, że posiadam jeszcze dwa komplety lego, postanowiłem je wykorzystać do budowy pojazdu. Początkowo miały być silniki lego, ale stwierdziłem, że lepiej będzie zrobić to na zwykłych, uniwersalnych częściach. Konstrukcja miała być mała, zwinna, sterowana przez WIFI. Przednia oś, jak widać, sterowana za pomocą micro serwa. Nie było większych oporów, serwo bez problemów sobie radziło ze sterowaniem. Zacząłem szukać jakiegoś ciekawego i małego silnika DC. Postanowiłem wybrać silnik z podwójnym wałem. Kolejnym zadaniem było przebudowanie konstrukcji tak, żeby silnik się zmieścił i nie wadził w poruszaniu się robota. Z racji tego, że wolałem zaoszczędzić kilkanaście złotych na przejściówkę lego-wał, rozwierciłem otwory w częściach które miałem. Zacząłem myśleć jak wyglądałoby połączenie iPhone - ESP, ale w międzyczasie na uczelni dziekan zapowiedział nam dodatkowy projekt na zajęciach z mikrokontrolerów ( pierwsze takie zajęcia na drugim roku studiów ) - dowolny robot na platformie Arduino lub STM. Chłopaki na Facebookowej grupie Arduino uświadomili mi, że nie ma sensu robić projektu na ESP, bo musiałbym się łączyć tylko przez sieć i lepszym wyborem byłby bluetooth. Tak też się stało, zakupiłem moduł HM-10, który współpracuje z używanym przeze mnie iOS. Do tego całość przeniosłem na klona płytki Arduino. Jako aplikacji sterującej użyłem ArduinoBlue, wraz z biblioteką. Inne aplikacje nie chciały działać. W dodatku albo na iOS nie ma żadnych popularnych aplikacji do sterowania przez BLE albo nie udało mi się znaleźć. Możecie polecić ciekawe aplikacje na iOS, na pewno sprawdzę! Można zauważyć, że na breadbordzie zainstalowałem jakąś płytkę. Jest to sterownik silników DC, polecany, łatwy w użyciu. Dobra, silnik jest, działa, serwo jest, łączność przez BLE również. Wypadało by odpiąć wszystko od zasilania z gniazdka i zastosować akumulatory, baterie. Z początku była to dla mnie czarna magia, większe napięcie, jakieś ampery, przetwornice. Czytałem różne artykuły, oglądałem poradniki, pytałem na Facebookowej grupie. Ostatecznie, zgodnie z zasadami: Arduino + sekcja logiczna zasilana z powerbanka + wyprowadzenie zasilania bezpośrednio do serwa, silnik DC zasilany przez dwa ogniwa litowo-jonowe połączone szeregowo z BMS, napięcie zmniejszane przez przetwornicę Żeby szybko podpinać ogniwa do robota albo ładować, przylutowałem wtyki/gniazda DC 5.5mm. BTW. Bardzo długo męczyłem się z lutowaniem ogniw na 30-watowej lutownicy kolbowej. Metodą prób i błędów wszystko się złączyło. Przed podłączeniem każdego elementu lutowanego, sprawdzałem miernikiem czy nie ma zwarcia! Dodatkowo pokusiłem się o popularny czujnik odległości oraz mała prowizorka - dwie diody z opornikami schowane w obudowie po serwie (spaliło się), informujące o przeszkodzie w danej odległości. Wersja finalna, kilkukrotnie większa i cięższa niż pierwotna wersja. Wzmocniony układ kierowniczy. Jeździ, skręca, hamuje, cofa. Trzymany pod kocem Wszelkie komentarze mile widziane! A tutaj krótki filmik (musiałem zdemontować czujnik odległości, ponieważ powodował zakłócenia całego układu: Tak wygląda sterowanie za pomocą joysticka:
  3. Witam Buduję robota na kołach. W jaki sposób rozwiązać zmianę prędkości silników ? Myślałem żeby zrobić kilka przycisków w aplikacji, wybranie powodowałoby ustawienie danej prędkości.
  4. Sprzedam robota programowanego w języku Java "IntelliBrain-Bot" wraz z zestawem 6 czujników w cenie 380 zł (wartość samych czujników ponad 100 zł a samego robota 365$) Czujniki: 1x Sharp GP2Y0A21 3x Sharp GP2Y0D805Z0F 2x Ultradźwiękowy czujnik odległości SRF Więcej informacji o robocie można znaleźć pod linkiem - http://www.ridgesoft.com/tutorials.htm
  5. Witam! Chciałbym przedstawić wam moją konstrukcję, która stała się przedmiotem mojej pracy inżynierskiej. Mechanika: Konstrukcja mechaniczna w zasadzie oparta jest na 2 płytkach PCB. Do płytki głównej zamontowane są dwie kulki podporowe, a także silniki pololu o przekładni 1:10 co stanowi napęd robota. Z przodu zamontowana jest płytka z podstawą zawierająca uchwyty do czujników ultradźwiękowych. Taki sam uchwyt pod czujnik znajduje się również na 'ogonie' robota - jest on nie używany i został zamontowany eksperymentalnie. Na przedłużonej osi silników zostały zamontowane magnesy enkoderów magnetycznych co ilustruje poniższa fotografia. Elektronika: Sercem robota jest mikrokontroler AVR ATmega162, którego zadaniem jest sterowanie robotem w tym: obsługa enkoderów, sterowanie silnikami, odbiór informacji z mikrokontrolera slave nt. odległości mierzonych przez czujniki, realizację algorytmów sterowania, realizacja połączenia bluetooth, obsługa wyświetlacza LCD hd44780. Drugi mikrokontroler również AVR, ATmega328 realizuje tylko i wyłącznie obsługę czujników odległości HC-SR04. Pomiary normalizuje i wysyła interfejsem SPI do jednostki głównej ATmega162. Na pokładzie robota znajdują się również dwa enkodery magnetyczne AS5040 pracujące w pętli sterowania regulatora PI silników. Enkodery te pracują w trybie defaultowym czyli wyjście kwadraturowe, rozdzielczość 2x256. Silniki sterowane są poprzez mostek H L293. Komunikacją z robotem zajmuje się moduł bluetooth bt222 - czyli komunikacja jest przez UART mikrokontrolera. Główny mikrokontroler jest taktowany zewnętrznym kwarcem 16Mhz co przy takiej ilości obsługiwanych urządzeń i wykorzystywanych interfejsów było po prostu konieczne, z kolei mikrokontroler atmega328 jest taktowany zewnętrznym kwarcem jednak z powodu lepszej podstawy czasowej, która jest konieczna do dokładnych odczytów z czujników odległości. Na wyświetlaczu LCD są wyświetlane aktualnie mierzone wartości odległości czujników. Automatyka: Zostało wspomniane, że silnikami steruje algorytm regulatora PI. Aby obliczyć jego nastawy została przeprowadzona identyfikacja transmitancji. W tym celu wykorzystałem UART do przesyłania aktualnej prędkości silników oraz środowisko Matlab do wizualizacji danych na wykresie. Z wyliczeń wyszło, że silniki z zastosowanymi kołami mają transmitancję: G(s)=107/(0.19s+1) Po obliczeniu nastaw regulatora i zastosowaniu w praktyce okazało się, że można jeszcze troszkę dopieścić nastawy i ostatecznie wykresy odpowiedzi skokowej bez i z regulatorem wyglądają następująco: Software: Napisane w C w środowisku Eclipse. Umożliwia robotowi 3 tryby. Tryb avoid. W trybie tym robot ma za zadanie omijać przeszkody wykorzystując regulator rozmyty Takagi-Sugeno. Wykorzystuje w tym celu odczyty z czujników odległości. Tryb goal seeking. Robot podąża do celu czyli do odebranych przez bluetooth współrzędnych kartezjańskich podanych w [mm], zakładając, że miejsce od którego zaczyna lub dostał nowy zestaw współrzędnych, ma współrzędne 0,0. W trybie tym regulator Takagi-Sugeno ma za zadanie na podstawie zaimplementowanej odometrii oraz współrzędnych końcowych sterować robotem w celu osiągnięcia zadanego położenia. Problem algorytmu przedstawia ilustracja: Tryb avoid + goal seeking. Jest to połączenie dwóch wcześniej opisanych trybów. W trybie tym działają równocześnie obydwa wcześniej opisane algorytmy, jednak na wejście regulatorów PI sterujących silnikami jest podawany zbalansowany sygnał z obu algorytmów. Tzn w zależności od najmniejszej odległości od przeszkody mierzonej przez któryś z czujników jest obliczany procentowy udział wartości sterowania od dwóch algorytmów. Brzmi skomplikowanie ale takie nie jest. Najlepiej zobrazuje to wzór: V=K*Vg+(1-K)*Va gdzie V jest prędkością zadaną na regulator PI silnika, Vg jest prędkością wynikającą z algorytmu goal seeking, Va jest prędkością wynikającą z algorytmu avoid, K jest parametrem, który przyjmuje wartość z przedziału 0-1 w zależności od mierzonej minimalnej odległości do przeszkody. Robota wprowadza się w odpowiedni tryb za pomocą dwóch przycisków lub poprzez interfejs bluetooth. Odpowiednie tryby sygnalizują diody LED. W celu przesłania komendy zawierającej współrzędne celu najpierw należy wprowadzić robota w odpowiedni tryb, a następnie wysłać do niego wg stworzonego prze zemnie protokołu dane. Protokół wysyłania danych jest następujący: X±⌴⌴⌴Y±⌴⌴⌴& gdzie +- – znak współrzędnej, _ – wartość współrzędnej. Testy. Konstrukcja została przetestowana pod względem dokładności odometrii. Robot podczas licznych testów na bieżąco wysyłał swoje współrzędne, które w dalszej kolejności były obrabiane w środowisku Octave do przyjemnych w analizie wykresów. Przykładowy wykres drogi, którą pokonał robot na 'placu manewrowym' w trybie avoid: ... oraz rzut z góry na 'plac manewrowy': U góry pozycja początkowa, na dole końcowa robota. Cały ten obszar był dookoła ogrodzony ścianką. Słowa samokrytyki Co bym zmienił ? Czujniki. Ze względu na problematyczność wykrywania małych przeszkód lub gdy płaszczyzna przedmiotu uniemożliwia odbicie się fali ultradźwiękowej w stronę odbiornika. Zdarza się, że z powodu gubienia przeszkód robot po prostu w nie wpada. Najciekawsze fragmenty programu: Regulatory PI: //######################################## REGULATOR PRĘDKOŚCI ############################################ erra = vl-Va;//liczenie błedu prędkości errb = vp-Vb; if(ua<1023&&ua>-1023)Ca = Ca+(erra*dt);//całka błędu ua = kp*(erra + Ca/Ti);//regulator PI //P I if(ub<1023&&ub>-1023)Cb = Cb+(errb*dt);//całka błędu ub = kp*(errb + Cb/Ti);//regulator PI //P I if((ua<10)&&(ua>-10))ua=0; if((ub<10)&&(ub>-10))ub=0; motor_set(ua,ub);//ustawia sterowanie silników Regulator rozmyty Takagi-Sugeno trybu goal seeking: inline void PsiZ2Vlr(float *Psi, float *z, int16_t *vl,int16_t *vp) { float PSI[3]; float XL[6],XR[6]; float NR,FR,L,S,P,VL=0,VP=0,m=0; uint8_t i,k; ///////////////////////////////LICZENIE PRZYNALEŻNOŚCI////////////////////////////////// if(*z<=100)NR=-0.01*(*z)+1;else NR=0;//jak bardzo blisko jest cel if(*z<=100)FR=0.01*(*z);else FR=1;//jak bardzo daleko jest cel if(*Psi<=0)L=-0.3183*(*Psi);else if(*Psi<-M_PI)L=1;else L=0; if(*Psi<=0)S=0.3183*(*Psi)+1;else if(*Psi<-M_PI)S=0; else if(*Psi>M_PI)S=0;else S=-0.3183*(*Psi)+1; if(*Psi>=0)P=0.3183*(*Psi);else if(*Psi>M_PI)P=1;else P=0; /////////////////////////////////////TABLICA REGUŁ////////////////////////////////////// PSI[0]=L; PSI[1]=S; PSI[2]=P; //NR; XL[0]=-4000;XR[0]=4000; XL[1]=0;XR[1]=0; XL[2]=4000;XR[2]=-4000; //FR; XL[3]=-4000;XR[3]=4000; XL[4]=4000;XR[4]=4000; XL[5]=4000;XR[5]=-4000; /////////////////////////////obliczanie prędkości silników////////////////////////////// for(k=0,i=0;k<3;k++,i++)//pierwszy wiersz tabeli { VL+=NR*PSI[k]*XL[i]; VP+=NR*PSI[k]*XR[i]; m+=NR*PSI[k]; } for(k=0;i<6;k++,i++)//drugi wiersz tabeli { VL+=FR*PSI[k]*XL[i]; VP+=FR*PSI[k]*XR[i]; m+=FR*PSI[k]; } *vl=(int16_t)VL/m; *vp=(int16_t)VP/m; } Obsługa czujników odległości: //PRZERWANIE OD CAPTURE PIN ISR(TIMER1_CAPT_vect) { if( (TCCR1B & (1<<ICES1)) ) { LastCapture = ICR1;//jesli zbocze narastajace, zlap ICR1 } else { PulseWidth = ICR1 - LastCapture;//Jeśli zbocze opadajace oblicz PW pomiar=0;//wyzeruj flagę pomiaru } TCCR1B ^= (1<<ICES1);//Zmiana zbocza wyw. przerwanie } Mam nadzieję że robocik się podoba. W razie pytań proszę śmiało. Całości kodu nie udostępniam ze względu na prawa autorskie niektórych funkcji bibliotecznych. Co mogłem udostępniłem. Pozdrawiam was wszystkich !
×
×
  • Utwórz nowe...