Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

Cześć.

W tym artykule chciałbym opisać proces budowy mojego pierwszego robota na Arduino. Materiał będzie przydatny dla innych nowicjuszy, takich jak ja, którzy chcą stworzyć „samobiegającą wózek”. Artykuł stanowi opis etapów pracy z moimi dodatkami na różne niuanse. Link do końcowego kodu (prawdopodobnie nieidealnego) znajduje się na końcu artykułu.

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

W miarę możliwości angażowałem w to mojego syna (8 lat). Co dokładnie mu wychodziło, a co nie — na to poświęciłem część artykułu, być może komuś się przyda.

Ogólny opis robota

Na początku kilka słów o samym robotie (idea). Nie chciałem na początku budować czegoś typowego. Jednocześnie zestaw komponentów był dość standardowy — szasii, silniki, czujnik ultradźwiękowy, czujnik linii, diody LED, buzzer. Na początku z tej „zupy” wymyśliłem robota, który strzeże swojego terytorium. Zmierza do intruza, który przekroczył linię okręgu, a potem wraca do środka. W tej wersji była jednak potrzebna narysowana linia, plus dodatkowa matematyka, aby stale pozostać w okręgu.

Dlatego po pewnym namyśle zmieniłem pomysł i postanowiłem stworzyć robota-„łowcę”. Na początku obraca się wokół własnej osi, wybierając pobliską cel (człowieka). Gdy „ofiara” zostanie odkryta, „łowca” włącza migacze i syrenę, i zaczyna do niej jechać. Kiedy człowiek odchodzi/ucieka, robot wybiera nowy cel i ściga go, i tak dalej. Taki robot nie potrzebuje ograniczonego okręgu i może działać na otwartym terenie.

Jak widzicie, w dużej mierze przypomina to grę w „gonitwy”. Choć robot nie stał się wystarczająco szybki, to jednak uczciwie współdziała z otaczającymi go ludźmi. Szczególnie podoba to dzieciom (czasami, prawdę mówiąc, wydaje się, że zaraz go podepczą, aż serce mi skacze…). Myślę, że dla popularyzacji technicznego konstruktorstwa to dobre rozwiązanie.

Struktura robota

Więc zdecydowaliśmy się na pomysł, przechodzimy do kompozycji. Lista elementów jest tworzona z tego, co robot powinien umieć. Tutaj wszystko jest całkiem oczywiste, więc od razu przyjrzymy się numeracji:

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

«Mózgi» robota — płytka Arduino Uno (1), była w zamówionym zestawie z Chin. Dla naszych celów jest to wystarczające (skupiamy się na liczbie używanych pinów). Z tego samego zestawu wzięliśmy gotowe podwozie (2), na które mocowane są dwa napędowe koła (3) i jedno tylne (swobodnie obracające się) (4). W zestawie był także gotowy pojemnik na baterie (5). Z przodu robota znajduje się czujnik ultradźwiękowy (HC-SR04) (6), z tyłu — sterownik silników (L298N) (7), na środku — dioda LED migająca (8) i nieco z boku — buzzer (9).

Na etapie kompozycji zwracamy uwagę:

— żeby wszystko się zmieściło
— żeby było zbalansowane
— żeby było racjonalnie rozmieszczone

Częściowo zrobili to już za nas chińscy koledzy. Tak, ciężki pojemnik na baterie został umieszczony na środku, a mniej więcej pod nim znajdują się koła napędowe. Wszystkie inne płytki są lekkie, można je umieścić na peryferiach.

Szczegóły:

  1. W podwoziu z zestawu jest wiele fabrycznych otworów, ale jaka jest ich logika — nie zdołałem się dowiedzieć. Silniki i blok akumulatorów zostały zamocowane bez problemu, dalej zaczęła się „adaptacja” z wierceniem nowych otworów, aby zamocować tę czy inną płytkę.
  2. Bardzo przydały się mosiężne wsporniki i inne mocowania z zapasów (czasami musiałem improwizować).
  3. Przewody z każdej płytki przepuszczałem przez zaciski (znalezione znowu w zapasach). Bardzo wygodne, wszystkie kable leżą ładnie i nie są luźne.

Oddzielne bloki

Teraz przejdę do bloków i opowiem osobno o każdym.

Pojemnik na baterie

Jasne, że robot musi mieć dobre źródło energii. Opcje mogą być różne, ja wybrałem opcję z 4 akumulatorami AA. W sumie dają około 5 V, a takie napięcie można bezpośrednio podać na pin 5V płytki Arduino (omijając stabilizator).

Oczywiście byłem trochę ostrożny, ale to rozwiązanie działa całkiem dobrze.

Ponieważ zasilanie potrzebne jest wszędzie, dla wygody zrobiłem na środku robota dwa złącza: jedno „udostępnia” masę (po prawej), a drugie — 5 V (po lewej).

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

Silniki i sterownik

Najpierw o mocowaniu silników. Mocowanie jest fabryczne, ale wykonane z dużymi tolerancjami. Innymi słowy, silniki mogą „wibracyjnie” poruszać się o kilka milimetrów w lewo i prawo. Dla naszego zadania nie jest to krytyczne, ale gdzie indziej może to wpływać (robot zacznie zbaczać na bok). Na wszelki wypadek ustawiłem silniki ściśle równolegle i zafiksowałem je klejem.

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

Do sterowania silnikami, jak pisałem wcześniej, wykorzystuje się sterownik L298N. Zgodnie z dokumentacją ma on trzy piny na każdy silnik: jeden do zmiany prędkości i parę pinów do kierunku obrotu. Tutaj jest jedna ważna kwestia. Okazuje się, że jeśli napięcie zasilania wynosi 5 V, to regulacja prędkości po prostu nie działa! To znaczy, że albo całkowicie nie kręci, albo kręci na maksa. Taka szczególność, przez którą 'zgubiłem' kilka wieczorów. W końcu znalazłem wzmiankę gdzieś na jednym z forów.

Generalnie niska prędkość obrotu była mi potrzebna podczas nawracania robota — aby miał zapas czasu na zeskanowanie przestrzeni. Ponieważ jednak taka koncepcja się nie sprawdziła, musiałem to robić inaczej: mały obrót — zatrzymanie — obrót — zatrzymanie itd. Znowu, nie tak elegancko, ale działa.

Tutaj dodam, że po każdym ściganiu robot wybiera losowy kierunek nowego obrotu (zgodnie lub przeciwnie do ruchu wskazówek zegara).

Czujnik ultradźwiękowy

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

Kolejny kawałek sprzętu, w którym musiałem znaleźć kompromisowe rozwiązanie. Czujnik ultradźwiękowy na rzeczywistych przeszkodach daje niestabilne wyniki. Właściwie, było to do przewidzenia. Działa idealnie na zawodach, gdzie są gładkie, równe i prostopadłe powierzchnie, ale jeśli przed nim „migają” czyjeś nogi — wprowadzać trzeba dodatkowe przetwarzanie.

Jako takie przetwarzanie zastosowałem filtr medianowy na trzy pomiary. Na podstawie testów na prawdziwych dzieciach (w trakcie testów żadne dziecko nie ucierpiało!), okazało się to wystarczające do normalizacji danych. Fizyka jest prosta: mamy sygnały odbite od potrzebnych obiektów (dające wymaganą odległość) i odbite od dalszych, na przykład ścian. Te drugie stanowią przypadkowe odchylenia w pomiarach typu 45, 46, 230, 46, 46, 45, 45, 310, 46… To właśnie ich filtr medianowy odrzuca.

Po przetworzeniu wszystkich danych uzyskujemy odległość do najbliższego obiektu. Jeśli jest ona mniejsza niż pewna wartość progowa — wtedy włączamy sygnalizację i jedziemy prosto do "naruszyciela".

Migacz i syrena

To chyba najprostsze elementy z wymienionych. Widać je na zdjęciach powyżej. O podzespołach nie ma sensu się rozwodzić, więc przejdźmy teraz do kodu.

Program zarządzający

Nie widzę sensu w szczegółowym opisywaniu kodu, kto potrzebuje — link na końcu artykułu, tam wszystko jest wystarczająco czytelne. A ogólną strukturę warto by było wyjaśnić.

Pierwsza rzecz, którą musiałem zrozumieć: robot to urządzenie działające w czasie rzeczywistym. A konkretnie, muszę to przypomnieć, ponieważ wcześniej i teraz zajmuję się elektroniką. Tak więc, od razu zapominamy o wywołaniu delay(), które bardzo chętnie stosuje się w przykładach i które po prostu "zamraża" program na wskazany czas. Zamiast tego, jak radzą doświadczeni, wprowadzamy timery dla każdego bloku. Minął wymagany czas — wykonujemy działanie (zwiększamy jasność diody LED, włączamy silnik itd.).

Timery mogą być ze sobą powiązane. Na przykład, brzęczyk działa synchronicznie z migaczem. To trochę upraszcza program.

Oczywiście, wszystko dzielimy na oddzielne funkcje (migacz, dźwięk, skręt, ruch do przodu itd.). Jeśli się tego nie zrobi, później nie będzie wiadomo, co skąd i dokąd.

Niuanse pedagogiki

Wszystko, co opisałem powyżej, robiłem w wolnym czasie wieczorami. W niespiesznym trybie spędziłem na robocie około trzech tygodni. Można by na tym zakończyć, ale obiecałem wam również opowiedzieć o pracy z dzieckiem. Co można zrobić w tym wieku?

Praca według instrukcji

Każdą część najpierw sprawdzaliśmy osobno — diody LED, brzęczyk, silniki, czujniki itd. Jest wiele gotowych przykładów — niektóre bezpośrednio w środowisku programistycznym, inne można znaleźć w Internecie. To niewątpliwie cieszy. Bierzemy kod, podłączamy element, upewniamy się, że działa, a następnie zaczynamy go modyfikować pod nasze zadania. Podłączenia według schematu i pod moim pewnym nadzorem dziecko wykonuje samodzielnie. To dobre. Umiejętność pracy precyzyjnie według instrukcji też jest potrzebna.

Kolejność pracy ("od szczegółu do ogółu")

To jest skomplikowany temat. Należy przyzwyczaić się do tego, że duży projekt („zbudować robota”) składa się z mniejszych zadań („podłączyć czujnik”, „podłączyć silniki”...), a te z kolei z jeszcze mniejszych kroków („znaleźć program”, „podłączyć płytkę”, „załadować oprogramowanie”...). Wykonując bardziej lub mniej zrozumiałe zadania na niższym poziomie, „zamykanie” zadań średniego poziomu prowadzi do ogólnego wyniku. Wyjaśniałem, ale myślę, że zrozumienie nadejdzie jeszcze w przyszłości. Prawdopodobnie gdzieś w wieku nastoletnim.

Montaż

Wiercenie, gwintowanie, śruby, nakrętki, lutowanie i zapach kalafonii - gdzież by bez tego. Dziecko zdobyło podstawową umiejętność „Praca z lutownicą” - udało się połączyć kilka elementów (trochę mu w tym pomogłem, nie skrywam). Nie zapomnijcie o omówieniu zasad bezpieczeństwa.

Praca przy komputerze

Program do robota pisałem ja, ale udało się osiągnąć kilka dodatkowych wyników.

Pierwsze: angielski. W szkole dopiero zaczęli go uczyć, więc ledwo radziliśmy sobie z tym, co to jest pishalka, migalka, yarkost i inne translitowe słowa. Zrozumieliśmy przynajmniej to. Świadomie nie używałem rodzimych angielskich słów, ponieważ do tego poziomu jeszcze nie doszliśmy.

Drugie: efektywna praca. Uczyliśmy gorących skrótów klawiszowych, jak szybko wykonywać typowe operacje. Co jakiś czas, kiedy pisaliśmy program, zamienialiśmy się miejscami z synem, a ja mówiłem, co trzeba zrobić (zmiana, wyszukiwanie itp.). Musiałem powtarzać w kółko: „zaznacz podwójnym kliknięciem”, „naciśnij Shift”, „naciśnij Ctrl” i tak dalej. Proces nauki nie jest szybki, ale myślę, że umiejętności będą stopniowo odkładać się „w podświadomości”.

Ukryty tekstMożesz powiedzieć, że to, co opisano powyżej, jest oczywiste. Ale, szczerze mówiąc, tej jesieni miałem okazję prowadzić zajęcia z informatyki w klasach 9 w jednej szkole. To straszne. Uczniowie nie znają tak podstawowych rzeczy, jak Ctrl + Z, Ctrl + C i Ctrl + V, zaznaczania tekstu z wciśniętym Shift czy podwójnym kliknięciem na słowie itd. A to pomimo, że to już trzeci rok nauki informatyki… Wnioski wyciągnijcie sami.

Trzecie: ślepe pisanie. Komentarze w kodzie powierzyłem dziecku (niech ćwiczy). Od razu ułożyliśmy ręce w odpowiedniej pozycji, aby palce stopniowo zapamiętały układ klawiszy.

Jak widać, dopiero zaczynamy. Umiejętności i wiedza będą dalej doskonalone, na pewno się przydadzą w życiu.

Przy okazji, co do perspektyw...

Dalszy rozwój

Robot jest gotowy, jeździ, miga i piszczy. Co teraz? Zainspirowani osiągnięciami planujemy dalszy rozwój. Mamy pomysł na zdalne sterowanie — coś w stylu łazika. Byłoby ciekawe, siedząc przy wirtualnym pilocie, kontrolować ruch robota, który porusza się w zupełnie innym miejscu. Ale to już inna historia…

I na koniec, bohaterowie tego artykułu (filmik po kliknięciu):

Doświadczenie w budowie pierwszego robota na Arduino (robot-«myśliwy»)

Dziękuję za uwagę!

Link do kodu

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster