Postanowiłem podzielić się na forum małym projektem, który zrobiłem ostatnio właściwie przez nadmiar wolnego czasu. Jest to zdalnie sterowany samochodzik z czterema kołami, omija on przeszkody. Pewnie wielu z Was już widziało coś takiego, dlatego chciałem dołożyć coś oryginalnego od siebie i tym sposobem stworzyłem filmik "reklamujący" to cudo
Jak wspomniałem robot omija przeszkody, tzn przy wykryciu przeszkody (w odległości poniżej 10cm przed nim) odbiera możliwość sterowania, wykonuje losowy skręt w losowym kierunku i przywraca możliwość sterowania, co sygnalizuje kolorowa dioda RGB.
Zanim rozpiszę się jak to działa, kilka słów wstępnych: Chciałem pokazać ten filmik na forum przede wszystkim dlatego, że całą wiedzę i miłość do programowania (nie tylko w C) zawdzięczam Bluebookowi Byłbym niewdzięcznikiem, gdybym zachował to dla siebie. Mam przede wszystkim nadzieję, że kogoś ten projekt zaciekawi lub rozbawi, choć wiem że "avoiding obstacle robot" nie jest czymś nowatorskim ale na pewno świetną zabawą!
Co i jak, czyli rozwinięcie napisów końcowych. Części w aucie: -takie jak podstawka można znaleźć w różnych sklepach modelarskich, osobiście staram się nie przykładać ręki do takich mechanicznych spraw jak wiercenie i cięcie, więc kupiłem gotowca; -silniki 6V, wraz z przekładnią i kołami (nieskrętnymi) również modelarskie; -sterowniki do silników L298N czyli właściwie proste (w obsłudze) jak mostek H; -zasilanie: powstawiałem 4 baterie 1,5V (szeregowo) do zasilania mikrokontrolera oraz 4 baterie do zasilania silników... okazało się, starczą na kilka minut samych testów, więc dorzuciłem równolegle kolejne 4; -na samochodziku jeździ obudowane arduino uno z atmegą 328p, które mile mnie zaskoczyło funkcjonalnością i liczbą cyfrowych I/O, które wykorzystałem do maksimum; -czujnik do omijania przeszkód - ultradźwiękowy hc-sr04, o wystarczającej do tego projektu dokładności i powtarzalności pomiarów. bardzo prosty w obsłudze, wystarczyło podłączyć pod wejście analogowe i śmigał bez rezystorów, kondensatorów itp.; -dioda RGB - słynna WS2811! wstawiłem mały kondensator między zasilające oraz rezystor na pin sygnałowy, ale chyba dla picu, bo zadziałało jeszcze bez nich zielony-jeździmy, czerwony-przeszkoda; -moduł komunikacyjny hm-r868s, jest to odbiornik fal 868MHz, z którego znów jestem zadowolony, bo miałem poprzednio w rękach taniego chińczyka, coś związanego z pasmem 433mhz... nigdy więcej! nowy moduł sprawił się świetnie, zero zakłóceń i problemów, a podłączony jest bezpośrednio pod pin RX. Części w jednostce sterującej: -płytka evbavr04 z atmegą 32A, nie wiem w sumie skąd ją wytrzasnąłem, ale ma sporo dodatkowych funkcjonalności choć mi było potrzebne tylko parę I/O -dla sprawdzania co się dzieje w obliczeniach LCD screen 16x2, wyświetlałem na nim głównie co się dzieje z... -joystickiem! fajnie wyglądający mały joystick, który jest tragiczny jeśli chodzi o czułość. działa na zasadzie potencjometru- ma dwie osie X i Y z wyprowadzeniami na których mierzymy napięcie względem zasilającego... więc zajął dwa wejścia analogowe, a zasilałem go z pinów mikrokontrolera -do transmisji danych z joysticka moduł hm-t868s czyli odpowiednik receivera w aucie. jedynym moim wkładem żeby zadziałał było... włożenie kabelka z pinem męskim w dziurkę ANT to wydłużyło sygnał o tyle metrów, że w domu nie sprawdzę; -programator do płytki... jakiś chińczyk z czasów pierwszego projektu na atmedze8 na drugim roku studiów jakim cudem to działa...!
Software Nie wiem do końca jak się zachować, czy wrzucać źródłowy... w każdym razie jestem bardzo zadowolony, bo cały program od podszewki napisałem osobiście!! Jeśli ktoś będzie chciał zobaczyć dokładnie działanie, mogę podzielić się kodem, a teraz opiszę pod kątem myślenia inżynierskiego co i dlaczego zrobiłem. Jedziemy po kolei tak jak idzie sygnał sterujący: -joystick w prosty sposób ogarnąłem przetwornikiem adc w atmedze. interesowała mnie znacznie mniejsza dokładność pomiaru niż pozwalał na to przetwornik, dlatego wynik dzieliłem przez 64... -a następnie wysyłałem dane przez moduł komunikacyjny. wszystko gładko dzięki uartowi, użyłem ramki 8n. z tego miejsca dziękuję producentom atmegi za przykłady kodu w nocie katalogowej programowanie jeszcze nigdy nie było takie proste! -dane odbieram w głównej pętli sterującej autkiem. ponieważ są to współrzędne X, Y położenia (wychylenia) joysticka, to dla ułatwienia zmieściłem je w jednym bajcie - mogłem to zrobić, gdyż wystarczyła mi rozdzielczość 2^4; -przed rozpoczęciem jazdy sprawdzenie co widzi czujnik, być może trzeba już skręcać -sterowanie kołami! w normalnym aucie mamy dwa niezależne źródła sterowania: pedały i kierownicę. podczas gdy ja miałem tylko joystick, gdzie jedna współrzędna musi odpowiadać za jazdę w przód lub tył, druga zaś na boki, ale zależnie też od tej pierwszej... ponieważ samo wychylenie joysticka tylko w bok nie spowoduje jazdy w przód/tył! obmyśliłem więc, że współrzędna X jest pedałem gazu, zaś Y takim ujemnym gazem, który spowalnia jedną stronę kół według jakiegoś równania - jest to jedyna możliwość skrętu autka. dla szczególnego przypadku, gdy x=0, wartość Y obraca kołami w przeciwnym kierunku (np lewe w przód, prawe w tył, umożliwia to sterownik silników) dla szybszego obrotu. -przy okazji, problemem był fakt, że najmniejszą wartość X,Y joystick podaje będąc w lewym dolnym położeniu, więc zakres wartości od tego miejsca to 0-7... czyli po drodze troszkę matematyki aby przerobić na 0-3 i informację o kierunku... -dalej już tylko dodawanie, mnożenie wartości, żeby miały sens dla PWM. wykorzystałem timer0 i timer2 w fast PWM mode, gdyż mają taką samą rozdzielczość; -jak mówiłem, samochód zatrzymuje się po wykryciu przeszkody - jest niestety zbyt mało skrętny, by ją omijać jadąc. pod tym względem fajniejszym rozwiązaniem byłoby np. auto o bliższych osiach (wtedy np mniejszych kołach), które skręcałoby o 90stopni prawie w miejscu, lub dwukołowe z trzecim kołem skrętnym. -dioda RGB! ileż szarych komórek dzięki niej przepaliłem. gdy spojrzałem w notę aplikacyjną, myślałem, że jest tam błąd... ramka danych działająca w prędkościach typu 250 nanosekund wymyśliłem, że pora kupić oscyloskop, ale szybko obliczyłem, że musi być zbyt mocny na moją kieszeń. wtedy policzyłem, że gdyby tak używać jakichś prostych instrukcji w atmedze, to można ją spowolnić o kilka cykli procka pomiędzy ustawianiem 0 i 1 na wyjściu... dla tej potrzeby odkryłem asemblerową komendę NOP. wiedziałem, że muszę metodą prób i błędów sprawdzić rzeczywisty czas narastania zbocza i prędkość procka, nie wiedziałem tylko jak wstawić NOPa w języku C. I wtedy natknąłem się na youtubowy poradnik pewnego znanego programisty reszta poszła więc z górki, bo wystarczyło mi, że skopiowałem tyle NOPów ile było trzeba . -biblioteka do wyświetlacza LED odgrywała niewielką rolę, a miałem ją już od kilku lat pewnie dzięki Bluebookowi -wszystko to rozpoczęte jednym porządnym initem, obejmującym uart, adc, timery, kolor diody itd.
Czego nie udało się zrobić? -Komunikacja przez bluetooth jeszcze przede mną. Chciałbym sterować samochodzikiem przez telefon, to znaczy zrobić do tego odpowiednią aplikację - chyba imitującą joystick, bo z lenistwa nie będę już zmieniał algorytmu sterowania moduł BT mam, czasu niestety brak. -Pożeranie baterii to jakaś masakra. Nie znam się za bardzo na takiej energetyce, ale 8 baterii wydaje mi się niepotrzebnie dużo dla tak wolnego samochodu. -Parę niedociągnięć jak to, że bez sygnału sterującego samochodzik tańczy
Bardzo dziękuję całemu forum, wszystkim kolorowym książkom i ich autorowi za to że jesteście i rozkochaliście mnie w programowaniu dla zabawy
PS. Bardzo żałuję że nie zrobiłem zdjęcia całości, niestety jestem poza domem ale postaram się wrzucić zaraz po powrocie. Na razie filmik musi wystarczyć
A już się bałem, że będzie to dyskusja nt. wyższości aut niemieckich nad ... japońskie/francuskie/jakiekolwiek inne Ze swojej skromnej strony, zaproponowałbym tylko zmianę trzech literek w tym projekcie z E..... na ATB
Dzięki wszystkim za odzew . Posłuchałem rady z Android Studio i stworzyłem apkę do sterowania tym robotem wykorzystując BTM-222. W przyszłości na pewno jeszcze wykorzystam je w następnych projektach. Poniżej humorystyczne udokumentowanie. Pozdrawiam
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników