Bangun Quadrant Throttle Kustom & Roda Trim untuk MS Flight Simulator dengan Arduino Leonardo & Cetak 3D
Komponen dan Perlengkapan
- Arduino Leonardo – 1 unit (Leonardo atau Micro cocok untuk proyek ini, maksimal 6 kontrol pada setiap Arduino)
- Kabel Sambung (Hook Up Wire) – 3 unit (3 kabel per modul)
- Potensiometer Rotary 50k – 1 unit (detail di bagian cerita, 1 per modul)
Alat dan Mesin yang Diperlukan
- Solder (umum)
- Printer 3D (umum)
Aplikasi dan Layanan Online
Tentang Proyek Ini
Pengantar
Setelah memperbarui PC saya agar dapat menjalankan MS FS2020, saya terinspirasi untuk meningkatkan kontrol yang saya gunakan. Keyboard tidak memberikan sensasi yang tepat untuk terbang, dan saya ingin meningkatkan pengalaman menjadi lebih baik. Saya bukan flight simmer full-time dan tidak mampu menyediakan ruang atau uang untuk membuat cockpit penuh atau bahkan rangkaian kontrol yang dibeli.
Desain
Saya merancang rangkaian kontrol dalam CAD yang dapat dibuat dengan alat yang saya miliki dan memberikan pengalaman yang wajar sesuai dengan yang saya bayangkan seperti kontrol pesawat nyata. Saya pernah menyentuh kontrol pesawat, jadi desain ini berdasarkan apa yang saya pikir akan terlihat.
Saya memutuskan kontrol yang diinginkan adalah beberapa lever tunggal untuk throttle, flaps, landing gear, dan roda trim elevator. Saya sebagian besar terbang dengan pesawat kecil ringan mesin tunggal dalam simulasi, jadi itulah yang menjadi fokus saya.
Roda trim adalah yang paling sulit dirancang dan membutuhkan beberapa ide sketsa selama beberapa hari untuk menghasilkan desain yang saya pikir akan memberikan tampilan dan sensasi yang diinginkan.
Pembuatan
Semua bagian dicetak 3D dalam ABS pada printer UP! saya, kemudian dicat dan dihubungkan ke Arduino, Leonardo untuk memulai lalu diganti dengan Micro. Untuk menghasilkan unit plug and play yang dapat disimpan dengan mudah saat tidak digunakan.
Bagian-bagian
Daftar Bagian Cetak 3D
Setiap modul lever membutuhkan:
- 1 x Body kiri
- 1 x Body kanan
- 1 x Lever dengan x detents, 5 varian tersedia dengan 2-6 detents
- 1 x Lever end
- 1 x Knob, 6 varian tersedia
- 1 x Friction plate, 3 varian tersedia
- 1 x Potentiometer holder
Setiap modul roda membutuhkan:
- 1 x Trim wheel body kiri
- 1 x Trim wheel body kanan
- 1 x Trim wheel gear
- 1 x Trim wheel hub
- 1 x Trim wheel wheel, jika membuat roda terrakit
- 8 x Trim wheel nodules, jika membuat roda terrakit
- 1 x Trim wheel single piece, jika membuat roda satu potongan
- 1 x Trim wheel quadrant
- 1 x Trim wheel quadrant drive
- 1 x Potentiometer holder
Bagian back box dapat digunakan untuk menempatkan Arduino dan kabeling.
Kesimpulan
Pembuatan yang sangat menyenangkan, sangat mudah dari segi kode, tantangan nyata dalam pembuatan ini adalah desain, terutama roda trim dan mendapatkan sensasi yang tepat.
Kode
Quadrant.inoArduino
Gunakan variabel setting dan serial monitor untuk menemukan nilai akhir setiap potensiometer, masukkan ke dalam array axisLimits.
#include <Joystick.h>
Joystick_ Joystick;
// put the max and min values from the analogRead in these arrays
// these are translated to a range of 0 - 1023
int axisLimits0[] = {686, 338};
int axisLimits1[] = {345, 695};
int axisLimits2[] = {327, 678};
int axisLimits3[] = {342, 692};
int axisLimits4[] = {0, 1023};
int axisLimits5[] = {0, 1023};
// turn axes on or off by setting these variables
bool a0Used = true;
bool a1Used = true;
bool a2Used = true;
bool a3Used = true;
bool a4Used = false;
bool a5Used = false;
// setting mode prints the pin value and translated value to the serial monitor
// int setting = -1; // no printing to the serial monitor
// int setting = 2; // values 0 - 5, print the pin values to the serial monitor
int setting = -1;
void setup() {
if(a0Used) pinMode(A0, INPUT);
if(a1Used) pinMode(A1, INPUT);
if(a2Used) pinMode(A2, INPUT);
if(a3Used) pinMode(A3, INPUT);
if(a4Used) pinMode(A4, INPUT);
if(a5Used) pinMode(A5, INPUT);
Joystick.begin();
if(setting >= 0) Serial.begin(9600);
}
void loop() {
int value = 0;
int pos = 0;
if(a0Used){ value = analogRead(A0); pos = translateValue(value, axisLimits0[0], axisLimits0[1]); Joystick.setThrottle(pos); if(setting == 0) settingPrint(value, pos); }
if(a1Used){ value = analogRead(A1); pos = translateValue(value, axisLimits1[0], axisLimits1[1]); Joystick.setRxAxis(pos); if(setting == 1) settingPrint(value, pos); }
if(a2Used){ value = analogRead(A2); pos = translateValue(value, axisLimits2[0], axisLimits2[1]); Joystick.setRyAxis(pos); if(setting == 2) settingPrint(value, pos); }
if(a3Used){ value = analogRead(A3); pos = translateValue(value, axisLimits3[0], axisLimits3[1]); Joystick.setRzAxis(pos); if(setting == 3) settingPrint(value, pos); }
if(a4Used){ value = analogRead(A4); pos = translateValue(value, axisLimits4[0], axisLimits4[1]); Joystick.setXAxis(pos); if(setting == 4) settingPrint(value, pos); }
if(a5Used){ value = analogRead(A5); pos = translateValue(value, axisLimits5[0], axisLimits5[1]); Joystick.setYAxis(pos); if(setting == 5) settingPrint(value, pos); }
delay(5);
}
int translateValue(int v, int f1, int f2){
// translates values to a 0 - 1023 range
int result = 0;
int start = 0;
float range = 0;
if(f1 < f2){ start = f1; range = f2 - f1; }
else{ start = f2; range = f1 - f2; }
result = (v - start) * (1023 / range);
if(result < 0) result = 0;
if(result > 1023) result = 1023;
return result;
}
void settingPrint(int value, int pos){
Serial.print(value);
Serial.print(" ");
Serial.println(pos);
}
Bagian Kustom dan Enclosure
Satu tanpa tab jika Anda membutuhkannya. Satu yang saya gunakan. Sketchfab masih diproses. Berkas ini berisi semua bagian sebagai file STEP: released_u3k8QjPXzJ.stp
Skematik
Untuk menambahkan lebih banyak kontrol, hubungkan 5V dan GRD dan gunakan pin A1 hingga A5: quadrant_ZkMygPyRiE.fzz