Czworonożny robot oparty na Arduino. Gotowe roboty Arduino Jakie roboty można złożyć z arduino

Naukę arduino rozpoczynają od tworzenia prostych robotów. Dziś opowiem o najprostszym robocie na arduino uno, który niczym pies będzie podążał za twoją ręką lub jakimkolwiek innym obiektem odbijającym światło podczerwone. Poza tym ten robot będzie zabawiał dzieci. Mój 3-letni siostrzeniec chętnie bawił się robotem :)

Zacznę od wyliczenia części, które będą potrzebne przy budowie - Arduino UNO;

dalmierze na podczerwień;

- silniki 3 V ze skrzyniami biegów i kołami;

- złącza do akumulatorów 3A;

-bateria (jeśli nie ma wystarczającej ilości baterii);

- Przekaźnik do sterowania silnikami;

No i inne materiały, które będą potrzebne w procesie tworzenia.
Najpierw tworzymy bazę. Postanowiłem zrobić to z drewna. Przyciąłem drewnianą deskę w taki sposób, aby silniki idealnie pasowały do ​​szczelin


Następnie zaciskam silniki deską z drewna, przykręcając ten drążek

W dalszej części obudowy umieściłem arduino, przekaźnik, płytkę mózgową, dalmierze, a pod podstawą podwozia obrotowy

Teraz łączymy wszystko zgodnie ze schematem

Na koniec ładujemy do arduino następujący szkic:

Const int R = 13; //piny do których podłączone są dalmierze IR const int L = 12; int silnik L = 9; //piny do których podłączony jest przekaźnik int motorR = 11; int Stan przycisku = 0; void setup() ( pinMode(R,INPUT); pinMode(L,INPUT); pinMode(motorR,OUTPUT); pinMode(motorL,OUTPUT); ) void loop() ( ( buttonState = digitalRead(L); if (buttonState) == HIGH)( digitalWrite(silnikR,HIGH); ) else ( digitalWrite(silnikR,LOW; ) ) (( buttonState = digitalRead(R); if (buttonState == HIGH)( digitalWrite(silnik,HIGH); ) else ( digitalWrite(silnikL,LOW; ) ) ) )

Zasada działania jest bardzo prosta. Lewy dalmierz odpowiada za prawe koło, a prawy za lewe

Aby było to jaśniejsze, możesz obejrzeć film, który pokazuje proces tworzenia i działanie robota

Ten robot jest bardzo prosty i każdy może to zrobić. Pomoże Ci zrozumieć, jak działają moduły takie jak przekaźniki i dalmierze IR i jak najlepiej z nich korzystać.

Mam nadzieję, że podobało Ci się to rzemiosło, pamiętaj, że rzemiosło jest fajne!

Na Arduino bardzo łatwo jest tworzyć różne samochody zdalne sterowanie, proste czujniki i logika. Dlatego ta linia jest niezwykle popularna. Sprzedawanych jest wiele kompatybilnych czujników i kart rozszerzeń. Internet wypełniony jest gotowymi bibliotekami oprogramowania i projektami open source. kod źródłowy na każdą okazję. Prawie wszystkie pytania, które będziesz mieć w procesie masteringu Arduino, zostały już przez kogoś zadane i zawsze znajdziesz odpowiedź.

Zacznijmy od czegoś, dobrze? Główną kwestią jest wybór kontrolera. Istnieje wiele wersji Arduino, a także klony innych firm zbudowane z tych wersji. Oto chyba dwie najciekawsze dla nas klasy:

  • Arduino Uno to najlepszy wybór dla początkującego, najprostsza, najtańsza i najpowszechniejsza płytka. Oparty jest na układzie ATmega328 o częstotliwości taktowania 16 MHz, 32 kB pamięci flash, 2 kB RAM i 1 kB EEPROM. Uno posiada 14 cyfrowych wejść/wyjść, które można wykorzystać do sterowania czujnikami i serwomechanizmami oraz innymi urządzeniami;
  • Arduino Mega/Mega 2560 to płytka, która przyda się, gdy z góry wiadomo, że projekt będzie trudny. Główna różnica to więcej wejść/wyjść (48 w Mega, 54 w Mega 2560). Jest tu również znacznie więcej pamięci: 8 kB RAM, 4 kB EEPROM i pamięć flash 128 i 256 kB (odpowiednio w Mega i Mega 2560). Między sobą płyty różnią się również chipem, prędkością USB i kilkoma innymi cechami.

Oczywiście są też Arduino Pro, Arduino LilyPad i wiele innych. Ale teraz skupmy się na dwóch pierwszych modelach. W naszym przypadku wszystko jest dość proste: Mega jest potrzebny robotowi z wieloma nogami.

Pierwszy kod

Najpierw zainstalujmy Arduino IDE (arduino.cc) - jest to darmowe, wieloplatformowe środowisko programistyczne. Teraz, jeśli połączymy nasze Arduino, możemy spróbować samodzielnie napisać pierwszy kod. prosty przykład: Program migania diody LED. Większość kontrolerów Arduino ma go i jest podłączona do pinu 13. Nawiasem mówiąc, w świecie Arduino programy są potocznie nazywane szkicami. Oto tekst szkicu z komentarzami:

// Nadaj temu pinowi nazwę LED: const int LED = 13; void setup() ( // Zainicjuj cyfrowy pin // dla wyjścia: pinMode(LED, OUTPUT); ) void loop() ( // Ustaw logiczny jeden poziom // na pin 13 (jasna dioda): digitalWrite(LED, HIGH ) ; // Wstrzymaj szkic // na sekundę: delay(1000); // Zastosuj logiczny poziom zerowy // do pinu 13 (wyłącz diodę LED): digitalWrite(LED, LOW); // Wstrzymaj szkic ponownie przez sekundę: opóźnienie(1000); )

Zwróć uwagę na funkcje konfiguracji i pętli. Muszą być obecne w każdym szkicu Arduino. Konfiguracja jest wywoływana raz po włączeniu kontrolera lub po ponownym uruchomieniu kontrolera. Jeśli chcesz, aby kod został wykonany tylko raz, należy go tutaj umieścić. Najczęściej są to wszelkiego rodzaju procedury inicjalizacji czegoś. Nasz szkic nie jest wyjątkiem: cyfrowe piny Arduino mogą działać zarówno jako wejścia, jak i wyjścia. W funkcji konfiguracji mówimy, że pin 13 będzie działał jako wyjście cyfrowe kontrolera.

Po zakończeniu działania funkcji setup, automatycznie uruchamiana jest pętla zamknięta, wewnątrz której zostanie wywołana funkcja pętli. Mamy obowiązek napisać, co chcemy tam robić. I chcemy zastosować logiczny jeden poziom (5 V) do pinu 13, czyli zapalić diodę LED, a następnie odczekać jedną sekundę (1000 w milisekundach), następnie zastosować logiczny poziom zerowy (0 V) i ponownie odczekać jedną sekundę. Następne wywołanie pętli powtórzy wszystko.

Teraz „wgrywamy” nasz szkic do kontrolera. Nie, nie potrzebujemy programisty. Kontrolery Arduino oprócz naszych szkiców zawierają specjalny program - bootloader, który w szczególności kontroluje ładowanie kodu z komputera. Czyli do wgrania szkicu potrzebujemy tylko kabla USB i pozycji menu Plik → Prześlij (Ctrl + U) w Arduino IDE.

kluczowe pytanie

Ile nóg faktycznie potrzebujemy? Zdefiniujmy w różnych konfiguracjach chodzące roboty. Według liczby nóg:

  • dwunożny - dwunożny (prototyp - człowiek);
  • czworonożny - czworonożny (prototyp - większość ssaków);
  • sześcionóg - sześcionożny (prototyp - większość owadów);
  • ośmiornica - ośmionożna (prototyp - pająki, skorpiony, kraby i inne stawonogi).

Oprócz liczby nóg ważna jest również konfiguracja każdej z nich. Główna charakterystyka nogi to liczba stopni swobody lub wymiary swobody (DOF). Stopień swobody to zdolność do obracania się lub zginania wokół jednej osi (rzadziej poruszania się wzdłuż niej do przodu). Oczywiście, jeśli jest tylko jeden stopień swobody, to na takiej nodze daleko nie zajdziesz. Nogi z dwoma stopniami swobody (2DOF) umożliwiają już poruszanie się robotów wielonożnych, chociaż 2DOF umożliwia swobodny ruch końcówki nogi tylko w jednej płaszczyźnie. A noga 3DOF porusza „stopą” w przestrzeni 3D (o ile oczywiście wszystkie trzy osie są równoległe). Istnieją również nogi 4DOF, które po prostu zwiększają elastyczność i zakres ruchu nogi. Owady najczęściej mają odnóża 4DOF.

Co to dla nas oznacza? W tanich robotach amatorskich każdy stopień swobody jest realizowany przez jeden silnik, a dokładniej serwonapęd lub serw. Konfiguracja nóg jednoznacznie określa, ile z tych serw jest potrzebnych. Tak więc heksapod 3DOF wymagałby 18 serw, a pająk 4DOF wymagałby 32. Nie daj się zastraszyć liczbami, małe serwa używane w amatorskich modelach RC są bardzo tanie. W sklepach internetowych można je znaleźć na zamówienie mikro serwo.

Aby zaprogramować serwa wystarczy wiedzieć, że mają już sterownik, który wykonuje główną pracę. A wystarczy dostarczyć zasilanie i sygnał cyfrowy, który mówi sterownikowi, w jakiej pozycji chcemy obrócić wał napędowy. Łatwo znaleźć informacje o ich konstrukcji. Ich protokół jest najprostszym ze wszystkich cyfrowych protokołów komunikacyjnych: modulacja szerokości impulsu - PWM (w języku angielskim PWM). Wszystkie proste serwa posiadają trzypinowe złącze: masa, +5V (napięcie może się różnić w zależności od wielkości i mocy) oraz wejście sygnału. Kontrolery Arduino mogą różne sposoby wygenerować taki sygnał. Pierwszym z nich jest sprzętowa PWM, którą sam układ może wyprowadzić na kilku swoich cyfrowych pinach I/O. Drugi to oprogramowanie. Oprogramowanie pozwala na odbiór większej liczby różnych sygnałów PWM w tym samym czasie niż sprzęt. Pod Arduino przewidziano do tego wygodny wrapper - bibliotekę Servo. Pozwala na jednoczesne używanie 12 serw na większości małych kontrolerów (Uno, Due, Nano) i 48 serw na Arduino Mega i tym podobnych. Pin sygnałowy serwomechanizmu jest podłączony do cyfrowego pinu Arduino. Masa i moc - oczywiście do masy i mocy mogą być dzielone przez wszystkie serwa. W pętlach trójprzewodowych serwomechanizmu czarny lub brązowy jest uziemiony, zwykle czerwony +5 V w środku, a na końcu sygnał biały lub żółty. Z punktu widzenia oprogramowania sterowanie jest niezwykle proste:

Serwo myservo; // Serwo na pin 9 Arduino myservo.attach(9); // Obróć do pozycji 90º myservo.write(90);

Większość serw może obracać wał o 180°, a dla nich 90° to pozycja środkowa. Aby uprościć podłączenie serw do płytki Arduino, istnieje szereg rozwiązań. Najbardziej kanoniczna jest Tarcza Czujników. Instalując go na Uno i doprowadzając zasilanie do zacisków serw, możesz bezpośrednio do niego podłączyć ich złącza.

Bateria

Kolejną ważną kwestią jest odżywianie. Jeśli masz zaawansowaną płytkę, która pozwala zasilić cały system jedną linią zasilającą (a serwomotory nie będą przeszkadzać w pracy sterownika), to możesz sobie poradzić z jednym źródłem. Wybór jest ogromny, najlepiej oczywiście brykiety Li-Ion / Li-Po do modeli radiowych. Ale potrzebują też odpowiednich ładowarek. Jeśli masz prostszy sterownik (Uno / Due / Nano), to możesz go osobno zasilać np. 9-woltową Krona, a serwa podłączyć do głównego, wydajnego akumulatora. Więc serwa na pewno będą miały wystarczającą moc. W przypadku akumulatorów litowych należy jeszcze uważniej niż zwykle monitorować napięcie, aby nie doszło do nadmiernego rozładowania (należy sprecyzować dopuszczalne napięcia dla konkretnego typu akumulatora). W tym celu do robota Sleipnir przykręca się również mały woltomierz cyfrowy, co zostanie omówione dalej.

Robobug zrób to sam

Zestaw

  • Kontroler Arduino Uno: 1150 rubli
  • Trzy serwomotory. Użyłem HXT500, 200 r. kawałek
  • Komora baterii do "Krony" z wyłącznikiem: 50 rubli.
  • Bateria „Krona”: 145 rubli.
  • Odbiornik podczerwieni: 90 USD
  • Drut stalowy o średnicy około 1,5 mm. Na przykład użyłem złamanej trzepaczki do jaj

Razem: 2035 pkt.

DmitryDzz: Zapraszam do wykonania małego zdalnie sterowanego sześcionożnego robota chrząszcza opartego na kontrolerze Arduino Uno. Łapy będą miały jeden stopień swobody, sterowanie odbywać się będzie za pomocą zwykłego pilota do telewizora.

Muszę powiedzieć, że są to ceny drogich moskiewskich sklepów. W chińskich sklepach internetowych wszystko to będzie kosztować dwa razy taniej. Biorąc pod uwagę wysyłkę. To prawda, z mojego doświadczenia wynika, że ​​będziesz musiał poczekać od dwóch tygodni do trzech miesięcy.

Łatwiejszym sposobem jest zabranie zestawu konstruktorów, ponieważ w pierwszych krokach jeden kontroler nie wystarczy. Obecnie wiele sklepów oferuje takie zestawy. Na przykład jest wspaniały sklep internetowy „Amperka”. Tutaj otrzymasz kilku podobnych projektantów, różniących się pełnią i oczywiście ceną. Wystarczyła mi najprostsza rzecz - „Matrioszka X”. Zawiera kontroler Arduino Uno, kabel USB do podłączenia do komputera, płytkę do prototypowania (niezbędna rzecz!), zestaw zworek, diody LED, rezystory i inne drobiazgi.

W tym samym sklepie znajduje się sekcja „Wiki”, w której znajdziesz nawet wspaniałe krótkie samouczki wideo przetłumaczone na język rosyjski. Koniecznie je sprawdź. I oczywiście jest forum, na którym prawdopodobnie spróbują ci pomóc.

Czego potrzebujesz od narzędzi:

  • lutownica i wszystko, czego potrzebujesz do lutowania. Nie musisz dużo lutować i nie potrzebujesz dużych umiejętności;
  • pistolet do klejenia na gorąco i pręty do niego;
  • szczypce do pracy z drutem.

Jeśli masz wszystko, zacznijmy!

Kontrola

Przejdźmy do pierwszego kroku: musimy nauczyć się obsługi pilota i poznać kody do naciskania niektórych jego przycisków. Kody te przydadzą się wtedy w szkicu sterowania robotem.

Na tym etapie potrzebny będzie również odbiornik podczerwieni i fajnie byłoby mieć płytkę prototypową. Zdecydowana większość pilotów IR działa na częstotliwościach nośnych 36 kHz, 38 kHz lub 40 kHz (Panasonic, Sony). Wyjątkami są Sharp (56 kHz), Bang & Olufsen (455 kHz) i może ktoś inny bardziej egzotyczny. Dlatego każdy odbiornik podczerwieni o częstotliwości 36, 38 lub 40 kHz jest dla nas odpowiedni. Częstotliwość może nie odpowiadać dokładnie częstotliwości nośnej sygnału. W tym przypadku czułość odbiornika zmniejszy się, ale w praktyce nie zauważyłem żadnego dyskomfortu przy korzystaniu z odbiornika IR TSOP2136 (36 kHz - dwie ostatnie cyfry - częstotliwość) i pilota Sony (40 kHz).

Tak więc odbiorniki podczerwieni TSOP21xx, TSOP22xx, TSOP312xx są odpowiednie dla większości pilotów. Dwie ostatnie cyfry to 36, 37, 38 lub 40. Przed włączeniem odbiornika IR sprawdź wyprowadzenia jego pinów - są tylko trzy z nich: +5V (zasilanie), GND (masa), Vs (wyjście) . Złóżmy obwód, jak na rysunku (okablowanie dla TSOP2136).


Jak widać wyjście odbiornika IR podłączyliśmy do wejścia analogowego kontrolera A0.

Oto jak wygląda kod szkicu:

#include "IRremote.h" // Wejście analogowe kontrolera // do którego podłączony jest odbiornik podczerwieni: const int IR_PIN = A0; // Utwórz obiekt odbiornika podczerwieni: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("gotowy"); // Rozpocznij nasłuchiwanie sygnałów podczerwieni: irrecv.enableIRIn(); ) void loop() ( // Opisz wyniki struktury, / / gdzie // odebrane i zdekodowane // zostaną umieszczone polecenia IR: decode_results results // Jeśli polecenie IR zostanie zaakceptowane i // pomyślnie zdekodowane, // wyślij otrzymany kod do // portu szeregowego kontrolera: if ( nierecv.decode (&wyniki)) ( Serial.println(wyniki.wartość); nierecv.resume(); ) )

Szkic wykorzystuje specjalną bibliotekę IRremote.h, która dekoduje sygnały różnych pilotów IR. Ta biblioteka jest otwartym projektem, możesz ją pobrać z https://github.com/shirriff/Arduino-IRremote. Aby połączyć go z naszym projektem, musisz wykonać trzy kroki:

  • skopiuj katalog bibliotek do katalogu bibliotek, który z kolei znajduje się w katalogu instalacyjnym Arduino IDE;
  • zrestartuj IDE;
  • dodaj linię #include "IRremote.h" na początku naszego szkicu.

Teraz funkcje dekodowania IR będą dostępne w szkicu. Ale aby zobaczyć wynikowe kody, nadal będziemy używać obiektu Serial. Za jego pomocą poprzez port szeregowy (ten sam kabel USB) przeniesiemy kody do komputera. W funkcji setup inicjujemy obiekt Serial. "9600" to 9600 bodów - szybkość, która będzie używana do przesyłania danych. Po inicjalizacji możemy pisać na port szeregowy za pomocą funkcji println. Aby wyświetlić wynik tego wyjścia na komputerze w środowisku Arduino IDE, należy wybrać pozycję menu Narzędzia → Monitor szeregowy (Ctrl + Shift + M). Tylko upewnij się, że jest ustawiony na 9600 bodów.

Tak więc kontroler otrzymuje zasilanie przez kabel USB i przesyła przez niego dane. Ładujemy szkic, uruchamiamy Serial Monitor i zaczynamy naciskać przyciski na pilocie. Kody powinny pojawić się w oknie Monitora szeregowego. Protokoły zdalnego sterowania są różne, czasem może to być jeden kod, czasem kilka. W każdym razie zawsze możesz przypisać kody, które są unikalne dla każdego przycisku na pilocie.

Potrzebujemy 13 przycisków pilota. Użyłem następujących:

  • 1 - płynny skręt w lewo;
  • 2 - poruszanie się do przodu;
  • 3 - płynny skręt w prawo;
  • 4 - na miejscu skręć w lewo;
  • 5 - zatrzymaj;
  • 6 - na miejscu skręć w prawo;
  • 7 - cofnij się z obrotem w prawo;
  • 8 - ruch do tyłu;
  • 9 - cofnij się z obrotem w lewo;
  • niebieski przycisk - bardzo wolno;
  • żółty - powoli;
  • zielony - szybki;
  • czerwony - bardzo szybko.

Zapisz kody tych przycisków, będą one potrzebne później do szkicu sterowania robotem.

Algorytm ruchu

Szkic sterowania robotem jest dostępny na naszej stronie projektu (bit.ly/1dEwNDC). Nie zapomnij zmienić wartości stałych kodów wciśniętych przycisków pilota na kody pilota (stałe IR_COMMAND_XXX_CODES w pliku ir_command_codes.h).

Nie będziemy szczegółowo analizować szkicu, myślę, że komentarze w kodzie wystarczą, ale jedno pytanie nadal jest warte rozważenia.

Bardzo ciekawe są ruchy owadów. I chociaż wszystkie te chrząszcze spadają bardzo blisko ziemi, z jakiegoś powodu są zawsze stabilne: w danym momencie na powierzchni stoją co najmniej trzy nogi (dwie z jednej strony i jedna z drugiej). I podczas gdy te nogi ciągną żuka w kierunku jednego z jego napędzanych celów, pozostałe trzy są podciągane, aby powtórzyć ten ruch. Naszym celem jest zrobienie czegoś podobnego.

Nasz robot pluskwa posiada trzy serwomotory ustawione w rzędzie prostopadle do ruchu. Dla lewego i prawego siłownika oś wału skierowana jest do góry, a dla środkowego do przodu. Zadaniem np. lewego serwa jest pompowanie jednocześnie dwóch nóg: lewej przedniej i lewej tylnej. Nawiasem mówiąc, są sztywno połączone i przyklejone do wahacza tego serwomechanizmu. Zadaniem serwomechanizmu centralnego jest podniesienie lewej strony chrząszcza, potem prawej. Dlatego środkowa lewa i prawa noga są przymocowane do wahacza tego silnika, które są pojedynczą częścią w kształcie litery U.

Szkic powinien zapewniać, że robot porusza się do przodu, do tyłu, płynnie obraca się w ruchu i obraca w miejscu. Chciałbym też kontrolować prędkość żuka. Aby programowo opisać te ruchy, potrzebujemy matematyki. Spójrz na diagram.


Niebieskie kółka oznaczają nogi robota-żuka stojące na powierzchni, a białe kółka to te, które znajdują się w powietrzu. Należy pamiętać, że podczas ruchu do przodu lub do tyłu lewy i prawy serwomotor muszą poruszać się dokładnie w ten sam sposób. A obracając się w miejscu, silniki powinny obracać się w różnych kierunkach (symetrycznie). Interesujące jest również to, że ruch do przodu i do tyłu różni się tylko fazą centralnego serwomotoru.

Jak to jest realizowane? Pamiętamy, że kontroler stale wywołuje funkcję pętli. Tak więc w tej funkcji musimy umieścić kod, który określa aktualną pozycję serw i ustawia je w tej pozycji. Każdy serwomotor musi oscylować. Pozycję siłownika w czasie t możemy obliczyć za pomocą następującego wzoru:

X = A sin(2πt/T),

gdzie X to pożądana pozycja serwomotora, A to amplituda drgań, T to okres drgań.

Czyli w zależności od momentu czasu t otrzymamy zmianę wartości X w zakresie od -A do +A. Serwomotory mogą zajmować pozycję w zakresie od 0 do 180°. Dlatego lepiej jest dla nas oscylować wokół pozycji „zerowej” przy 90 °. A jeśli chcemy zapewnić oscylacje o okresie 1 s wokół pozycji 90 ° z amplitudą 30 °, to formuła jest przekształcana w następującą postać:

X = 90 + 30 sin(2πt/1000),

gdzie t jest czasem w milisekundach od początku oscylacji. Aby kontrolować prędkość robocall, możemy zmienić okres oscylacji. Im jest większy, tym mniejsza prędkość.

A teraz wróćmy jeszcze raz do naszego schematu, ponieważ formuła napisana powyżej nie jest jeszcze ukończona. Jak zapewnić synchroniczny, a następnie przeciwny ruch lewego i prawego siłownika? Jak zmienić fazę serwomotoru centralnego? Do naszego wzoru musimy dodać fazę oscylacji. Przesunięcie argumentu sinus o π dla np. prawego silnika sprawi, że będzie on działał w przeciwfazie do lewego, czyli w taki sposób, w jaki musimy skręcić w miejscu. Oto jak teraz będzie wyglądać nasza formuła:

X = 90 + 30 sin(2πt/1000 + Φ),

gdzie Φ jest fazą oscylacji, wartość wynosi od 0 do 2π.

Spójrz na tabelę, aby zrozumieć, jakie powinny być fazy drgań serwomotorów dla każdego rodzaju ruchu.

montaż

Teraz złóżmy robota na płytce prototypowej i wypełnijmy szkic kontrolny.

To bardzo ważny krok przed montażem. Spróbuj odłączyć kabel USB i zasilić układ z baterii Krona. Sprawdź wszystkie fazy ruchu i upewnij się, że wszystko działa. Po złożeniu robota zmiana czegokolwiek (np. wymiana zepsutego serwomotoru) będzie trudniejsza.


Przejdźmy teraz do samego montażu. Głównym elementem nośnym jest komora baterii. Radzę używać komory typu zamkniętego i zawsze z wyłącznikiem.

Najłatwiejszym sposobem naprawienia detali chrząszcza jest gorący klej. Zacznij od serwomotorów. Usuń niepotrzebne uszy mocujące i połącz ze sobą samochody. Następnie przyklej ten zespół trzech „serw” do pokrywy baterii. Nie zapominaj, że komora baterii musi się swobodnie otwierać, aby można było wymienić baterię.

Najprościej jest przykleić kontroler do wnęki, ale nie bardzo mi się to podoba, bo Arduino Uno będę musiał na zawsze oddawać błędowi. Możesz więc skomplikować sobie życie i wykorzystać złącza Arduino do podłączenia komory baterii. Przyklej złącze szpilkowe na spodzie komory z odstępem 2,54 mm między szpilkami. Powinna być umieszczona tak, aby wchodziła do gniazda sterownika w okolicy wyjść cyfrowych 8-11. I tak nadal ich nie potrzebujemy. Jeśli złącza nie ma pod ręką, wystarczy zakrzywiony spinacz do papieru w kształcie litery U.

Przewody wychodzące z komory baterii muszą być podłączone do zacisków Vin i przylegającego do niego GND. Nie odwracaj polaryzacji! Plus „Krona” na Vin, minus na GND. Aby zapewnić pewny kontakt przewodów ze złączami Arduino, można po prostu pocynować końcówkę przewodu grubszą, ale jako wtyku użyłem krótkiego spinacza do papieru. A miejsce lutowania zamknięto rurkami termokurczliwymi.


Złącza z kabli serwa należy odciąć, przewody zasilające (+5 V - zwykle czerwony i GND - czarny lub brązowy) połączyć i podłączyć do gniazd 5V i sąsiedniego GND na sterowniku. Połączymy się trochę później. Przewody sygnału sterującego (zwykle żółte) wyprowadzone są na wyjścia cyfrowe sterownika: lewy siłownik na pinie 2, środkowy na pinie 4, prawy na pinie 7.

„+” i „-” odbiornika podczerwieni można po prostu podłączyć do złącza Arduino (5 V i sąsiadujące GND). To prawda, zginając się na pół, podwajając ich grubość. Do tych samych nóg zasilających odbiornika IR przylutowujemy wcześniej podłączone przewody zasilające do siłowników. Wyjście sygnału odbiornika IR prawdopodobnie nie dotrze do wejścia analogowego kontrolera A0 i będziesz musiał je zwiększyć przewodem.

Kilka wskazówek dotyczących robienia nóg. Najpierw przygotuj lewą i prawą nogę „przód-tył”. Upewnij się, że są symetryczne (zwróć uwagę zarówno na długości, jak i kąty zagięć). Klejenie nóg należy rozpocząć dopiero po upewnieniu się, że siłowniki są ustawione w pozycji „zero” (90°).

Środkową parę nóg umieść na końcu. Radzę najpierw wydłużyć środkowe nogi, a następnie po zamontowaniu przyciąć je do pożądanej długości. W pozycji „zero” wszystkie sześć stóp powinno znajdować się na powierzchni. Toczenie środkowych nóg z amplitudą 15° nie powinno kolidować z skrętami przód-tył.

Co dalej?

Robobug to gotowa platforma mobilna oparta na jednym z najpopularniejszych i najbardziej przystępnych cenowo kontrolerów. Projekt otwarty: https://github.com/beetle-ringo/arduino . Zrób widelec (gałąź) w GitHub i dodaj swoją funkcjonalność. Puść wodze fantazji - dodaj diodę IR, a robot będzie gotowy do walki robotów. Podłącz dalmierze, czujniki dotykowe, żyroskop... Naucz robota omijać przeszkody lub chodzić wzdłuż linii, spróbuj zainstalować na nim kamerę internetową. Pomysłów może być milion i zawsze możesz wybrać ten najciekawszy.

Robot Sleipnir

Zestaw

  • Kontroler robota Arduino Uno Dagu Spider: 2530 USD
  • Serwonapędy SG90 9g (16 sztuk) 1150 р.
  • Akumulator LiPo, 7,4 V, 1800 mAh 4,99 USD
  • Moduł radiowy 4-pinowy nadajnik-odbiornik Bluetooth RF 270 р.
  • Wskaźnik napięcia (opcjonalnie) DC 3,3-30V Czerwony panel LED 100 zł
  • Narożnik aluminiowy. Na najbliższym rynku budowlanym 135 rubli.
  • Śruby i nakrętki. Na najbliższym pchlim targu 35 rubli.

Razem: 4710 r.

*Komponenty były kupowane w różnym czasie i można zoptymalizować wiele pozycji

poconoco: Spróbujmy złożyć niestandardową konfigurację - ośmionożnego robota 2DOF. Nogi 2DOF są znacznie łatwiejsze do zaprogramowania, dodatkowo mam na stanie kilka nieużywanych serw. A co najważniejsze, będzie można go nazwać na cześć ośmionożnego konia boga Odyna Sleipnira (o którym zawsze marzył!).

Nasz Sleipnir będzie miał cztery nogi z dwoma zawiasami z każdej strony. Każde złącze to serwo, a więc osiem serw na stronę. Dla uproszczenia wszystkie osiem zawiasów po jednej stronie konia będzie się obracać w tej samej płaszczyźnie. Chociaż wcale nie jest to konieczne. Co więcej, jeśli nogi z jednej strony zostaną włożone trochę „w szachy”, aby dwie sąsiednie nogi nie mogły się stykać, będzie jeszcze lepiej, pozwoli to na zrobienie szerszego kroku i galop.


Zgrabnym i funkcjonalnym, ale dalekim od najtańszego rozwiązaniem jest zastosowanie niestandardowej płytki sterownika, zoptymalizowanej pod kątem łączenia serw w dużej liczbie. Natknąłem się na kontroler robota Dagu Spider - to ten sam Arduino Mega, ale na płytce z wlutowanymi 3-pinowymi złączami, gdzie można od razu podłączyć te same 48 serwomechanizmów bez żadnych osłon. Idealny do wielonożnych robotów Arduino.

Kontrola

Będziemy sterowani przez Bluetooth. Istnieją do tego różne rozwiązania sprzętowe. Są to osłony i osobne szaliki z interfejsem szeregowym UART (jak zwykły port com, tylko z poziomami sygnału 5 V). Wydawało mi się, że najbardziej praktyczny był mały szalik z interfejsem UART. Łączy się z odpowiednimi pinami UART/Serial na porcie Arduino. Zwracamy uwagę na dwa niuanse: jest tylko jeden taki port na Uno / Due / Nano i tym podobnych, a także służy do flashowania przez USB. Dlatego może być konieczne wyłączenie modułu Bluetooth podczas oprogramowania. I drugi niuans - nie zapominaj, że pin RX modułu jest podłączony do pinu TX Arduino, a TX - do RX. Takie rzeczy są w UART.

Programowanie Bluetooth nie jest trudniejsze niż serwomechanizmy, dane można odczytać bajt po bajcie, z których będziemy korzystać:

cmd; Serial.początek(9600); if (Serial.available()) cmd = Serial.read();

Jeśli używany jest Arduino Mega, a Bluetooth jest podłączony do drugiego portu, zamiast Serial zostanie zapisane Serial1. Warto zauważyć, że nie można korzystać z Bluetooth, ale sterować robotem bezpośrednio przez USB. I nic się nie zmieni w powyższym kodzie! Po prostu pracuje z portem szeregowym i czy zawiesza się tam nadajnik BT, czy konwerter USB Serial - nie ma dla nas znaczenia.

Druga strona Bluetooth

Bardzo wygodnym sposobem połączenia są standardowymi narzędziami Linuksa. Do pracy potrzebujemy sdptool, narzędzi rfcomm (zawarte w pakiecie bluez w repozytoriach Ubuntu), a także minicom (pakiet tak się nazywa). Instrukcje dotyczące korzystania z tych narzędzi można znaleźć w Internecie.

Algorytm ruchu


W przypadku sześcionoga najprostszy chód będzie taki: nogi są podzielone na dwie grupy po trzy nogi, a jedna z grup jest całkowicie na ziemi, druga jest w powietrzu, przesunięta do przodu. To nie jest jedyny możliwy chód. Możesz trzymać tylko dwie łapy w powietrzu, a nawet jedną, a pozostałe cztery lub pięć na ziemi. W przypadku ośmionóg istnieje również wiele chodów. Weźmiemy najprostszy, również z dwiema grupami po cztery nogi.

Co więc musimy zrobić, aby pracować z 16 serwomechanizmami i wybranym chodem? Poprawną odpowiedzią jest przeczytanie o kinematyce odwrotnej (IK). Objętość artykułu nie pozwala na szerokie poszerzenie tematu, ale w Internecie jest mnóstwo materiałów. Krótko mówiąc, IR rozwiązuje problem znalezienia niezbędnych sygnałów sterujących, aby system zajął żądaną pozycję w przestrzeni. W przypadku nogi oznacza to, że zgodnie ze współrzędnymi punktu, w który stopa powinna uderzyć, konieczne jest określenie kątów serw, które należy w tym celu ustawić. A kontrolując współrzędne stóp, możesz kontrolować pozycję ciała. Mamy nogi 2DOF, osie są równoległe, więc stopa zawsze porusza się w tej samej płaszczyźnie. Problem IR w tym przypadku sprowadza się do przestrzeni 2D, co znacznie ją upraszcza.

Niech dla każdej nogi lokalne pochodzenie O będzie trzonem górnego serwa, czyli uda. I mamy współrzędne punktu A, gdzie stopa musi uderzyć. Wtedy łatwo zauważyć, że konieczne jest rozwiązanie problemu znalezienia punktów przecięcia dwóch okręgów (patrz schemat nóg jednej strony, jest to zilustrowane tam na prawej nodze). Po znalezieniu punktu B przecięcia okręgów (wybierając dowolne z nich) łatwo jest obliczyć żądane kąty za pomocą konwersji ze współrzędnych kartezjańskich na biegunowe. W kodzie rozwiązanie tego problemu wygląda tak:

Pływak A = -2*x; pływak B = -2 * y; float C = sqr(x) + sqr(y) + sqr(hipLength) - sqr(shinLength); float X0 = -A * C / (sqr(A) + sqr(B)); float Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; topór = X0 + B*mult; bx = X0 - B * mnożnik; ay = Y0 - A*mult; przez = Y0 + A*mult; // lub bx dla innego punktu przecięcia float jointLocalX = ax; // lub by dla innego punktu przecięcia float jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarAngle(x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

gdzie x i y to współrzędne punktu, do którego musisz sięgnąć stopą; hipStartAngle - kąt o jaki początkowo obrócone jest "biodro" (z serwo w pozycji środkowej), podobnie - shinStartAngle. Nawiasem mówiąc, w tych obliczeniach kąty są oczywiście w radianach i muszą być przenoszone do obiektów Servo już w stopniach. Pełny działający kod oprogramowania układowego, w tym ten fragment, jest opublikowany na GitHub, zobacz link na końcu artykułu. To jest kawałek IC, ale poza tym potrzebujesz dość prostego kodu, aby użyć tego IC na wszystkich nogach (zobacz funkcje legsReachTo(), legWrite()). Potrzebny będzie również kod, który faktycznie realizuje chód – ruch jednej grupy nóg „do tyłu” (tak, aby robot poruszał się do przodu), podczas gdy druga grupa nóg unosi się i porusza do przodu, aby wykonać kolejny krok, patrz krokDo przodu () funkcjonować. Robi jeden krok przy podanych parametrach. Nawiasem mówiąc, te parametry mogą się cofnąć, pomimo nazwy funkcji. Jeśli ta funkcja zostanie wywołana w pętli, robot zrobi krok do przodu.

Teraz otrzymywanie poleceń i ich interpretacja. Dodajmy stan do programu:

Stan wyliczenia ( STOP, FORWARD, BACKWARD, FORWARD_RIGHT, FORWARD_LEFT );

A w głównej pętli wykonania loop() przyjrzymy się aktualnemu stanowi (zmienna stanu) i przeciągniemy stepForward(), jeśli poruszamy się do przodu (z rotacją lub bez), i ponownie stepForward(), ale z ujemnym argumentem xamp , jeśli musimy się cofnąć . Skręty będą wtedy obsługiwane w legWrite(), a przy skręcie w prawo nogi po prawej stronie staną nieruchomo (podczas gdy lewe rzędy). Oto taki czołg dla koni. Brutalny, ale bardzo prosty i działa. Płynne obracanie można wykonać tylko z nogami 3DOF, przykład tego można zobaczyć w repozytorium buggybug.

Switch (stan) ( case FORWARD: case FORWARD_RIGHT: case FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; case BACKWARD: stepForward(h, dh, - xamp, xshift); break; )

polecenie char; while (Serial1.available()) polecenie = Serial1.read(); switch (polecenie) ( przypadek "w": stan = FORWARD; break; case "s": stan = BACKWARD; break; case "d": stan = FORWARD_RIGHT; break; case "a": stan = FORWARD_LEFT; break; default : stan = STOP; )

Na tym główne punkty oprogramowania układowego się skończyły, reszta to wszystko drobiazgi. Chociaż może jest jeszcze jeden ważny punkt- możliwość dostrojenia serw. Nawet przy najbardziej ostrożnym montażu, jeśli wszystkie serwa mają obrócić się o 90 °, niektóre z nich nadal będą nieco przekrzywione. Dlatego musisz mieć możliwość dostosowania go. Możesz zobaczyć, jak to zrobiłem w metodach hipsWrite() i shinsWrite() oraz w tablicach dostrajających hipsTune i shinsTune.

montaż

W przypadku takich konstrukcji nie potrzeba nic specjalnego: arkusz pleksi o odpowiedniej grubości (z najbliższego domowego pchlego targu) i wyrzynarka lub piła do metalu wystarczą, aby wyciąć szczegóły. No i oczywiście wiertarka do wiercenia otworów. Zamiast pleksi można użyć sklejki (wtedy można jeszcze zrobić pamiątkowy napis na ostatecznym projekcie palnikiem). Można również zastosować blachy aluminiowe lub narożniki. W przypadku Sleipnira poszedłem tak samo, jak aluminiowy narożnik z przetłoczeniami 1 cm (kupiłem go gdzieś w supermarkecie z artykułami żelaznymi).


Podstawą będzie prostokątna rama. Kończyny - 4-centymetrowe paski. Warto też zaopatrzyć się w dużo małych śrubek, nakrętek. Wycinamy narożnik na niezbędne kawałki, wycinamy rowki pod serwa, wiercimy otwory pod śruby mocujące i wkręty. Projekt lepiej pokazać niż opisać. Rozmiary mogą być dowolne, roboty powinny być różne. Ale pamiętaj: im dłuższe nogi, tym większą dźwignię będzie musiało popchnąć serwo i tym większe obciążenie. Aż do niemożności odwrócenia się, a nawet złamania. Ale 4-5 cm to żaden problem.

W przypadku budżetowych lekkich robotów często nie zawracają sobie głowy oddzielnym obracaniem kończyn, a cały ładunek spada w całości na wał serwo. Przy niewielkiej wadze nie jest to wcale krytyczne. A przy większej wadze warto pomyśleć o serwomechanizmach z metalowymi zębatkami i wałkiem z łożyskiem kulkowym.

W zestawie z każdym serwomechanizmem z reguły jest kilka śrub i zestaw dysz, które można przykręcić do wału w celu różne zastosowania. Najbardziej odpowiedni dla nas jest pojedynczy „róg” (lub róg), który pozwala na dołączenie drążka do serwomechanizmu. Tak więc osie dwóch serw są przymocowane do jednego drążka, a drążek staje się „udem”. W tym przypadku jeden sługa jest przywiązany do ciała, a drugi staje się częścią podudzia. Warto przykręcić do niego kolejny drążek, żeby tylko wydłużyć lub uatrakcyjnić kończynę. Trochę ciężkiej pracy - i platforma gotowa (podręczne zestawy śrubokrętów, kluczy, pęsety, przecinaki do drutu itp. znacznie przyspieszają proces).

Co dalej?

Cały projekt dostępny jest pod adresem https://github.com/poconoco/sleipnir. Opisałem jedną z najbardziej niepraktycznych konfiguracji - dużo nóg 2DOF, wysokich, wąskich, łatwo opadających na bok. Spróbuj zrobić lepszego robota z nogami 3DOF. Z nogami 4DOF. Z pazurami lub szczękami. Jako przykład odwrotnej kinematyki 3DOF możesz odwołać się do repozytorium buggybug - istnieje oprogramowanie układowe hexapod. Możesz także tworzyć niesterowane, ale inteligentne roboty, umieszczając czujniki odległości zamiast Bluetooth i uczyć robota omijania ścian i przeszkód. Jeśli umieścisz taki czujnik na serwonapędzie i obrócisz go, to możesz przeskanować obszar, prawie jak sonar.

Dobry dzień! Przed wami, kochani, jest robot artystyczny, który może malować różne przedmioty kuliste lub jajowate o wielkości od 4 do 9 cm.

Do tego potrzebna jest drukarka 3D, zestaw standardowych narzędzi + Arduino.

Uwaga: Nie rezygnuj z projektów wykorzystujących drukarkę 3D. W razie potrzeby zawsze można znaleźć miejsce lub sposób, w którym można zamówić nadruk niezbędnych do projektu detali.

Krok 1: Trochę o robocie

Robot artystyczny - dwuosiowy domowej roboty, który może drukować na większości powierzchni sferycznych. Robot jest skonfigurowany do określonego typu obiektu (piłki pingpongowe, ozdoby świąteczne, żarówki i jajka (kaczka, gęś, kurczak...).

Precyzyjne silniki krokowe o wysokim momencie obrotowym służą do obracania kulistego obiektu i poruszania manipulatorem, a cichy i niezawodny serwonapęd SG90 służy do podnoszenia mechanizmu uchwytu.

Krok 2: Wymagane części

Robić rzemiosło zrób to sam Będziemy potrzebować:

  • 2x łożyska 623;
  • Spinka do włosów o średnicy 3 mm i długości 80-90 mm;
  • 1x sprężyna (długość 10mm i średnica 4,5mm);
  • 2x silniki krokowe NEMA 17 (moment obrotowy 4,4 kg/cm);
  • Kable do silników (długość 14 + 70 cm);
  • kabel USB;
  • 1x serwo SG90;
  • Arduino Leonardo;
  • tarcza JJRobots;

  • 2xA4988 sterowniki silników krokowych;
  • Zasilanie 12V/2A;
  • 11x śruby M3 6mm;
  • 4x śruby M3 16mm;
  • 4x nakrętki M3;
  • 2x przyssawki 20mm;
  • 1x nakrętka motylkowa M3;
  • 1x znacznik;

Krok 3: Schemat ogólny

Jako „ściągawkę” możesz użyć tego schematu.

Krok 4: Zaczynajmy!

Robot porusza manipulatorem z przyczepionym do niego znacznikiem, który napędzany jest silnikiem krokowym. Kolejny silnik krokowy odpowiada za obracanie obiektu, na który nakładany jest rysunek (jajko, kula...). Dwie przyssawki służą do utrzymywania przedmiotu na miejscu, jedna przymocowana do silnika krokowego, a druga po przeciwnej stronie przedmiotu. Mała sprężyna naciska na przyssawkę, aby pomóc jej utrzymać przedmiot. Serwo SG90 służy do podnoszenia/opuszczania znacznika.

Krok 5: Manipulator

Zamontuj nakrętkę w przygotowanym do tego otworze i dokręć śrubę 16 mm. Zróbmy to samo dla posiadacza przedmiotu (po prawej na powyższym obrazku). Przy tworzeniu zawiasu do manipulatora wykorzystano 2 śruby 16 mm. Zawias ten powinien swobodnie się obracać po dokręceniu śrub.

Krok 6: Frajerzy

Zainstaluj jedną z przyssawek w otworze w uchwycie na przedmioty.

Krok 7: Podłączanie silników krokowych

Przymocuj oba silniki krokowe do ramy głównej za pomocą 8 śrub.

Krok 8: Oś obrotu

Umieśćmy wszystkie elementy, jak pokazano na powyższym obrazku.

  • Przyssawka;
  • Śruba;
  • Górna część;
  • Wiosna;
  • Łożysko 623 (powinno być wbudowane w lewą miseczkę);
  • Kubek lewy;
  • Wolne miejsce na ramę główną;
  • Prawy kubek;
  • Łożysko 623;
  • Pierścień rozdzielający;
  • Nakrętka motylkowa (M3).

Krok 9: Umieszczenie wszystkiego na swoim miejscu

Włóż zmontowany manipulator na oś silnika krokowego.

Zamontuj lewą podporę na osi silnika krokowego.

Jako przykład podano znacznik i jajko (nie musisz ich teraz umieszczać).

UWAGA: Serwo wymaga regulacji. Będziesz musiał ponownie ustawić jego kąt podczas procesu kalibracji.

Krok 10: Elektronika

Zamocuj elektronikę z tyłu ramy głównej za pomocą śrub (wystarczy 2).

Podłączmy kable.

Jeśli odwrócisz polaryzację podczas podłączania silników krokowych, po prostu obrócą się w przeciwnym kierunku, ale z serwomechanizmem sytuacja nie jest tak nieszkodliwa! Więc dokładnie sprawdź polaryzację przed podłączeniem!

Krok 11: Programowanie Arduino Leonardo

Zaprogramujmy Arduino Leonardo przy użyciu środowiska programowego Arduino IDE (v 1.8.1).

  • Pobierz Arduino IDE (v 1.8.1) i zainstaluj program;
  • Biegnijmy oprogramowanie. Wybierz płytkę Arduino Leonardo i odpowiadający jej port COM w menu „narzędzia->płyta”;
  • Otwórzmy i pobierzmy kod Sphere-O-Bot. Rozpakujmy wszystkie pliki w jednym folderze i nazwijmy go "Ejjduino_ARDUINO".

Krok 12: Art Robot jest gotowy do tworzenia grafiki

Krok 13: Sterowanie robotem

Oprogramowanie inkscape. Pobierz i zainstaluj oprogramowanie Inkscape (polecam stabilną wersję 0.91).

Pobierz i zainstaluj rozszerzenie EggBot Control (wersja 2.4.0 została w pełni przetestowana).

Rozszerzenie EggBot Control dla Inkscape to narzędzie używane podczas testowania i kalibracji EggBot oraz przenoszenia rysunków do jajka. Najpierw musisz uruchomić Inkscape. Po uruchomieniu Inkscape pojawi się menu „Rozszerzenia”, w którym musisz już wybrać podmenu „Eggbot”. Jeśli nie widzisz podmenu Eggbot, oznacza to, że nie zainstalowałeś poprawnie rozszerzeń. Utwórz kopię zapasową i uważnie postępuj zgodnie z instrukcjami instalacji rozszerzeń.

To wszystko, dziękuję za uwagę!)

W tym artykule zbudujemy naszego robota od podstaw. Co otrzymujemy, zobacz zdjęcie poniżej. Robot będzie jeździł zarówno samodzielnie, jak i pod kontrolą smartfona. Przyjrzymy się również budowie od podstaw własnego robota mobilnego.

3 Ddrukarka

Jeśli chcę zbudować robota, muszę zdecydować się na platformę, na której zainstaluję silniki, deski, akumulatory. Oczywiście mogę kupić gotową wersję, ale ciekawsze jest samodzielne wykonanie platformy. Taka platforma z pewnością spełni Twoje wymagania. Platforma może być wykonana z org. Szkło, sklejka, zrobię to z plastiku.

Można powiedzieć, że samodzielne wykonanie platformy jest niewygodne i będziesz potrzebować wielu narzędzi, od punktaka po maszyna do mielenia. A ja mówię, że potrzebujemy wyobraźni i drukarki 3D.

drukarka 3d? Każdy prawdopodobnie zna zwykłą drukarkę biurową, która może wydrukować potrzebny nam tekst na A4. Tak więc drukarka 3D to drukarka, która może wydrukować żądaną część. Istnieją różne drukarki 3D. Posiadam drukarkę z technologią FDM (osadzanie warstwa po warstwie). Jakie inne technologie druku 3d są dostępne w Internecie.

Wiele drukarek 3D działa na Arduino. Jeśli chcesz, możesz zbudować własną drukarkę 3D. Główną ideą drukarki 3D jest to, że można wydrukować absolutnie wszystko, ale my wydrukujemy ciało dla robota.

Najpierw zdefiniujmy opis platformy. Chcę, aby platforma była dwukołowa i musiała zmieścić Arduino, zasilanie, silniki i kilka czujników.

Teraz musisz narysować układ platformy na papierze i umieścić na niej niezbędne elementy. Na przykład tak.

Gdy układ będzie gotowy, będziesz musiał wykonać model 3D platformy. Istnieje wiele programów do tego. Zwykle używam . Nie będę uczyć pracy z Kompasem, ale jeśli jesteś zainteresowany, możesz poszukać w Internecie lub poprosić w komentarzach o zrobienie lekcji na temat Kompasu.

To jest platforma, którą wymyśliłem.

Następnie musisz przekonwertować model 3D na kod G zrozumiały dla drukarki 3D. Do tego są programy specjalne- krajalnice. Korzystam z programu Repetier-Host z fragmentatorem Sli3er. Oto jak część wygląda gotowa do druku.

A oto wydrukowany model.

Dopiero niedawno wpadliśmy na pomysł, a gotowa część jest już przed nami. Za pomocą drukarki 3D możesz tworzyć unikalne rzeczy w pojedynczych egzemplarzach. Drukarka 3D jest niesamowita. Radzę wszystkim!

Motoryzacja

Teraz musimy pomyśleć o tym, jak będzie się poruszał nasz robot mobilny. Pierwsze, co przychodzi mi do głowy, to koła. Więc zróbmy to.

Jeśli ktoś pamięta, próbowaliśmy już podłączyć silnik do Arduino. Kto nie pamięta, nie wie lub nie czytał – spójrz. Podłączenie silnika za pomocą MOSFET-u ma poważne wady - nie ma możliwości szybkiej zmiany prędkości i kierunku obrotów. Czas nauczyć Arduino, jak naprawdę sterować silnikami!

Aby to zrobić, możesz użyć chipa L293D. L293D pozwala na sterowanie dwoma silnikami jednocześnie, prądem 600 mA na kanał i prądem szczytowym do 1000 mA, a jeśli połączymy kanały, to prądem szczytowym do 1200 mA i 2000 mA. Porozmawiam o stowarzyszeniu poniżej.

Na początek, jak zawsze, powinieneś zajrzeć do arkusza danych, aby dowiedzieć się, gdzie i co podłączyć. Jeśli nie wiesz o mikroukładach, warto przeczytać artykuł.

Zacznijmy. Złóżmy prosty schemat z jednym silnikiem i sterujmy nim. Zwróć uwagę na schemat montażu.

Jeśli nie znasz języka angielskiego lub po prostu nie rozumiesz arkusza danych, oto opis połączenia. Mam nadzieję, że wszyscy znają numerację mikroukładów lub dowiedzieli się z artykułu o mikroukładach.

  • Pin 1 - odpowiada za prędkość obrotową silnika. Podobny jest na pinie 9. Przyjmuje wartości od 0 do 255, które można łatwo uporządkować za pomocą PWM.Podłączyłem EN do piątego pinu Arduino, który obsługuje PWM.
  • Piny 2 i 7 - Odpowiedzialne za kierunek ruchu silnika. Podobne są na pinach 10 i 15. Przyłożenie logiki jeden do jednego z tych pinów spowoduje obrót silnika w jednym kierunku (w zależności od połączenia silnika), zastosowanie logiki jeden do drugiego spowoduje obrót silnika w przeciwny kierunek.
  • Piny 3 i 6 - Musisz podłączyć do nich silnik. Polaryzacja nie jest ważna, tylko kierunek obrotów będzie zależał od połączenia. Podobnie - na pinach 11 i 14.
  • Piny 4 i 5 są uziemione. Myślę, że to nie wymaga wyjaśnienia. Podobne - 12 i 13.
  • Pin 8 - Zasilanie silników. Musi być zasilany w zakresie od 4,5 do 36 woltów.
  • Pin 16 - jednostka logiczna jest do niego zasilana z Arduino. 5 woltów, jeśli w ogóle.

W porządku! Silnik jest podłączony. Teraz możesz kodować.

#define FRW_BUT 7 //Przycisk Do przodu #define BCW_BUT 6 //Przycisk Wstecz #define SPD 5 //Kontrola prędkości obrotowej... #define FRW 4 //...kierunek obrotu (do przodu)... #define BCW 3 / /...kierunek obrotu (do tyłu) #define SPD_POT A5 int xspeed = 0; //Zmienna określająca prędkość obrotową silnika int frw_move = 0; //Zmienna dla polecenia „do przodu” int bcw_move = 0; //Zmienna dla polecenia „wstecz” void setup() ( //Projektowanie pinów pinMode(SPD, OUTPUT); pinMode(FRW, OUTPUT); pinMode(BCW, OUTPUT); pinMode(SPD_POT, INPUT); pinMode(FRW_BUT, INPUT_PULLUP ); pinMode(BCW_BUT, INPUT_PULLUP); ) void loop() ( //Odczytaj odczyty z potencjometru //i doprowadź je do pożądanego zakresu - od 0 do 255 //Po - przekaż do pinu kontroli prędkości xspeed = analogRead (SPD_POT); constrain (xspeed, 0, 1023); xspeed = map(xspeed, 0, 1023, 0, 255); //Określ naciśnięcie przycisku do przodu, jeśli (!digitalRead(FRW_BUT)) ( frw_move = 1; ) else ( frw_move = 0; ) //Określenie naciśnięcia przycisku "wstecz" if(!digitalRead(BCW_BUT)) ( bcw_move = 1; ) else ( bcw_move = 0; ) //Wywołanie funkcji do wysłania danych do L293D motor(); ) void motor() ( //Wyślij dane do L293D analogWrite(SPD, xspeed); digitalWrite(FRW, frw_move); digitalWrite(BCW,bcw_move); )

Jak to działa? Działa po prostu. Po naciśnięciu lewego przycisku koło obraca się w jednym kierunku, a po naciśnięciu prawego przycisku obraca się w drugim kierunku. Obracając pokrętłem potencjometru można regulować prędkość obrotową silnika. Działanie naszego stanowiska do testowania silników jest pokazane na filmie.

Z.Y. Tak, wiem, że jakość wideo nie jest świetna, ale postaram się znaleźć porządny aparat i jak najszybciej zaaranżować miejsce do kręcenia.

Teraz o połączeniu kanałów L293. Jeśli chcesz podłączyć mocniejszy silnik, możesz połączyć kanały.

Pierwszym sposobem jest równoległe połączenie analogowych wyjść mikroukładu, co dwukrotnie zwiększy maksymalną siłę prądu. Minus - do jednego mikroukładu można podłączyć tylko jeden silnik.

Drugi sposób to przylutowanie kolejnego L293 do L293. Bierzemy i lutujemy pin 1 do pinu 1, pin 2 do pinu 2 i tak dalej. Ta metoda również daje dwukrotny wzrost natężenia prądu, ale w przeciwieństwie do pierwszej pozostawia możliwość sterowania dwoma silnikami jednocześnie. Może masz pomysł - czy powinienem przylutować jeszcze kilka L293? Niestety późniejsze lutowanie mikroukładów nie doprowadzi do wzrostu natężenia prądu o kolejne 600 mA. Wzrost będzie niewielki.

„Ech, będę musiał wyczyścić mój 12-woltowy silnik…” Nie denerwuj się. W przypadku mocniejszych silników odpowiedni jest starszy brat L293 - L298, ale teraz nie będziemy tego rozważać. Zrobimy to trochę później.

Silnik Tarcza

Zgadzam się, że przy takiej wiązce przewodów to wszystko wygląda niezbyt dobrze. Aby się go pozbyć, możesz przylutować obwód z L293 na obwodzie drukowanym lub płytce stykowej do lutowania, ale co jeśli nie chcesz lutować lub nie wiesz jak? Do tego są rozwiązania pod klucz w postaci nakładek dla Arduino np. Opowiem o jednym z nich - Motor Shield V1 od DK Electronics.

Tutaj w rzeczywistości jest zdjęcie tarczy.

Nakładka ta posiada dwa L293D, co pozwala na jednoczesne sterowanie czterema silnikami. Są też dwa styki do serwomotorów. Zasilanie doprowadzone jest albo do listwy zaciskowej, albo z założoną zworką z zasilacza Arduino. Zworka umożliwia również przejęcie zasilania Arduino z tarczy. Istnieje specjalna biblioteka do pracy z tą tarczą. Możesz go pobrać.

Do minusów zarządu. Do pracy z nakładką wykorzystywane są prawie wszystkie piny cyfrowe, z wyjątkiem 0, 1, 2, 13. Jak wiemy, piny 0 i 1 są wykorzystywane przez Arduino do oprogramowania układowego, więc lepiej ich nie używać.

Jest też dobra strona. Jeśli nie podłączysz serw np. piny 9 i 10 są zwolnione, a jeśli nie użyjesz żadnego z silników to piny 3, 5, 6, 11 zostaną zwolnione w zależności od nieużywanego silnika. I dalej. Wciąż mamy sześć dostępnych wyjść analogowych, które w razie potrzeby mogą być używane jako cyfrowe.

Zacznijmy podłączać silniki. Na potrzeby eksperymentu zrobimy robota, który porusza się do przodu, do tyłu, a także obraca się wokół własnej osi. Jako platformę wziąłem własny rozwój, opisany powyżej. Możesz wziąć wszystko, czego dusza zapragnie, najważniejsze jest to, że jest odpowiednie pod względem cech.

Będziemy potrzebować

  • Arduino UNO — można użyć dowolnego innego współczynnika kształtu Arduino UNO. Na przykład Leonardo czy Iskra.
  • Osłona silnika - Inne wersje tej osłony będą działać.
  • Silniki na 6 V - Możesz wybrać dowolny, który jest odpowiedni dla charakterystyki osłony silnika.
  • Koła 42mm – Koła pasujące do silników i platformy
  • Mocowania silnika — silniki muszą być przymocowane do platformy. Weź ten, który Ci odpowiada.
  • Zasilanie - Wziąłem akumulator i wyszedłem około 5 woltów, co nie wystarcza do zasilania silników i Arduino, więc podłączyłem przetwornicę DC/DC i podniosłem napięcie do 9V. Jeśli nie ma konwertera, można użyć zwykłej korony podłączając ją do zasilacza Arduino.

Czas złożyć naszego robota.

Krok 1

Łączymy Arduino i Motor Shield.

Krok 2

Montujemy silniki i mocujemy je do platformy.

Krok 3

Pobieramy moc przez konwerter doładowania.

Dla tych, którzy mają Cronę. Nie zapomnij o swetrze!

Krok 4

Silniki mocujemy do Motor Shield za pomocą Arduino.

Krok 5

Dodajemy jedzenie.

Krok 6 (opcjonalnie)

Załóż pokrywkę - dla estetyki.

Mamy gotowego robota. Teraz czas go zaprogramować. Spójrzmy na kod.

//Dołącz bibliotekę do pracy z Motor Shield #include //Określ lewy silnik na listwie zaciskowej nr 2 AF_DCMotor l_motor(2); //Zdefiniuj odpowiedni silnik do bloku zacisków numer 3 AF_DCMotor r_motor(3); //Zmienne określające prędkość //i czas ruchu int spd = 50; czas międzyczasowy (1000); void setup() ( //Ustaw początkową prędkość i wyłącz silniki l_motor.setSpeed(spd); l_motor.run(RELEASE); r_motor.setSpeed(100); r_motor.run(RELEASE); ) void loop() ( // Jazda do przodu l_motor.run(DO PRZODU); r_motor.run(DO PRZODU); l_motor.setSpeed(spd); r_motor.setSpeed(spd); opóźnienie (czas); // Jazda do tyłu l_motor.run(DO TYŁU); r_silnik. run(WSTECZ ); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(czas); // Obrót w kierunku przeciwnym do ruchu wskazówek zegara l_motor.run(DO PRZODU); r_motor.run(DO TYŁU); l_motor.setSpeed(spd); r_motor setSpeed(spd); delay(czas); // wiruj zgodnie z ruchem wskazówek zegara r_motor.run(FORD); l_motor.run(BACK); l_motor.setSpeed(spd); r_motor.setSpeed(spd); delay(time); )

W porządku! Czas sprawdzić. Oto film z mojego testu. A ty?

„Czy powiedziałeś coś o tablicach do robotyki?” - mogą powiedzieć ci, którzy przeczytali lekcję wprowadzającą do części 2 kursu. Tak, są takie opłaty. Rozważ platformę robota Strela.

Robotyka marzenie. (Prawie). Opisałem zalety tablicy. Od razu do rzeczy.

Na nim zainstalowany jest starszy brat L293 - L298. A piny są wyświetlane w trójkach, co jest w sam raz do podłączenia wielu czujników.

Ta płytka może być podłączona zamiast Arduino UNO i Motor Shield. Dodatkowo chłopaki z Amperki napisali bibliotekę do pracy z Arrow, co sprawia, że ​​sterowanie silnikami jest dość trywialnym zadaniem.

Dla tych, którzy nie wiedzą, powiem. Każda normalna biblioteka ma przykłady, jak jej używać, a biblioteka Arrow nie jest wyjątkiem. Aby je znaleźć należy przejść do zakładki Plik -> Przykłady -> Strela. Tam wybieramy przykład StrelaMotors, w którym wykonywany jest szkic podobny do szkicu przy użyciu Motor Shield. Nawiasem mówiąc, istnieją również przykłady Motor Shield. Jeśli jesteś zainteresowany, spójrz.

Co jeszcze można zrobić ze strzałką - patrz poniżej.Przechodzimy do komunikacji bezprzewodowej przez Bluetooth.

Bluetooth

Robot, który sam jeździ po pokoju, jest oczywiście dobry, ale chciałbym sam nim sterować. Aby to zrobić, musisz zorganizować połączenie między Arduino a urządzeniem sterującym.

Jako urządzenie sterujące wybrałem smartfon. Zorganizujemy komunikację za pomocą protokołu Bluetooth, więc czas się zapoznać.

To jest moduł HC-06. Nie będę się zagłębiał w szczegóły, ale jeśli jesteś zainteresowany, przejdźmy dalej. Naszym celem jest sterowanie robotem ze smartfona. Może zacznijmy.

Najpierw musisz podłączyć HC-06 do Arduino. Połączymy się za pomocą oprogramowania Serial. Ta biblioteka pozwala na emulację portu szeregowego na potrzebnych nam pinach. Dla celów eksperymentu spróbujmy to zrobić na pinach A0(RX) i A1(TX). Po co? Pamiętaj, co powiedziałem o Motor Shield.

Łączymy się tak:

  • Vcc - do 5V
  • GND do GND
  • Odbiór do TX
  • TX do RX

Podłączę HC-06 do robota, który zbudowaliśmy powyżej. W tym celu użyjemy trzech pasków na osłonie silnika.

Robot jest gotowy. Pozostaje do zaprogramowania.

Zanim przeczytasz kod, musisz wiedzieć o kilku rzeczach. Silniki nie są idealne, jak wszystko inne na tym świecie. Nawet dwa następujące po sobie silniki z tej samej partii będą się nieznacznie różnić, co wpłynie na różnicę w liczbie obrotów przy tym samym napięciu. Jeśli silniki są po prostu podłączone do osłony silnika i mają taką samą prędkość, a to jest to samo napięcie, robot nie pojedzie prosto, ale trochę lub dużo w bok. Widać to na powyższym filmie.

Aby tego uniknąć, zastosujemy współczynniki korygujące. Moje lewe koło obraca się o wiele szybciej niż prawe, więc ustawiłem współczynnik 0,62, aby to zrekompensować. Wartość współczynnika dobierana jest eksperymentalnie.

// Dołącz biblioteki do pracy z Motor Shield i Software Serial #include #włączać //Określ piny do emulacji SoftwareSerial mySerial(A0, A1); // RX, TX //Zdefiniuj lewy silnik do zacisku nr 2 AF_DCMotor l_motor(2); //Zdefiniuj odpowiedni silnik do bloku zacisków numer 3 AF_DCMotor r_motor(3); //Zmienne do określania prędkości //i regulacji obrotów float spd = 70.0; pływak corr_l = 0,62; pływak corr_r = 1; floatrot = 50,0; void setup() ( //Ustaw prędkość początkową i wyłącz silniki l_motor.setSpeed(spd); l_motor.run(RELEASE); r_motor.setSpeed(spd); r_motor.run(RELEASE); //Nawiąż połączenie z HC-06 mySerial .begin(9600); ) void loop() ( //Jeśli są dane, //wywołaj funkcję kontrolną if (mySerial.available()) ( drive(); ) ) void drive() ( //Zmienna dla kontrola znaków przychodzących = mySerial.read();//Ustaw najpierw prędkość, jeśli (((kontrola - "0") >= 0) && ((kontrola - "0")<= 9)) { spd = (control - "0") * 25.0; //сохраняем новое значение скорости } else if (control == "q") { spd = 255.0; } //Сравниваем команды, пришедшие со смартфона else if (control == "S") //Если пришла команда "S", стоим { l_motor.run(RELEASE); r_motor. run(RELEASE); } else if (control == "F") //Если пришла команда "F", едем вперед { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "B") //Если пришла команда "B", едем назад { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "I") //Если пришла команда "I", едем вперёд и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "J")//Если пришла команда "J", едем назад и направо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r + rot); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "G") //Если пришла команда "G", едем вперёд и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(FORWARD); } else if (control == "H") //Если пришла команда "H", едем назад и налево { l_motor.setSpeed(spd * corr_l + rot); r_motor.setSpeed(spd * corr_r); r_motor.run(BACKWARD); l_motor.run(BACKWARD); } else if (control == "R") //Если пришла команда "R", крутимся вправо { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); r_motor.run(FORWARD); l_motor.run(BACKWARD); } else if (control = "L") //Если пришла команда "L", крутимся влево { l_motor.setSpeed(spd * corr_l); r_motor.setSpeed(spd * corr_r); l_motor.run(FORWARD); r_motor.run(BACKWARD); } }

Zapytano robota. Teraz weźmy smartfona.

Kontroler RC

Istnieje wiele różnych aplikacji do łączenia Arduino i smartfona przez Bluetooth. W wyszukiwaniu słowami kluczowymi będą: Arduino, Bluetooth, RC.

Wybrałem aplikację o nazwie Bluetooth RC Controller. Jest idealny do naszego celu. Po naciśnięciu przycisku aplikacja wysyła wartość znaku do HC-06, który z kolei przekazuje przychodzącą wartość do Arduino. Wartość wysyłana po kliknięciu przycisku jest ustawiana samoczynnie.

Aby nawiązać połączenie z robotem, należy kliknąć na koło zębate i wybrać pozycję „Ustawienia” W „Ustawieniach” należy upewnić się, że przyciski odpowiadają tym przesłanym znakom, lub zmienić kod Arduino.

Po ustawieniu znaków można nawiązać połączenie z HC-06. Kliknij koło zębate i przejdź do „Połącz z samochodem”. Otworzy się okno ze sparowanymi urządzeniami. W nim wybieramy HC-06. Jeśli go tam nie ma, szukamy go za pomocą „Skanuj w poszukiwaniu urządzeń”. Jeśli urządzenie zostanie znalezione, ale nie chce się sparować, przejdź do Bluetooth w smartfonie i sparuj jak zwykle. Domyślne hasło to 1234. Następnie przejdź do „Skanuj w poszukiwaniu urządzeń” i połącz się.

Po nawiązaniu połączenia zielone światło na górze włączy się, a HC-06 przestanie migać. Możesz zacząć jechać. Pasek na górze odpowiada za szybkość poruszania się.

Wróćmy do Arrow. Kolejną zaletą Arrow jest możliwość instalacji formatu Bluetooth XBee, a dobrą rzeczą jest to, że pozostałe piny pozostają wolne. A ponieważ istnieje gotowa biblioteka dla Arrow, która pomaga zredukować kod do sterowania silnikami, bardzo warto wykorzystać Arrow do sterowania robotem przez Bluetooth.

Aby to zrobić, musisz podłączyć XBee do Streli, sflashować go szkicem z przykładów o nazwie „ArduinoBluetoothRCCarOnStrela” i połączyć się z XBee za pomocą kontrolera RC.

Rada

Mój robot jest gotowy, a nawet jeździ na polecenie ze smartfona. Ale nie wszystko idzie gładko. Opowiem o niektórych problemach i ich rozwiązaniach, a także udzielę porad początkującym robotykom.

Koła kręcą się w złym kierunku- problem ten można łatwo wyeliminować przestawiając przewody w listwach zaciskowych lub programowo.

Moduł Bluetooth nie działa- należy sprawdzić obecność palącej się czerwonej diody LED na module. Jeśli nie świeci, sprawdź, czy moduł Bluetooth jest prawidłowo podłączony. Jeśli dioda świeci, ale połączenie jest ustanowione, należy upewnić się, że RX modułu jest podłączony do TX płytki i odwrotnie, a także wypróbować metodę parowania modułu z Arduino za pomocą standardu Interfejs Bluetooth.

Robot nie jedzie prosto- Trochę wyżej opisałem ten problem, gdy mówiłem o Bluetooth i Motor Shield.

Podczas jazdy robot nagle się zatrzymuje i traci połączenie zHC-06- Wystąpił problem z zasilaniem. Wiemy, że Arduino potrzebuje co najmniej 7V do stabilnej pracy, wiemy też, że silniki jedzą bardzo dobrze. Jeśli przyłożysz sondy multimetru do zacisków zasilania i zmierzysz napięcie przy wyłączonych silnikach, a następnie je włączysz, zobaczysz, że napięcie na multimetrze spadnie. Co więcej, napięcie może spaść na różne sposoby.

Jeśli podłączony jest zasilacz, który nie zapewnia wystarczającej ilości prądu dla silników, napięcie może znacznie spaść, na przykład z 9 do 5 woltów, a 5 V nie wystarczy już dla Arduino i uruchomi się ponownie. Rozwiązaniem jest podłączenie mocniejszego zasilacza. Jak obliczyć, powiem poniżej.

Jeśli podłączysz mocniejsze źródło zasilania, to spadek napięcia może trwać tylko kilka milisekund, ale mogą one wystarczyć do ponownego uruchomienia kontrolera. Rozwiązaniem jest zainstalowanie kondensatora co najmniej 1000 uF równolegle z przewodami zasilającymi, pojemność można określić eksperymentalnie. Umieściłem kondensator na 3300 uF i na 16V. Nie zapomnij spojrzeć na maksymalne napięcie kondensatora.

Gdy zasilacz jest wystarczająco mocny, spadek napięcia nie przekracza 0,2V.

Kilka wskazówek dla początkujących robotów

Rozpoczynając rozmieszczenie robota, w pierwszej kolejności należy zadbać o obliczenie mocy jednostki napędowej i wybór odpowiedniego źródła zasilania. Szkoda, jeśli 4 baterie AAA nie zasilają 4 silników 6V, a nie ma miejsca na więcej zasilania.

Do obliczenia mocy poszukujemy charakterystyk silników, płytek, czujników. Z fizyki wiemy, że moc można obliczyć ze wzoru P = IU, gdzie I to natężenie prądu, U to napięcie. Korzystając z tej formuły i charakterystyk, łatwo obliczyć pobór mocy gotowego urządzenia, a znając pobór mocy i napięcie robocze zasilacza, możesz znaleźć optymalną moc prądu wymaganą do działania urządzenia, znając prąd siły, możesz określić wymaganą pojemność baterii i czas pracy urządzenia z wybranej baterii.

Jak powiedziałem, zawsze należy wyznaczyć sobie konkretny cel, po osiągnięciu którego projekt można uznać za zakończony. W tej myśli są niuanse. Jeśli projekt jest wystarczająco duży, to dotarcie do celu nie jest takie proste, zwłaszcza podczas pisania kodu. Kiedy napisałem duży kod, pomyślałem: „Teraz wszystko napiszę i sprawdzę! ' podczas próby skompilowania kodu nie skompilował się od razu, ponieważ wystąpiło kilka błędów. Usunąłem błędy, ale tylko kod nie działał tak, jak chciałem. Musiałem wszystko przepisać niemal od zera, stopniowo dodając kod i sprawdzając otrzymany kod pod kątem działania. Więc radzę zrobić to samo.

Jeśli celem jest stworzenie „hasła” składającego się z trzech znaków, nie należy programować wszystkich trzech na raz. Lepiej zrobić hasło z jednego znaku, sprawdzić je, potem od dwóch, a po weryfikacji - od trzech. Pomaga mi.

Robot jest tworzony metodą prób i błędów. Nie będzie można raz zaprogramować, aby akcja przebiegła perfekcyjnie. Te same współczynniki tuningu są na kołach, więc nie należy się poddawać, jeśli coś nie wyjdzie, a jeśli w ogóle nie wyjdzie, to można zwrócić się do życzliwych ludzi na forach lub napisać do mnie, my na pewno pomoże!

Wniosek

Robotyka jest niesamowita! Myślę, że niedługo roboty wezmą, a nawet zaistniały już w życiu ludzi. Zrobiliśmy najprostszy robot-samochód sterowany ze smartfona, później zajmiemy się poważniejszymi projektami, ale na razie - do zobaczenia wkrótce!

W dzisiejszym artykule opowiem jak zrobić robota omijającego przeszkody w oparciu o mikrokontroler Arduino własnymi rękami.



Aby zrobić robota w domu, potrzebujesz samej płytki mikrokontrolera i czujnika ultradźwiękowego. Jeśli czujnik wykryje przeszkodę, serwo pozwoli mu ominąć przeszkodę. Skanując przestrzeń po prawej i lewej stronie, robot wybierze najbardziej preferowaną ścieżkę do ominięcia przeszkody.

Codebender to środowisko IDE oparte na przeglądarce, to najprostszy sposób na zaprogramowanie robota z przeglądarki. Musisz kliknąć przycisk "Uruchom na Arduino" i to wszystko, nigdzie nie jest prostsze.

Włóż baterię do komory i naciśnij raz przycisk funkcyjny, a robot ruszy do przodu. Aby zatrzymać ruch, ponownie naciśnij przycisk.

/* Robot unikający przeszkód Arduino z serwomotorem i czujnikiem ultradźwiękowym HC-SR04 LED i brzęczyk */ //Biblioteki #include #include "Ultrasonic.h" //Constants const int button = 2; // Przycisk pin do pinu 2 const int led = 3; // LED pin (poprzez rezystor) do pinu 3 const int buzzer = 4; //Pin brzęczyka do pinu 4 const int motorA1= 6; //dodatni (+) silnik A pin do pinu 6 (PWM) (z modułu L298!) const int motorA2= 9; //ujemny pin (-) silnika A do pinu 9 (PWM) const int motorB1=10; // dodatni (+) pin silnika B do pinu 10 (PWM) const int motorB2=11; // ujemny pin (-) silnika B do pinu 11 (PWM) Ultradźwiękowy ultradźwięk (A4, A5); //Utwórz obiekt ultradźwiękowy(trig pin,echo pin) Servo myservo; //Utwórz obiekt Servo do sterowania serwomechanizmami //Zmienne int distance; //Zmienna do przechowywania odległości do obiektu int checkRight; int checkLeft; funkcja int=0; //Zmienna do przechowywania funkcji robota: "1" - ruch lub "0" - zatrzymany. Domyślnie zatrzymane int buttonState=0; //Zmienna do przechowywania stanu przycisku. Domyślnie "0" int pos=90; //zmienna do przechowywania pozycji serwa. Domyślnie 90 stopni - czujnik będzie oczekiwał int flag=0; //przydatna flaga do przechowywania stanu przycisku po zwolnieniu przycisku void setup() ( myservo.attach(5); //pin serwa podłączony do pinu 5 myservo.write(pos); // mówi serwo, aby ruszyły na pozycję w zmiennej " pos" pinMode(przycisk, INPUT_PULLUP); pinMode(led, OUTPUT); pinMode(brzęczyk, OUTPUT); pinMode(motorA1,OUTPUT); pinMode(motorA2,OUTPUT); pinMode(motorB1,OUTPUT); pinMode (silnikB2,WYJŚCIE) ; ) void loop() ( //Sprawdzanie stanu przycisku buttonState = digitalRead(button); unsigned long currentMillis = millis(); //obliczanie... //zmiana funkcji głównej (zatrzymana/ przesuwanie) po naciśnięciu przycisku if (buttonState = = LOW) (//Jeśli przycisk zostanie naciśnięty raz... opóźnienie(500); if (flaga == 0)( funkcja = 1; flaga=1; //zmiana zmienna flagi ) else if (flaga == 1)( / /Jeżeli przycisk zostanie naciśnięty dwukrotnie funkcja = 0; flaga=0; //zmień ponownie zmienną flagi ) ) if (funkcja == 0)( //Jeżeli puszczamy lub wciskamy dwukrotnie przycisk, następnie: myservo.write(90);//ustaw na serwo 90 stopni - czujnik będzie wyglądał b stop do przodu(); //robot pozostaje nadal noTone(brzęczyk); //brzęczyk wyłączony digitalWrite(led, HIGH);// a dioda świeci ) else if (funkcja == 1)(//Jeśli przycisk jest wciśnięty, to: //Odczytaj odległość... odległość = ultradźwięki .Ranging(CM); //Wskazówka: użyj „CM” dla centymetrów i „INC” dla cali //Sprawdź obiekty. .. if (odległość > 10)( forward(); //Wszystko jasne, ruszam do przodu! noTone(brzęczyk); digitalWrite(led,LOW); ) else if (odległość<=10){ stop(); //Обнаружен объект! Останавливаемся и проверяем слева и справа лучший способ обхода! tone(buzzer,500); // издаём звук digitalWrite(led,HIGH); // включаем светодиод //Начинаем сканировать... for(pos = 0; pos =0; pos-=1){ //идём от 180 градусов к 0 myservo.write(pos); // говорим серво пройти на позицию в переменной "pos" delay(10); // ждём 10 мс, пока сервопривод достигнет нужной позиции } checkRight= ultrasonic.Ranging(CM); myservo.write(90); // Датчик снова смотрит вперёд //Принимаем решение – двигаться влево или вправо? if (checkLeft checkRight){ right(); delay(400); // задержка, меняем значение при необходимости, чтобы заставить робота повернуться. } else if (checkLeft <=10 && checkRight <=10){ backward(); //Дорога перекрыта... возвращаемся и идём налево;) left(); } } } } void forward(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void backward(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void left(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void right(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void stop(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); }

Klikając przycisk „Edytuj”, możesz edytować szkic do swoich potrzeb.

Np. zmieniając wartość „10” zmierzonej odległości na przeszkodę w cm, zmniejszysz lub zwiększysz odległość, jaką robot Arduino przeskanuje w poszukiwaniu przeszkody.

Jeśli robot się nie porusza, może zmienić styki silników elektrycznych (silnikA1 i silnikA2 lub silnikB1 i silnikB2).

Krok 7: Ukończony robot

Twój domowy robot omijający przeszkody oparty na mikrokontrolerze Arduino jest gotowy.