Spisu treści:

Prosta platforma Arduino Robotics!: 5 kroków
Prosta platforma Arduino Robotics!: 5 kroków

Wideo: Prosta platforma Arduino Robotics!: 5 kroków

Wideo: Prosta platforma Arduino Robotics!: 5 kroków
Wideo: Co można zbudować na Arduino? Sprawdź 5 ciekawych projektów DIY (robot-lodówka, WIELKI zegar... 2024, Lipiec
Anonim
Prosta platforma robotyki Arduino!
Prosta platforma robotyki Arduino!
Prosta platforma robotyki Arduino!
Prosta platforma robotyki Arduino!

Właśnie dostałem Arduino po zabawie z niektórymi mikrokontrolerami AVR podczas spotkań zespołu robotyki. Podobał mi się pomysł naprawdę taniego programowalnego układu, który mógłby uruchomić prawie wszystko z prostego interfejsu komputerowego, więc dostałem Arduino, ponieważ ma już ładną płytkę i interfejs USB. Do mojego pierwszego projektu Arduino wykopałem zestaw Vex Robotics, który leżałem w niektórych zawodach, które robiłem w liceum. Zawsze chciałem stworzyć platformę robotyczną sterowaną komputerowo, ale mikrokontroler Vex wymaga kabla do programowania, którego nie miałem. Zdecydowałem się użyć mojego nowego Arduino (i może później gołego układu AVR, jeśli mi się uda) do napędzania platformy. W końcu chcę dostać netbooka, a potem mogę sterować robotem za pomocą Wi-Fi i zdalnie oglądać jego kamerę internetową.

Udało mi się uzyskać przyzwoity protokół szeregowy i prosty przykład, który steruje robotem za pomocą kontrolera Xbox 360 podłączonego do komputera z systemem Linux.

Krok 1: Co może zrobić…

Co może zrobić…
Co może zrobić…
Co może zrobić…
Co może zrobić…

Arduino to bardzo wszechstronna platforma. Moim podstawowym celem było po prostu sprawienie, aby Arduino sprzęgło dwa silniki Vex z komputerem, ale miałem wiele pozostałych pinów wejścia/wyjścia i postanowiłem dodać kilka dodatkowych rzeczy. W tej chwili mam diodę LED RGB dla statusu portu szeregowego (zielona, jeśli pakiety są dobre, czerwone, jeśli są złe) i wentylator PC napędzany tranzystorem. Mogę również dodać przełączniki i czujniki, ale jeszcze żadnego z nich nie umieściłem. Najlepsze w tym jest to, że możesz dodać co chcesz do robota Arduino. Wystarczy trochę kodu interfejsu, aby kontrolować dodatkowe rzeczy i uzyskać dane wejściowe do komputera.

Krok 2: Części

Części
Części
Części
Części
Części
Części

Do mojego robota użyłem kilku różnych części. Większość części pochodziła ze starych rzeczy, które leżały w mojej piwnicy. 1) Arduino Duemilanove z ATMega328To najnowsze Arduino, a odkąd dostałem je kilka dni temu, mam najnowsze. Kod jest jednak na tyle mały, że bez problemu powinien zmieścić się na każdym Arduino. Prawdopodobnie mógłby nawet zmieścić się na ATTiny (jeśli zbuduję kontroler robota oprócz Arduino, ATTiny 2313 wygląda na dobry wybór, jest mniejszy i tańszy, ale nadal ma dużo wyjść i szeregowy interfejs UART)2) Platforma Vex RoboticsI kilka lat temu dostałem zestaw Vexów do zbudowania robota sterowanego radiowo do zbierania rzeczy na zawody w liceum. Skonstruowałem podstawową podstawę "kwadratowego robota", która ma 4 koła napędzane dwoma silnikami. Możesz zastąpić inne bazy robotów, jeśli masz inną platformę, którą chcesz jeździć. Należy zauważyć, że silniki Vex są zasadniczo serwomechanizmami o ciągłym obrocie, wykorzystują modulację szerokości impulsu, aby zasygnalizować, jak szybko i w jakim kierunku się obracać. Silniki Vex są ładne, ponieważ mają szeroki zakres napięć roboczych, gdzieś między 5 a 15 woltów. Używam 12V bo miałem baterię 12V. W przypadku większości standardowych serwomechanizmów hobbystycznych będziesz potrzebować niższego napięcia (często 6 woltów).3) BateriaRobot jest bezużyteczny bez zasilania. Do testów używam standardowego zasilacza ściennego 9V firmy RadioShack, ale do pracy bezprzewodowej znalazłem w starym laptopie akumulator 12V NiMH. Chociaż nie ma wystarczająco dużo ładunku, aby uruchomić laptopa, dobrze napędza mojego robota Vex. Może również zasilać Arduino za pomocą pinu wejściowego Vin na złączu zasilania, Arduino zmniejszy napięcie 12 V do 5, a nawet wyprowadzi go na pin wyjściowy 5 V na złączu zasilania. wszystko podłączyć. W końcu dostanę ładniejszą płytkę prototypową i lutuję na kilku trwalszych połączeniach, ale na razie płytka prototypowa ułatwia zmianę rzeczy. Moja płytka stykowa to „podstawowa płytka stykowa” SparkFun, po prostu płytka stykowa na metalowej płytce z 3 zaciskami.5) Konwerter RS232-TTL oparty na MAX232 Jeśli chcesz sterować robotem za pomocą połączenia portu szeregowego RS-232 (w przeciwieństwie do wbudowanego w Arduino w USB) można użyć konwertera RS232-TTL. Używam MAX232, ponieważ miałem ich kilka leżących dookoła i przylutowałem go na małym kawałku płytki prototypowej z wymaganymi kondensatorami. Potrzebuję RS-232, ponieważ mój stary laptop ma tylko jeden port USB i używam go jako kontrolera gier do sterowania robotem.6) Dodatkowe części według potrzeb Aby ułatwić debugowanie protokołu szeregowego, umieściłem na nim diodę LED RGB (dostałem jeden z moim zamówieniem Arduino, ponieważ brzmiały fajnie). Światło miga kolejno na czerwono, zielono, niebiesko, gdy Arduino uruchamia się, aby pokazać, że robot został zrestartowany, a następnie świeci na zielono po odebraniu pakietu silnika, na niebiesko po odebraniu pakietu wentylatora i na czerwono, gdy jest zły lub nieznany pakiet został odebrany. Do napędzania wentylatora użyłem standardowego tranzystora NPN (te same, które zademonstrowałem w moim ostatnim Instructable) i rezystora między tranzystorem a Arduino (tranzystor pobierał zbyt dużo prądu i nagrzewał Arduino, więc umieściłem ograniczenie rezystora, aby go zatrzymać).

Krok 3: Programowanie Arduino i PC

Programowanie Arduino i PC
Programowanie Arduino i PC

Do zaprogramowania Arduino potrzebne jest oczywiście oprogramowanie Arduino i kabel USB. Możesz również zaprogramować Arduino za pomocą portu szeregowego i konwertera poziomu TTL, jeśli twój komputer ma port szeregowy. Zwróć uwagę, że interfejs szeregowy USB nie będzie komunikował się z procesorem ATMega Arduino, jeśli do pinów szeregowych Arduino (piny 0 i 1) podłączony jest konwerter poziomów, więc odłącz go przed użyciem USB. Na Arduino będziemy potrzebować interfejsu szeregowego, który umożliwia PC do sterowania silnikami. Będziemy również potrzebować systemu serwonapędu PWM, aby wysyłać prawidłowe sygnały do silników Vex i upewniać się, że idą we właściwych kierunkach, gdy otrzymają właściwe wartości. Dodałem również proste miganie diody LED, głównie w celu wskazania statusu, ale także dlatego, że fajnie wygląda. Na komputerze będziemy musieli otworzyć port szeregowy i wysłać ramki danych, które program Arduino zrozumie. Komputer musi również wymyślić wartości silnika. Prostym sposobem na to jest użycie pada USB lub joysticka, używam kontrolera Xbox 360. Inną opcją jest użycie komputera podłączonego do sieci (netbooka lub małej płytki mini-ITX) na samym robocie do bezprzewodowej jazdy. Dzięki netbookowi możesz nawet użyć wbudowanej kamery internetowej, aby przesyłać strumieniowo obraz wideo i zdalnie sterować robotem. Użyłem systemu gniazd Linuksa do programowania sieci dla mojej konfiguracji. Jeden program („serwer joysticka”) jest uruchamiany na osobnym komputerze, do którego podłączony jest kontroler, a inny program („klient”) jest uruchamiany na netbooku podłączonym do Arduino. To łączy dwa komputery i wysyła informacje o joysticku do netbooka, który następnie wysyła pakiety szeregowe do Arduino, które steruje robotem. Aby połączyć się z Arduino za pomocą komputera z systemem Linux (w C ++), musisz najpierw otworzyć port szeregowy we właściwym szybkość transmisji, a następnie wyślij wartości za pomocą protokołu, którego użyłeś również w kodzie Arduino. Mój format seryjny jest prosty i skuteczny. Używam 4 bajtów na „ramkę”, aby wysłać dwie prędkości silnika (każda jest pojedynczym bajtem). Pierwszy i ostatni bajt to wartości zakodowane na sztywno, które są używane do powstrzymania Arduino przed wysłaniem niewłaściwego bajtu do kodu PWM i spowodowaniem szaleństwa silników. To jest główny cel diody LED RGB, miga na czerwono, gdy ramka szeregowa była niekompletna. Te 4 bajty są następujące:255 (bajt "startowy" zakodowany na stałe),,, 200 (bajt "końcowy" zakodowany na stałe) Aby zapewnić niezawodny odbiór danych, upewnij się, że masz wystarczająco dużo opóźnień między pętlami programu. Jeśli uruchomisz kod komputera zbyt szybko, zalej port, a Arduino może zacząć upuszczać lub nawet błędnie odczytywać bajty. Nawet jeśli nie upuszcza informacji, może również przepełnić bufor portu szeregowego Arduino. W przypadku silników Vex użyłem biblioteki Arduino Servo. Ponieważ silniki Vex są po prostu silnikami o ciągłym obrocie, wykorzystują dokładnie tę samą sygnalizację, co serwomechanizmy. Jednak zamiast 90 stopni jako punktu środkowego, jest to punkt zatrzymania, w którym silnik się nie obraca. Obniżenie „kąta” powoduje, że silnik zaczyna wirować w jednym kierunku, natomiast podniesienie kąta powoduje, że kręci się w drugim kierunku. Im dalej od punktu środkowego jesteś, tym szybciej silnik się kręci. Chociaż niczego nie zepsuje, jeśli wyślesz do silników wartości większe niż 180 stopni, radziłbym ograniczyć wartości od 0 do 180 stopni (co w tym przypadku oznacza przyrosty prędkości). Ponieważ chciałem mieć większą kontrolę i mniej niekontrolowanego prowadzenia robota, dodałem programowe „ograniczenie prędkości” do mojego programu, które nie pozwala na wzrost prędkości powyżej 30 „stopni” w dowolnym kierunku (zakres to 90 +/- 30). Planuję dodać polecenie portu szeregowego, które zmienia ograniczenie prędkości, aby komputer mógł usunąć ograniczenie w locie, jeśli chcesz jechać szybko (testowałem w małych pomieszczeniach, więc nie chcę, aby przyspieszał i uderzyć w ścianę, szczególnie z netbookiem. Aby uzyskać więcej informacji, pobierz załączony kod na końcu tej instrukcji.

Krok 4: Dodaj netbooka, aby odkrywać nieznane światy na odległość

Dodaj netbooka, aby odkrywać nieznane światy na odległość
Dodaj netbooka, aby odkrywać nieznane światy na odległość
Dodaj netbooka, aby odkrywać nieznane światy na odległość
Dodaj netbooka, aby odkrywać nieznane światy na odległość

Dzięki pełnemu komputerowi na pokładzie robota Arduino możesz prowadzić robota z tak dużej odległości, jak może dotrzeć do sieci Wi-Fi, bez żadnych przewodów, aby ograniczyć robota do jednego obszaru. Dobrym kandydatem do tej pracy jest netbook, ponieważ netbooki są małe, lekkie, mają wbudowaną baterię, mają WiFi, a większość ma nawet wbudowane kamery internetowe, które można wykorzystać do przesyłania widoku robota z powrotem do bezpiecznego miejsca, w którym może to kontrolować. Ponadto, jeśli Twój netbook jest wyposażony w mobilną usługę szerokopasmową, Twój zasięg jest praktycznie nieograniczony. Mając wystarczającą ilość baterii, możesz zawieźć robota do lokalnej pizzerii i złożyć zamówienie przez kamerę internetową (niezalecane, roboty zwykle nie są dozwolone w pizzerii, nawet jeśli są to ludzie, prawdopodobnie spróbują ukraść robota i może nawet pizza). Może to być również dobry sposób na zbadanie ciemnych głębin piwnicy z wygodnego krzesła biurowego, chociaż dodanie kilku reflektorów może być w tym przypadku bardzo pomocne.

Istnieje wiele sposobów, aby to zadziałało, wiele z nich jest prawdopodobnie o wiele łatwiejszych niż moje, chociaż nie jestem zaznajomiony z językami przetwarzania lub opartymi na skryptach, więc zdecydowałem się użyć Linuksa i C ++ do stworzenia bezprzewodowego łącza sterującego między moją stacją bazową (aka stary ThinkPad) i mój nowy netbook Lenovo IdeaPad, który jest podłączony do podstawy dysku Arduino. Oba komputery PC działają pod kontrolą Ubuntu. Mój ThinkPad jest podłączony do szkolnej sieci LAN, a mój IdeaPad do punktu dostępu Wi-Fi, który jest również podłączony do szkolnej sieci LAN (nie mogłem uzyskać niezawodnego strumienia wideo ze szkolnej sieci Wi-Fi, ponieważ wszyscy inni z niej korzystają, więc ustawiłem własny router, aby zapewnić dobre połączenie). Dobre połączenie jest szczególnie ważne w moim przypadku, ponieważ nie zaimplementowałem żadnego sprawdzania błędów ani limitu czasu. Jeśli połączenie sieciowe nagle zerwie się, robot będzie kontynuował pracę, dopóki nie zderzy się z czymś lub uruchomię go i zatrzymam. Jest to główny czynnik stojący za moją decyzją o spowolnieniu układu napędowego zarówno poprzez zmniejszenie prędkości silników, jak i wprowadzenie ograniczenia prędkości oprogramowania.

Krok 5: Uzyskaj kanał wideo

Po tym, jak robot odkrywca będzie mógł jeździć bezprzewodowo, prawdopodobnie będziesz chciał mieć obraz wideo z netbooka, aby wiedzieć, gdzie znajduje się twój robot. Jeśli używasz Ubuntu (lub nawet jeśli nie!) Polecam używać VLC Media Player do przesyłania strumieniowego. Jeśli go nie zainstalowałeś, naprawdę tracisz, więc zainstaluj go za pomocą polecenia „sudo apt-get install vlc”, wyszukaj VLC w Centrum oprogramowania Ubuntu (tylko 9.10) lub pobierz instalator z wideolan. org, jeśli korzystasz z systemu Windows. Będziesz potrzebował VLC działającego na obu komputerach. VLC może przesyłać strumieniowo, a także odtwarzać strumienie w sieci. Na netbooku (robocie) najpierw upewnij się, że Twoja kamera internetowa (wbudowana lub podłączona przez USB) działa, klikając Otwórz urządzenie przechwytujące i wypróbuj Wideo dla systemu Linux 2 (niektóre starsze urządzenia mogą wymagać Wideo dla systemu Linux zamiast nowej wersji 2). Powinieneś zobaczyć widok z kamery na ekranie netbooka. Aby go przesyłać strumieniowo, wybierz Streaming z menu File, a następnie wybierz kartę Capture Device w górnej części okna, które się pojawi. Pamiętaj, że Ubuntu (i wiele innych dystrybucji Linuksa) pozwala przytrzymać klawisz Alt, aby klikać i przeciągać okna, które są zbyt duże dla twojego ekranu (szczególnie przydatne na starszych netbookach, chociaż nawet mój IdeaPad ma dziwną rozdzielczość 1024x576 bez wyraźnego powodu). Aby zmniejszyć opóźnienie, kliknij „Pokaż więcej opcji” i zmniejsz wartość pamięci podręcznej. Kwota, o jaką możesz ją obniżyć czasami zależy od urządzenia, staje się niestabilna, jeśli obniżysz ją zbyt mocno. Przy 300ms możesz uzyskać niewielkie opóźnienie, ale nie jest tak źle.

Następnie kliknij Strumień, aby przejść do następnego menu. Kliknij Dalej, a następnie wybierz i dodaj HTTP jako nowe miejsce docelowe. Teraz skonfiguruj transkodowanie, aby strumień był mniejszy. Zrobiłem niestandardowy profil, który używa M-JPEG przy 60kb/s i 8fps. Dzieje się tak, ponieważ użycie zaawansowanego kodeka, takiego jak MPEG lub Theora, pochłania ogromne ilości czasu procesora Atom w netbooku, a to może prowadzić do zatrzymania obrazu wideo bez wyraźnego powodu. MJPEG to prosty kodek, który jest łatwy w użyciu przy niskich przepływnościach. Po uruchomieniu strumienia otwórz VLC na drugim komputerze, otwórz strumień sieciowy, wybierz HTTP, a następnie wpisz adres IP swojego netbooka (lokalny lub internetowy, w zależności od tego, jak się łączysz), a następnie „:8080”. Musisz określić port z jakiegoś dziwnego powodu, w przeciwnym razie spowoduje to błędy. Jeśli masz przyzwoite połączenie, powinieneś zobaczyć obraz z kamery internetowej na drugim komputerze, ale będzie on miał niewielkie (około sekundy) opóźnienie. Nie wiem dokładnie, dlaczego to opóźnienie występuje, ale nie wiem, jak się go pozbyć. Teraz otwórz aplikację sterującą i zacznij prowadzić swojego netbooka. Poczuj, jak działa opóźnienie podczas jazdy, aby o nic się nie zderzyć. Jeśli to działa, Twój netbook robot jest gotowy.

Zalecana: