Swego czasu autor kupił dla syna zdalnie sterowany (podczerwienią) helikopter Syma S107G. Taka niewielka zabawka jest niesamowita – nie tylko ruch jest bardzo stabilny, ale także prędkość silnika, lot w przód i w tył i obrót może być precyzyjnie kontrolowany. Autor stwierdził, że ciekawe może być zbadanie, w jaki sposób przebiega sterowanie zabawki. Na końcu oryginalnego artykułu można obejrzeć nagranie, na którym autor steruje S107G używając „rozpracowanego” zdalnego sterowania.
Przed przestąpieniem do dekodowania protokołu IR, autor stwierdził, że nieco użytecznych informacji można znaleźć, analizując płytkę drukowaną pilota.
Okazało się, że S107G używa procesora do wykonywania kodowania sygnału, więc bez przeanalizowania sygnałów sterujących nie można wiele powiedzieć na podstawie samej budowy płytki. Niestety, oznaczenie procesora było zatarte (co jest dość powszechną praktyką w komercyjnych urządzeniach), więc trudno było stwierdzić, jaki rodzaj procesora zamontowany w pilocie.
Analizując opisy na płytce, autor stwierdził, że nadajnik IR pracuje z częstotliwością 38 albo 57 kHz, co odpowiada kanałowi A lub B pracy transmitera. Do sterowania kierunkiem i przepustnicą zostały użyte trzy potencjometry – zapewne są one podłączone do wejść konwertera A/D procesora.
Autor postanowił zbadać sprawę głębiej, analizując sygnały podczerwieni. Pierwszym krokiem było podejrzenie sygnału nadawanego przez pilota. Może być to zrealizowane na kilka sposobów, np. przez podejrzenie sygnału podawanego na diodę IR lub poprzez zbudowanie prostego odbiornika IR. W prezentowanym opisie zostało wykorzystane rozwiązanie drugie. Poniższy schemat pokazuje budowę prostego odbiornika IR.
Do „obejrzenia” modulowanego sygnału IR została wykorzystana zwykła fotodioda podłączona do wejścia oscyloskopu. Na poniższym oscylogramie można zobaczyć, że komendy sterujące powtarzane są co 184 ms. Powiększenie każdego impulsu danych pokazuje modulowany sygnał IR – jak w przypadku drugiego obrazu.
Nadawany sygnał ma częstotliwość 38 kHz i wypełnienie wynoszące ok. 50%.
Do demodulacji sygnału wykorzystano typowy odbiornik podczerwieni. Poniżej można zobaczyć zdemodulowany sygnał.
Ponieważ nadawany sygnał zależy od położenia kontrolerów ruchu helikoptera, autor zarejestrował kilka przebiegów odpowiadających różnym położeniom. Porównując je można określić, w którym miejscu są przekazywane odpowiednie dane.
Poniższe przebiegi zarejestrowano dla różnych położeń kontrolerów pozycji helikoptera i przepustnicy. Jak można odczytać z zarejestrowanych przebiegów, każdy sygnał składa się z 34 impulsów, które razem dają komendę składającą się z 4 bajtów danych i dwóch bajtów nagłówka. Na stronie projektu można poznać dokładne wartości zdekodowanych sygnałów i sposób ich przesyłania.
Aby potwierdzić, że odczyt protokołu powiódł się, autor stworzył własny sterownik w oparciu o Arduino. Poniżej można znaleźć pełny program procesora. W skrócie, Timer1 używany jest do odliczania 180-milisekundowych interwałów, a Timer2 generuje nośną o częstotliwości 38 kHz i wypełnieniu 50%. „Zera” i „jedynki” są generowanie przez zatrzymywanie generowania sygnału 38 kHz na czas określony w zmiennej delayMictroseconds Trzy potencjometry sterują ruchami helikoptera.
Kod: C / C++
Źródło
Fajne? Ranking DIY
