Мазмуну:

Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине: 5 кадам
Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине: 5 кадам

Video: Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине: 5 кадам

Video: Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине: 5 кадам
Video: Урок 99. Создание цифровых часов Arduino с использованием ЖК-дисплея DS3231 и семисегментного дисплея. 2024, Июль
Anonim
Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине
Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине
Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине
Arduino негизделген (JETI) PPM FSX үчүн USB джойстик конвертерине

Мен JETI DC-16 өткөргүчүмдү 2-режимден 1-режимге которууну чечтим, ал негизинен Throttle менен Elevatorды солдон оңго жана тескерисинче которот. Мен мээмдеги сол/оң башаламандыктан улам моделдеримдин бирин кыйраткым келбегендиктен, FSXте бир аз машыгуу мүмкүнбү деп ойлонуп жаттым.

Мен JETI өткөргүчтөрүн чындыгында кутудан тышкары джойстик режимин колдоп окудум жана сынап көрдүм, бирок мен балталарга жана которгучтарга толук ийкемдүүлүктү кааладым жана TXти чыныгы модельдей эле колдондум. Кабыл алуучунун өндүрүшүн колдонуу менен, DC-16да сигналды иштетүүнү колдонууга жана аралаштыргычтарды, учуу фазаларын, кош тарифтерди жана ал жерде программалоого мүмкүн болгон нерселерди колдонууга болот.

Жакында мен USB HID киргизүү түзмөгүн, тактап айтканда, Джойстикти Pro Micro сыяктуу арзан Arduinoдон кантип жасоо боюнча жакшы окуу куралын таптым:

www.instructables.com/id/Create-a-Joystick…

Бул FSXте учакты / вертолетту / каалаганын башкарууга керектүү нерсенин баарын иштетет! Көптөгөн балталар жана баскычтар бар.

Менде бош JETI RSAT2 болгондуктан, мен аны Arduino менен байланыштырууну чечтим жана Joystick китепканасы менен бирге кичинекей PPM талдоочусун ишке ашырууга аракет кылдым.

Менин оюмча, бул кадамдарды аткаргандар Arduino менен туташуу жана программалоо менен тааныш. Мен бузулууларга же бузулууларга эч кандай кепилдик бербейм!

Жабдуулар

Сага керек болот…

  • Joystick китепканасы колдогон ар кандай Arduino, мен Sparkfun Pro Micro 5V / 16 MHz колдондум
  • Arduino IDEнин акыркы версиясы
  • JETI RSAT2 сыяктуу PPM сигналын чыгарган каалаган RC кабылдагычы
  • бир нече секирүүчү зымдар (мин. 3)
  • джойстик китепканасы Arduino IDEде орнотулган
  • arduino-таймер китепканасы:

1 -кадам: RX жана Arduino тармагын иштетүү

WX Up RX жана Arduino
WX Up RX жана Arduino
WX Up RX жана Arduino
WX Up RX жана Arduino

Электр өткөргүчтөрү дээрлик абдан жөнөкөй. Мен Arduino -ны USBден гана иштетүүнү чечтим, анткени ал джойстикти туурайт. Бул Arduinoго 5V менен камсыз кылат, аны RC ресиверин иштетүү үчүн да колдонсо болот.

Мен жөнгө салынуучу өндүрүмдү камсыз кылган Pin VCC колдондум, жана жакынкы Gnd пин - аны PPMдин туташтыргычына + жана - казыктарына туташтырыңыз. Arduino күйгүзүлгөндө, ресивер дагы иштей баштады.

PPM сигналы үчүн мен аларды ажыратуу үчүн үзгүлтүктөрдү колдонууну чечтим. Үзгүлтүктөр бар, мис. 3 -пинде, андыктан аны ошол жерге туташтырыңыз - arduinoдо "жергиликтүү RC пин" жок, бирок кабыл алуучу сигналда окуунун ар кандай жолдору бар.

Мен RX чыңалуу сигналын өчүрүшүм керек болчу, анткени USB менен камсыздалган VCC чыңалуусу 4,5В тегерегинде гана болот - бирок абдан туруктуу, андыктан эч кандай көйгөй жок.

2 -кадам: Кээ бир PPM сигналдарын алуу

Кээ бир PPM сигналдарын алуу
Кээ бир PPM сигналдарын алуу
Кээ бир PPM сигналдарын алуу
Кээ бир PPM сигналдарын алуу

Алуучу жана TX иштетилгенде, мен сүрөттө көрсөтүлгөндөй PPM сигналдарын алчумун. 16 канал, түбөлүк кайталанат. Эгерде RSAT боюнча Failsafe өчүрүлсө жана өткөргүч өчүрүлсө, 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 чейин. Мен да Arduino кодумдагы тыныгуу импульстарынын (400µs) узундугуна маани бербедим, бирок кадр аралыкты минута деп эсептедим. 3000µs.

3 -кадам: Бергичти конфигурациялоо

Бергичти конфигурациялоо
Бергичти конфигурациялоо
Бергичти конфигурациялоо
Бергичти конфигурациялоо
Бергичти конфигурациялоо
Бергичти конфигурациялоо

Башкаруу беттеринин чыныгы абалын гана билүү керек болгондуктан, RC функциясына бир канал / "серво" жетиштүү. Демек, өткөргүчтү жөн эле орнотсо болот - кадимки RC моделине окшош. Негизги функциялар aileron, лифт, руль жана дроссель ар бирине тийиштүү түрдө бир өткөргүч каналын талап кылат. Мен дагы жапкычтарды, тормоздорду жана редукторлорду коштум, азырынча 9 каналды бекер калтырдым. Көңүл буруңуз, Flaps учуу фазасына киргизилген жана таяк, слайдер же баскыч аркылуу түз башкарылбайт.

4 -кадам: Джойстикти иштетүү

Джойстикти иштетүү
Джойстикти иштетүү
Джойстикти иштетүү
Джойстикти иштетүү

Joystick китепканасы колдонууга оңой жана кээ бир мисалдарды жана тесттерди берет. Алгач Arduino туура Джойстик деп табылганын текшерүү пайдалуу болушу керек, кирүү бөлүмүндө шилтемеленген көрсөтмөлөр жана китепкана өзү жакшы жетекчилик берет.

Түзмөктөр жана принтерлердин башкаруу панелинде Arduino "Sparkfun Pro Micro", ал эми джойстиктин сыноо терезеси 7 огу жана колдоого алынган көптөгөн баскычтарды көрсөткөн. Алтургай шляпа алмаштыргычты Arduinoдо программалаганда колдонсо болот.

5 -кадам: Arduino коддоо

Arduino коддоо
Arduino коддоо
Arduino коддоо
Arduino коддоо

Дагы эле жетишпеген нерсе - бул PPM сигналынын чыныгы талдоосу жана Joystick балталарына жана баскычтарына дайындоо. Мен төмөнкү картага түшүүнү чечтим:

Канал / Функция / Джойстик тапшырмасы:

  1. Throttle -> Throttle огу
  2. Aileron -> X огу
  3. Лифт -> Y огу
  4. Руль -> X айлануу огу
  5. Flaps -> Y айлануу огу
  6. Тормоз -> Z огу
  7. Gear -> баскычы 0

Тиш түшүп калганда, джойстиктин биринчи баскычы басылып, тиштүү көтөрүлгөндө кое берилет. Бирок, бул FSX үчүн FSUIPCти талап кылат, кутудан тышкары, FSX тетиктерди которуштуруу үчүн бир баскычты гана кабыл алат, бул менин моделдеримде болуп жаткан нерсе эмес.

Мен коддун учурдагы версиясын көптөгөн комментарийлер менен камсыз кылдым, бул мен үчүн абдан жакшы иштеп жатат - тапшырмаңызды өзгөртүп же жаңы функцияларды кошуңуз. Акыркы 9 RC каналы учурда колдонулбайт.

Орнотуу үчүн, Joystick классын негизинен сандык огунун диапазонун аныктоо менен баштоо керек:

/ * Октордун диапазонун белгилеңиз (аталышта аныкталган, 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-таймер китепканасын колдонуп, үзгүлтүксүз Сериялык интерфейс аркылуу кээ бир басып чыгарууларды коштум:

эгер (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (боштук*) -> бол {SerialPrintChannels (); чындыкты кайтаруу;}); }

Пиндин логикалык мааниси өзгөргөн сайын пинтин үзүлүшү чакырылат, ошондуктан PPM сигналынын ар бир чети үчүн. Импульстун узундугун micros () аркылуу жөнөкөй убакыт менен баалаңыз:

uint32_t curTime = micros ();

uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead (PPM_PIN);

Учурдагы пиндин абалын баалоо жана аны импульс узундугу жана өткөн импульстар менен айкалыштыруу аркылуу жаңы импульстарды классификациялоого болот. Төмөнкү шарттуу аралык аралык ажырымды аныктайт:

эгер (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 массиви акырында таякчанын / сыдыргычтын жана баскычтын ордун көрсөткөн 0 - 1000ден 16 мааниге ээ.

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теги тапшырманы оодаруу менен да бурууга болот. Бирок, мен servo багыттарын, ошондой эле баштапкы FSX тапшырмасын сактоону чечтим.

Кнопка босоголук канал 7 аркылуу күйгүзүлөт же өчүрүлөт.

Жана пландоочуну белгилөөнү унутпаңыз … антпесе, мүчүлүштүктөрдү оңдоонун издери көрүнбөйт.

void loop () {

scheduler.tick (); }

Мен тиркеген скриншоттон көрүп турасыз, 1 -канал 1000ден (толук дроссель) 0го (бош) которулду.

FSX башка Joystick сыяктуу эле Arduino'yү аныктайт, андыктан баскычты жана балталарды дайындап, көңүл ачуу менен көңүл ачыңыз!

Бул ыкма мага абдан жакты, сиз жөн гана реалдуу моделдегидей эле өткөргүчтү колдоно аласыз, мис. учуу фазаларын колдонуу ж.

Сунушталууда: