Czołg (Arduino + lm298 + Bluetooth)

NIE MA TO JAK CZOŁG. Udało mi się zdobyć taką skorupę:

Zestaw zawiera podwozie i 2 silniki. Podwozie zawieszone jest na wózkach z „amortyzatorami” sprężynowymi. W odróżnieniu do modeli ze sztywnym zawieszeniem, powinno to znacznie poprawić właściwości jezdne – zwłaszcza przy pokonywaniu przeszkód. Silniki napędzają koła przez przekładnię. Wanienka jest całkiem spora – mierzy ponad 30 cm.

Budujemy?!

Zasilanie i sterowanie tym modelem można rozwiązać na kilka sposobów. Ja zdecydowałem się na:

  • Akumulator Redox LiPo 2S 500mA 20C – jest niewielki i swobodnie mieści się w zatoce wanny, daje dużo prądu – ale ma ograniczoną pojemność i za duże napięcie – w pełni naładowany ponad 8v a załączone silniki mają znamionowo 5v, więc:
  • Konwerter UBEC na 5v – zamieni mi napięcie z akumulatora na 5v wymagane przez silniki,
  • Arduino UNO – chociaż płytka jest stosunkowo duża, swobodnie mieści się w środku wanny,
  • Moduł sterowania silnikami oparty na LM298N – wystarczający do wysterowania silników,
  • Moduł Bluetooth HC-06 do zdalnego sterowania,
  • Oprogramowanie napiszę w Javie (potrzebne darmowe Android Studio) – czołg będzie sterowany za pomocą aplikacji zainstalowanej na telefonie z Androidem.

Do roboty:)

Więcej o budowie czołgu?

Seria tekstów o budowie czołgu składa się z:

Zasilanie

Do zasilania czołgu wybrałem ogniwo LiPo 2S firmy Redox. Podstawowe dane:

  • Nominalnie napięcie 7.4v (dwa ogniwa połączone szeregowo),
  • Pojemność 500mAh
  • Idealnie pasuje do zatoki pod czołgiem:)

Pamiętajcie: nie używajcie podejrzanych LiPo (np. spuchniętych), chrońcie je przed uszkodzeniami mechanicznymi, nie zwierajcie, nie rozładowujcie poniżej 3v/pakiet, ładujcie porządnymi i firmowymi ładowarkami – a posłużą Wam długo i nikogo nie skrzywdzą.

Pakiet 500mAh z pewnością nie wystarczy na wiele zabawy – za to idealnie mieści się w zatoce pod spodem czołgu (sądzę, że wejdzie tam nawet 900mAh, ale nie więcej).

Teraz wystarczyło rozwiercić otwór, żeby przeciągnąć kable baterii do środka wanny:

Samo podwozie wyposażono w wyłącznik główny – skorzystałem z niego:

Ok, teraz miałem 6v-8.4v, które musiałem obniżyć do 5v – napięcia pracy silników. Tym razem napatoczył mi się modelarski BEC. BEC to nic innego jak stabilizator napięcia popularnie używany w modelarstwie R/C. Mój BEC potrafi wykrzesać z siebie do 3A – mocy powinno więc wystarczyć:

Sterowanie silnikami – moduł l298

Do sterowania silnikami użyłem modułu z układem L298N. Moduł ten może sterować maksymalnie 2-ma silnikami DC (lub jednym krokowym). Podłączenie:

  • 12v: napięcie zasilające (zasilanie silników),
  • 5v: wyjście – napięcie 5v (np. do zasilenia Arduino) – tu nie używam,
  • GND: masa
  • EN1 – EN2: sterowanie szybkością obrotową silników (też ich zatrzymanie) – niestety u mnie działało to na tyle słabo, że po prostu spiąłem je dostarczonymi jumperami na stałe do  stanu wysokiego – nie kontroluję prędkości, silniki zawsze dają z siebie ile mogą,
  • IN1/IN2: sterowanie pierwszym silnikiem (0/0 to stop, 1/0 – do przodu, 0/1 – do tyłu)
  • IN3/IN4: sterowanie drugim silnikiem
  • OUT1/OUT2 – podłączenie 1 silnika
  • OUT3/OUT4 – podłączenie 2 silnika

Podstawowe działanie

Sterowanie sinikami (bo 'zdrutowaniu EN1 i EN2) ogranicza się do wystawiania sygnału LOW-HIGH na piny Arduino podłączone do mostka l298. W zależności od kombinacji – silniki będą obracać się w lewo lub prawo – lub zatrzymają się. Kod znajdziecie w funkcjach head i flank – na końcu tego tekstu.

Protokół sterowania

Powyższe funkcje powinny wystarczyć do sterowania silnikami. Teraz musiałem wymyślić sobie jakiś protokół, który wykorzystam przy transmisji przez BT. Protokół jest w pełni tekstowy, opiera się na kilku polach:

Tak więc:

  • ’-2BA’: obydwie gąsienice naprzód
  • ’-2BS’: obydwie gąsienice stop
  • ’-2B5: obie gąsienice 50% szybkości (nie działa, gdy EN1 i EN2 są zwarte jumperami).
  • ’-2LB’: lewa gąsienica do tyłu.

Dane z portu szeregowego parsowane są w metodie  parseInput – cały kod zamieszczam na końcu tego tekstu.

Bluetooth

Dodajcie bibliotekę software serial. Podłączyłem TX modułu BT do portu D2 (RX modułu bt) i D3 (TX modułu BT):

Kod do odbierania danych będzie w loop():

Testowanie

Powyższy kod możecie przetestować np. z komputera z Windows. Szczegółowe instrukcje znajdziecie w tekście: Bluetooth HC-06 i Arduino, co sprowadza się do:

  • Sparowania HC-06 z Windows,
  • Zestawienia portu odbierającego/ nadającego do HC-06,
  • Użycia putty do wysyłania instrukcji:

Pamiętajcie, żeby w Putty ustawić:

…co pozwoli Wam na wysyłanie znaków do Arduino.

Sterowanie podwoziem

Tutaj planuję aplikację na tablecie z Android. Ale to już w kolejnej części tego tekstu:)

Galeria

Dodatek – plan pinów

W wannie pojawi się kilka dodatkowych modułów, warto więc od razu zaplanować rozdział pinów.

Pin Funkcja Funkcja Pin
D13
Przekaźnik D12
Trig D11
EN2 D10
EN1 D9
Echo D8
Motor2 D7
Motor2 D6
A0 / D14 Motor1 D5
A1 / D15 Motor1 D4
A2 / D16 Miernik napięcia BT/RX D3
A3 / D17 Miernik prądu BT/TX D2
A4 (SDA) / D18 Magnetomer (i2c) D1 (TX)
A5 (SCL) / D19 Magnetomer (i2c) D0 (RX)

Pełny kod

UWAGA: kod odzwierciedla aktualny stan projektu, może więc zawierać elementy nad którymi właśnie pracuję – a opiszę w kolejnych częściach. 

Źródła

  • https://playground.arduino.cc/Main/AdafruitMotorShield
  • https://tronixlabs.com.au/news/tutorial-l298n-dual-motor-controller-module-2a-and-arduino/