Dwukołowy robot na Raspberry Pi Zero

Do niektórych projektów potrzeba czasu. W dzisiejszym odcinku przepis na dwukołowe jeździdło na Raspberry Pi Zero. Na wstępie zaznaczam – na opaskach zaciskowych i taśmie klejącej nie jeden prototyp zbudowano!

Wnętrzności

Z uwagi na prostotę wstępnego debugowania, przystępność materiałów edukacyjnych oraz aktualną dostępność, mózgiem platformy zostało Raspberry Pi Zero posiadające jedno rdzeniowy procesor o taktowaniu 1GHz i 512MB pamięci RAM. Początkowo dostępność systemu UNIX-owego wydawała się dużą zaletą, niestety z biegiem czasu pojawiła się potrzeba by w przyszłości zastąpić ten element innym mikrokontrolerem.

Pierwotnie w modelu znajdował się dwukanałowy mostek H TB6612FNG o maksymalnym prądzie na kanał 1A. Niestety w trakcie testów został on uszkodzony przez nieprawidłową polaryzację zasilania układu logicznego i w efekcie został wymieniony na moduł od DFRobot o oznaczeniu HR8833, który oprócz posiadania większego prądu na kanał, umożliwia sterowanie prędkością korzystając z sygnału PWM podawanego na to samo wejście co wartości logiczne do określania kierunku obrotów silnika.

Obecnie transmisja danych opiera się na sieci WiFi i połączeniu SSH. Testy wykazały, że uruchomiony na Raspberry hot-spot 2.4GHz zużywał zbyt dużo zasobów mikrokontrolera i w związku z tym tymczasowo robot jest klientem WiFI (wymaga zewnętrznego access-point’a do komunikacji).

Wybrane zostały dwa silniki prądu stałego Pololu 15.5Dx30L z przekładnią 35:1, zasilane napięciem 6V, posiadające prędkość obrotową 460 RPM oraz moment obrotowy wynoszący 1kg/cm. Dodatkowym ich atutem jest bardzo niski, średni jak i maksymalny pobór prądu – odpowiednio 60mA i 800mA. Trudności wydruku 3D z gumy wymusiły zastosowanie gotowych kół tej samej firmy o średnicy 8cm.

Bazując na zasilaniu silników, użyty został pakiet Li-pol zawierający dwie cele (2S), zakres napięć od 6,4V do 8,4V i pojemność 1000mAh. Do redukcji i jednocześnie stabilizacji napięcia do 5V w celu zasilenia części sterującej wykorzystany został moduł CC3D BEC ZMR (RCX03-763).

Obudowa

Od samego początku zakładany był wydruk 3D obudowy zaprojektowanej dokładnie pod ten projekt, wersja ostateczna składa się z tuby zakończonej dnem z mocowaniami dla silnika, wkładki stanowiącej podstawę dla podzespołów i ograniczającej ruchy baterii oraz zaślepkę z mocowaniem do drugiego silnika.  Finalnie wymiary całości po złożeniu wynoszą 146cm długości i 6,4cm średnicy. Wydruk został zrealizowany w materiale ABS, który cechuje się dobrą odpornością na czynniki zewnętrzne oraz umożliwia bardzo dobrą obróbkę mechaniczną. Łączny czas wydruku wszystkich elementów wyniósł około 23 godziny.

Pliki .STL można pobrać w serwisie Thingiverse: >klik<

Sterowanie i pinout

Sterowanie zrealizowane zostało w języku Python. Obecnie nie jest ono wystarczająco intuicyjne i trwają prace nad wykorzystaniem gamepada do tego celu.

Kod programu można pobrać bezpośrednio tutaj: >klik<

Podobnie jak w przypadku poprzedniego projektu odpalenie całej maszyny polega na połączeniu się z Raspberry Pi, a następnie przeniesienie się do folderu w którym jest program (w tym wypadku controller.py) i wywołanie polecenia ‚sudo python controller.py’.

Podłączenie pinów (BCM – oznaczenie na płytkach prototypowych, wPI odpowiada numerowi GPIO w wiringPi):

BCM |wPI|

IB2 6 | 22
IB1 5 | 21

IA2 24 | 5
IA1 25 | 6

AIN1 17 | 0 |
AIN2 18 | 1 |

BIN1 23 | 4 |
BIN2 22 | 3 |

Efekt

Projekt wyszedł całkiem zadowalająco. W przyszłości zakładam przeniesienie się z RPi na prawdopodobnie nodeMCU, dołożenie transmisji wideo i ogarnięcie całej makaroniady na płytkę PCB. Jeździ zdecydowanie szybciej niż to zakładałem, przy czym w celu stabilizacji w początkowej jak i końcowej fazie ruchu zmuszony byłem tymczasowo założyć wspominane na samym początku opaski. Jestem na etapie prób z żyroskopem i stabilizacją na poziomie sterownika.