Съдържание:
- Консумативи
- Стъпка 1: Свържете RX и Arduino
- Стъпка 2: Получаване на някои PPM сигнали
- Стъпка 3: Конфигуриране на предавателя
- Стъпка 4: Изпълнете джойстика
- Стъпка 5: Кодиране на Arduino
Видео: Ардуино базиран (JETI) PPM към USB джойстик конвертор за FSX: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Реших да превключвам моя предавател JETI DC-16 от режим 2 в режим 1, който основно превключва дросела и асансьора отляво надясно и обратно. Тъй като не исках да разбия един от моделите си поради някакво объркване наляво/надясно в мозъка ми, се чудех дали е възможно да се упражнявам малко във FSX.
Прочетох и тествах JETI предавателите всъщност поддържат режим на джойстик извън кутията, но исках пълна гъвкавост при задаването на оси и превключватели и използвам TX като с истински модел. Използвайки изхода на приемника, също е възможно да се използва обработката на сигнала в DC-16 и да се използват миксери, фази на полет, двойни скорости, каквото можете да програмирате там.
Наскоро намерих хубав урок за това как да направя USB HID входно устройство, а именно джойстик, от евтин Arduino като Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Това би позволило всичко необходимо за управление на самолет / хеликоптер / каквото и да е във FSX! Налични са много оси и бутони.
Тъй като току -що имах резервен JETI RSAT2, реших да го свържа с Arduino и да се опитам да внедря малък PPM анализатор заедно с библиотеката на джойстика.
Предполагам, че всеки, който следва тези стъпки, е запознат със свързването и програмирането на Arduino. Няма да поемам никакви гаранции за неизправности или повреди!
Консумативи
Ще имаш нужда…
- всеки Arduino, поддържан от библиотеката на джойстика, използвах Sparkfun Pro Micro 5V / 16 MHz
- скорошна версия на Arduino IDE
- всеки RC приемник, извеждащ PPM сигнал, като JETI RSAT2
- няколко джъмперни проводника (мин. 3)
- библиотеката на джойстика, инсталирана в IDE на Arduino
- библиотеката на arduino-timer:
Стъпка 1: Свържете RX и Arduino
Окабеляването е доста просто. Реших да захранвам Arduino само от USB, тъй като той ще подражава на джойстик устройство. Това ще захранва Arduino с 5V, което може да се използва и за захранване на RC приемника.
Използвах Pin VCC, който осигурява регулиран изход, и най -близкия Gnd пин - просто го свържете към конектора на PPM + и -. Когато Arduino се захранва, приемникът също се включва.
За PPM сигнала реших да използвам прекъсвания, за да ги анализирам. Налични са прекъсвания, напр. на Pin 3, така че просто го свържете там - няма "естествен RC щифт" на arduino, но вероятно повече и различни начини за четене в сигнала на приемника.
Трябваше да деактивирам алармата за напрежение RX, тъй като напрежението на VCC с USB захранване ще бъде само около 4.5V - но доста стабилно, така че изобщо няма проблем.
Стъпка 2: Получаване на някои PPM сигнали
Когато приемникът и TX се захранват, получавах PPM сигнали, както е показано на изображението. 16 канала, повтарящи се завинаги. Ако Failsafe на RSAT е деактивиран и предавателят е изключен, PPM изходът ще бъде деактивиран.
Повече информация за PPM е достъпна тук:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Тъй като в този случай не летя с истински неща, не ми пукаше за теоретичните срокове и просто разбрах на осцилоскопа какво издава моят приемник акутално при преместване на пръчките от напълно наляво към напълно надясно (стандартни настройки в TX). Изглежда -100% съответства на импулси с дължина 600µs и +100% до 1600µs. Също така не ме интересуваше дължината на паузните импулси (400 μs) в кода ми на Arduino, но предположих, че интервалът между кадрите е мин. 3000 μs.
Стъпка 3: Конфигуриране на предавателя
Тъй като трябва да се знае само действителното положение на управляващите повърхности, един канал / "серво" за RC функция е достатъчен. Следователно може да се направи доста проста настройка на предавателя - подобна на нормален модел RC. Основните функции на елерона, асансьора, кормилото и дросела изискват само по едно серво, съответно предавателен канал. Добавих и клапани, спирачки и предавки, оставяйки 9 канала свободни досега. Моля, обърнете внимание, че клапите са поставени на полетна фаза и не се управляват директно чрез пръчка, плъзгач или бутон.
Стъпка 4: Изпълнете джойстика
Библиотеката на джойстика е доста лесна за използване и предоставя някои примери и тестове. Трябва да е полезно първо да проверите дали Arduino е открит като подходящ джойстик, инструкциите, свързани в секцията за въвеждане и самата библиотека, предоставят някои добри насоки.
В контролния панел на устройства и принтери Arduino се показваше като „Sparkfun Pro Micro“, а прозорецът на джойстика показваше 7 оси и много поддържани бутони. Дори превключвател за шапка може да се използва, когато е програмиран в Arduino.
Стъпка 5: Кодиране на Arduino
Това, което все още липсва, е действителното разбор на PPM сигнала и присвояване на оси и бутони на джойстика. Реших за следното картографиране:
Присвояване на канал / функция / джойстик:
- Дросел -> Оста на дросела
- Елерон -> ос X
- Асансьор -> ос Y
- Кормило -> ос на въртене X
- Клапи -> ос на въртене Y
- Спирачка -> ос Z
- Gear -> Бутон 0
Когато предавката е спусната, първият бутон на джойстика трябва да бъде натиснат и ще се освободи при повдигане на предавката. Това обаче ще изисква FSUIPC за FSX, извън кутията, FSX ще приеме само бутон за превключване на предавката, което не е точно това, което се случва с моите модели.
Предоставих текущата си версия на кода с много коментари, което работи доста добре за мен - не се колебайте да промените заданието си или да добавите нови функции. Последните 9 RC канала в момента не се използват.
За настройката класът джойстик трябва да бъде инициализиран, основно чрез определяне на диапазоните на числовите оси:
/ * Задайте диапазон на осите (дефиниран в заглавката, 0 - 1000) */
Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …
Чрез използване на стойности от 0 до 1000 е възможно директно да се съпостави дължината на импулса (600 - 1600µs) към стойностите на джойстика без преоразмеряване.
DIN 3 се инициализира като цифров вход, активирани издърпвания и прикрепено прекъсване:
pinMode (PPM_PIN, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, CHANGE);
За отстраняване на грешки добавих някои разпечатки през серийния интерфейс на редовни интервали, използвайки библиотеката на arduino-timer:
ако (SERIAL_PRINT_INTERVAL> 0) {
Scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); връщане true;}); }
Прекъсването на щифта ще се извиква винаги, когато логическата стойност на щифта се е променила, така че за всеки ръб в PPM сигнала. Оценете дължината на импулса само чрез просто синхронизиране с помощта на micros ():
uint32_t curTime = micros ();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);
Чрез оценка на състоянието на текущия щифт и комбинирането му с дължината на импулса и миналите импулси, новите импулси могат да бъдат класифицирани. Следното условно ще открие междукадровата пропаст:
if (lastState == 0 && pulseLength> 3000 && pulseLength <6000)
За следващите импулси дължината на импулса ще бъде картографирана в състояние на ос чрез изрязване и отклонение на дължината на импулса, за да съответства на обхвата на ос на джойстика:
uint16_t rxLength = pulseLength;
rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;
Масивът rxChannels в крайна сметка съдържа 16 стойности от 0 - 1000, показващи позиции на пръчки / плъзгачи и бутони.
След получаване на 16 канала, картографирането към джойстика се извършва:
/* брадви */
Joystick.setThrottle (канали [0]); Joystick.setXAxis (канали [1]); Joystick.setYAxis (1000 - канала [2]); Joystick.setRxAxis (канали [3]); Joystick.setRyAxis (канали [4]); Joystick.setZAxis (1000 - канала [5]); / * бутони */ Joystick.setButton (0, (канали [6] <500? 1: 0)); / * актуализиране на данни чрез USB */ Joystick.sendState ();
Обърнах някои оси в кода, което не е абсолютно необходимо, тъй като оста може да бъде обърната и чрез обръщане на серво посоката или присвояването във FSX. Реших обаче да запазя серво насоките, а също и оригиналното задание на FSX.
Бутонът се включва или изключва от праговия канал 7.
И не забравяйте да маркирате графика … в противен случай няма да се виждат отпечатъци за отстраняване на грешки.
void loop () {
Scheduler.tick (); }
На скрийншота, който прикачих, можете да видите, че канал 1 е преместен от 1000 (пълна газ) на 0 (празен ход).
FSX ще открие Arduino, както всеки друг джойстик, така че просто задайте бутона и осите и се забавлявайте при излитане!
Това, което наистина харесвам в този подход, е, че можете просто да използвате вашия предавател като с реален модел, напр. използване на полетни фази и др.
Препоръчано:
Как да използвате DC към DC конвертор на долар LM2596: 8 стъпки
Как да използвате DC към DC конвертор на долар LM2596: Този урок ще покаже как да използвате LM2596 Buck Converter за захранване на устройства, изискващи различни напрежения. Ще покажем кои са най -добрите видове батерии за използване с конвертора и как да получите повече от един изход от преобразувателя (инди
Esp8266 базиран усилвател конвертор с невероятен потребителски интерфейс Blynk с регулатор на обратната връзка: 6 стъпки
Esp8266 базиран усилващ преобразувател с невероятен потребителски интерфейс Blynk с регулатор на обратната връзка: В този проект ще ви покажа ефективен и често срещан начин как да увеличите постояннотоковото напрежение. Ще ви покажа колко лесно може да бъде изграждането на усилващ конвертор с помощта на Nodemcu. Нека го изградим. Той също така включва екранен волтметър и обратна връзка
Музикален генератор, базиран на времето (ESP8266 базиран midi генератор): 4 стъпки (със снимки)
Метеорологичен генератор, базиран на времето (ESP8266 базиран Midi генератор): Здравейте, днес ще ви обясня как да направите свой собствен малък музикален генератор, базиран на времето. Той е базиран на ESP8266, който е нещо като Arduino и реагира на температура, дъжд и интензивността на светлината. Не очаквайте това да прави цели песни или акорди
DC към DC Buck конвертор DIY -- Как лесно да намалите DC напрежението: 3 стъпки
DC към DC Buck конвертор DIY || Как лесно да намалите постояннотоковото напрежение: Преобразувателят на понижение (понижаващ преобразувател) е преобразувател на постоянен ток в постоянен ток, който намалява напрежението (докато увеличава тока) от входа (захранването) към изхода (товара). Това е клас захранване с комутиран режим (SMPS), обикновено съдържащо поне
Свързан към мрежата SMART LED анимационен часовник с уеб базиран контролен панел, синхронизиран сървър на времето: 11 стъпки (със снимки)
Свързан с мрежата SMART LED анимационен часовник С уеб-базиран контролен панел, синхронизиран сървър на времето: Историята на този часовник датира от далечен път-повече от 30 години. Баща ми беше пионер в тази идея, когато бях само на 10 години, много преди революцията на светодиодите - тогава, когато светодиодите бяха 1/1000 от яркостта на техния ослепяващ блясък. Истина