工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

FlightGearアナログトリムタブホイール

コンポーネントと消耗品

>
Arduino Nano R3
または互換性のあるボード
× 1
ロータリーポテンショメータ(汎用)
× 1
コンデンサ100µF
× 1
Adafruit SSD13060.96インチOLED
× 1
ジャンパー線(汎用)
× 1

アプリとオンラインサービス

>
Arduino IDE
アナコンダ
FlightGear

このプロジェクトについて

ArduinoをFlightGearに接続することは目新しいことではありませんが、ウィキは時代遅れであり、フォーラムは回避しなければならない貴重なヒントを提供していることがわかりました。

アイデアは、FlightGearで航空機のエレベータートリムタブホイールを制御するための、安価でコンパクトなアナログコマンドを使用することでした。 wikiはコミュニケーション部分まで機能します。厳密に言えば、シリアル通信を直接使用してArduinoからFlightGearにコマンドを渡すことはできません。 UDP経由でパケットを送信するには、Pythonを使用して回避する必要があります。

<図>

トリムホイールとは何ですか?トリムタブのたわみを制御するアナログ装置であり、パイロットの努力なしに操縦翼面(この場合は航空機のピッチを制御するエレベータ)を所定の位置に維持するための空力装置です。ウィキペディアから:

<図>

このプロジェクトの追加要件:ライブラリ serial を使用したPython 、 socket 、および sys インストールされています。 Anacondaがインストールされていると仮定すると、不足しているライブラリは、次のように入力することでAnacondaプロンプトで取得できます。

>>> conda install -c anaconda pyserial

serial でも同じです および socket 。インターネットで適切なパッケージを検索します。通常、プラットフォームに最もダウンロードされているものが適しています。これらのライブラリを使用してPythonを入手したら(もちろん、FlightGearをインストールしたら)、次のセクションに進むことができます。

コードスクリプトには、Arduinoスケッチ、Python実行可能スクリプト、およびXMLスクリプトの3つがあります。 Arduinoスケッチをボードにロードする必要があります。 ArduinoとFlightGear間の通信を有効にするには、Pythonスクリプトを実行する必要があります。 XMLスクリプトはFlightGearの汎用プロトコルであり、 / data / protocol に移動する必要があります。 一度だけ。

Arduinoスケッチには U8glib が必要です 図書館。コメントに記載されているように、ディスプレイでスケッチの2行目を調整します。

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

U8glib を参照してください 例とドキュメント。スケッチはディスプレイがなくても機能するはずなので、ボードからの視覚的なフィードバックなしでプレイできます。

回転の方向に不満がある場合は、次の map の最後の2つの引数の位置を切り替えるだけです。 指示

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

ポテンショメータの値が-100から100になり、針のゲージが0から90になるようにします(これは、針を正しい位置に引くためのトリックです。興味がある場合は、自分で試してください)。

Pythonスクリプトには、ホストアドレスとシリアルポート番号が含まれています。ホストは "localhost" である必要があります (機能しない場合は、 127.0.0.1 を試してください )、任意のポート(他のアプリケーションで使用されていない方が良いかもしれませんが、わかりません)、ボードが接続されているシリアルポートはArduinoIDEから読み取ることができます。私の場合は "COM4" 注:シリアルモニターでArduinoをテストする場合、Pythonスクリプトを実行する前に、ボードを切断して再接続しなければならない場合があります。

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

Pythonスクリプトはどこにでも配置できます。オペレーティングシステムのコマンドラインから実行できます。私の場合(Windows)、コマンドプロンプトを入力します:

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

これは、FlightGearを開始する前または開始した後に起動される場合があります。

最後に、前述のように、XMLスクリプトは、FlightGearインストールのプロトコルフォルダーに一度移動する必要があります。これで準備が整いました。次のコマンドを追加して、好みのモード(コマンドラインまたはランチャー)でFlightGearを起動します(文字の間にスペースを入れないでください!)

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

ここで、FlightGearに、ソケットを介して汎用プロトコルを適用するように指示し、アドレスlocalhost、ポート21567、UDPプロトコル、arduinoElevatorTrim.xmlファイルの命令で1秒間に30回入力を読み取ります。パーソナルトリムホイールをお楽しみください!

コード

  • arduinoElevatorTrimOLED.ino
  • arduinoElevatorTrim.py
  • arduinoElevatorTrim.xml
arduinoElevatorTrimOLED.ino Arduino
ArduinoNanoにロードするコード。必要に応じて2行目(ディスプレイのタイプ)を調整します。
 #include  U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0); // I2C / TWI int xmax =128; int ymax =64; int xcenter =xmax / 2; int ycenter =ymax / 2 + 10; int arc =ymax / 2; int角度=0; char * label ="TRIM"; int labelXpos =53; int p、w、m; u8g_uint_t xx =0; int const potPin =A6; float potVal; //カスタマイズされたfunctionvoidgauge(uint8_t angle){//ゲージの境界線を描画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); //針のフロートを描画しますx1 =sin(2 * angle * 2 * 3.14 / 360); float y1 =cos(2 * angle * 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); //スケールラベルを表示//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、 "DOWN"); u8g.drawStr(52、17、 "NEUT"); u8g.drawStr(105、42、 "UP"); //ゲージラベルを表示u8g.setPrintPos(labelXpos、32); u8g.print(label); //デジタル値を表示し、その位置を揃えます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);} void setup(){Serial.begin(9600); u8g.setFont(u8g_font_chikita); u8g.setColorIndex(1); //デフォルトの色値を割り当てますif(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はpotValと同じですが、整数ですp =analogRead(potPin); w =map(p、0,1023,100、-100); m =map(p、0,1023,90,0); //針を表示してダイヤルしますxx =m; if(xx <45){xx =xx + 135; } else {xx =xx-45; } //画像ループ{u8g.firstPage(); {ゲージ(xx); } while(u8g.nextPage()); } delay(10);} 
arduinoElevatorTrim.py Python
シリアル通信をUDPパケットに「変換」するためにFlightGearと一緒に実行されるスクリプト。このスクリプトを実行するには、Pythonをインストールする必要があります。必要に応じて14行目(Arduinoが接続されているUSBポート)を変更します。
#!/ 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:#some value changed print(line)outline =line UDPSock.sendto(outline、addr)prevline =line 
arduinoElevatorTrim.xml XML
/ data / Protocolフォルダーに追加するスクリプト。これをすべて1回実行します。
 <?xmlversion ="1.0"?>     \ n    エレベータートリム  / controls / flight / elevator-trim  フロート     
Github
Githubのオンラインリポジトリhttps://github.com/dciliberti/arduinoElevatorTrimOLED

回路図

フリッツでは、コンポーネントの下にワイヤーを通すことはできません。ディスプレイのアース線はArduinoNanoの下にある場合があります。

製造プロセス

  1. Arduino Digital Dice
  2. 鉄人
  3. アナログスタイルのLEDPOVクロック
  4. Find Me
  5. Arduino3Dプリントロボットアーム
  6. Arduino加湿器制御
  7. NeoMatrix Arduino Pong
  8. Arduinoジョイスティック
  9. Arduino TEA5767FMラジオ受信機
  10. 歩数計(Arduino 101)
  11. Arduinoカラーミキサー