Gridi the Robot
Gridi to niewielki, mobilny robot edukacyjny zaprojektowany z myślą o nauce podstaw robotyki, elektroniki oraz programowania mikrokontrolerów Arduino. Projekt łączy w sobie elementy druku 3D, mechaniki oraz prostych układów elektronicznych. Konstrukcja robota opiera się na dwusilnikowym napędzie sterowanym za pomocą mostka H L298N. Jego modułowa budowa umożliwia łatwe modyfikacje zarówno sprzętowe, jak i programowe.
Gridi jest projektem wciąż rozwijanym. W przyszłości planowane są kolejne usprawnienia, takie jak rozbudowa o czujniki, bardziej zaawansowane algorytmy sterowania czy nowe wersje konstrukcji.
Supplies
Komponenty mechaniczno-elektroniczne:
- 1 x Arduino UNO
- 1 x L298N
- 1 x kółko N20
- 3 x ogniwo 18650
- 1 x koszyk 3S na ogniwa 18650
- 2 x koło 65 mm
- 2 x silnik DC TT 1:48 (z kabelkami o długości min. 10 cm)
- 1 x wtyk DC 2.1 mm x 5.5 mm
- 1 x gniazdo DC 2.1 mm x 5.5 mm
- 20 x nakrętka M3
- 4 x śrubka M3x30
- 6 x śrubka M3x8
- 14 x śrubka M3x6
- 3 x dystanser M3x20
- 3 x dystanser M3x20+6
- 4 x dystanser M3x6+6
- 3 x dystanser M3x10+6
- 1 x dystanser M3x10
Komponenty drukowane:
- 1 x płyta górna
- 1 x płyta dolna
- 2 x pionowe mocowanie silnika
- 1 x dystanser kółka N20
Okablowanie (w zależności od wersji Arduino):
Niektóre płytki Arduino mają możliwość wlutowania dodatkowych pinów, dzięki czemu nie ma potrzeby używania kabli męskich oraz można zastosować solidniejsze złącza męskie i kable żeńskie.
Jeśli jest możliwość wlutowania pinów:
- 6 x kabel żeńsko-żeński, min. 15 cm
- 5 x kabel męsko-męski, min. 10 cm
Jeśli nie ma możliwości wlutowania pinów:
- 5 x kabel męsko-męski, min. 10 cm
- 6 x kabel męsko-żeński, min. 15 cm
Wydruk Elementów
Elementy do wydrukowania
- 1 x płyta dolna
- Materiał: ASA
- Dysza: 0,4 mm
- Wysokość warstwy: 0,2 mm
- Wypełnienie: Gyroid 30%
- 1 x płyta górna
- Materiał: ASA
- Dysza: 0,4 mm
- Wysokość warstwy: 0,2 mm
- Wypełnienie: Gyroid 30%
- 2 x mocowanie silnika
- Materiał: PLA
- Dysza: 0,4 mm
- Wysokość warstwy: 0,2 mm
- Wypełnienie: Gyroid 30%
- 1 x dystanser kółka N20
- Materiał: ASA
- Dysza: 0,2 mm
- Wysokość warstwy: 0,2 mm
- Wypełnienie: Gyroid 30%
W załączonych plikach znajduje się numeracja połówek płyty górnej oraz dolnej. Podczas wydruku i montażu należy zwrócić uwagę na zgodność numerów, aby elementy zostały poprawnie spasowane.
Składanie Tylnego Kółka
Potrzebne elementy:
- kółko N20
- dystanser kółka N20 (drukowany)
- płyta dolna
Montaż:
- Z kółka należy odkręcić tylne śrubki, uważając, aby nie wypadły kuleczki (4 małe i 1 duża).
- Na wierzch nałożyć wydrukowany dystanser.
- Całość przykręcić do płyty dolnej, korzystając z otworów H2 i L2.
Uwaga: należy pilnować aby dystanser nie obrócił się podczas dokręcania.
Montaż Koszyka Na Akumulatory
Potrzebne elementy:
- koszyk na ogniwa 18650
- 2 x śruba M3x8
- 2 x nakrętka M3
- gniazdo DC 2.1 mm
- 3 x ogniwo 18650
Montaż:
- Przełożyć śruby przez gniazdo DC, a następnie przez otwory J4 i J13.
- Od drugiej strony przykręcić nakrętki.
- Na końcu podłączyć przewody do gniazda DC, zgodnie z oznaczeniami na gnieździe oraz kolorami przewodów.
- Włożyć ogniwa do koszyka, zwracając uwagę na polaryzację (strona z paskiem oznacza biegun dodatni +).
Montaż Silników
Potrzebne elementy:
- 2 x mocowanie silnika (drukowane)
- 2 x silnik DC TT 1:48
- 4 x śruba M3x8
- 4 x śruba M3x30
- 6 x nakrętka M3
Montaż:
- Wcisnąć nakrętki M3 z boku w obudowę mocowania silnika (opcjonalnie również do tylnego otworu).
- Przyłożyć silniki do mocowań, zwracając uwagę, aby wystająca „kropka” na obudowie silnika znajdowała się od strony wewnętrznej.
- Przykręcić silniki do mocowań śrubami M3x30.
- Całość przykręcić do płyty dolnej śrubami M3x8, korzystając z otworów B17, B23, R17 i R23 (opcjonalnie również z F21 i N21).
Przygotowanie Górnej Płyty
Potrzebne elementy:
- 4 x dystanser M3x6+6
- 3 x dystanser M3x10+6
- 7 x nakrętka M3
Montaż:
- W otwory B11, B26, O18 i O29 włożyć dystansery M3x6+6 (4 szt.).
- W otwory E4, N4 i N12 włożyć dystansery M3x10+6 (3 szt.).
- Od drugiej strony przykręcić nakrętki M3.
Montaż Górnej Płyty
Potrzebne elementy:
- 3 x dystanser M3x20
- 3 x dystanser M3x20+6
- 3 x nakrętka M3
- 6 x śruba M3x6
Montaż:
- Na gwint dystansera M3x20+6nakręcić nakrętkę M3, a następnie dystanser dystanser M3x20. Wykonać w ten sposób 3 komplety.
- Od spodu płyty dolnej przykręcić przygotowane dystansery śrubami M3x6, korzystając z otworów B1, R1 oraz J22.
- Nałożyć płytę górną i przykręcić ją śrubami M3x6 do dystanserów w otworach J9, B29 oraz R29.
Okablowanie
Oznaczenia kabli w projekcie:
- Czerwony -> +12V
- Niebieski -> GND
- Żółty -> +5V
Potrzebne elementy:
- 5 x kabel męsko-męski, 20 cm
- 6 x kabel żeńsko-żeński lub męsko-żeński, 20 cm
Montaż:
- Do wtyku DC 2.1 mm przykręcić kable, zgodnie z oznaczeniami.
- Skręcony wcześniej wtyk umieścić na ogniwach, a kable wyprowadzić do góry.
- Na górnej płycie, wzdłuż długości robota, ułożyć:
- 6 kabli żeńsko-żeńskich lub męsko-żeńskich (stronie żeńska od przodu robota)
- 3 kable męsko-męskie (linie +12V, +5V oraz masa)
- Skrzyżować kable od silników, prowadząc je między dłuższymi dystanserami w poprzek robota.
Montaż Arduino I L298N
Potrzebne elementy:
- 8 × śruba M3x6
- 1 × dystanser M3x10
- 1 × Arduino UNO
- 1 × L298N
Uwaga: nie dokręcać śrub od razu do końca. Ze względu na uproszczenie siatki odległości między otworami nie są dokładnie odpowiadające rozstawowi otworów. Dokręcać stopniowo, po trochę każdą śrubę.
Montaż:
- Do płytki L298N przykręcić dystanser M3x10 do otworu obok radiatora, ustawiając radiator z przodu.
- Na przygotowany wcześniej dystanser M3x6+6 przykręcić Arduino UNO.
- Przykręcić L298N do dłuższych dystanserów, również stopniowo dokręcając śruby.
- Podłączanie kabli do L298N:
- Pozostawić zworki w L298N.
- Do pinów IN1-IN4 podpiąć przygotowane kable, zostawiając skrajne na razie luźne.
- Do złącza GND podpiąć kabel masy oraz jeden z kabli męsko-męskich przeznaczonych na masę.
- Do złącza +12V podpiąć kabel z baterii oraz jeden z kabli męsko-męskich przeznaczonych na linię 12V.
- Do złącza +5V podpiąć kabel męsko-męski przeznaczony na linię 5V.
- Do złącza OUT A podpiąć jeden silnik, a do OUT B drugi silnik.
- Podłączanie kabli do Arduino UNO:
- Do złącza GND podpiąć masę z kabli męsko-męskich.
- Do złącza VIN podpiąć linię 12V, a do złącza 5V podpiąć linię 5V.
- Do złącza 6 podpiąć jeden skrajny kabel od L298N.
- Do złączy 7-10 podpiąć kolejne kable z L298N (IN1 - 10, IN2 - 9, IN3 - 8, IN4 - 7).
- Do złącza 11 podpiąć pozostały skrajny kabel od L298N.
Jeśli wszystko zostało wykonane poprawnie, po podłączeniu gniazda DC do baterii zarówno Arduino, jak i L298N powinny się uruchomić, a na obu płytkach powinny zaświecić się diody.
Przygotowanie Kodu
Definicja pinów L298N
Aby uprościć dalszą pracę nad kodem, warto na tym etapie zdefiniować piny. Umożliwi to późniejsze proste zmienianie ich w jednym miejscu, zamiast przeszukiwać cały kod. Do definicji pinów najczęściej używa się klauzury #define umieszczonej na górze programu, nad funkcją setup(). Po tej klauzurze podaje się nazwę pinu, a następnie jego wartość fizyczną. Po linijkach z #define nie stosuje się średników. Dla naszego projektu sekcja wygląda więc następująco:
Funkcja setup()
Funkcja setup() uruchamia się tylko raz po włączeniu Arduino. Tutaj ustawiamy wszystkie piny sterujące L298N jako wyjścia (OUTPUT), dzięki czemu Arduino może wysyłać sygnały do sterownika i kontrolować silniki. Sekcja ta korzystając z przygotowanych wcześniej definicji wygląda następująco:
Użyty w tej sekcji delay(10000); ma na celu poczekanie chwili przed dokonaniem jakiegokolwiek ruchu. Jest to czas na podpięcie baterii i odsunięcie się od robota.
Downloads
Jazda Prosto
Jak działa L298N
Sterownik L298N pozwala kontrolować kierunek i prędkość silników DC. Każdy silnik podłączony jest do dwóch pinów sterujących (INx) i opcjonalnie pinu PWM (ENA lub ENB).
- Piny INx służą do sterowania kierunkiem obrotu silnika.
- Piny ENA i ENB służą do sterowania prędkością silnika (o tym wrócimy w dalszej części).
Kierunek obrotu silnika zależy od tego, który pin ustawimy na HIGH, a który na LOW:
- Jeśli IN1 = HIGH i IN2 = LOW, lewy silnik obraca się do przodu.
- Jeśli IN1 = LOW i IN2 = HIGH, lewy silnik obraca się w przeciwnym kierunku.
Dla drugiego silnika działa to analogicznie:
- IN3 = HIGH i IN4 = LOW -> prawy silnik jedzie do przodu
- IN3 = LOW i IN4 = HIGH -> prawy silnik jedzie do tyłu
Jazda prosto
Aby robot poruszał się do przodu, musimy ustawić piny sterujące L298N w taki sposób, aby oba silniki obracały się w tym samym kierunku:
Co zrobić, jeśli robot się nie porusza poprawnie
- Robot obraca się w miejscu - oznacza to, że jeden z silników jest podłączony odwrotnie.
- Odkręć kabelki z L298N od jednego z silników.
- Zamień je miejscami i przykręć ponownie.
- Robot jedzie do tyłu zamiast do przodu - należy zamienić polaryzację obu silników:
- Odkręć kabelki z L298N od jednego silnika i zamień je miejscami.
- Zrób to samo z drugiego silnika.
Downloads
Skręcanie
Robot może skręcać na dwa główne sposoby:
- Przez ruch w przeciwnym kierunku jednego silnika – jeden silnik kręci się do przodu, a drugi do tyłu.
- Przez zatrzymanie jednego silnika – jeden silnik jedzie do przodu, a drugi stoi w miejscu lub obraca się wolniej.
Skręcanie przez ruch w przeciwnym kierunku
W tym przypadku robot obraca się bardzo ostro i może skręcać w miejscu:
Aby skręcić w prawo:
- Lewy silnik jedzie do przodu,
- Prawy silnik jedzie do tyłu.
Aby skręcić w lewo:
- Lewy silnik jedzie do tyłu,
- Prawy silnik jedzie do przodu.
Taki skręt jest szybki i ostry, robot praktycznie obraca się w miejscu.
Skręcanie przez zatrzymanie jednego silnika
Jeśli chcemy skręcić łagodniej, możemy zatrzymać (lub zwolnić) jeden silnik, a drugi puścić do przodu:
Skręt w prawo:
- Lewy silnik jedzie do przodu,
- Prawy silnik stoi (obie linie IN3 i IN4 ustawione na LOW).
Skręt w lewo:
- Prawy silnik jedzie do przodu,
- Lewy silnik stoi.
Takie skręty są wolniejsze i łagodniejsze, idealne do delikatnych manewrów lub na wąskich trasach.
Na tym etapie ustawiamy tylko kierunek i włączamy lub wyłączamy silniki (HIGH i LOW). Później, kiedy dodamy regulację PWM, będziemy mogli płynnie sterować prędkością każdego silnika. Dzięki temu skręty staną się bardziej kontrolowane i robot będzie mógł skręcać łagodnie przy różnych prędkościach.
Zmienna Prędkość Jazdy
Przypomnienie o PWM
PWM (ang. Pulse Width Modulation) to sposób sterowania prędkością silnika przez Arduino. Polega na szybkim włączaniu i wyłączaniu napięcia na pinie, co redukuje ilość dostarczonego prądu. W Arduino PWM ustawia się funkcją analogWrite(pin, wartość);.
Zakres wartości: od 0 do 255
- 0 - silnik zatrzymany
- 255 - silnik pracuje z maksymalną prędkością
- wartości pośrednie - silnik obraca się wolniej
Fizyka podczas ruchu
Tarcie to siła, która utrudnia ruch, gdy elementy stykają się ze sobą (na przykład części silnika lub koła robota i podłoże).
Bezwładność to opór ciała przed zmianą ruchu. Oznacza to, że stojący robot "nie chce" ruszyć, a jadący "nie chce" się zatrzymać. Im większa masa robota i kół, tym większa bezwładność i więcej energii potrzeba do startu i zatrzymania.
Silnik w robocie potrzebuje więcej energii na start niż podczas normalnej jazdy. Na początku musi pokonać tarcie i bezwładność, które utrudniają rozpoczęcie ruchu. Dlatego przy zbyt małej mocy silnik może nie ruszyć, mimo że jest zasilany.
Gdy silnik już się obraca, tarcie i wpływ bezwładności są mniejsze. Wtedy do podtrzymania ruchu wystarcza mniejsza ilość energii. Z tego powodu, jeśli popchniemy robota, silnik zacznie się kręcić i będzie jechał dalej nawet przy niewielkich obrotach.
Modyfikacja robota
- Z układu L298N należy wyciągnąć 2 zworki na pinach ENA i ENB (obok złączy IN1-IN4).
- W piny bliżej krawędzi należy podpiąć kabelki pozostawione wcześniej luźne.
Jak ustawić zmienną prędkość
Aby ustawić prędkość silników w naszym robocie, używamy pinów PWM podłączonych do L298N (ENA dla lewego silnika, ENB dla prawego). Możemy w ten sposób różnicować prędkość silników, np. do łagodnych skrętów. Wartości 0–255 można dobierać eksperymentalnie, aby robot poruszał się płynnie i nie ślizgał.
Przykład z zmniejszoną prędkością
Downloads
Skręcanie PWM
Zmienna prędkość skrętu
Aby robot skręcał łagodnie, możemy nie zatrzymywać silnika całkowicie, lecz ograniczyć jego prędkość. Wtedy jeden silnik jedzie szybciej, drugi wolniej, dzięki czemu robot skręca płynnie.
Skręt w prawo z ograniczoną prędkością
- Lewy silnik jedzie szybciej (większa wartość PWM),
- Prawy silnik jedzie wolniej (mniejsza wartość PWM).
Skręt w lewo z ograniczoną prędkością
- Prawy silnik jedzie szybciej,
- Lewy silnik jedzie wolniej.