Daftar Isi:
- Perlengkapan
- Langkah 1: Hubungkan RX dan Arduino
- Langkah 2: Mendapatkan Beberapa Sinyal PPM
- Langkah 3: Mengkonfigurasi Pemancar
- Langkah 4: Menjalankan Joystick
- Langkah 5: Mengkode Arduino
Video: Berbasis Arduino (JETI) PPM ke USB Joystick Converter untuk FSX: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:54
Saya memutuskan untuk mengganti pemancar JETI DC-16 saya dari Mode 2 ke Mode 1, yang pada dasarnya mengubah Throttle dan Elevator dari kiri ke kanan dan sebaliknya. Karena saya tidak ingin crash salah satu model saya karena beberapa kebingungan kiri/kanan di otak saya, saya bertanya-tanya apakah mungkin untuk berlatih sedikit di FSX.
Saya membaca dan menguji pemancar JETI benar-benar mendukung mode Joystick di luar kotak, namun saya menginginkan fleksibilitas penuh untuk tugas sumbu dan sakelar dan menggunakan TX seperti pada model nyata. Dengan menggunakan output receiver, juga dimungkinkan untuk memanfaatkan pemrosesan sinyal di DC-16 dan menggunakan mixer, fase penerbangan, kecepatan ganda, apa pun yang dapat Anda program di sana.
Baru-baru ini saya menemukan tutorial yang bagus tentang cara membuat perangkat input USB HID, yaitu Joystick, dari Arduino murah seperti Pro Micro:
www.instructables.com/id/Create-a-Joystick…
Ini akan memungkinkan semua yang diperlukan untuk mengendalikan pesawat / helikopter / apa pun di FSX! Banyak sumbu dan tombol yang tersedia.
Karena saya baru saja memiliki JETI RSAT2 cadangan, saya memutuskan untuk menghubungkannya dengan Arduino dan mencoba menerapkan parser PPM kecil bersama dengan perpustakaan Joystick.
Saya berasumsi siapa pun yang mengikuti langkah-langkah ini akrab dengan menghubungkan dan memprogram Arduino. Saya tidak akan mengambil jaminan untuk malfungsi atau kerusakan!
Perlengkapan
Anda akan perlu…
- Arduino apa pun yang didukung oleh perpustakaan Joystick, saya menggunakan Sparkfun Pro Micro 5V / 16 MHz
- versi terbaru dari Arduino IDE
- setiap penerima RC yang mengeluarkan sinyal PPM, seperti JETI RSAT2
- beberapa kabel jumper (min. 3)
- perpustakaan Joystick dipasang di Arduino IDE
- perpustakaan arduino-timer:
Langkah 1: Hubungkan RX dan Arduino
Pengkabelan cukup mudah. Saya memutuskan untuk hanya menyalakan Arduino dari USB, karena itu akan meniru perangkat Joystick. Ini akan memasok Arduino dengan 5V, yang dapat digunakan juga untuk memberi daya pada penerima RC.
Saya menggunakan Pin VCC, yang menyediakan output yang diatur, dan pin Gnd terdekat - cukup sambungkan ke pin konektor + dan - PPM. Saat Arduino diberi daya, penerima sekarang juga menyala.
Untuk sinyal PPM, saya memutuskan untuk menggunakan interupsi untuk menguraikannya. Interupsi tersedia, mis. di Pin 3, jadi sambungkan saja di sana - tidak ada "pin RC asli" pada arduino, tetapi mungkin lebih banyak dan cara yang berbeda untuk membaca sinyal penerima.
Saya harus menonaktifkan alarm tegangan RX, karena tegangan VCC dengan suplai USB hanya sekitar 4,5V - tetapi cukup stabil, jadi tidak ada masalah sama sekali.
Langkah 2: Mendapatkan Beberapa Sinyal PPM
Ketika penerima DAN TX dihidupkan, saya mendapatkan sinyal PPM seperti yang ditunjukkan pada gambar. 16 saluran, diulang selamanya. Jika Failsafe pada RSAT dinonaktifkan dan pemancar dimatikan, output PPM akan dinonaktifkan.
Informasi lebih lanjut tentang PPM tersedia di sini:
- https://en.wikipedia.org/wiki/Pulse-position_modul…
- https://wiki.rc-network.de/index.php/PPM
Karena saya tidak menerbangkan barang nyata dalam hal ini, saya tidak peduli dengan pengaturan waktu teoretis dan hanya mengetahui di osiloskop apa yang dihasilkan receiver saya secara akurat ketika memindahkan tongkat dari kiri penuh ke kanan penuh (pengaturan standar di TX). Tampaknya -100% sesuai dengan pulsa dengan panjang 600µs, dan +100% hingga 1600s. Saya juga tidak peduli dengan panjang pulsa jeda (400µs) dalam kode Arduino saya, tetapi saya mengasumsikan jarak bingkai min. 3000 detik.
Langkah 3: Mengkonfigurasi Pemancar
Karena hanya posisi sebenarnya dari permukaan kontrol yang perlu diketahui, satu saluran / "servo" per fungsi RC sudah cukup. Akibatnya, setup pemancar yang agak sederhana dapat dibuat - mirip dengan model RC normal. Fungsi utama aileron, elevator, rudder dan throttle masing-masing hanya membutuhkan satu saluran pemancar masing-masing servo. Saya juga menambahkan penutup, rem, dan roda gigi, sejauh ini menyisakan 9 saluran gratis. Harap dicatat bahwa Flaps diletakkan pada fase penerbangan, dan tidak dikontrol secara langsung melalui tongkat, penggeser, atau tombol.
Langkah 4: Menjalankan Joystick
Pustaka Joystick cukup mudah digunakan, dan menyediakan beberapa contoh dan pengujian. Akan sangat membantu untuk memeriksa terlebih dahulu apakah Arduino terdeteksi sebagai Joystick yang tepat, instruksi yang ditautkan di bagian entri dan perpustakaan itu sendiri memberikan beberapa panduan yang baik.
Di panel kontrol Perangkat dan Printer, Arduino muncul sebagai "Sparkfun Pro Micro", dan jendela uji joystick menunjukkan 7 sumbu dan banyak tombol yang didukung. Bahkan sakelar topi dapat digunakan saat diprogram di Arduino.
Langkah 5: Mengkode Arduino
Apa yang masih hilang adalah penguraian sebenarnya dari sinyal PPM dan penetapan ke sumbu dan tombol Joystick. Saya memutuskan untuk pemetaan berikut:
Penugasan Saluran / Fungsi / Joystick:
- Throttle -> Sumbu Throttle
- Aileron -> sumbu X
- Lift -> sumbu Y
- Kemudi -> sumbu rotasi X
- Flaps -> sumbu rotasi Y
- Rem -> sumbu Z
- Gigi -> Tombol 0
Saat persneling turun, tombol pertama Joystick akan ditekan dan akan dilepaskan saat menaikkan persneling. Namun, ini akan membutuhkan FSUIPC untuk FSX, di luar kotak, FSX hanya akan menerima tombol untuk mengubah persneling, yang tidak persis seperti yang terjadi dengan model saya.
Saya memberikan versi kode saya saat ini dengan banyak komentar, yang bekerja cukup baik untuk saya - jangan ragu untuk mengubah tugas Anda atau menambahkan fungsi baru. 9 saluran RC terakhir saat ini tidak digunakan.
Untuk pengaturan, kelas Joystick perlu diinisialisasi, pada dasarnya dengan menentukan rentang sumbu numerik:
/* Mengatur rentang sumbu (didefinisikan di header, 0 - 1000) */
Joystick.setXAxisRange(CHANNEL_MIN, CHANNEL_MAX); Joystick.setYAxisRange(CHANNEL_MIN, CHANNEL_MAX); …
Dengan menggunakan nilai dari 0 hingga 1000, dimungkinkan untuk langsung memetakan panjang pulsa (600 - 1600µs) ke nilai joystick tanpa mengubah skala.
DIN 3 diinisialisasi sebagai input digital, pullup diaktifkan, dan interupsi terpasang:
pinMode(PPM_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PPM_PIN), PPM_Pin_Changed, CHANGE);
Untuk tujuan debugging, saya menambahkan beberapa cetakan melalui antarmuka Serial secara berkala, menggunakan perpustakaan arduino-timer:
if(SERIAL_PRINT_INTERVAL > 0) {
scheduler.every(SERIAL_PRINT_INTERVAL, (void*) -> bool { SerialPrintChannels(); return true; }); }
Interupsi pin akan dipanggil setiap kali nilai logika pin berubah, jadi untuk setiap tepi dalam sinyal PPM. Evaluasi panjang pulsa hanya dengan pengaturan waktu sederhana menggunakan micros():
uint32_t curTime = mikro();
uint32_t pulseLength = curTime - edgeTime; uint8_t curState = digitalRead(PPM_PIN);
Dengan mengevaluasi status pin saat ini dan menggabungkannya dengan panjang pulsa dan pulsa masa lalu, pulsa baru dapat diklasifikasikan. Kondisional berikut akan mendeteksi celah interframe:
if(LastState == 0 && pulseLength > 3000 && pulseLength <6000)
Untuk pulsa berikutnya, panjang pulsa akan dipetakan ke status sumbu dengan memotong dan membiaskan panjang pulsa agar sesuai dengan rentang sumbu joystick:
uint16_t rxLength = pulseLength;
rxLength = (rxLength > 1600) ? 1600: rxPanjang; rxPanjang = (rxPanjang < 600) ? 600: rxPanjang; rxChannels[curChannel] = rxLength - 600;
Array rxChannels akhirnya berisi 16 nilai dari 0 - 1000, yang menunjukkan posisi tongkat / penggeser dan tombol.
Setelah menerima 16 saluran, pemetaan ke Joystick dilakukan:
/* sumbu */
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]); /* tombol */ Joystick.setButton(0, (saluran[6] < 500 ? 1: 0)); /* memperbarui data melalui USB */ Joystick.sendState();
Saya membalikkan beberapa sumbu dalam kode, yang tidak mutlak diperlukan, karena sumbu juga dapat dibalik dengan membalik arah servo atau penugasan di FSX. Namun, saya memutuskan untuk mempertahankan arah servo dan juga tugas FSX asli.
Tombol diaktifkan atau dinonaktifkan oleh saluran ambang 7.
Dan jangan lupa untuk mencentang scheduler… jika tidak, tidak ada cetakan debug yang akan terlihat.
lingkaran kosong() {
penjadwal. centang(); }
Pada tangkapan layar yang saya lampirkan, Anda dapat melihat, saluran 1 dipindahkan dari 1000 (akselerasi penuh) ke 0 (idle).
FSX akan mendeteksi Arduino sama seperti Joystick lainnya, jadi tetapkan saja tombol dan sumbunya dan bersenang-senanglah lepas landas!
Yang sangat saya sukai dari pendekatan ini adalah, Anda dapat menggunakan pemancar seperti model nyata, mis. menggunakan fase penerbangan dll.
Direkomendasikan:
Timer Berbasis Arduino untuk Pompa Akuaponik: 4 Langkah
Timer Berbasis Arduino untuk Pompa Aquaponik: Ini adalah instruksi kecil pada Timer berbasis Arduino untuk Pompa Aquaponik. Saya memiliki pengaturan sistem aquaponik kecil di dalam ruangan dengan aliran kontinu. Pompa berjalan terus menerus dan saya ingin membuat pengatur waktu yang akan membuat pompa berjalan untuk amo tertentu
Serial UDP/IP Gateway untuk Arduino Berbasis ESP8266 Shield: 8 Langkah
Serial UDP/IP Gateway untuk Arduino Berdasarkan ESP8266 Shield: Saya sudah menerbitkan pada tahun 2016 instruksi ini "Cara membuat gateway Wifi Anda sendiri untuk menghubungkan Arduino Anda ke Jaringan IP". Karena saya melakukan beberapa perbaikan kode dan saya masih menggunakan solusi ini. Namun demikian, sekarang ada beberapa perisai ESP8266 yang
Termometer Inframerah Non Kontak Berbasis Arduino - Termometer Berbasis IR Menggunakan Arduino: 4 Langkah
Termometer Inframerah Non Kontak Berbasis Arduino | Termometer Berbasis IR Menggunakan Arduino: Hai teman-teman dalam instruksi ini kami akan membuat Termometer non-kontak menggunakan arduino. Karena terkadang suhu cairan / padat terlalu tinggi atau terlalu rendah dan kemudian sulit untuk melakukan kontak dengannya dan membacanya suhu kemudian dalam adegan itu
Generator Musik Berbasis Cuaca (Generator Midi Berbasis ESP8266): 4 Langkah (dengan Gambar)
Weather Based Music Generator (ESP8266 Based Midi Generator): Hai, hari ini saya akan menjelaskan cara membuat generator Musik berbasis Cuaca kecil Anda sendiri. Ini didasarkan pada ESP8266, yang mirip dengan Arduino, dan merespons suhu, hujan dan intensitas ringan. Jangan berharap untuk membuat seluruh lagu atau program akord
SilverLight: Monitor Lingkungan Berbasis Arduino untuk Ruang Server: 3 Langkah (dengan Gambar)
SilverLight: Monitor Lingkungan Berbasis Arduino untuk Ruang Server: Suatu kali saya diberi tugas untuk mencari probe lingkungan untuk memantau suhu di ruang server perusahaan saya. Ide pertama saya adalah: mengapa tidak menggunakan Raspberry PI dan sensor DHT saja, itu dapat diatur dalam waktu kurang dari satu jam termasuk OS