Агуулгын хүснэгт:

Arduino дээр суурилсан (JETI) PPM -ээс FSX -ийн USB Joystick хөрвүүлэгч: 5 алхам
Arduino дээр суурилсан (JETI) PPM -ээс FSX -ийн USB Joystick хөрвүүлэгч: 5 алхам

Видео: Arduino дээр суурилсан (JETI) PPM -ээс FSX -ийн USB Joystick хөрвүүлэгч: 5 алхам

Видео: Arduino дээр суурилсан (JETI) PPM -ээс FSX -ийн USB Joystick хөрвүүлэгч: 5 алхам
Видео: SKR Pro v1.2 - TMC5160 SPI 2024, Арваннэгдүгээр
Anonim
Arduino дээр суурилсан (JETI) PPM -ээс FSX -д зориулсан USB Joystick хөрвүүлэгч
Arduino дээр суурилсан (JETI) PPM -ээс FSX -д зориулсан USB Joystick хөрвүүлэгч
Arduino дээр суурилсан (JETI) PPM -ээс FSX -д зориулсан USB Joystick хөрвүүлэгч
Arduino дээр суурилсан (JETI) PPM -ээс FSX -д зориулсан USB Joystick хөрвүүлэгч

Би JETI DC-16 дамжуулагчаа 2-р горимоос 1-р горимд шилжүүлэхээр шийдсэн бөгөөд энэ нь үндсэндээ тохируулагч ба цахилгаан шатыг зүүнээс баруун тийш, эсрэгээр шилжүүлдэг. Тархиндаа зүүн/баруун төөрөлдсөний улмаас би загваруудынхаа нэгийг унагахыг хүсээгүй тул FSX дээр бага зэрэг дадлага хийх боломжтой юу гэж бодож байлаа.

Би JETI дамжуулагчийг уншиж, туршиж үзсэн нь хайрцагнаас гадна Joystick горимыг дэмждэг боловч тэнхлэг, унтраалга өгөхдөө бүрэн уян хатан байдлыг хүсч, TX -ийг жинхэнэ загвартай адил ашиглахыг хүсч байсан. Хүлээн авагчийн гаралтыг ашигласнаар DC-16 дахь дохионы боловсруулалтыг идэвхжүүлж, тэнд програмчилж болох холигч, нислэгийн үе шат, хос тарифыг ашиглах боломжтой болно.

Саяхан би USB HID оролтын төхөөрөмж болох Joystick -ийг 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 дээр суулгасан Joystick номын сан
  • arduino-timer номын сан:

Алхам 1: RX болон Arduino -г холбоно уу

RX болон Arduino -ийг утсаар холбоно уу
RX болон Arduino -ийг утсаар холбоно уу
RX болон Arduino -ийг утсаар холбоно уу
RX болон Arduino -ийг утсаар холбоно уу

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

Би зохицуулалттай гаралтыг хангадаг Pin VCC, хамгийн ойрын Gnd зүүг ашигласан - үүнийг PPM -ийн холбогч + ба зүү рүү холбоно уу. Arduino -ийг асаахад хүлээн авагч одоо асаж байна.

PPM дохионы хувьд би тэдгээрийг таслахын тулд тасалдлыг ашиглахаар шийдсэн. Тасалдах боломжтой, жишээ нь. Pin 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 функц бүрт нэг суваг / "servo" хангалттай байдаг. Тиймээс дамжуулагчийн тохиргоог энгийн RC загвартай төстэй байдлаар хийж болно. Айлерон, лифт, залуур, тохируулагчийн үндсэн үүрэг нь тус бүрдээ нэг servo дамжуулагч суваг шаарддаг. Би бас хавхлага, тоормос, араа нэмсэн бөгөөд одоог хүртэл 9 суваг үнэгүй үлдээсэн. Flaps -ийг нислэгийн үе шатанд оруулсан бөгөөд саваа, гулсагч эсвэл товчлуураар шууд удирддаггүй болохыг анхаарна уу.

Алхам 4: Жойстикийг ажиллуулах

Joystick -ийг ажиллуулж байна
Joystick -ийг ажиллуулж байна
Joystick -ийг ажиллуулж байна
Joystick -ийг ажиллуулж байна

Joystick номын санг ашиглахад тун хялбар бөгөөд зарим жишээ, туршилтыг өгдөг. Эхлээд Arduino -ийг зохих Joystick гэж илрүүлсэн эсэхийг шалгах нь зүйтэй бөгөөд энэ хэсэгт оруулсан заавар, номын сан нь сайн удирдамж өгдөг.

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

Алхам 5: Arduino -г кодлох

Arduino -г кодлох
Arduino -г кодлох
Arduino -г кодлох
Arduino -г кодлох

PPM дохиог бодитоор задлан шинжилж, Joystick -ийн тэнхлэг, товчлууруудад хуваарилах нь л дутагдаж байна. Би дараахь зураглалыг хийхээр шийдсэн.

Суваг / Чиг үүрэг / Joystick -ийн даалгавар:

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

Араагаа доошлуулах үед Joystick -ийн эхний товчлуурыг дарах бөгөөд араа дээш өргөхөд гарна. Гэсэн хэдий ч, энэ нь 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-timer номын санг ашиглан Цуваа интерфэйсээр дамжуулан зарим хэвлэмэл материалыг нэмж оруулсан болно.

хэрэв (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (void*) -> bool {SerialPrintChannels (); true return;}); }

Пиний логик утга өөрчлөгдөх бүрт зүү тасалдлыг дуудах болно, ингэснээр 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 = импульсийн урт;

rxLength = (rxLength> 1600)? 1600: rxLength; rxLength = (rxLength <600)? 600: rxLength; rxChannels [curChannel] = rxLength - 600;

RxChannels массив нь эцэст нь 0 - 1000 хүртэлх 16 утгыг агуулдаг бөгөөд энэ нь зөөгч / гулсагч болон товчлуурын байрлалыг заана.

16 сувгийг хүлээн авсны дараа Joystick -ийн зураглалыг хийнэ.

/ * тэнхлэгүүд */

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 ();

Би кодын зарим тэнхлэгийг эргүүлсэн бөгөөд энэ нь зайлшгүй биш юм, учир нь тэнхлэгийг servo чиглэл эсвэл FSX дахь даалгаврыг эргүүлэх замаар эргүүлж болно. Гэсэн хэдий ч, би servo чиглэл, мөн FSX -ийн анхны даалгаврыг хадгалахаар шийдсэн.

Товчлуурыг босоо суваг 7 -ээр асааж эсвэл унтраана.

Төлөвлөгчийг тэмдэглэхээ бүү мартаарай … эс бөгөөс дибаг хийх хэвлэмэл харагдахгүй болно.

void loop () {

scheduler.tick (); }

Миний хавсаргасан дэлгэцийн агшинд 1 -р суваг 1000 (бүрэн тохируулагч) -аас 0 (идэвхгүй) руу шилжсэнийг та харж байна.

FSX нь бусад Joystick -ийн нэгэн адил Arduino -ийг илрүүлэх тул товчлуур, сүхээ онгойлгож хөөрөхөд хөгжилтэй байгаарай!

Энэ хандлагын надад хамгийн их таалагдсан зүйл бол та дамжуулагчаа жинхэнэ загвартай адил ашиглаж болно. нислэгийн үе шатыг ашиглах гэх мэт.

Зөвлөмж болгож буй: