Spisu treści:

UCL Embedded - B0B the Linefollower: 9 kroków
UCL Embedded - B0B the Linefollower: 9 kroków

Wideo: UCL Embedded - B0B the Linefollower: 9 kroków

Wideo: UCL Embedded - B0B the Linefollower: 9 kroków
Wideo: Human vs Robot | Artificial Intelligence 2024, Lipiec
Anonim
UCL Embedded - B0B Linefollower
UCL Embedded - B0B Linefollower

To jest B0B.*

B0B to ogólny samochód sterowany radiowo, tymczasowo służący jako podstawa robota podążającego za linią.

Jak wiele robotów śledzących linię przed nim, zrobi wszystko, co w jego mocy, aby pozostać na linii spowodowanej przejściem między podłogą a kontrastującym materiałem, w naszym przypadku taśmą klejącą.

W przeciwieństwie do wielu innych robotów śledzących linię, B0B również zbiera dane i wysyła je przez Wi-Fi.

Całkowicie przesada jak na projekt hobbystyczny, obejmuje wiele tematów, które mogą Cię zainteresować. Ten przewodnik opisuje jego narodziny, funkcje i sposób, w jaki możesz sprawić, by był taki jak on.

Obejmuje to również złość na różne urządzenia elektroniczne, które nie działają tak, jak byśmy tego chcieli, oraz kroki, które podjęliśmy, aby przezwyciężyć te trudności (patrzę na ciebie ESP 8266-01).

Istnieją 2 kody, aby projekt działał. Pierwszy kod jest dla modułu ESP8266, którego używamy Arduino jako programista, a drugi kod będzie działał na Arduino.

Krok 1: Komponenty

Do tego projektu będziesz potrzebować:

Sprzęt komputerowy:

• 1x sterownik radiowy samochodu (musi mieć ESC i serwo kierownicy).

Używaliśmy głównie standardowego Traxxas 1/16 E-Revo VXL, głównie dlatego, że to właśnie mieliśmy i byliśmy całkiem pewni, że będziemy w stanie kontrolować go za pomocą Arduino. Również dlatego, że w końcu będzie zawierał znaczną ilość dodatkowego sprzętu, byliśmy pewni, że nie będzie to problemem w przypadku E-Revo 1/16.

Jednak większość samochodów sterowanych radiem (które można łatwo rozebrać) prawdopodobnie mogłaby zostać użyta zamiast tego, a proces będzie bardzo podobny.

• Tona taśmy klejącej.

Kolor powinien jak najbardziej kontrastować z podłogą. W naszym środowisku testowym zastosowaliśmy białą taśmę na ciemnej podłodze.

• 1x Arduino Mega 2560.

Mniejsze Arduino prawdopodobnie też są w porządku, ale będziesz naciskany na piny.

• 1x duża deska do chleba.

Jeden wystarczy, ale mieliśmy również mniejszy, aby oddzielić inne linie napięcia zasilającego, aby zmniejszyć ryzyko błędu użytkownika.

• 1x analogowy czujnik podczerwieni TCRT5000 (używany do unikania kolizji).

Dokładna marka/model nie ma znaczenia, jeśli jest kompatybilny z Arduino i mierzy odległość. Szukaj słów kluczowych, takich jak „Odległość”, „czujnik przeszkód”. Technicznie czujnik cyfrowy działałby równie dobrze przy niewielkich zmianach kodu, ale używamy czujnika analogowego.

• 1x lub 2x Gravity: Analogowy czujnik skali szarości v2

Jednym z nich jest konieczność dla wyznawcy linii. Dokładny model nie ma znaczenia, o ile patrzy na intensywność odbitego światła i wysyła sygnał analogowy. Drugi do wykrywania „pokoju” nie działał tak dobrze, jak oczekiwano i można go pominąć lub można znaleźć alternatywę, taką jak czujnik koloru RGB, prawdopodobnie dla lepszego efektu. Musimy to jeszcze przetestować.

• 1 x ESP 8266-01.

Dostępnych jest wiele wersji ESP 8266. Mamy tylko doświadczenie z 8266-01 i nie możemy zagwarantować, że kod ESP będzie działał z inną wersją.

• 1 x osłona Wi-Fi ESP8266-01.

Technicznie opcjonalne, ale jeśli tego nie użyjesz, wszystko, co dotyczy modułu Wi-Fi, stanie się znacznie bardziej skomplikowane. Przewodnik zakłada jednak, że to masz (jeśli nie, znajdź instrukcje online dotyczące prawidłowego podłączenia ESP-01 do Arduino), ponieważ nieprawidłowe wykonanie tego może i prawdopodobnie spowoduje uszkodzenie modułu.

• Baterie do samego pojazdu i baterie do zasilania dodatkowej elektroniki.

Do zasilania wszystkiego użyliśmy równolegle pary akumulatorów Lipo o pojemności 2,2 AH i 7,4 V. Powinieneś być w stanie użyć dowolnych baterii, których normalnie używasz w wybranym przez Ciebie pojeździe. Jeśli masz powyżej 5 V, ale poniżej 20 V, pojemność jest ważniejsza niż napięcie nominalne.

• Dużo kabli rozruchowych.

Zrezygnowałem z liczenia ich dokładnej liczby. Jeśli uważasz, że masz dość, prawdopodobnie nie masz.

• Na koniec, aby podłączyć wszystko, musisz zamontować Arduino, czujniki, płytki stykowe i moduł Wi-Fi w wybranym przez Ciebie pojeździe. Twój wynik będzie się różnić w zależności od tego, czego używasz jako podstawy i jakie materiały są dostępne.

Wykorzystaliśmy:

• Opaski na suwak.

• Trochę super kleju.

• Mieliśmy małe kawałki ścinki papieru/tuby z żywicy o odpowiedniej średnicy.

• Stara płyta tylna Masonite z ramy obrazu, przycięta na wymiar.

• Trochę więcej taśmy klejącej.

• Wszelkie narzędzia potrzebne do pracy w wybranym samochodzie sterowanym radiowo.

Używaliśmy głównie małego zestawu śrubokrętów z wieloma bitami, ale od czasu do czasu musieliśmy wyciągnąć standardowy zestaw narzędzi, który był dołączony do samochodu.

Oprogramowanie:

• Węzeł czerwony

Ważna część zbierania danych.

• Serwer MQTT.

Pośrednik między naszym pojazdem a Node-red. Początkowo do testów używaliśmy test.mosquitto.org

Później użyliśmy:

• CloudMQTT.com

To było o wiele bardziej niezawodne, co więcej niż zrekompensowało nieco bardziej skomplikowaną konfigurację.

• WampSerwer.

Ostatnia część zbierania danych. W szczególności będziemy używać jego bazy danych SQL do przechowywania zebranych danych.

Krok 2: Schemat elektryczny

Schemat elektryczny
Schemat elektryczny

Krok 3: Konstrukcja fizyczna

Konstrukcja fizyczna
Konstrukcja fizyczna
Konstrukcja fizyczna
Konstrukcja fizyczna
Konstrukcja fizyczna
Konstrukcja fizyczna

Nasze rozwiązanie charakteryzuje się prostym podejściem do fizycznego montażu.

Oryginalny odbiornik i jego wodoodporna obudowa zostały usunięte z samochodu RC, ponieważ nie są potrzebne.

Odkryliśmy, że między przednimi kołami znajduje się jedno odpowiednie miejsce dla naszego czujnika śledzenia linii, więc unieruchomiliśmy go, zawiązując suwak nad przednią płytą ślizgową.

Czujnik, którego używamy do antykolizji, jest jakby zaklinowany za przednim zderzakiem. Jest nadal chroniony przed uderzeniami i jest dopasowany na tarcie. Kończy się patrzeniem w przyszłość pod bardzo niewielkim kątem w górę. To jest perfekcyjne.

Płyta Masonite (tylna płyta ze starej ramy obrazu) na górze ma małe odcinki rurki z papieru/żywicy przycięte na wymiar i przyklejone do spodu. Dopasowują się one do mocowań słupków nadwozia i po prostu siadają na górze, trzymając wszystko bezpiecznie. Zakładając, że klej mocujący rurkę do płyty wytrzyma i nie przechyli się nadmiernie, pozostanie na swoim miejscu. Warto również zauważyć, że płytka znajduje się w strefie ochronnej kół i zderzaków. Arduino Mega i dwie płytki stykowe zostały przymocowane do płyty za pomocą taśmy dwustronnej lub pętli taśmy klejącej owiniętej wokół, przyklej.

Nie podjęto żadnych specjalnych środków w celu zabezpieczenia modułu WiFi. Nie jest nasz, więc przyklejenie go lub przyklejenie taśmą uznano za niepotrzebne, ponieważ jest tak lekki, że niewiele się porusza, a przewody wystarczają, aby utrzymać go w miejscu.

Wreszcie mamy czujnik do wykrywania „pokojów”, który został przypięty do elementów zawieszenia jednym z tylnych kół. Podczas pracy musi znajdować się z dala od linii oznaczającej pojazd do nawigacji.

Krok 4: Moduł ESP8266

Moduł ESP8266
Moduł ESP8266
Moduł ESP8266
Moduł ESP8266

Moduł WiFi ESP8266 wymaga dwóch różnych konfiguracji pinów. Jedna konfiguracja ma być używana podczas flashowania modułu nowym programem i używania Arduino Mega 2560 jako programatora. Druga konfiguracja dotyczy modułu, gdy jest on używany i wysyła informacje do brokera MQTT.

Korzystając z Arduino IDE do wgrania kodu do modułu ESP8266 będziesz musiał zainstalować menedżera płytek i dodatkowego menedżera płyt

Pod zarządcą płyty zainstaluj zarządcę płyty esp8266. Można go łatwo znaleźć, wyszukując „esp”. Ważne jest, aby zainstalować wersję 2.5.0, nie starszą, nie nowszą.

W ustawieniach w adresach URL menedżerów dodatkowych tablic skopiuj w tym wierszu:

arduino.esp8266.com/stable/package_esp8266c…

Aby móc wgrać cokolwiek do modułu ESP8266, musisz użyć określonej konfiguracji pinów, aby móc sflashować moduł. Należy to zrobić za każdym razem, gdy chcesz dokonać zmiany w bieżącym kodzie uruchomionym w module. Nie zapomnij wybrać odpowiedniego modułu ESP8266 z menedżera płyty przed flashowaniem modułu. W tym projekcie wybraliśmy generyczną płytę ESP8266. Konfiguracja pinów do flashowania modułu znajduje się na pierwszym zdjęciu w tym segmencie.

Po sflashowaniu modułu ESP8266 należy zmienić konfigurację pinów. Możesz również użyć adaptera, aby ułatwić ci konfigurację. W tym projekcie zdecydowaliśmy się na posiadanie adaptera za każdym razem, gdy mamy uruchomiony moduł. Zestaw pinów z adapterem znajduje się na drugim zdjęciu w tym segmencie.

Kod do wgrania do modułu ESP8266 konfiguruje połączenie z WiFi i brokerem MQTT, w tym przypadku z nazwą użytkownika i hasłem, ale można to zrobić bez, jeśli dokonasz niezbędnych zmian opisanych w komentarzach do kodu. W tym projekcie nasz Broker wymagał nazwy użytkownika i hasła do pracy. Moduł odczytuje wiadomości przychodzące z portu szeregowego, do którego jest podłączony. Odczyta każdą nową linię utworzoną przez kod Arduino, odszyfruje wiadomość i odtworzy wiadomość. Następnie wysyła wiadomość do brokera MQTT, który został określony w kodzie. Kod modułu ESP8266:

Krok 5: Arduino

Po skonfigurowaniu modułu WiFi patrzymy na program, który będzie używany do sterowania silnikiem i serwo w samochodzie RC. Samochód będzie reagował zgodnie z informacją w skali szarości z centralnego czujnika, znanego również jako „Line Detector” w tym projekcie. Po prostu ma to na celu utrzymanie informacji z Detektora Linii w pobliżu ustawionej wartości, która jest równa informacjom zarejestrowanym przy zmianie między jasnym a ciemnym lub w tym projekcie biało-czarnym. Więc jeśli wartość różni się zbyt daleko, odpowiednie wyjście do serwomechanizmu skieruje samochód w pobliżu ustawionej wartości linii.

Program posiada dwa przyciski, które pełnią funkcję przycisku start i stop dla samochodu RC. Technicznie rzecz biorąc, przycisk „stop” jest przyciskiem „uzbrajania”, który pod względem wartości odpowiada wartości PWM wysłanej do silnika, która powoduje zatrzymanie samochodu RC. Przycisk start wysyła wartość PWM równą samochodowi RC ledwo poruszającemu się do przodu, ponieważ będzie jechał zbyt szybko, jeśli nabierze zbyt dużego rozpędu.

Czujnik unikania kolizji jest dodany do przedniej części samochodu RC, aby wykryć, czy droga przed Tobą jest wolna lub zablokowana. Jeśli jest zablokowana, samochód RC zatrzyma się do momentu zniknięcia/usunięcia przeszkody. Sygnał analogowy z detektora jest używany do określenia, czy coś blokuje drogę, i jest kryterium umożliwiającym poruszanie się do przodu, a także zatrzymywanie.

Dodatkowy czujnik skali szarości, „Room Detector”, służy do wykrywania, do którego pomieszczenia wjechał samochód RC. Działa na podobnej zasadzie jak Line Detector, ale nie szuka zmiany między jasnym a ciemnym, ale raczej wartości w określonym zakresie, który odpowiada różnym pomieszczeniom w zależności od wartości widzianej przez Room Detector.

Na koniec program tworzy linię informacji z czujników, którą moduł WiFi może odczytać, a następnie wysłać do brokera MQTT. Linia informacji jest tworzona jako ciąg i zapisywana w odpowiednim serialu, do którego podłączony jest moduł WiFi. Ważne jest, aby zapis do numeru seryjnego odbywał się tylko tak często, jak moduł WiFi może odczytać przychodzącą wiadomość, ale pamiętaj, aby nie używać żadnych opóźnień w tym kodzie, ponieważ będzie to zakłócać zdolność samochodu RC do podążania za linią. Zamiast tego użyj "millis", ponieważ pozwoli to programowi działać bez opóźnień, ale po przekroczeniu określonej ilości milisów od włączenia Arduino, napisze wiadomość do portu szeregowego bez blokowania kodu w ten sam sposób, w jaki robi to opóźnienie.

Kod dla Arduino Mega 2560:

Krok 6: Baza danych MySQL

WampServer to środowisko programistyczne dla Windows, które pozwala nam tworzyć aplikacje z PHP i bazą danych MySQL. PhpMyAdmin pozwala nam w łatwy sposób zarządzać naszymi bazami danych.

Aby rozpocząć, wejdź na:

W tym projekcie używamy wersji 3.17 x64 bits dla Windows. Po instalacji upewnij się, że wszystkie usługi są uruchomione, co oznacza, że mała ikona zmienia kolor na zielony zamiast czerwonego lub pomarańczowego. Jeśli ikona jest zielona, możesz uzyskać dostęp do PhpMyAdmin, aby zarządzać bazą danych MySQL.

Uzyskaj dostęp do MySQL za pomocą PhpMyAdmin i utwórz nową bazę danych. Nazwij go czymś odpowiednim, co możesz zapamiętać, w tym projekcie nazywał się „line_follow_log”. Po utworzeniu bazy danych należy utworzyć tabelę w bazie danych. Upewnij się, że liczba kolumn pasuje. W projekcie wykorzystujemy 4 kolumny. Jedna kolumna jest przeznaczona na znacznik czasu, a ostatnie trzy służą do przechowywania danych z pojazdu. Użyj odpowiedniego typu danych dla każdej kolumny. Użyliśmy „długiego tekstu” w kolumnie sygnatury czasowej i „średniego tekstu” w pozostałej części.

To powinno być wszystko, co musisz zrobić w PhpMyAdmin i MySQL. Zapamiętaj swoją bazę danych i tabelę dla sekcji o Node-Red.

Krok 7: Węzeł-czerwony

Aby obsłużyć gromadzenie danych, użyjemy dość prostego przepływu w Node-red. Łączy się z naszym serwerem MQTT i zapisuje do naszej bazy danych MYSQL.

Aby to zrobić, potrzebujemy kilku palet do działania różnych funkcji, a do ich uruchomienia potrzebujemy trochę rzeczywistego kodu.

Najpierw najważniejsze. Potrzebujemy następujących palet.

Node-red-contrib-mqtt-broker: To jest połączenie z naszym brokerem MQTT.

Node-red-dashboard: Nasz pulpit nawigacyjny, potrzebny do wizualnej reprezentacji zebranych danych.

Node-red-node-mysql:Nasze połączenie z bazą danych SQL.

To nie jest kompletny przewodnik po Node-red, ale wyjaśnię, co robi przepływ Node-red.

Na początku mieliśmy problemy z naszym wybranym serwerem MQTT umierającym/rozłączanym, pozornie losowo, co sprawiało, że wprowadzanie jakichkolwiek zmian było frustrującym przedsięwzięciem, ponieważ nie było jasne, czy zmiany były korzystne, czy nie, gdy nie mogliśmy zobaczyć wyniku. Czyli przycisk „Czy serwer zginął?” wstrzykuje 'Nie' następujący blok wstrzykuje go do naszego serwera MQTT. Jeśli nie jest martwy, w oknie debugowania pojawi się „Nie”. Odbywa się to nie tylko w celu przetestowania, ale także wymuszenia na Node-red próby ponownego połączenia się z serwerem MQTT.

„Ciąg testowy” wysyła ciąg kostiumu do brokera MQTT. Sformatowaliśmy ten ciąg, aby był podobny do tego, co otrzymalibyśmy z Arduino. Miało to ułatwić konfigurowanie sieci, która dekoduje komunikaty, bez konieczności uruchamiania projektu i gromadzenia danych.

Ostatni przepływ w przestrzeni roboczej można podzielić na dwa segmenty. Dolna gałąź po prostu odczytuje przychodzące wiadomości, umieszcza je w oknie debugowania i zapisuje na serwerze SQL.

Duża sieć połączonych przełączników podąża za węzłem funkcyjnym, jeśli dzieje się prawdziwa „magia”.

Funkcja postępująca odczytuje przychodzący ciąg, dzieląc go na każdy średnik i przekazuje sekcje na każde z wyjść. Poniższe przełączniki wyszukują jedną z dwóch różnych przychodzących informacji. Jedna konkretna informacja jest zawsze przekazywana z jednego wyjścia, druga opcja wychodzi przez drugie wyjście. Dalej jest druga grupa bloków przełączników. Aktywują się tylko z jednym określonym wejściem i wyprowadzają coś innego.

Na przykład „przeszkoda”, podobnie jak wszystkie inne, jest wyborem binarnym, albo można ją prowadzić, albo nie. Tak więc otrzyma 0 lub 1. 0 zostanie wysłane do gałęzi „czystej”, a 1 do gałęzi „zablokowanej”. Przełączniki „Wyczyść”, „Zablokowane”, jeśli są aktywowane, wygenerują odpowiednio coś konkretnego, wyraźnego lub zablokowanego. Zielone bloki postępowania zostaną opublikowane w oknie debugowania, niebieskie napisy do naszego pulpitu nawigacyjnego.

Gałęzie „status” i „lokalizacja” działają dokładnie tak samo.

Krok 8: Broker MQTT

Broker to serwer, który kieruje wiadomości od klientów do odpowiednich klientów docelowych. Broker MQTT to taki, w którym klienci używają biblioteki MQTT do łączenia się z brokerem przez sieć.

Na potrzeby tego projektu stworzyliśmy Brokera MQTT korzystającego z usługi CloudMQTT z bezpłatną subskrypcją na wersję „Cute Cat”. Ma swoje ograniczenia, ale nie przekraczamy tych w tym projekcie. Moduł WiFi może połączyć się z brokerem, a następnie broker kieruje komunikaty do odpowiedniego klienta docelowego. W tym przypadku klientem jest nasz Node-Red. Usługa CloudMQTT ustawia nazwę użytkownika i hasło dla swojego serwera, dzięki czemu mamy gwarancję większego bezpieczeństwa. Zasadniczo oznacza to, że tylko osoby posiadające nazwę użytkownika i hasło mogą uzyskać dostęp do tej konkretnej usługi CloudMQTT. Nazwa użytkownika i hasło są kluczowe podczas konfigurowania połączenia na kodzie ESP8266, a także Node-Red.

Bieżące statystyki wiadomości otrzymywanych przez Brokera to przyjemna funkcja, dzięki której można sprawdzić, jak dobrze Twój plan subskrypcji obsługuje przesyłane przez niego informacje.

Fajną funkcją jest możliwość wysyłania wiadomości od Brokera do modułu WiFi, ale nie używaliśmy ich w tym projekcie.

Krok 9: Elektronika hobby

Zanim zaczęliśmy, wiedzieliśmy z poprzedniego projektu, że serwo serwo sterujące może być sterowane z Arduino za pomocą sygnału PWM, mającego podobne okablowanie i podłączonego do różnych kanałów na tym samym fabrycznym odbiorniku radiowym, założyliśmy elektroniczną kontrolę prędkości (ESC z teraz), który steruje silnikiem, może być podobnie sterowany przez PWM z Arduino.

Aby przetestować tę teorię, przygotowaliśmy mały szkic Arduino. Szkic odczytuje wejście analogowe z potencjometru, mapuje wartość od 0, 1024 do 0, 255 i wyprowadza wynikową wartość do pinu PWM, używając analogWrite(), podczas gdy samochód R/C jest na małym pudełku i ma koła usunięte.

Po przejściu przez zakres na mierniku potencjometru, ESC wydawał się „obudzić” i mogliśmy go dławić w górę iw dół, a także kazał Arduino wydrukować wartości na łączu szeregowym, abyśmy mogli je monitorować.

ESC wydawał się nie lubić wartości poniżej pewnego progu, w tym przypadku 128. Odebrał sygnał 191 jako neutralną przepustnicę, a 255 jako maksymalną przepustnicę.

Nie musieliśmy zmieniać prędkości pojazdu i doskonale trzymaliśmy go w najwolniejszej prędkości, która sprawiała, że się poruszał. 192 to najniższa wartość, która włączyłaby silnik, jednak musimy jeszcze wszystko zmontować i nie jesteśmy pewni, czy ta moc wystarczyłaby do ruszenia pojazdu po ostatecznym montażu, jednak wpisanie nieco większej wartości powinno być trywialne.

Obejście potencjometru i wpisanie stałej wartości do kodu nie zadziałało. Zapasowy ESC po prostu mrugał i nie kręcił silnikiem, 'regulował trym przepustnicy' zgodnie z instrukcją.

Wściekłe rozwiązywanie problemów, rzucanie na niego różnych wartości, używanie różnych przewodów, a nawet eksperymentowanie ze zmianą częstotliwości PWM, której używa Arduino, wszystko to powodowało więcej dziwności.

Wydawało się, że jest to sporadyczna sprawa, czasami działała, innym razem odmawiała zrobienia czegokolwiek. Po prostu nadal mrugał. Test z oryginalnym kontrolerem i odbiornikiem potwierdził, że ESC nadal działa dokładnie zgodnie z przeznaczeniem, co sprawiło, że problemy były jeszcze dziwniejsze. Wyższe wartości ignorował i nadal mrugał, niższe wartości ESC wracał do świecenia wesołą zielenią, ale nadal się nie obracał.

Czym różniło się od konfiguracji z potencjometrem, czy podstawowym nadajnikiem i odbiornikiem, a wersją, która zapewniała stałe wartości?

Czasami praca zgodnie z zamierzeniami i praca zgodnie z oczekiwaniami nie pokrywają się zbytnio na diagramie Venna. W tym przypadku, będąc zabawką, nie powinno być szans, że model po prostu zdejmie lub złamie palce lub zaplącze się w koła lub układ napędowy, gdy model się włącza, nawet jeśli coś w rodzaju dziwnego trzymania nadajnika ma przepustnicę każda inna pozycja niż neutralna.

„Dostosuj trym przepustnicy”, dokładnie to oznacza. ESC oczekuje neutralnego sygnału po włączeniu, zanim się zorientuje, że nic nie zrobi. Normalnie nadajnik zawsze byłby w pozycji neutralnej, gdy ESC jest włączony i stamtąd z radością jedzie. Jeśli tak nie jest, prawdopodobnie co najmniej raz wraca do pozycji neutralnej, zanim model mocno stoi na ziemi, a operator czuje się gotowy do wyścigu.

Używając potencjometru „przeszukiwaliśmy” zakresy, a potem zaczynał działać. Po prostu uzbroił się, gdy potencjometr przesunął się poza pozycję neutralną, a potem zadziałał.

Niższe zakresy wciąż jednak wydawały się nie podobać ESC. Okazuje się, że jest to produkt cykli pracy PWM.

Czy to zgodnie z projektem, czy z przyczyn technicznych, zarówno serwo układu kierowniczego, jak i ESC ignorują sygnały poniżej 50% cykli pracy. Może to mieć miejsce w przypadku, gdy odbiornik/nadajnik przestanie działać lub zabraknie zasilania, model powróci do położenia neutralnego i nie wystartuje w dal na pełnym gazie wstecznym. Podobnie serwo obraca się tylko o 180 stopni i nie potrzebuje pełnego zakresu.

Mając tę wiedzę w ręku, powstał nowy szkic Arduino. Wersja początkowa akceptuje ciągi wprowadzone do monitora szeregowego, konwertuje je na liczbę całkowitą i przenosi na pin PWM, używając biblioteki serwo i write()*. Jeśli w monitorze szeregowym zostanie wprowadzona nowa wartość, wartość write() zostanie zaktualizowana.

Podczas testów podstawowy Traxxas ESC został zastąpiony przez Mtroniks G2 Micro, jednak powinny one działać tak samo, chociaż dokładne wartości mogą się nieco różnić.

Ta biblioteka traktuje ESC jako serwo, najwyraźniej jest to w porządku. Funkcja write() z biblioteki Servo.h przechodzi od 0 do 180, oczekiwany sygnał uzbrojenia powinien znajdować się w okolicach środka.

G2 Micro uzbraja się w write() w zakresie wartości zbliżonym do 90, jednak trudno było to wskazać, ponieważ wydaje się, że „pamięta” było uzbrojone.

Oczekuje się, że Traxxas VXL-s3 uzbroi się z wartością write() wynoszącą 91.

Po sygnale uzbrojenia każdy ESC z radością zaakceptował sygnały PWM, bez względu na funkcje Arduino wywołane do ich wygenerowania i odpowiednio steruje silnikiem.

Mówiąc o funkcjach; standardowe analogWrite(), a także write() i writeMicroseconds() z biblioteki Servo.h mogą być używane zamiennie, pamiętaj tylko, co robi i ostatecznie nic poza cyklem pracy nie ma znaczenia. WriteMicroseconds() może być użyty, jeśli wymagana jest większa szczegółowość, pamiętaj tylko, że zakres tutaj wynosi od 1000 do 2000, przy czym oczekuje się, że uzbrojenie lub „neutralne” będzie 1500. W przypadku standardowej analogWrite() oczekuje się, że użyteczny zakres być od 128 do 255, a około 191 jest neutralnych.

Zalecana: