Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Roda Tab Trim Analog FlightGear

Komponen dan persediaan

Arduino Nano R3
atau papan yang kompatibel
× 1
Potensiometer putar (generik)
× 1
Kapasitor 100 F
× 1
Adafruit SSD1306 OLED 0,96 inci
× 1
Kabel jumper (generik)
× 1

Aplikasi dan layanan online

Arduino IDE
Anaconda
FlightGear

Tentang proyek ini

Menghubungkan Arduino ke FlightGear bukanlah hal baru, tetapi menurut saya wiki sudah ketinggalan zaman dan forum memberikan petunjuk berharga di mana Anda harus mengatasinya.

Idenya adalah untuk memiliki perintah analog yang bagus, murah, dan ringkas untuk mengontrol roda tab trim elevator pesawat di FlightGear. Wiki bekerja sampai bagian komunikasi. Sebenarnya, Anda tidak dapat langsung menggunakan komunikasi serial untuk meneruskan perintah dari Arduino ke FlightGear. Anda harus bekerja dengan Python untuk mengirim paket melalui UDP.

Apa itu roda trim? Ini adalah perangkat analog untuk mengontrol defleksi trim tab, yang merupakan perangkat aerodinamis untuk menjaga permukaan kontrol (dalam hal ini elevator yang mengontrol pitch pesawat) pada posisi tertentu tanpa usaha dari pilot. Dari wikipedia:

Persyaratan tambahan untuk proyek ini:python dengan pustaka serial , soket , dan sys diinstal. Dengan asumsi bahwa Anaconda telah diinstal, perpustakaan yang hilang dapat diambil dengan Anaconda prompt dengan mengetik:

>>> conda install -c anaconda pyserial

sama dengan serial dan soket . Cari di internet untuk paket yang sesuai, biasanya yang paling banyak diunduh untuk platform Anda bagus. Setelah Anda memiliki python dengan pustaka ini (dan, tentu saja, FlightGear terinstal), Anda dapat pindah ke bagian berikutnya.

Ada tiga skrip kode:sketsa Arduino, skrip yang dapat dieksekusi python, dan skrip XML. Sketsa Arduino harus dimuat di papan Anda. Skrip python harus dijalankan untuk mengaktifkan komunikasi antara Arduino dan FlightGear. Skrip XML adalah protokol generik FlightGear yang harus dipindahkan ke /data/protocol sekali untuk selamanya.

Sketsa Arduino membutuhkan U8glib Perpustakaan. Seperti yang disebutkan dalam komentar, sesuaikan garis sketsa 2 dengan tampilan Anda:

#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI 

Lihat U8glib contoh dan dokumentasi. Sketsa harus berfungsi bahkan tanpa tampilan, jadi Anda dapat bermain tanpa umpan balik visual dari papan Anda.

Jika Anda tidak puas dengan arah rotasi, cukup alihkan posisi dua argumen terakhir di peta berikut instruksi

w =peta(p,0,1023,100,-100);m =peta(p,0,1023,90,0); 

agar nilai potensiometer dari -100 menjadi 100 dan jarum pengukur dari 0 menjadi 90 (ini trik untuk menarik jarum pada posisi yang benar, coba sendiri jika penasaran).

Skrip python menyertakan alamat host dan nomor port serial. Host harus "localhost" (jika tidak berhasil, coba dengan 127.0.0.1 ), port any (mungkin lebih baik tidak digunakan oleh aplikasi lain, saya tidak tahu), port serial tempat board Anda terhubung dapat dibaca dari Arduino IDE. Dalam kasus saya, ini adalah "COM4" . Catatan:jika Anda menguji Arduino dengan monitor serial, Anda mungkin harus memutuskan dan menyambungkan kembali papan Anda sebelum menjalankan skrip python agar dapat berfungsi dengan baik.

host ="localhost"port =21567#buf =1024addr =(host,port)UDPSock =socket(AF_INET,SOCK_DGRAM)tty="COM4"print("tty is ", tty) 

Skrip python dapat ditemukan di mana saja. Anda dapat menjalankannya dari baris perintah sistem operasi Anda. Dalam kasus saya (Windows), saya mengetikkan command prompt:

python c:\path\to\file\arduinoElevatorTrim.py

Ini mungkin diluncurkan sebelum atau bahkan setelah memulai FlightGear.

Terakhir, seperti yang dinyatakan sebelumnya, skrip XML harus dipindahkan sekali untuk semua dalam folder protokol instalasi FlightGear Anda. Sekarang Anda siap untuk pergi. Luncurkan FlightGear dengan mode pilihan Anda (baris perintah atau peluncur) dengan menambahkan perintah berikut (tanpa spasi di antara karakter!) :

--generic=socket,in,30,localhost,21567,udp,arduinoElevatorTrim

di mana kami memberi tahu FlightGear untuk menerapkan protokol generik melalui soket, membaca input 30 kali per detik, pada alamat localhost, port 21567, protokol UDP, instruksi dalam file arduinoElevatorTrim.xml. Nikmati roda trim pribadi Anda!

Kode

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.inoArduino
Kode untuk dimuat di Arduino Nano. Sesuaikan baris 2 (jenis tampilan) sesuai kebutuhan.
#include U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymaks =64; int xpusat =xmax/2; int ycenter =ymax/2+10; int busur =ymax/2; int sudut =0; char* label ="TRIM"; int labelXpos =53; int p, w, m;u8g_uint_t xx =0;int const potPin =A6;float potVal;// Disesuaikan functionvoid gauge(uint8_t angle) { // menggambar batas gauge u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_RIGHT); u8g.drawCircle(xcenter,ycenter,arc+6, U8G_DRAW_UPPER_LEFT); u8g.drawCircle(xcenter,ycenter,arc+4, U8G_DRAW_UPPER_LEFT); // menggambar pelampung jarum x1 =sin(2*sudut*2*3.14/360); float y1 =cos(2*sudut*2*3.14/360); u8g.drawLine(xcenter, ycenter, xcenter+arc*x1, ycenter-arc*y1); u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT); u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT); u8g.setFont(u8g_font_chikita); // tampilkan label skala// u8g.drawStr( 10, 42, "-1.0"); // u8g.drawStr( 19, 14, "-0.5");// u8g.drawStr( 63, 14, "0");// u8g.drawStr( 92, 14, "0.5");// u8g. drawStr( 105, 42, "1.0"); u8g.drawStr( 1, 42, "BAWAH"); u8g.drawStr( 52, 17 , "NETT"); u8g.drawStr( 105, 42, "NAIK"); // tampilkan label pengukur u8g.setPrintPos(labelXpos,32); u8g.print(label); // tampilkan nilai digital dan sejajarkan posisinya u8g.setFont(u8g_font_profont22); if (w>=99) { u8g.setPrintPos(47,60); } if (w>=10 &&w <99) { u8g.setPrintPos(54,60); } if (w>=0 &&w <9) { u8g.setPrintPos(60,60); } if (w>=-9 &&w <0) { u8g.setPrintPos(48,60); } if (w>=-99 &&w <-9) { u8g.setPrintPos(42,60); } if (w <-99) { u8g.setPrintPos(35,60); } u8g.print(w);}pengaturan batal() { Serial.begin(9600); u8g.setFont(u8g_font_chikita); u8g.setColorIndex(1); // menetapkan nilai warna default jika ( u8g.getMode() ==U8G_MODE_R3G3B2 ) { u8g.setColorIndex(255); } else if ( u8g.getMode() ==U8G_MODE_GRAY2BIT ) { u8g.setColorIndex(3); } else if ( u8g.getMode() ==U8G_MODE_BW ) { u8g.setColorIndex(1); } else if ( u8g.getMode() ==U8G_MODE_HICOLOR ) { u8g.setHiColorByRGB(255.255.255); }}void loop() { potVal =analogRead(potPin); potVal =(potVal - 512.0)/512.0; Serial.print(potVal); Serial.print("\n"); // p sama dengan potVal, tetapi merupakan bilangan bulat p =analogRead(potPin); w =peta(p,0,1023,100,-100); m =peta(p,0,1023,90,0); // tunjukkan jarum dan dial xx =m; if (xx <45){ xx =xx + 135; } else { xx =xx - 45; } // loop gambar { u8g.Halaman pertama(); lakukan { pengukur(xx); } while( u8g.nextPage() ); } delay(10);}
arduinoElevatorTrim.pyPython
Skrip yang akan dieksekusi bersama FlightGear untuk "menerjemahkan" komunikasi serial ke dalam paket UDP. Anda perlu menginstal Python untuk menjalankan skrip ini. Ubah baris 14 (port USB tempat Arduino terhubung) sesuai kebutuhan.
#!/usr/bin/pythonimport sysimport serialfrom socket import *host ="localhost"port =21567#buf =1024addr =(host,port)UDPSock =socket(AF_INET,SOCK_DGRAM)tty="COM4"print("tty is ", tty)try:ser =serial.Serial(tty,9600)except:print("Error connect to " , tty) prevline="" while 1:outline='' line=ser.readline() if line !=prevline:#beberapa nilai diubah print(line) outline=line UDPSock.sendto(outline,addr) prevline=line
arduinoElevatorTrim.xmlXML
Skrip yang akan ditambahkan di folder /data/Protocol. Lakukan ini sekali untuk selamanya.
  \n ,  Trim elevator /controls/flight/elevator-trim float  
Github
Repositori online di Githubhttps://github.com/dciliberti/arduinoElevatorTrimOLED

Skema

Dalam Fritzing tidak mungkin untuk melewatkan kabel di bawah komponen. Kabel ground layar mungkin berada di bawah Arduino Nano.

Proses manufaktur

  1. Arduino Digital Dice
  2. Iron Man
  3. Jam POV LED Gaya Analog
  4. Temukan Saya
  5. Arduino 3D-Printed Robotic Arm
  6. Kontrol Humidifier Arduino
  7. NeoMatrix Arduino Pong
  8. Arduino Joystick
  9. Penerima Radio FM Arduino TEA5767
  10. Pedometer (Arduino 101)