Zdalnie sterowany samochodzik

Zdalnie sterowany samochodzik

Witam!

Dzisiaj zaprezentuję mój najnowszy projekt – zdalnie sterowany samochodzik oparty na mikrokontrolerze Atmega 328p i module komunikacyjnym nRF24L01+ PA LNA.

Generalnie założenia projektowe są takie :

  • Zasięg 100 metrów. 
  • Dobry czas pracy na akumulatorze.
  • Przesyłanie danych telemetrycznych do pilota : dane o stanie akumulatora i temperaturze powietrza ( czemu nie (: ) 
  • Program napisany w Arduino IDE. 
  • Napęd na 4 koła z możliwością kontrolowania każdego koła z osobna. 
  • Zabezpieczenie akumulatora przed nadmiernym rozładowaniem. 
  • Możliwość odzyskania wszystkich części składowych po skończonej eksploatacji (brak lutowanych elementów). 

Założenia raczej proste. W teorii bo w praktyce okazały się dość skomplikowane w realizacji. 

Generalnie projekt ten jest umieszczony w dziale “elektronika” bo mechaniczne aspekty całości zostały przez mnie spartaczone i nie miałem sumienia umieścić go w dziale “Druk 3D” :P

To tyle ze wstępu. 

Część mechaniczna i konstrukcyjna 

Pod względem mechanicznym całość jest bardzo prosta. 

Układ jezdny składa się z 4 zestawów : Silnik DC 5V z przekładnią kątową + koło. (Konkretnie chodzi o ten zestaw ). 

Silniki te  są przymocowane do ramy wydrukowanej w 3D. Na ramie znajdują się płytki prototypowe z elektroniką a po bokach przymocowane są 2 zestawy akumulatorów Li-ion. 

Oto montaż tej konstrukcji krok po kroku. 

Zacząłem od przylutowania do styków silnika dwóch przewodów oraz zabezpieczeniem połączenia klejem na gorąco (styki wyglądały tak słabo, że prawdopodobnie bez tego by się urwały ). 

\

Następnym krokiem było zaprojektowanie i wydrukowanie ramy samochodzika.

Całość została wydrukowana z PLA, przy wypełnieniu 50 % i wysokości warstwy 0.3 mm. Drukowanie zajęło koło 2 godziny. 

Cała rama ma długość 161mm i szerokość 143 mm. Wysokość wraz z uchwytami silników to 17mm. 

Model STL jest dostępny do pobrania na końcu artykułu. 

Teraz przyszła pora na montaż silników. 

Najpierw przełożyłem kable silnika przez otwór w uchwycie. 

A następnie umieściłem silnik w uchwycie i przykleiłem go tam z użyciem kleju na gorąco. 

Na końcu owinąłem uchwyt taśmą izolacyjną żeby trochę lepiej to wyglądało.

Procedurę powtórzyłem z pozostałymi 3 silnikami i uzyskałem coś takiego :

No i to tyle jeśli chodzi o mechanikę i konstrukcję. 

Teraz pora na elektronikę. 

Elektronika sterująca

Oto schemat całej elektroniki sterującej :

Można w nim wyróżnić 3 grupy elementów : 

  • Zasilanie
  • Sterowanie silnikami 
  • Układ kontrolny wraz z modułem komunikacyjnym 

Zasilanie

Cały samochodzik jest zasilany z 4 cel litowo-jonowych. Są to standardowe cele 18650 o pojemności 2500 mAh każda, połączone w konfiguracji 2S2. 

Oznacza to, że równolegle połączone są dwa zestawy cel. Każdy zestaw składa się z kolejnych dwóch cel połączonych szeregowo. 

Daje to sumaryczne napięcie nominalne akumulatora równe 7,2V i pojemność równą 5000 mAh. 

Środkowe cele są również połączone szeregowo tak aby wyrównywać napięcie. 

Od akumulatora odchodzą dwa punkty pomiarowe. 

Jeden punkt służy do pomiaru napięcia na celi 1, drugi punkt mierzy napięcie na wyjściu z akumulatora. Dzięki temu mikrokontroler wie dokładnie jaki jest stan akumulatora. 

Oba punkty pomiarowe są podłączone do wejść analogowych mikrokontrolera przez dzielniki napięcia. 

Wyjście akumulatora jest podłączone do układu zasilającego przez bezpiecznik polimerowy 1.5A. Ma on zapobiec uszkodzeniu układu po zwarciu o które w tym spaghetti nie trudno. 

Napięcie z akumulatora trafia do przetwornicy step-down D24V25F5 (tej)  która obniża napięcie do 5V. 

Jej maksymalne natężenie wyjściowe to 2.5A ponieważ musi ona uciągnąć zarówno elektronikę sterującą jak i silniki napędowe. 

Przetwornica ta zasila główną szynę zasilającą samochodzika. 

Jeśli chodzi o kontrolę zasilania to do pinu EN ( włączającego przetwornicę) jest podłączony prosty układ kontrolujący jej pracę. 

Domyślnie pin ten jest podciągnięty do masy (przez rezystor 20K) powodując wyłączenie zasilania. 

Aby włączyć zasilanie należy nacisnąć przycisk który na moment zewrze ten pin do dodatniego wyjścia akumulatora. 

Spowoduje to włączenie zasilania i uruchomienie komputera. 

Komputer sterujący natychmiast  poda na ten pin (przez diodę 1N4148) stan wysoki co zapobiegnie wyłączeniu całości po zwolnieniu przycisku. Kiedy komputer zdecyduje o wyłączeniu zasilania  (na przykład kiedy napięcie na którejś celi spadnie poniżej 3V) to wtedy poda na ten pin stan niski. Spowoduje to wyłączenie całości. Zużycie energii kiedy całość jest wyłączona jest pomijalne. 

Aby całość nie wyłączyła się w trakcie resetu, do pinu EN dodany jest kondensator 47uF którego celem jest dodanie opóźnienia pomiędzy podaniem stanu niskiego na pin sterujący i wyłączeniem całości. Dioda pomiędzy pinem sterującym mikrokontrolera i pinem EN zapobiega natychmiastowemu rozładowaniu kondensatora przez pin sterujący. 

Kolejnym elementem zasilania są stabilizatory 3.3V (LD1117V33) 

Zarówno moduł komunikacyjny jak i mikrokontroler są zasilane napięciem 3.3V. 

Moduł komunikacyjny ma osobny stabilizator ponieważ powoduje on sporo zakłóceń zasilania co mogłoby się odbić na stabilności pracy mikrokontrolera. 

Wyjścia stabilizatorów są podłączone do szyn 3.3V które zasilają układy sterujące. 

Wejścia stabilizatorów są podłączone do szyny 5V. 

Sterowanie silnikami 

Sterowanie silnikami odbywa się za pomocą 4 tranzystorów MOSFET BUZ11. 

Każdy tranzystor steruje jednym silnikiem. 

Niestety ten model posiada dość wysokie napięcie progowe ( ok 3V) więc pomiędzy bramką tranzystora a pinem generującym sygnał sterujący ( PWM) zastosowałem konwerter poziomów logicznych. Zwiększa on napięcie sterujące z 3.3V do napięcia wyjściowego baterii (min  6V). 

Zmniejsza to straty energii. 

Dodatni biegun silnika jest podłączony do głównej szyny 5V natomiast biegun ujemny do drenu tranzystora. Źródło tranzystora jest podłączone do masy układu. Kiedy na bramkę jest podawane napięcie, wtedy MOSFET zaczyna przewodzić prąd i silnik się uruchamia. Regulując wypełnienie sygnału PWM można regulować prędkość obrotu. 

Równolegle z każdym silnikiem podłączony jest kondensator 100 nF (zmniejsza zakłócenia powodowane przez silniki) i dioda 1N4148 która chroni przed powstawaniem szpilek napięcia. 

Układ kontrolny wraz z modułem komunikacyjnym 

Cały samochodzik jest kontrolowany przez mikrokontroler Atmega328p taktowany za pomocą zewnętrznego oscylatora 8 MHz. 

Generalnie cały osprzęt mikrokontrolera jest standardowy. 

Do mikrokontrolera podłączony jest również :

  • Moduł komunikacyjny nRF24L01+ PA LNA
  • Sterownik silników 
  • Kontrola zasilania (Punkty pomiaru baterii i pin sterujący pracą przetwornicy)
  • Czujnik temperatury DS18B20
  • Dioda sygnalizacji załadowania programu 

Moduł komunikacyjny jest podłączony za pomocą magistrali SPI oraz dwóch dodatkowych pinów sterujących (CE i CNS). 

Każdy pin sterujący silnikiem jest podłączony do sprzętowego pinu PWM dzięki czemu łatwo można wygenerować sygnał sterujący silnikiem. 

Punkty pomiarowe baterii są podłączone przez dzielniki napięcia do pinów A0 i A1. 

Czujnik temperatury korzysta z magistrali One Wire i jest podłączony do zwykłego pinu cyfrowego. 

Dioda sygnalizacyjna również jest podłączona do zwykłego pinu cyfrowego. 

Generalnie to wszystko jeśli chodzi o komputer sterujący. 

Elektronika Pilota

Ponieważ skończyły mi się płytki prototypowe (wersja z atmegą zajęłaby dwie płytki) więc poszedłem trochę na łatwiznę i użyłem arduino uno. 

Choć ten schemat powinien zadziałać także dla innych płytek arduino. 

Generalnie całość jest bardzo prosta.

Jest to po prostu wyświetlacz LCD 2×16 znaków, moduł komunikacyjny (ten sam co w samochodziku) i 4 przyciski podłączone do arduino. 

Warto jednak zwrócić uwagę na zasilanie modułu komunikacyjnego. Jest on zasilany napięciem 3.3V (na pinach sterujących tolerowane jest napięcie 5V ale musi on być zasilany z 3.3V) filtrowanym aż 3 kondensatorami. 47uF, 1000 uF i 2200 uF. Wartości dobrałem eksperymentalnie, mierząc zakłócenia za pomocą oscyloskopu.

Bez nich spadki napięcia podczas przesyłania danych wynoszą nawet 300 mV (!). Po dodaniu kondensatorów wynoszą one już ok 90mV. 

Stabilność zasilania modułu komunikacyjnego jest krytyczna dla uzyskania dobrego zasięgu.

Przygotowałem jednak również wersję na mikrokontrolerze Atmega 328p :

Piny do których podłączone są peryferia są te same co w przypadku Arduino ale tym razem zastępuje je mikrokontroler wraz z niezbędnym osprzętem. 

Ponownie jest to Atmega 328p jednak tym razem zasilana napięciem 5V i taktowana zewnętrznym oscylatorem 16 MHz. 

Zasilanie stanowią dwa regulatory napięcie. LD1117V33 dla modułu komunikacyjnego i L7805CV dla mikrokontrolera. 

Warto zauważyć, że w tej wersji brakuje kondensatora 2200 uF przy zasilaniu modułu komunikacyjnego. Usunąłem go bo LD1117V33 ma wyższą wydolność prądową niż regulator wbudowany w arduino. 

Oprogramowanie 

Całe oprogramowanie samochodzika zostało napisane w Arduino IDE.

Jeśli chodzi o zewnętrzne biblioteki wymagane do skompilowania kodu to użyłem :

A oto kod źródłowy do samochodzika :

I kod źródłowy pilota :

Oba programy są bogate w komentarze więc nie powinno być problemów z ich zrozumieniem. 

W razie pytań proszę o komentarz. 

Oba programy zostały wgrane przy użyciu programatora USBASP i arduino IDE. 

W przypadku programu pilota należy wybrać płytkę Arduino / Genuino Uno. 

Natomiast w przypadku samochodzika Arduino Mini / pro mini i procesor Atmega328 3.3V 8 MHz. 

Kilka zdjęć z działania 

Mała galeria z tego jak to wszystko działa. 

Ogólnie efekt jest taki :

Niezłe spaghetti (: 

Zdjęcia z jazdy próbnej :

Podczas jazdy samochodzik sprawuje się całkiem nieźle choć porusza się dość powoli. 

Zasięg okazał się zaskakująco dobry. 

Udało się dojechać do końca ulicy widocznej na zdjęciu (ok 200 metrów)  zanim zasięg zaczął się rwać.  

Czas pracy też jest całkiem niezły. Po godzinie jazdy akumulator nadal był naładowany w 60%. 

Choć co prawda była to dość wolna jazda bo samochodzik nie porusza się szybko. 

Jeszcze kilka zdjęć : 

Sterowanie odbywa się za pomocą 4 przycisków. 

Górny daje całą naprzód, dolny daje pół na przód. 

Po prawej znajdują się przyciski do sterowania kierunkiem. 

Prawy przycisk powoduje ostry skręt w prawo. 

Lewy ostry skręt w lewo. 

Jednoczesne naciśnięcie przycisku “cała na przód” i przycisku skrętu powoduje łagodny skręt połączony z jazdą do przodu. 

Po włączeniu pilota najpierw pokarze się intro a potem uruchomi się “menu”.

Nawigując przyciskiem górnym i dolnym można wybrać daną opcję. Np :

Pełna lista opcji to :

  • Jazda  – Wejście w tryb jazdy 
  • Bateria – Wyświetlenie danych o stanie akumulatra
  • Temperatura – Wyświetlenie danych o temperaturze
  • Wylonczenie – Wyłączenie samochodzika
  • RF Test – Test komunikacji

Wybraną opcję należy zatwierdzić wciskając przycisk skrętu w lewo. 

Generalnie w opcji Jazdy po prostu sterujemy samochodzikiem za pomocą przycisków. Wciśnięcie przycisku skrętu w lewo i skrętu w prawo jednocześnie powoduje powrót do menu. 

W trybie wyświetlania danych o baterii pokazuje się nam taki ekran:

Są na nim dane o napięciu poszczególnych cel oraz o napięciu zbiorczym akumulatora. 

Dane są odświeżane co ok 1 sekundę. 

W trybie pomiaru temperatury, na ekranie wyświetla się temperatura, odświeżana co sekundę. 

Aby wyjść z tych trybów należy nacisnąć i przytrzymać przycisk skrętu w prawo.

W przypadku wyłączenia, po wybraniu tego trybu, samochodzik się wyłączy a na ekranie pokarze się stosowny komunikat. 

Opcja RF test, przetestuje komunikację i wyświetli na ekranie “RF OK ” lub “RF ERR” zależnie od tego czy komunikacja działa czy nie. 

Kilka słów na koniec

Cóż, to by było na tyle jeśli chodzi o ten projekt. 

Osobiście sądzę, że część strukturalna jest nieco spartaczona choć nic na razie się nie rozwaliło :). 

W załączniku znajdują się oba programy w plikach .ino, schematy w plikach SVG ( można powiększyć) oraz pliki z edytora EasyEDA i plik STL do ramy.

Komentarze pozytywne jak i negatywne jak zwykle mile widziane (: 

Pliki załączone do artykułu:

Ocena: 4.6/5 (głosów: 10)

Podobne posty

14 komentarzy do “Zdalnie sterowany samochodzik

  • Projekcik świetny, zasięg i wytrzymałość aku też , wygląd dopracujesz. Nie umywa się do chińczyków sprzedawanych w sklepach. które po 15 minutach trzeba ładować , zasięg w nich też do dupy. :)

    Odpowiedz
  • Fakt projekt świetny, i faktycznie aby wykonać coś takiego potrzeba dużo cierpliwości i czasu, tylko dlaczego mając tyle czasu nie można było wykonać jakieś obudowy, wszystko połączone ze sobą na “gluta” i taśmę izolacyjną – oczekiwałem lepszego efektu finalnego.

    Odpowiedz
    • Generalnie cały projekt ma działać tydzień a potem części zostaną wykorzystane w kolejnej konstrukcji.
      Nie opłacało się wytrawiać płytek.

      A co do tej włożonej pracy to najwięcej wysiłku kosztuje opracowanie elektroniki i programu.
      Montaż zajmuje jakieś 2-3 godziny.

      A że mam to już opracowane to w razie czego mogę odbudować projekt w mniej niż jeden dzień.

      Odpowiedz
    • Niezłe :)

      Mam też pomysł na wersję V2.
      Była by ona oparta na Raspberry pi a dzięki kamerze mogła by przesyłać panoramy do pilota. Zupełnie jak łazik marsjański.
      No ale zanim go zrealizuję to czeka mnie jeszcze sporo nauki programowania w pythonie (:

      Odpowiedz
  • Witam. Ciekawy projekt. Mam prośbę. Czy możesz wrzucić schemat połączeń samych ogniw18650 do arduino (chodzi mi o to sprawdzanie napiecie) ? Chciałbym tą część sprawdzania poziomu naładowania baterii wykorzystać u siebie

    Odpowiedz
    • Generalnie to zależy od tego ile cel i w jakiej konfiguracji ma twój układ.

      Ogólna koncepcja jest prosta :
      Do każdej celi jest podłączony dzielnik napięcia (wartości dobrane tak żeby nie przekroczyć VCC mikrokontrolera).
      Wyjście z dzielnika jest natomiast podłączone bezpośrednio do pinu analogowego mikrokontrolera.
      No i to jest cały schemat. Reszta to już program.

      Odpowiedz

Odpowiedz

anuluj

Masz uwagi?