Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Halo

W tym artykule chcę opisać proces składania mojego pierwszego robota z wykorzystaniem Arduino. Materiał przyda się innym początkującym, takim jak ja, którzy chcą zbudować coś w rodzaju „samobieżnego wózka”. Artykuł jest opisem etapów pracy z moimi dodatkami nad różnymi niuansami. Link do ostatecznego kodu (najprawdopodobniej nie idealnego) znajduje się na końcu artykułu.

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Kiedy tylko było to możliwe, angażowałem w udział mojego syna (8 lat). Co dokładnie z nim zadziałało, a co nie - poświęciłem temu część artykułu, być może komuś się przyda.

Ogólny opis robota

Na początek kilka słów o samym robocie (pomysł). Nie chciałem na początku montować czegoś standardowego. Jednocześnie zestaw podzespołów był dość standardowy – podwozie, silniki, czujnik ultradźwiękowy, czujnik liniowy, diody LED, głośnik wysokotonowy. Początkowo z tego „zestawu do zupy” wymyślono robota, który strzeże jego terytorium. Podjeżdża w stronę sprawcy, który przekroczył linię okręgu, po czym wraca na środek. Jednak ta wersja wymagała narysowanej linii i dodatkowej matematyki, aby przez cały czas pozostać w okręgu.

Dlatego po namyśle nieco zmieniłem pomysł i zdecydowałem się zrobić robota „myśliwego”. Na początku obraca się wokół własnej osi, wybierając pobliski cel (osobę). W przypadku wykrycia „ofiary” „myśliwy” włącza migające światła i syrenę i zaczyna jechać w jej stronę. Kiedy osoba oddala się/ucieka, robot wybiera nowy cel i goni za nim itd. Taki robot nie potrzebuje ograniczonego kręgu i może pracować na otwartych przestrzeniach.

Jak widać, przypomina to trochę grę polegającą na nadrabianiu zaległości. Choć ostatecznie robot nie okazał się wystarczająco szybki, szczerze wchodzi w interakcję z otaczającymi go ludźmi. Szczególnie lubią go dzieci (czasami jednak wydaje się, że zaraz ją zdepczą, serce bije im mocniej...). Myślę, że jest to dobre rozwiązanie w celu popularyzacji projektowania technicznego.

Struktura robota

Tak więc zdecydowaliśmy się na pomysł, przejdźmy dalej układ. Lista elementów tworzona jest z tego, co robot powinien umieć. Wszystko tutaj jest dość oczywiste, więc od razu spójrzmy na numerację:

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

„Mózgiem” robota jest płytka arduino uno (1); był w zestawie zamówionym z Chin. Dla naszych celów to w zupełności wystarczy (koncentrujemy się na liczbie użytych pinów). Z tego samego zestawu wzięliśmy gotowe podwozie (2), na którym przymocowane są dwa koła napędowe (3) i jedno tylne (swobodnie obracające się) (4). W zestawie znajdowała się także gotowa komora na akumulator (5). Z przodu robota znajduje się czujnik ultradźwiękowy (HC-SR04) (6), z tyłu sterownik silnika (L298N) (7), pośrodku migacz LED (8), a nieco do z boku znajduje się głośnik wysokotonowy (9).

Na etapie układu przyglądamy się:

- żeby wszystko pasowało
- być zrównoważonym
- być racjonalnie umiejscowione

Nasi chińscy koledzy już częściowo zrobili to za nas. Tak więc komora na ciężki akumulator jest umieszczona pośrodku, a koła napędowe znajdują się mniej więcej pod nią. Wszystkie pozostałe deski są lekkie i można je układać na obwodzie.

Niuanse:

  1. Podwozie z zestawu ma wiele fabrycznych dziur, ale nadal nie rozgryzłem, jaka jest w nich logika. Silniki i akumulator zostały zabezpieczone bez problemów, następnie przystąpiono do „regulacji” od wywiercenia nowych otworów w celu zabezpieczenia tej czy innej deski.
  2. Bardzo pomocne okazały się mosiężne stojaki i inne mocowania z magazynów (czasami musieliśmy je wyjąć).
  3. Przełożyłem szyny zbiorcze z każdej deski przez zaciski (znowu znalazłem je w magazynie). Bardzo wygodne, wszystkie przewody ładnie leżą i nie zwisają.

Poszczególne bloki

Teraz przejdę Bloki i opowiem Ci osobiście o każdym z nich.

Komora baterii

Oczywiste jest, że robot musi mieć dobre źródło energii. Opcje mogą się różnić, ja wybrałem opcję z 4 bateriami AA. W sumie dają około 5 V, a napięcie to można podać bezpośrednio na pin 5 V płytki arduino (z pominięciem stabilizatora).

Oczywiście zachowałem pewną ostrożność, ale to rozwiązanie jest całkiem wykonalne.

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

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Silniki i kierowca

Najpierw o montażu silników. Mocowanie jest wykonane fabrycznie, ale z dużymi tolerancjami. Innymi słowy, silniki mogą kołysać się o kilka milimetrów w lewo i w prawo. Dla naszego zadania nie jest to krytyczne, ale w niektórych miejscach może mieć wpływ (robot zacznie się przesuwać na bok). Na wszelki wypadek ustawiłem silniki ściśle równolegle i przymocowałem je klejem.

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Do sterowania silnikami tak jak pisałem powyżej służy sterownik L298N. Według dokumentacji ma on po trzy piny na każdy silnik: jeden do zmiany prędkości i parę pinów do kierunku obrotów. Jest tu jeden ważny punkt. Okazuje się, że jeśli napięcie zasilania wynosi 5 V, kontrola prędkości po prostu nie działa! Oznacza to, że albo w ogóle się nie obraca, albo obraca się maksymalnie. To właśnie ta cecha sprawiła, że ​​„zabiłem” kilka wieczorów. W końcu znalazłem wzmiankę gdzieś na jednym z forów.

Ogólnie rzecz biorąc, potrzebowałem małej prędkości obrotowej podczas obracania robota - aby miał czas na przeskanowanie przestrzeni. Ale ponieważ nic nie wyszło z tego pomysłu, musiałem zrobić to inaczej: mały skręt - stop - skręt - stop itp. Znowu nie tak elegancko, ale wykonalnie.

Dodam też, że po każdym pościgu robot wybiera losowo kierunek nowego zakrętu (zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara).

Czujnik ultradźwiękowy

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Kolejny element sprzętu, w którym musieliśmy szukać rozwiązania kompromisowego. Czujnik ultradźwiękowy generuje niestabilne liczby na rzeczywistych przeszkodach. Właściwie można było się tego spodziewać. Idealnie sprawdza się gdzieś na zawodach, gdzie są gładkie, równe i prostopadłe powierzchnie, ale jeśli czyjeś nogi „błyskują” przed nim, trzeba wprowadzić dodatkową obróbkę.

Jako takie przetwarzanie ustawiłem filtr medianowy z trzech powodów. Na podstawie badań przeprowadzonych na prawdziwych dzieciach (podczas badań żadne dziecko nie ucierpiało!) okazało się, że jest to w zupełności wystarczające do normalizacji danych. Fizyka jest tu prosta: mamy odbite sygnały niezbędny obiektów (podając wymaganą odległość) i odbitych od bardziej odległych, np. ścian. Te ostatnie są emisją losową w pomiarach postaci 45, 46, 230, 46, 46, 45, 45, 310, 46... To właśnie je odcina filtr medianowy.

Po całym przetwarzaniu otrzymujemy odległość do najbliższego obiektu. Jeżeli jest ona mniejsza od określonej wartości progowej, wówczas włączamy alarm i jedziemy prosto w stronę „intruza”.

Migacz i syrena

Być może najprostsze elementy wszystkich powyższych. Można je zobaczyć na powyższych zdjęciach. O sprzęcie nie ma tu co pisać, więc przejdźmy do rzeczy kod.

Program sterujący

Nie widzę sensu szczegółowego opisywania kodu, kto go potrzebuje - link znajduje się na końcu artykułu, tam wszystko jest w miarę czytelne. Ale byłoby miło wyjaśnić ogólną strukturę.

Pierwszą rzeczą, którą musieliśmy zrozumieć, było to, że robot jest urządzeniem czasu rzeczywistego. A dokładniej do zapamiętania, bo zarówno wcześniej, jak i teraz nadal zajmuję się elektroniką. Dlatego od razu zapominamy o wyzwaniu opóźnienie(), który uwielbiają wykorzystywać w przykładowych szkicach i który po prostu „zamraża” program na określony czas. Zamiast tego, jak radzą doświadczeni ludzie, wprowadzamy timery dla każdego bloku. Upłynął wymagany okres czasu - akcja została wykonana (zwiększono jasność diody LED, włączono silnik itp.).

Timery można ze sobą łączyć. Na przykład głośnik wysokotonowy działa synchronicznie z migaczem. To trochę upraszcza program.

Oczywiście wszystko rozkładamy na osobne funkcje (migające światła, dźwięk, skręcanie, poruszanie się do przodu itd.). Jeśli tego nie zrobisz, nie będziesz w stanie dowiedzieć się, co pochodzi, skąd i gdzie.

Niuanse pedagogiki

Wszystko co opisałem powyżej robiłem w wolnych chwilach wieczorami. Spokojnie spędziłem przy robocie około trzech tygodni. Na tym można było zakończyć, ale obiecałam, że opowiem Wam też o pracy z dzieckiem. Co można zrobić w tym wieku?

Pracuj zgodnie z instrukcją

Najpierw sprawdziliśmy każdy szczegół z osobna - diody LED, głośnik wysokotonowy, silniki, czujniki itp. Istnieje duża liczba gotowych przykładów - niektóre bezpośrednio w środowisku programistycznym, inne można znaleźć w Internecie. To z pewnością mnie cieszy. Bierzemy kod, łączymy część, upewniamy się, że działa, a następnie zaczynamy ją zmieniać, aby odpowiadała naszemu zadaniu. Dziecko wykonuje połączenia według schematu i pod moim okiem. To jest dobre. Musisz także umieć pracować ściśle według instrukcji.

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

To trudny punkt. Trzeba się nauczyć, że duży projekt („zrób robota”) składa się z małych zadań („podłącz czujnik”, „podłącz silniki”…), a te z kolei składają się z jeszcze mniejszych kroków („znajdź program”, „podłącz płytkę”, „pobierz oprogramowanie”...). Wykonując mniej lub bardziej zrozumiałe zadania niższego poziomu, „zamykamy” zadania średniego poziomu i z nich powstaje ogólny wynik. Wyjaśniłem, ale myślę, że realizacja nie nastąpi szybko. Gdzieś, prawdopodobnie, w okresie dojrzewania.

Instalacja

Wiercenie, gwintowanie, wkręty, nakrętki, lutowanie i zapach kalafonii – gdzie byśmy bez niej byli? Dziecko otrzymało podstawową umiejętność „Praca z lutownicą” - udało mu się przylutować kilka połączeń (trochę pomogłem, nie będę tego ukrywać). Nie zapomnij o wyjaśnieniu dotyczącym bezpieczeństwa.

Praca komputerowa

Napisałem program dla robota, ale mimo to udało mi się osiągnąć kilka korzystnych wyników.

Po pierwsze: angielski. Dopiero zaczęli to w szkole, więc staraliśmy się dowiedzieć, co to jest pishalka, migalka, yarkost i inne transliteracje. Przynajmniej to zrozumieliśmy. Celowo nie użyłem rodzimych angielskich słów, ponieważ nie osiągnęliśmy jeszcze tego poziomu.

Po drugie: wydajna praca. Uczyliśmy kombinacji skrótów klawiszowych i szybkiego wykonywania standardowych operacji. Co jakiś czas, gdy pisaliśmy program, zamienialiśmy się z synem miejscami, a ja mówiłem, co należy zrobić (wymiana, wyszukiwanie itp.). Musiałem w kółko powtarzać: „kliknij dwukrotnie zaznacz”, „przytrzymaj Shift”, „przytrzymaj Ctrl” i tak dalej. Proces uczenia się nie jest tu szybki, ale myślę, że umiejętności będą stopniowo odkładane „w podkorze”.

Ukryty tekstMożna powiedzieć, że powyższe jest niemal oczywiste. Ale szczerze mówiąc, tej jesieni miałem okazję uczyć informatyki w 9. klasie w jednej szkole. To okropne. Studenci nie znają tak podstawowych rzeczy jak Ctrl+Z, Ctrl+C i Ctrl+V, zaznaczanie tekstu przytrzymując Shift czy dwukrotne kliknięcie na słowo i tak dalej. Dzieje się tak pomimo tego, że byli na trzecim roku studiów informatycznych... Wyciągnijcie własne wnioski.

Po trzecie: pisanie dotykowe. Komentarze w kodzie powierzyłam dziecku do wpisywania (pozwól mu poćwiczyć). Od razu ułożyliśmy ręce prawidłowo, tak aby nasze palce stopniowo zapamiętywały położenie klawiszy.

Jak widać dopiero zaczynamy. Będziemy nadal doskonalić nasze umiejętności i wiedzę, które przydadzą się w życiu.

Swoją drogą, o przyszłości...

Dalszy rozwój

Robot zrobiony, jeździ, mruga i piszczy. Co teraz? Zainspirowani tym, co osiągnęliśmy, planujemy dalsze udoskonalanie tego. Pojawił się pomysł, aby zrobić pilota - przypominającego łazik księżycowy. Ciekawie byłoby, siedząc za sterami pilota, sterować ruchem robota jadącego w zupełnie innym miejscu. Ale to będzie inna historia...

I na koniec właściwie bohaterowie tego artykułu (wideo po kliknięciu):

Doświadczenie w tworzeniu pierwszego robota na Arduino (robot „łowca”)

Dziękuję za uwagę!

Link do kodu

Źródło: www.habr.com

Dodaj komentarz