Isi kandungan:

Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX: 5 Langkah
Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX: 5 Langkah

Video: Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX: 5 Langkah

Video: Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX: 5 Langkah
Video: Супердешевый беспроводной радиоуправляемый SIM-ключ своими руками — используйте собственный передатчик в Heli X / Phoenix и т. д. 2024, Julai
Anonim
Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX
Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX
Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX
Arduino Based (JETI) PPM ke USB Joystick Converter untuk FSX

Saya memutuskan untuk menukar pemancar JETI DC-16 saya dari Mod 2 ke Mod 1, yang pada dasarnya menukar Throttle dan Elevator dari kiri ke kanan dan sebaliknya. Oleh kerana saya tidak mahu merosakkan salah satu model saya kerana kekeliruan kiri / kanan di otak saya, saya tertanya-tanya adakah mungkin untuk berlatih sedikit di FSX.

Saya membaca dan menguji pemancar JETI sebenarnya menyokong mod Joystick di luar kotak, namun saya mahukan fleksibiliti penuh untuk tugas paksi dan suis dan menggunakan TX seperti model sebenar. Dengan menggunakan output penerima, Anda juga dapat memanfaatkan pemprosesan isyarat di DC-16 dan menggunakan pengadun, fasa penerbangan, dua kadar, apa sahaja yang dapat anda atur di sana.

Baru-baru ini saya menjumpai tutorial bagus tentang cara membuat peranti input USB HID, iaitu Joystick, daripada Arduino yang murah seperti Pro Micro:

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

Ini akan membolehkan semua yang diperlukan untuk mengendalikan pesawat / helikopter / apa sahaja di FSX! Terdapat banyak paksi dan butang.

Oleh kerana saya baru menggunakan JETI RSAT2, saya memutuskan untuk memasangkannya dengan Arduino dan cuba melaksanakan penghurai PPM kecil bersama dengan perpustakaan Joystick.

Saya menganggap ada orang yang mengikuti langkah ini yang biasa dengan menyambungkan dan memprogram Arduino. Saya tidak akan mengambil jaminan kerosakan atau kerosakan!

Bekalan

Anda perlu…

  • mana-mana Arduino yang disokong oleh perpustakaan Joystick, saya menggunakan Sparkfun Pro Micro 5V / 16 MHz
  • versi terbaru dari Arduino IDE
  • mana-mana penerima RC yang mengeluarkan isyarat PPM, seperti JETI RSAT2
  • beberapa wayar pelompat (minimum 3)
  • perpustakaan Joystick yang dipasang di Arduino IDE
  • perpustakaan arduino-timer:

Langkah 1: Wire Up RX dan Arduino

Wire Up RX dan Arduino
Wire Up RX dan Arduino
Wire Up RX dan Arduino
Wire Up RX dan Arduino

Pendawaiannya cukup mudah. Saya memutuskan untuk hanya menghidupkan Arduino dari USB, kerana ia akan meniru peranti Joystick. Ini akan membekalkan Arduino dengan 5V, yang dapat digunakan juga untuk menghidupkan penerima RC.

Saya menggunakan Pin VCC, yang memberikan output terkawal, dan pin Gnd terdekat - sambungkan saja ke penyambung + dan - pin PPM. Apabila Arduino dihidupkan, penerima sekarang juga dihidupkan.

Untuk isyarat PPM, saya memutuskan untuk menggunakan gangguan untuk menguraikannya. Gangguan tersedia cth. di Pin 3, jadi sambungkan sahaja di sana - tidak ada "pin RC asli" di arduino, tetapi mungkin cara yang lebih banyak dan berbeza untuk dibaca dalam isyarat penerima.

Saya terpaksa mematikan penggera voltan RX, kerana voltan VCC dengan bekalan USB hanya sekitar 4.5V - tetapi cukup stabil, jadi tidak ada masalah sama sekali.

Langkah 2: Mendapatkan Sebilangan Isyarat PPM

Mendapat Sebilangan Isyarat PPM
Mendapat Sebilangan Isyarat PPM
Mendapat Sebilangan Isyarat PPM
Mendapat Sebilangan Isyarat PPM

Semasa penerima DAN TX dihidupkan, saya mendapat isyarat PPM seperti yang ditunjukkan dalam gambar. 16 saluran, diulang selama-lamanya. Sekiranya Failsafe pada RSAT dilumpuhkan dan pemancar dimatikan, output PPM akan dilumpuhkan.

Maklumat lebih lanjut mengenai PPM terdapat di sini:

  • https://en.wikipedia.org/wiki/Pulse-position_modul…
  • https://wiki.rc-network.de/index.php/PPM

Oleh kerana saya tidak menerbangkan barang sebenar dalam kes ini, saya tidak peduli dengan masa teori dan baru mengetahui osiloskop apa yang dihasilkan oleh penerima saya secara automatik ketika memindahkan tongkat dari kiri penuh ke kanan (tetapan standard dalam TX). Nampaknya -100% sepadan dengan denyutan dengan panjang 600µs, dan + 100% hingga 1600µs. Saya juga tidak menjaga panjang denyut jeda (400µs) dalam kod Arduino saya, tetapi saya menganggap jarak bingkai min. 3000µs.

Langkah 3: Mengkonfigurasi Pemancar

Mengkonfigurasi Pemancar
Mengkonfigurasi Pemancar
Mengkonfigurasi Pemancar
Mengkonfigurasi Pemancar
Mengkonfigurasi Pemancar
Mengkonfigurasi Pemancar

Oleh kerana hanya kedudukan sebenar permukaan kawalan yang perlu diketahui, satu saluran / "servo" per fungsi RC cukup. Oleh itu, penyediaan pemancar yang agak mudah dapat dibuat - serupa dengan model RC biasa. Fungsi utama aileron, lif, kemudi dan pendikit masing-masing hanya memerlukan satu saluran pemancar servo masing-masing. Saya juga menambah kepak, rem dan gear, sehingga 9 saluran percuma setakat ini. Harap diperhatikan bahawa Flaps dimasukkan pada fasa penerbangan, dan tidak dikendalikan secara langsung melalui tongkat, slider atau butang.

Langkah 4: Menjalankan Joystick

Menjalankan Joystick
Menjalankan Joystick
Menjalankan Joystick
Menjalankan Joystick

Perpustakaan Joystick cukup mudah digunakan, dan memberikan beberapa contoh dan ujian. Sebaiknya periksa terlebih dahulu apakah Arduino dikesan sebagai Joystick yang tepat, petunjuk yang terdapat di bahagian entri dan perpustakaan itu sendiri memberikan beberapa panduan yang baik.

Di panel kawalan Peranti dan Pencetak, Arduino muncul sebagai "Sparkfun Pro Micro", dan tetingkap ujian kayu bedik menunjukkan 7 paksi dan banyak butang yang disokong. Malah suis topi dapat digunakan ketika diprogram di Arduino.

Langkah 5: Pengekodan Arduino

Mengekodkan Arduino
Mengekodkan Arduino
Mengekodkan Arduino
Mengekodkan Arduino

Apa yang masih hilang adalah penghuraian sebenar isyarat PPM dan penyerahan kepada paksi dan butang Joystick. Saya memutuskan untuk pemetaan berikut:

Tugasan Saluran / Fungsi / Joystick:

  1. Throttle -> Paksi pendikit
  2. Aileron -> paksi X
  3. Lif -> paksi Y
  4. Rudder -> Paksi putaran X
  5. Flaps -> Paksi putaran Y
  6. Brek -> Paksi Z
  7. Gear -> Butang 0

Apabila gear turun, butang Joystick pertama harus ditekan dan akan dilepaskan semasa menaikkan gear. Walau bagaimanapun, ini memerlukan FSUIPC untuk FSX, di luar kotak, FSX hanya akan menerima butang untuk menukar gear, yang tidak betul-betul berlaku dengan model saya.

Saya memberikan banyak versi kod saya sekarang dengan banyak komen, yang berfungsi dengan baik - saya boleh menukar tugas anda atau menambah fungsi baru. 9 saluran RC terakhir tidak digunakan.

Untuk persediaan, kelas Joystick perlu diinisialisasi, pada dasarnya dengan menentukan julat paksi angka:

/ * Tetapkan julat paksi (ditentukan dalam tajuk, 0 - 1000) * /

Joystick.setXAxisRange (CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange (CHANNEL_MIN, CHANNEL_MAX); …

Dengan menggunakan nilai dari 0 hingga 1000, dimungkinkan untuk memetakan secara langsung panjang nadi (600 - 1600µs) ke nilai joystick tanpa menutup kembali.

DIN 3 diinisialisasi sebagai input digital, pullup diaktifkan, dan gangguan dilampirkan:

pinMode (PPM_PIN, INPUT_PULLUP);

attachInterrupt (digitalPinToInterrupt (PPM_PIN), PPM_Pin_Changed, TUKAR);

Untuk tujuan penyahpepijatan, saya menambahkan beberapa cetakan melalui antara muka Serial secara berkala, menggunakan perpustakaan arduino-timer:

jika (SERIAL_PRINT_INTERVAL> 0) {

scheduler.every (SERIAL_PRINT_INTERVAL, (batal *) -> bool {SerialPrintChannels (); kembali benar;}); }

Selang pin akan dipanggil setiap kali nilai logik pin berubah, jadi untuk setiap tepi pada isyarat PPM. Nilai panjang nadi hanya dengan pemasaan sederhana menggunakan mikro ():

uint32_t curTime = mikro ();

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

Dengan menilai keadaan pin semasa dan menggabungkannya dengan panjang nadi dan denyutan masa lalu, denyutan baru dapat dikelaskan. Berikutan bersyarat akan mengesan jurang antara bingkai:

jika (LastState == 0 && pulseLength> 3000 && pulseLength <6000)

Untuk nadi seterusnya, panjang nadi akan dipetakan ke keadaan paksi dengan memotong dan memendekkan panjang nadi agar sepadan dengan julat paksi kayu bedik:

uint16_t rxLength = panjang denyut;

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

Susunan rxChannels akhirnya mengandungi 16 nilai dari 0 - 1000, menunjukkan kedudukan tongkat / gelangsar dan butang.

Setelah menerima 16 saluran, pemetaan ke Joystick dilakukan:

/ * paksi * /

Joystick.setThrottle (saluran [0]); Joystick.setXAxis (saluran [1]); Joystick.setYAxis (1000 - saluran [2]); Joystick.setRxAxis (saluran [3]); Joystick.setRyAxis (saluran [4]); Joystick.setZAxis (1000 - saluran [5]); / * butang * / Joystick.setButton (0, (saluran [6] <500? 1: 0)); / * kemas kini data melalui USB * / Joystick.sendState ();

Saya membalikkan beberapa paksi dalam kod, yang tidak mutlak diperlukan, kerana paksi juga dapat dibalik dengan membalikkan arah servo atau tugas dalam FSX. Walau bagaimanapun, saya memutuskan untuk mematuhi arahan servo dan juga tugas FSX yang asal.

Butang dihidupkan atau dimatikan oleh saluran ambang 7.

Dan jangan lupa mencentang penjadual … jika tidak, cetakan debug tidak akan kelihatan.

gelung kosong () {

scheduler.tick (); }

Dalam tangkapan skrin yang saya lampirkan, anda dapat melihat, saluran 1 dipindahkan dari 1000 (pendikit penuh) ke 0 (tidak aktif).

FSX akan mengesan Arduino seperti Joystick lain, jadi tetapkan butang dan sumbu dan bersenang-senang melepaskannya!

Apa yang sangat saya gemari mengenai pendekatan ini ialah, anda boleh menggunakan pemancar anda seperti model sebenar, mis. menggunakan fasa penerbangan dll.

Disyorkan: