Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 17:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 12 lut 2018, o 23:11 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 8
Pomógł: 0

Cześć!

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 :lol: 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 :D
-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 :lol: 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 :D 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 :lol: 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 :shock: 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 :lol: :lol: reszta poszła więc z górki, bo wystarczyło mi, że skopiowałem tyle NOPów ile było trzeba :D .
-biblioteka do wyświetlacza LED odgrywała niewielką rolę, a miałem ją już od kilku lat pewnie dzięki Bluebookowi :D
-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 :D 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 :D


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ć :|



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2018, o 23:26 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

No po prostu BOMBA :D ... fajny filmik no i samo urządzenie :D ... rewelacja. Gratulacje !!! ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lut 2018, o 23:35 
Offline
Użytkownik

Dołączył(a): 19 paź 2014
Posty: 357
Lokalizacja: stolyca pyrlandii :)
Pomógł: 18

A już się bałem, że będzie to dyskusja nt. wyższości aut niemieckich nad ... japońskie/francuskie/jakiekolwiek inne :P
Ze swojej skromnej strony, zaproponowałbym tylko zmianę trzech literek w tym projekcie z E..... na ATB :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2018, o 07:01 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Fajnie wyszło, gratuluję!
P. S. Ten kondensator na Din diody to niepotrzebny, bo bedzie rozjeżdżał zbocza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 lut 2018, o 22:46 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Zabawy z kotem rządzą ;)

aiwa napisał(a):
-Pożeranie baterii to jakaś masakra.

Przekalkuluj sobie czy nie lepiej zainwestować w akumulator. Przykładowe gotowe rozwiązanie:
DIGI-LION 3PB (ŁADOWARKA Z PRZETWORNICĄ)

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 maja 2018, o 18:32 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 8
Pomógł: 0

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 :)




Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO