Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Wydruk 3D: korpus, koła, marmurowe kółko, śruba/nakrętka 6 mm i mocowanie czujnika ultradźwiękowego
- Krok 2: Zaprogramuj Arduino
- Krok 3: Złóż robota
- Krok 4: Podłącz przewody czujnika
- Krok 5: Zakończony!!! Podłącz zasilacz Arduino 9 V, włącz akumulator i zacznij omijać przeszkody za pomocą OAREE
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
OAREE (Robot Unikający Przeszkód do Edukacji Inżynierskiej)
Projekt: Celem tego instruktażu było zaprojektowanie robota OAR (Robot Unikający Przeszkód), który byłby prosty/kompaktowy, nadający się do druku 3D, łatwy w montażu, wykorzystujący do ruchu serwomechanizmy o ciągłym obrocie i mający jak najmniej zakupionych części. Wierzę, że udało mi się stworzyć tego niesamowitego robota i nazwałem go OAREE (Robot Unikający Przeszkód w Edukacji Inżynierskiej). Ten robot wykryje przeszkody, zatrzyma się, spojrzy w lewo iw prawo, a następnie skręci w niezakłóconym kierunku i pojedzie dalej.
Tło: Internet ma wiele przeszkód w unikaniu robotów, ale większość z nich jest nieporęczna, trudna w montażu i droga. Wiele z tych robotów ma dostarczony kod Arduino, ale trudno było znaleźć dobrze przemyślany, działający przykład. Chciałem też zastosować do kół serwomechanizmów o ciągłym obrocie (zamiast silników prądu stałego), co jeszcze nie zostało zrobione. Wyruszyłem więc z misją opracowania kompaktowego, pomysłowego robota OAR, którym mógłbym dzielić się ze światem.
Dalszy rozwój: Ten robot może być dalej rozwijany w celu uzyskania lepszej dokładności pingowania, dodając czujniki podczerwieni umożliwiające śledzenie linii, ekran LCD do wyświetlania odległości przeszkody i wiele więcej.
Kieszonkowe dzieci
- 1x Arduino Uno -
- 1x Osłona czujnika V5 -
- 1x uchwyt baterii 4xAA z włącznikiem/wyłącznikiem -
- 1x Serwo SG90 -
- 2x Serwa o ciągłym obrocie -
- 1x kabel zasilający do baterii 9V dla Arduino (OPCJA) -
- 1x czujnik ultradźwiękowy HC-SR04 -
- 4x przewody połączeniowe żeńsko-żeńskie -
- 2x gumki
- 1x bateria 9 V (OPCJONALNIE)
- 4x baterie AA
- 4x małe śruby (4 x 1/2 lub coś podobnego)
- Śrubokręt krzyżakowy
- Klej do mocowania gumek do kół
Krok 1: Wydruk 3D: korpus, koła, marmurowe kółko, śruba/nakrętka 6 mm i mocowanie czujnika ultradźwiękowego
Do wydruku 3D jest 5 części.
- Ciało
- Koła
- Marmur Caster
- Śruba/nakrętka 6 mm (opcjonalnie można zastąpić metalową nakrętkę/śrubę)
- Mocowanie czujnika ultradźwiękowego
Wszystkie wymagane pliki. STL są zawarte w tej instrukcji, a także w plikach Sketchup. Zalecane wypełnienie 40%.
Krok 2: Zaprogramuj Arduino
Wyślij kod do Arduino UNO: Za pomocą środowiska Arduino IDE wyślij kod (w załączonym pliku) do modułu Arduino. Będziesz musiał pobrać i dołączyć do tego szkicu biblioteki servo.hi newping.h.
Kod jest dokładnie skomentowany, dzięki czemu możesz zobaczyć, co robi każde polecenie. W razie potrzeby można łatwo zmienić odległość czujnika ultradźwiękowego na większą lub mniejszą. Jest to wstępny kod, który ma zostać rozszerzony i wykorzystany do dalszego rozwoju projektu.
// ROBOT UNIKAJĄCY PRZESZKODY// [email protected], [email protected], University of TN at Chattanooga, Electrical Engineering, jesień 2019 // Wymagane materiały: // 1) Arduiino UNO, 2) Servo Sensor Shield v5.0, 3)HCSR04 Czujnik ultradźwiękowy, 4)Serwo FS90 (do czujnika ultradźwiękowego) // 5&6) 2x SERWA OBROTÓW CIĄGŁYCH do kół // 7) Marmur 16mm na tylne kółka, 8&9) 2 gumki do kół // 10- 15) 1x (4xAA) Uchwyt baterii z włącznikiem/wyłącznikiem, 16&17) Bateria 9V ze złączem do zasilania Arduino UNO // DRUK 3D: // 18) Korpus ROBOTA, 19&20) 2x Koła, 21) Kółko do marmuru, 22) Czujnik ultradźwiękowy Mocowanie i śruba 6mm (patrz załączone pliki) //------------------------------------------ -------------------------------------------------- ----------------------------------------- #include // Dołącz bibliotekę serwo #include // Dołącz bibliotekę do tworzenia nowych wersji //----------------------------------------------- -------------------------------------------------- ------------------------------------ #define TRIGGER_PIN 1 2 // Wyzwalacz US do pinu 12 na Arduino #define ECHO_PIN 13 // Echo US do pinu 13 na Arduino #define MAX_DISTANCE 250 // Odległość do pingu (max to 250) int distance = 100; //------------------------------------------------ -------------------------------------------------- ------------------------------- Serwo US_Servo; // Serwo czujnika ultradźwiękowego Left_Servo; // Serwo lewego koła Serwo Right_Servo; // Prawe koło serwo sonar NewPing (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing ustawienie pinów i maksymalna odległość. //------------------------------------------------ -------------------------------------------------- ------------------------------- void setup() // WEJŚCIA/WYJŚCIA, GDZIE DOŁĄCZYĆ, USTAWIĆ POCZĄTKOWĄ POZYCJĘ/RUCH { pinMode(12, WYJŚCIE); // pin wyzwalający ustawiony jako wyjście pinMode(13, INPUT); // Echo pin ustawiony jako wejście US_Servo.attach(11); // US Servo ustawione na pin 11 US_Servo.write(90); // SERWO USA WYGLĄDA W PRZYSZŁOŚĆ
Left_Servo.attach(9); // Serwo lewego koła do pinu 9
Left_Servo.write(90); // SERWO LEWE KOŁA ustawione na STOP
Right_Servo.attach(10); // Serwo prawego koła ustawione na pin 10
Right_Servo.write(90); // SERWO PRAWEGO KOŁA ustawione na opóźnienie STOP(2000); // Poczekaj 2 sekundy dystans = readPing(); // Uzyskaj odległość pingu przy opóźnieniu pozycji na wprost (100); // Czekaj na 100 ms moveForward(); // ROBOT RUSZA DO PRZODU } //------------------------------------------- -------------------------------------------------- ------------------------------------- void loop() { int distanceRight = 0; // Zainicjuj odległość US do prawej przy 0 int distanceLeft = 0; // Zainicjuj odległość US w lewo na 0 //US_Servo.write(90); // Wyśrodkuj amerykańskie serwo //delay(50); // US_Servo.write(70); // Spójrz lekko w prawo // delay(250); // US_Servo.write(110); // Spójrz lekko w lewo // delay(250); // US_Servo.write(90); // Szukaj w centrum
if (odległość <= 20) // Robot porusza się DO PRZODU { moveStop(); // Robot ZATRZYMUJE SIĘ w odległości = distanceLeft) // Zdecyduj, w którym kierunku skręcić { turnRight(); // Prawa strona ma największą odległość, ROBOT OBRACA W PRAWO przez 0,3 s opóźnienia (500); // To opóźnienie określa długość skrętu moveStop(); // Robot ZATRZYMUJE SIĘ } else { turnLeft(); // Lewa strona największa odległość, ROBOT SKRĘCA W LEWO przez 0,3 s opóźnienia (500); // To opóźnienie określa długość skrętu moveStop(); // Robot ZATRZYMUJE SIĘ } } else { moveForward(); // Robot PRZESUWA SIĘ DO PRZODU } dystans = readPing(); // USA ODCZYTUJĄ NOWY PING dla nowego kierunku jazdy } //----------------------------------- -------------------------------------------------- -------------------------------------------- int lookRight() // Czujnik ultradźwiękowy WYGLĄDAJ POPRAWNIE FUNKCJA { US_Servo.write(30); // Serwo USA PRZESUWA SIĘ W PRAWO do kąta opóźnienia (500); int dystans = readPing(); // Ustaw wartość ping dla prawego opóźnienia (100); US_Servo.write(90); // US serwo PRZESUWA SIĘ DO CENTRUM odległość powrotu; // Odległość jest ustawiona } //----------------------------------------------- -------------------------------------------------- ------------------------------------- int lookLeft() // Czujnik ultradźwiękowy SPÓJRZ W LEWO FUNKCJA { US_Servo.zapis(150); // Serwo USA PRZESUWA SIĘ W LEWO do kąta opóźnienia (500); int dystans = readPing(); // Ustaw wartość ping dla lewego opóźnienia (100); US_Servo.write(90); // US serwo PRZESUWA SIĘ DO CENTRUM odległość powrotu; // Odległość jest ustawiona } //----------------------------------------------- -------------------------------------------------- ------------------------------------- int readPing() // Funkcja odczytu ping dla czujnika ultradźwiękowego. { opóźnienie (100); // 100 ms między pingami (min. czas pingu = 0,29 ms) int cm = sonar.ping_cm(); // Odległość PING jest zbierana i ustawiana w cm if (cm==0) { cm=250; } powrót cm; } //--------------------------------------------------------------- -------------------------------------------------- -------------------------------- void moveStop() // ROBOT STOP { Left_Servo.write(90); // LeftServo 180 do przodu, 0 do tyłu Right_Servo.write(90); // RightServo 0 do przodu, 180 do tyłu } //----------------------------------------------------- -------------------------------------------------- ---------------------------------------- void moveForward() // ROBOT FORWARD { Left_Servo.zapis(180); // LeftServo 180 do przodu, 0 do tyłu Right_Servo.write(0); // RightServo 0 do przodu, 180 do tyłu } //----------------------------------------------------- -------------------------------------------------- ---------------------------------------- void moveBackward() // ROBOT BACKWARD { Left_Servo.write(0); // LeftServo 180 do przodu, 0 do tyłu Right_Servo.write(180); // RightServo 0 do przodu, 180 do tyłu } //----------------------------------------------------- -------------------------------------------------- ---------------------------------------- void turnRight() // ROBOT RIGHT { Left_Servo.zapis(180); // LeftServo 180 do przodu, 0 do tyłu Right_Servo.write(90); // RightServo 0 do przodu, 180 do tyłu } //----------------------------------------------------- -------------------------------------------------- ---------------------------------------- void turnLeft() // ROBOT LEFT { Left_Servo.zapis(90); // LeftServo 180 do przodu, 0 do tyłu Right_Servo.write(0); // RightServo 0 do przodu, 180 do tyłu } //----------------------------------------------------- -------------------------------------------------- ----------------------------------------
Krok 3: Złóż robota
Teraz nadszedł czas, aby złożyć robota. Kroki są wymienione poniżej.
1) Przymocuj okrągłą tarczę serwo i gumki do kół: Wszystkie serwa są dostarczane z plastikowym osprzętem montażowym i śrubami. Znajdź okrągłe tarcze i wkręć je w dwa otwory po płaskiej stronie kół. Gumki pasują do koła, aby zapewnić przyczepność. Możesz dodać trochę kleju, aby utrzymać gumki na miejscu.
2) Mocowanie marmurowego kółka: Użyj dwóch małych śrub, aby przymocować marmurowe kółko do dwóch trójkątów z tyłu. Kółko z marmuru jest prostym zamiennikiem tylnego koła i zapewnia tylny punkt obrotu.
3) Włóż serwa do gniazd (bez śrub): Umieść serwo FS90 (dla czujnika ultradźwiękowego) w przednim gnieździe korpusu. Dwa serwa o ciągłym obrocie wsuwają się w lewą i prawą szczelinę. Gniazda są zaprojektowane tak, aby pasowały ciasno, dzięki czemu do utrzymywania serw na miejscu nie są potrzebne żadne śruby. Upewnij się, że przewody serwomechanizmu biegną przez rowki w otworach, tak aby były skierowane w stronę tyłu ciała.
4) Umieszczenie baterii 9 V (OPCJONALNIE): Umieść baterię 9 V + złącze zasilania Arduino za przednim serwomechanizmem.
5) Zespół montażowy czujnika ultradźwiękowego: Użyj dwóch małych śrub, aby przymocować jeden z dołączonych białych plastikowych mocowań serwomechanizmu do dolnej części płyty montażowej czujnika ultradźwiękowego. Następnie użyj wydrukowanej w 3D śruby/nakrętki 6 mm (lub zastąp ją metalową śrubą/nakrętką), aby przymocować obudowę czujnika ultradźwiękowego do płyty montażowej. Na koniec umieść czujnik w obudowie bolcami skierowanymi do góry i zatrzaśnij z tyłu obudowy.
6) Pojemnik na 4 baterie AA: Umieść pojemnik na baterie AA w dużym, prostokątnym obszarze, z włącznikiem/wyłącznikiem skierowanym do tyłu.
7) Arduino Uno + V5 Sensor Shield: Przymocuj osłonę do Arduino i umieść na uchwytach nad obudową baterii. Złącze zasilania powinno być skierowane w lewo.
Twój robot jest zbudowany! Co zostało? Programowanie Arduino i podłączanie przewodów połączeniowych: serwa, czujnik ultradźwiękowy i zasilacz.
Krok 4: Podłącz przewody czujnika
Podłącz przewody Servo do V5 Shield:
- Lewy serwo ciągłych obrotów podłącza się do PIN 9
- Prawe serwo obrotów ciągłych podłącza się do PIN 10
- Przednie serwo FS90 podłącza się do PIN 11
Podłącz styki czujnika ultradźwiękowego (przez 4 x żeńskie do żeńskich przewodów połączeniowych) do osłony V5:
- Wyzwalanie na PIN 12
- Echo do PINu 13
- VCC do dowolnego pinu oznaczonego „V”
- Uziemić z dowolnym kołkiem oznaczonym literą „G”
Podłącz pojemnik na baterie AA do osłony V5:
- Podłącz dodatni czerwony przewód do złącza VCC
- Podłącz ujemny, czarny przewód do uziemienia;
Krok 5: Zakończony!!! Podłącz zasilacz Arduino 9 V, włącz akumulator i zacznij omijać przeszkody za pomocą OAREE
Skończone!
1) Podłącz zasilanie Arduino 9 V (opcjonalnie)
2) Włącz akumulator
3) Zacznij omijać przeszkody z OAREE!!!
Jestem pewien, że polubisz swojego nowego przyjaciela, OAREE, gdy zobaczysz, jak wyczuwa przeszkodę, cofa się i zmienia kierunek. OAREE działa najlepiej z dużymi obiektami, od których czujnik ultradźwiękowy może odbić się (np. ściany). Ze względu na małą powierzchnię i narożniki trudno mu pingować małe przedmioty, takie jak nogi krzeseł. Udostępniaj, rozwijaj i daj mi znać o wszelkich potrzebnych korektach lub błędach. To było wspaniałe doświadczenie edukacyjne i mam nadzieję, że tworzenie tego projektu będzie dla Ciebie równie zabawne, jak ja!
Drugie miejsce w konkursie robotyki