Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'wyścigi'.

  • Szukaj wg tagów

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

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i 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 1 wynik

  1. Cześć wszystkim, chciałbym przedstawić wam mój pierwszy projekt DIY - wyścigówka Robo Race. Projekt ten powstał w celu rozwinięcia pasji, jaką było stworzenie własnego autonomicznego pojazdu oraz w celu wzięcia udziału w wyścigach Roborace będących częścią międzynarodowych zawodów Sumo Challenge. Zawody te polegają na wyścigu mobilnych robotów czterokołowych. Zadaniem robota jest przejechanie określonej liczby okrążeń (od startu do mety) toru z liniami jak w kategorii Line Follower ograniczonego bandami, wraz z resztą robotów ścigających się. Pierwszy z robotów, który przejedzie określoną liczbę okrążeń, wygrywa etap konkurencji. Z powodu wymagań opisanych powyżej postanowiłem stworzyć pojazd reagujący na sygnały z czujników wykrywających przeszkody (w postaci ścianek tworzących tor ruchu robota, oraz innych robotów biorących udział w wyścigu). Na podstawie zdobytych informacji pojazd wymija przeszkody dopasowując odpowiednio skręcenie kół oraz prędkość obrotu silnika. Jako, że w swojej karierze wykorzystywałem głównie arduino do sterowania robotem postanowiłem wykorzystać moduł firmy DFRobot, który zgodny jest z Arduino Uno. Dodatkowo wykorzystałem możliwość komunikacji dzięki modułowi BLE w celu skomunikowania mikrokontrolera z telefonem, dzięki któremu mogłem dostrajać robota. Do budowy projektu wykorzystałem następujące elementy: Płyta mocująca: wykonana z pleksi, stanowi bazę do pozostałych części. Płyty wydrukowane na drukarce 3D: Zaprojektowane w programie DesignSpark Mechanical 2.0, zapewniają utrzymanie części sterujących robota. Układ napędowy: przenosi moment z osi silnika na tylną oś pojazdu, która wyposażona jest w mechanizm różnicowy ułatwiający skręcanie. Układ skręcający: skrętne 2 przednie koła sterowane poprzez Serwo Hitec HS-322HD. Mikrokontroler: Romeo BLE pozwalający bezpośrednio sterować robotem oraz komunikować się z urządzeniami dzięki modułowi BLE CC2540. Sterownik silnika PWM: sterownik, potrafiący sterować silnikiem napędzającym pojazd. Silnik: Redox bardzo wydajna jednostka napędzająca pojazd. Zasilanie: 2 akumulatory, większy Pakiet Li-Pol Redox 4400mAh 30C 4S 14,8V do zasilania silnika, oraz mniejszy Pakiet Li-Pol Redox 2200mAh 30C 2S 7.4V do zasilania serwomechanizmu, mikrokontrolera oraz czujników. Układ sensoryczny: 3 analogowe czujniki podczerwieni. Układ, sterowany przez mikrokontroler Romeo BLE odczytuje pomiary przez analogowe czujniki, następnie na ich podstawie wytwarza sygnał sterujący serwomechanizmem pojazdu, oraz sygnał sterujący silnikiem napędowy, który podany na sterownik PWM przetwarzany jest na sygnały kluczujące zasilaniem silnika napędowego. Dzięki modułowi BLE możliwa stała się bezprzewodowa komunikacja z mikrokontrolerem, co pozwoliło na dynamiczne dostrajanie regulatora PD sterującego serwomechanizmem robota. Wykorzystałem do tego program pracujący z poziomu przeglądarki App Inventor 2. Program ten pozwolił mi na stworzenie mobilnej aplikacji, pozwalającej na przesyłanie do robota i odczytywanie aktywnych parametrów regulatora PD robota. Parametry regulatora odczytywane są przez mikrokontroler pojazdu i zapisywane do odpowiednich zmiennych dzięki zastosowaniu poniższego kodu: void loop() { regulator(kp, kd); if(Serial.available()>0){ val = Serial.readStringUntil('\n'); if(val.startsWith(kp)){ val.remove(0, 2); kp=val.toInt(); }else if(val.startsWith(kd)){ val.remove(0, 2); kd=val.toInt(); }else{ val=""; } } } Pojazd odczytuje wartości położenia od przeszkód z czujników w przerwaniach czasowych z częstotliwością 500Hz. Pozwala to na stały odczyt odległości, dzięki czemu możliwe jest sterowanie w czasie rzeczywistym. void setup() { Serial.begin(115200); //Set Serial Baud noInterrupts(); // zatrzymaj wykonywanie jakichkolwiek przerwań // ustawianie timera 2 // TCCR2A i TCCR2B to rejestry kontrolne timera 2 // służą one do wyboru trybu pracy danego timera // i wartości podzielnika TCCR2A = 0;// zerowanie rejestru kontrolnego A TCCR2B = 0;// zerowanie rejestru kontrolnego B TCNT2 = 0;// zerowanie licznika // ustawiamy rejestr porównawczy na 500 Hz OCR2A = 255;// = (16000000) / (500*256) - 1 [ustawianie liczby impulsów do zliczenia TCCR2A |= (1 << WGM22); // ustawianie timer2 w tryb obsługi przerwań (CTC) TCCR2B |= (1 << CS22) | (1 <<CS20); // ustawianie dzielnika na 256 // ustawianie maski rejestru przerwań zegarowych timera 2 TIMSK2 |= (1 << OCIE2A); // wzkazanie że przerwanie ma być wywołane dla rejestru OCR2A interrupts(); //zezwalenie na wykonywanie przerwań } ISR(TIMER2_COMPA_vect) // wywołanie funkcji po zliczeniu impulsów timera { odczyt(); } void odczyt(){ wartosclewego = analogRead(SENSORLEWY); wartoscprawego = analogRead(SENSORPRAWY); wartoscsrodek = analogRead(SENSORSRODEK); } Dzięki wartością pozycji odczytanych z czujników oraz parametrom regulatora sygnał sterujący robotem wytwarzany jest przez poniższy kod void regulator(const int kp, const int kd){ err_prev = err; err = wartoscprawego - wartosclewego; serwo = kp * (err + kd*fpr*(err - err_prev)); //kp - wzmocnienie; fpr - częstotliwość próbkowania; kd - wzmocnienie części różniczkującej if(serwo > 85) serwo = 85; if(serwo < 5) serwo = 5; } Poniżej przedstawiam moje dzieło Wyścigówka w akcji:
×
×
  • Utwórz nowe...