Dropbox

[ 関連記事 ]

ドローンにRGB LEDを搭載するもう一つの方法 <- 親記事です
ATtiny85によるLED制御 – ハードウェア実装編
ATtiny85によるLED制御 – BUZZパッドを利用した制御方法
ATtiny85によるLED制御 – プログラムの書き込み方法

「RGB LED制御プログラム書き込み済みATtiny85 – UART/LEDパッド接続用」の入力ポート(5番ピン)をFCのUARTまたはLED_Strip用パッドに接続して送信機から制御する方法です。

[ Betaflightファームウェアの前提 ]
Betaflightの更新の際に”その他のオプション”で”Pin IO”の指定が必要です。詳細については「ATtiny85によるLED制御 – BUZZパッドを利用した制御方法」の「Betaflightファームウェアの前提」の項をご覧ください。

[ FCへの接続 ]
電源への接続およびLEDへの接続は「ATtiny85によるLED制御 – ハードウェア実装編」をご覧ください。ATtiny85の5番ピンをFCのLEDパッドに接続します。TX, RXなどを使用いることも出来ます。

以下、LEDパッドで説明しますが必要に応じてTX, RXなどと読み替えください。

[ FCへの接続 ]
電源への接続およびLEDへの接続は「ATtiny85によるLED制御 – ハードウェア実装編」をご覧ください。ATtiny85の5番ピンはそのままFCのLEDバッドに接続します。

[ Betaflight Configuratorの設定 ]
CLIタブを開いていくつかのコマンドを投入する必要があります。
クリティカルな操作ですので最初にdiff allで構成のバックアップを取得しておいてください。

– LED_STRIPのリソースを見つける –
CLI画面で
resourc
コマンドを投入します。resourceの一覧が表示されますので、その中からLED_STRIPを見つけます。

resource LED_STRIP 1 B01

右端の文字列、この例の場合は”B01″を記憶します。これがFCボード上のLED_STRIPのパッドに付けられたIDです。

もしFC上にLEDパッドがあるのにresourceにてLED_STRIPが見つからない場合はBetaflightを更新の際に”LED Strip”のオプション指定が無いのかも知れません。オプションを指定して更新し直してください。

– PINIOの構成 –
引き続きCLIにて以下のコマンドを投入します。PINIOに割り当てるB01は実際の環境に応じて置き換えてください。

resource LED_STRIP 1 NONE
resource PINIO 1 B01
SET PINIO_BOX = 40,255,255,255
save

実際の画面だとこんな感じになります。

– モードによる送信機スイッチの割り当て –
上のPINIOの設定によりモード画面にUSER1が現れます。PINIO_BOXの最初のパラメーターである40が、このUSER1を出現させています。詳しいことはBetaflight Wikiをご覧ください。

USER1にAUX4(私の送信機のモーメンタリースイッチ)を割り当てた例です。どの領域をアクティブにするかは環境により変わります。アクティブな状態でATTiny85に対するスイッチオンであると考えて良いと思います。
これで送信機とLED_STRIPパッドが接続されました。

– 動作確認 –
スイッチを短押しして順次色が変われば成功です。長押しで光り方の変更です。もし意図したのと違う動作であればモード画面のアクティブになる範囲を調節してみてください。

[ BUZZパッドとの違い ]
LED_STRIP,TXn,RXnなどとBUZZとはハードウェア的に大きく違います。BUZZは単純なスイッチと考えて良いです。オフの時は開放されていて、オンになるとGNDに接続されます。LED_STRIP,TXn,RXnなどは普通のI/Oピンです。出力として設定された場合は状態により+3.3Vもしくは0V(GND)が現れます。そのため、ATtiny85側の設定も変える必要があります。実際にはBUZZ接続用に作ったATtiny85をLED_Stripに接続しても動作はしますが、電子回路の作りとして好ましくない状態が存在します。

[ 関連記事 ]

ドローンにRGB LEDを搭載するもう一つの方法 <- 親記事です
ATtiny85によるLED制御 – ハードウェア実装編
ATtiny85によるLED制御 – BUZZパッドを利用した制御方法
ATtiny85によるLED制御 – UART/LEDパッドを利用した制御方法

注意 : Arduino IDEに組み込むFastLEDライブラリーをバージョン3.7.4以降に更新するとこの手順で作動しなくなりました。もし動かなくなった場合は3.7.3をインストールしてください。

[ 参考記事 ]
1. VTX周波数毎に決められた色にする
2. ミニAVRマイコン『ATtiny85』にブートローダーを書き込みArduinoとして使えるようにしてみる!ATtiny85の基本的な使い方!

この二つを読んで頂ければ、このプログラムの概要とATtiny85への書き込み方法が分かります。補足的な事柄を書いておきます。

[ ATtiny85について ]
ATtiny85にはいくつかのパッケージがあります。開発用、大きめのドローンに搭載するにはDIPバッケージ、Tinyに搭載するにはさらに小型のSOPパッケージが良いと思います。SOPにプログラムを書き込む時にはDIPへの変換ソケットがあると便利です。
10MHz動作版と20MHz動作版がありますが、どちらでも大丈夫と思います。

[ ツール類 ]
PCからATtiny85に接続するために何かしらツールが必要です。上のリンクでいくつか紹介されていますが、私は手元にあるArduino Nanoを使用しました。その他にブレッドボードがあると便利です。私はAmazonで色々と部品が付属したキットを購入しました。

[ 接続 ]
上の参考記事2にある「ArduinoとATtiny85の接続」の通りに接続します。記事ではArduino Unoを使用していますが、Arduino Nanoでも全く同じです。ピンの名前を頼りに接続します。写真はDIP版ATtiny85にプログラムを書き込んでいる様子です。

[ 書き込みソフトウェアの準備 ]
ATtiny85をArduinoとして使用します。お馴染みArduino IDEを使ってソフトウェアを書き込みます。

– Arduino Nanoに書き込み用のソフトウェアを導入します。
わたしのArduino Nanoの設定はこんな感じです。

ExmapleからArduinoISPを書き込んで準備完了です。

– ATtiny85を使用するための準備
ATtiny85を使用するためにはPreference/Additional boards manager URL欄に”https://www.arduino.cc/en/software”を追加しました。参考記事2に書かれていたURLでは機能しませんでした。
Toolsメニューの設定を下のように行いBootloaderの書き込みが成功すればATtiny85がAuduinoとして使えるようになります。

[ ATtiny85へのプログラムの書き込み ]
あとはプログラムを作成し書き込むだけです。設定はBootloaderの書き込みと同じです。Sketch(プログラム)のUploadは通常の方法とは異なり”Sketch/Upload using programmer”を使用します。新しいチップに書き込む時はBootloaderの書き込みも忘れないようにしてください。

今回使用したソースコードです。ninjaMoonLightさんが書き始めて、途中から私も参加して共同作業で書いたコードです。条件コンパイルするようになっています。下の状態ではBUZZパッドもしくはスイッチを使用するプログラムになっています。7行目のコメントを外し”USE_LEDPORT”というマクロを有効にするとLEDパッドを使用するためのプログラムになります。setup()の最後にdelay(500)を入れています。これはある構成においてFCの信号が期待通りになるまでに時間がかかった時に入れたものです。現在の使用方法だと必要はないかも知れませんが安全を見込んで入れたままにしています。

// Pin assign
// arduino PIN 0,button = Attiny PIN 5
// arduino PIN 4,RGB LED = ATTiny PIN 3

// Uncomment following macro (USE_LEDPORT) defintion if use UART/LED_Strip as switch
// UART/LED_Stripをスイッチとして使う場合は以下のマクロを有効にする
//#define USE_LEDPORT

#include <EEPROM.h>
#include <FastLED.h>

//LEDの数
#define NUM_LEDS 80
//LED信号ピン
#define DATA_PIN 3
//ボタンのピン
#define myButton 0

#define NUM_COLORS 4
#define NUM_MODES 3

CRGB leds[NUM_LEDS];
CRGB color = CRGB::Black;

int currentColor = 0;
int currentMode = 0;
int prevColor = -1;
unsigned long prevTime = 0;

int flgTimer = 1;
unsigned long btnTimer;
const unsigned long shortPress = 30;
const unsigned long longPress = 800;

void blinking() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      if((time % 2) == 0){
        if((i % 2) == 0){
          leds[i] = color;
        } else {
          leds[i] = CRGB::Black;
        }
      } else {
        if((i % 2) == 0){
          leds[i] = CRGB::Black;
        } else {
          leds[i] = color;
        }
      }
    }
    FastLED.show();
    prevTime = time;
  }
}

void heartBeat() {
  unsigned long time = millis() / 100;
  if (time != prevTime) {
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;
    }
    FastLED.setBrightness((7 - time % 7) * 255 / 7);
    FastLED.show();
    prevTime = time;
  }
}

void normal() {
  if (currentColor != prevColor) {
    FastLED.setBrightness( 255 );
    for (int i = 0; i < NUM_LEDS; i++) {
      leds[i] = color;;
    }
    FastLED.show();
    prevColor = currentColor;
  }
}

void setup() {
  currentColor = EEPROM.read(0);
  if (currentColor < 0 || NUM_COLORS <= currentColor) currentColor = 0;
    currentMode = EEPROM.read(1);
  if (currentMode < 0 || NUM_MODES <= currentMode) currentMode = 0;
#ifdef USE_LEDPORT
  pinMode(myButton, INPUT); // button
#else
  pinMode(myButton, INPUT_PULLUP); // button
#endif
  ///////LED
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // GRB ordering
  // following delay may not be required
  delay(500);
}

void loop() {
#ifdef USE_LEDPORT
  if (digitalRead(myButton) == HIGH) {
#else
  if (digitalRead(myButton) == LOW) {
#endif
    if (flgTimer) {
      btnTimer = millis();
      flgTimer = 0;
    }
  } else {
    if (!flgTimer) {
      unsigned long diffTime = millis() - btnTimer;
      if (diffTime > longPress) { // Long pressed
        currentMode++;
        if (currentMode >= NUM_MODES) currentMode = 0;
          EEPROM.write(1, currentMode);
      } else if (diffTime > shortPress) {
        currentColor++;
        if (currentColor >= NUM_COLORS) currentColor = 0;
        EEPROM.write(0, currentColor);
      }
      flgTimer = 1;
    }
  }

  switch (currentColor) {
    case 0: color = CRGB::Red; break;
    case 1: color = CRGB::Green; break;
    case 2: color = CRGB::Blue; break;
    case 3: color = CRGB::White; break;
  }
  switch (currentMode) {
    case 0: normal(); break;
    case 1: blinking(); break;
    case 2: heartBeat(); break;
  }
}

EdgeTX Buddyによるファームウェア更新

今までOpeTX/EdgeTXのファームウェア更新はSDカードにファームウェアをコピーし送信機をブートローダーモードにして行っていましたが、一部の送信機ではEdgeTX BuddyというWebサイトを利用してUSBを経由して直接更新作業を行うことが出来ます。送信機の電源をオフのままPCにUSB接続すると自動的にブートローダーに入りPC側でSTM32 BOOTLOADERというデバイスが現れる送信機が対象となります。

以下、Radiomaster TX16Sで試してみた結果を簡単に紹介します。

– まずはSDカードの中身をどこかに保管しておきます。
– TX16Sの電源はオフのままUSBケーブルでPCとTX16Sを接続します。
– EdgeTX Buddy/Radio firmware画面にてFirmware versionとRadio modelを選択します。
– “Flash via USB”ボタンを押し、”STM32 BOOTLOADER”というデバイスを選択します。これはMacOSでの例です。Windowsではデバイス名とか画面は違うかもしれません。また状況によってはPCにドライバーの導入が必要かもしれません。


– “Next”を押し、あとは画面を見ておくだけです。

USB接続とWeb画面だけでファームウェアが更新出来るのは楽で良いです。続いてSDカードの内容を更新します。

– TX16Sの電源をオンにしてUSBで接続しSDカードドライブにします。
– SD Card contentの画面でSDドライブを選択します。

– 次にバージョン、モデル、音声の言語を選び”Apply changes”を押します。

– 後はひたすら待ちます。とにかくとてつもなく時間がかかります。失敗しているのでは無いかと思うくらい時間がかかります。

SDカードを取り出してSDカードドライブに入れて同じ手順で更新するとだいぶ速くなります。

最初、中身を消している画面が出て長い時間を消費してたのが、ちょっと謎です。後から試した時には、この画面は見ないこともありました。

新しいファームウェアに合わせたSDカードの中身が書き込まれている様子。

モデルなどはちゃんと残されているように思います。

壊れたFCをシュミレーターで使う

モーターが回らなくなってしまったAIO FC有りませんか? 古くからある手法ですが、それをシュミレーター用の受信機ドングルとして使用する方法の紹介です。最近のFCでは受信機が載っているのでかなりお手軽です。VTXも載っていてUSBで電源が入ってしまうのやつは熱くなるので向いていないと思います。当然、受信機は正常に動作している必要があります。

必要な情報は全てOscar Liangさんのところに書いてあります。ここではかいつまんで説明しておきます。

設定はとても簡単です。受信機が正しく構成されていることが前提です。

set usb_hid_cdc = on
save

上のコマンドをCLIで投入するだけです。これで(もしかすると一度USBの抜き差し後)、FPVシュミレーターからコントローラーとして認識されるはずです。

この設定を行ったあとBetaflight Configuratorに再び接続しようとしてもポートが見つから無くなってしまうことがあります。

こんな時は、Betaflight Configuratorのオプションを開いて「全てのシリアルデバイスを表示」をオンにすれば大丈夫です。

有線接続と比べてレスポンスがどうとかみたいな話しは、まったり飛ばす私にはよく分かりません。

これでワイヤレスでシュミレーター練習が出来るようになりました。ワイヤレス接続にはELRSのブルートゥースを利用する方法もありますので、この方法にさほど需要はないのかも知れません。

HDZeroゴーグルの画像をTinyViewPlusに取り込んでみた

HDZeroに限らずAvata2などにも応用可能な手順です。標準的なUSB接続の受信機以外からの映像をTinyViewPlusに認識してもらう方法についてのまとめです。

いきなり設定方法を書いていきます。後から説明を少しだけ書きます。

[ 接続 ]
HDZeroゴーグルにGUERMOK USB 3.0 HDMI to USB C オーディオ キャプチャ カード、4K 1080P60 キャプチャ デバイスを使用しPCに接続した。

[ カメラの名前を調べる ]
macOSの場合は「システム情報のカメラのセクションを見ます。(リンゴマーク->このマックについて->詳細情報->システムレポート)

Windows11の場合はデバイスマネージャーのカメラセクションを開きます。(スタートボタンを右クリックでデバイスマネージャー)

Mac, Winの双方にUSB2.0 PC CAMERAという名前があります。これがTinyViewPlusが既定値のままで認識するUSB接続の受信機です。Macで”USB3 Video”、Windows11では”USB2 Video”として認識されているのがHDZeroゴーグルの接続に使用したHDMIからUSBに変換するアダプターです。この名前をTinyViewPlusに知らせる必要があります。

[ 設定ファイルの編集 ]
設定ファイルはWindowsの場合は実行ファイルと同じフォルダー下のdata/camera/fpv.xmlです。MacOSの場合、Tiny View Plus.appを右クリックし、パッケージの内容を表示を実行します。その中のContents/Resources/data/camera/fpv.xmlです。
最初から入っているfpv.xmlはサンプルで、これが存在しなくてもTinyViewPlusは動作します(GV-USB2に相当するビデオキャプチャーを利用している場合を除き)。心置きなく弄ることができます。以下はオリジナルの内容です。

<camera> 
    <name>GV-USB2</name>
    <description>squeezed 16:9</description>
    <grab>
        <width>704</width>
        <height>480</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>704</width>
        <height>480</height>
    </crop>
    <draw>
        <aspectRatio>16:9</aspectRatio>
    </draw>
</camera>

二行目の<name>GV-USB2</name>を先に調べたカメラの名前に書き換えるだけでTinyViewPlusでHDZeroの画面が表示できるようになります。余談ですが、ここをFaceTimeとするとMacBookのカメラがTinyViewPlusに表示されたりもします。
縦横比とか解像度を正しくしておく方が良いと思い、二つの設定ファイルを試してみました。ひとつめはゴーグルで見ているままに全ての情報を表示する設定です。
以下、私のMacOSでの設定例です。

<camera>
    <name>USB3 Video</name>
    <description>squeezed 16:9</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>0</x>
        <y>0</y>
        <width>1920</width>
        <height>1080</height>
    </crop>
    <draw>
        <aspectRatio>16:9</aspectRatio>
    </draw>
</camera>

HDZeroを飛ばしている人の多くはカメラ設定を4:3にして飛ばしていると思います。この場合16:9の画面の中央部分にだけカメラ映像が表示されています。その部分だけを抜き出してTinyViewPlusに表示させることが出来ます。

<camera> 
    <name>USB3 Video</name>
    <description>4:3</description>
    <grab>
        <width>1920</width>
        <height>1080</height>
    </grab>
    <crop>
        <x>240</x>
        <y>0</y>
        <width>1440</width>
        <height>1080</height>
    </crop>
    <draw>
        <aspectRatio>4:3</aspectRatio>
    </draw>
</camera>

これで表示すると、

こんな感じです。私的にはこれがお勧めだと思います。
以上で設定の説明は終わりです。まだ実際に計測で使えるかどうかのテストは行っていません。

[ 補足説明 ]
fpv.xmlの説明文は見つからなかったのでソースコードを少し眺めてみました。

fpv.xmlを読み込んでいるのはloadCameraProfileFile()です。fpv.xmlのパス名はofApp.hで定義されています。ここで分かるのはfpv.xmlというのが唯一のカメラ設定ファイルで、また追加するカメラ名はひとつだけであるということです。同じカメラ名で複数のデバイスを扱うことは出来そうです。


実際の設定を行っているのはreloadCameras()です。”USB2.0 PC CAMERA”がハードコードされているのが分かります。また解像度や画面のクロップのロジックも読み取れます。この辺りを改造すれば複数のカメラ名を認識させることも出来そうです。

ゴーグルの出力をTinyViewPlusに送り込むのは実験的には問題ないですがケーブルの取り回しが大変で実用性はないと思います。実際のレースではHDZero Event VRXとか最近発売が始まったHDZero Monitorを使用することになると思います。どちらもAnalog VTXの映像も拾えるのでHDZero, Analog混合レースが簡単に可能になると思います。直接PCに接続できるわけではないので、やはりHDMIからPCに繋ぐためのアダプターは必要です。

NAKA Drone Racing2024では使用するVTXチャネル毎に合わせたLEDを装着することがレギュレーションに入っています。色を合わせたLEDの搭載が難しい場合にはバッテリーと機体の間に挿入するLEDの貸与もあります(今のところBT2.0コネクターのみ)。それでも自分で搭載したLEDを使用することが望ましいのはいうまでもありません。

チャネル LED色
E1
F1
F4

自分で色違いのLEDを準備して付け替えられるようにすることも考えられますし、FCから制御出来るRGB LEDを装着してVTXチャネルの変更で自動的にLEDの色を変更することも可能です。ここではRGB LEDを装着した場合のBetaflight Configuratorでの設定方法について必要な設定だけを書いておきます。

[ LEDについて ]
LEDの種類について簡単に書いておきます。最近流行りの全周LEDで使用されているのは、おそらく単色LEDと思います。+と-の線だけがLEDにあり電源を接続すれば光ります。これは一般的には色の変更が出来ないLEDになります。
この記事で言うところのRGB LEDというのは電源に加えて信号線があります。これをFC上のLEDポートに接続することによりBetaflightからの制御が可能になります。

写真はKOU_CHAN@LEDで購入したものです。このようにCOBタイプのものですと、一つのLEDセルに対して+5V, -, IN, OUTの4端子が出ています。信号はINから入ってOUTを経て次のLEDのINへと受け継がれて行きます。このためFCからの信号はINに接続してください。

[ BetaFPVのFCにLED Strip関連の不具合 ]
一部のBetaFPVのFCにてLED Stripを有効にするとモーターが回らなくなる不具合があるようです。「LEDつないだらモーターが動かなくなった時(Betaflight)」によると’set dshot_bitbang = OFF’で直ることがあるようです。最後の方に書かれていますが、’set dshot_bitbang_timer = TIM8’が有効であるという情報もあるようです。

[ 前提 ]
Betaflight Configuratorの「基本設定」でLED_STRIPをオンにして「LEDストリップ」タブが現れること。もしこれが出ない場合Firmwareビルドの際にLED Stripオプションが入っていなかった可能性があります。LED Stripを含めてFirmware更新をやり直してみてください。

[ LEDストリップの設定 ]
1. ワイヤーオーダー

最初に必要なのはLEDが何個ついているかを設定することです。”ワイヤーオーダーモード”ボタンを押した後でマトリックス部分をクリックするとLED番号が割り当てられます。スイープして複数のマスを一気に設定することも出来ます。マトリックス上の位置は特に気にする必要はありません。必要な数のLEDが指定されればOKです。もし10灯のLEDであれば番号0から9がどこかに表示されるようにします。完了したら”ワイヤーオーダーモード”ボタンを再度押してワイヤーオーダーモードから抜けてください。

2. 機能の設定

全部あるいは設定したいLEDをマトリックス上で選択し”機能”を”カラー”にします。続いて”オーバーレイ”のところにあるVTXをオンにします。
これでVTX周波数によるLEDの色変更が出来るようになりました。

3. カラーパレットの変更
Betaflightの規定値のままだと目的の色になっていません。「CLIコマンドライン」にて以下のコマンド列を投入してください。
color 2 0,0,255
color 3 120,0,255
color 6 240,0,255
save


具体的には「CLIコマンドライン」を開き、下の方の入力欄に上のコマンドを投入します。スクリーショットでは分かりやすくするためにコマンドを一つ一つ入力した様子を示していますが、上の4行のコマンド(colorが3行とsaveコマンド)を一度にコピーして貼り付ける事が出来ます。saveコマンドを投入後はBetaflightが再起動します。

以上で完成です。VTXチャネルを変更して正しい色が出るかどうか確認してみてください。

実際に設定してみた動画です。ELRS Luaスクリプトからの変更例ですが、OSDスティックコマンドによるVTXチャネル変更でもLED色の変更は行われます。

HDZeroゴーグルにSteadyView Xを付けてみる

HDZeroゴーグルをアナログVTXで使うべく手持ちのWildfireを付けたものの画像的に今ひとつでした。そこで新しく受信機を入手することにしました。定番はRaidfireですが、もうちょっと安価なSkyzone SteadyView Xにしました。ところが、これが素直にHDZeroゴーグルに搭載することができませんでした。ということで、その顛末を書いておきます。

SteadyView Xは電源を接続してAV端子に映像を出せるグランドステーションとして出荷されてきます。分解して受信機モジュールを取り出してみると違和感。

右側のWildfireと比べるとピンがだいぶ短いです。HDZeroゴーグルのExpansion Moduleに入れてみると、やや斜めに入れれば動かすことは出来るのですが、ちょっと受信機に触ると外れてしまいます。間に何か入れるかピンを立て直すかと思い、手持ちのピンを見たら全く同じ長さのものしかありません。 

ピンの出荷時の長さ配分のまま受信機に付けられているので、基板の上側にピンがだいぶ飛び出しています。これを基板ギリギリまで押し込んで見ることにしました。

修正途中の写真です。ハンダゴテで温めながら押し込んでやると簡単に修正できます。

あと、念の為、下から2本目のピンは抜いておきました。最初のテストでは全ピン挿入して問題はありませんでしたが、過去にHDZeroゴーグル+SteadyView Xでは、このピンを抜かないと不具合があるという情報がありました。もしかすると解決済みなのかもしれません。

SteadyView Xのピンを修正後にExpansio Moduleに入れてみると収まりが良い感じがします。裏からみるとピンが奥まで入っているが確認できました。

問題はもう一つあって、カバーが色々と付属しているのですが全く使えません。こういう用途のためのカバーがあってキッチリとハマるのですが装着するとロータリースイッチが全く効かなくなります。手で回す部分は問題ないのですがスイッチ本体が横に傾いてしまい回転部分から外れてしまいます。何度も試すと壊してしまいそうです。

Pintsbalesに有ったモデルをTPUで出力して被せてみました。カッチリ感はありませんが、実用にはなると思います。

HDZeroのDVRはTSフォーマットが推奨されています。そのあたりの事情は以前書いた記事をご覧ください。

その時に手作業でTSファイルからMP4への変換方法を書きましたが、やはり面倒です。ということで少しでも楽をするためのプログラムを書いてみました。

[ 特徴 ]
– 再エンコードなしで動作が速い
– ワンクリックでSDカードのTSファイルをまとめて変換
– TSファイルのタイムスタンプをMP4にも反映(手作業の時は諦めていた) -> DVRファイルの時刻を何時も正しくするためにはHDZeroゴーグルにバッテリーを取り付けます

https://github.com/nkozawa/ts2mp4

[ 前提 ]
プログラムを書いたと言っても実際に動画を変換するのはffmpegというツールです。もしffmpegが導入されていない場合は、まずこれを導入しコマンド窓でffmpegと打ち込んで動くようにしておく必要があります。Windowsの場合、おそらく自分でPATHを通すという作業を行わないといけません。

[ 実行ファイル ]
Python3の環境がある場合、公開されているts2mp4.pyを実行してください。MacOSとWindows11のPython 3.11でテストしています。試してはいませんがLinuxでも動くと思います。MacOSとWindows用にはPythonの環境がなくても稼働する実行ファイルも用意しています。

[ 使い方 ]

– Input path(TS files)ボタンを押してTSファイルのある場所を指定します。HDZeroゴーグルのSDカードを指定する事が多いと思います。その場合、SDカード下のmoviesフォルダーを指定します。
– Output path(MP4 files)ボタンを押してMP4ファイルを格納する場所を指定します。
– TSファイルのタイムスタンプをMP4ファイルに反映させる場合はUse Original File Timestampにチェックを入れます。チェックを入れない場合はMP4ファイルのタイムスタンプは現在の時刻になります。
– Start, no overwriteもしくはStart, overwrite allを押して変換を開始します。
“Start, no overwite”は出力先にすでに該当のMP4ファイルがあれば何もしません。新しく録画したものだけを変換するので普通はこのボタンが便利です。ただし判定はファイル名のみで行っています。SDカードを初期化した場合などは考慮が必要です。”Start, overwrite all”は出力先の状態に関係なく全てのTSファイルを変換します。

[ INIファイル ]
Input path(TS files)、Output path(MP4 files)、Use Original File Timestampの設定値はINIファイルに記録されます。次にプログラムを起動するとINIファイルを自動的に読み込みます。

INIファイルはユーザーのホームディレクトリーにts2mp4.iniという名前で書き込みます。

INIファイルの書き込みは、今のところStart, no overwriteもしくはStart, overwrite allを押した時に行なっています。

RGB LED3題

今までに入手したBetaflight ConfiguratorのLEDタブで構成出来るRGB LED、三種類の簡単な比較です。

購入場所 10cmあたりの重量 10cm当たりの灯数
KOU_CHAN@LED 4mm 約1.35g 16
秋葉原LEDピカリ館 4mm 約0.62g 6
Aliexpress 3.5mm 計測不能 *1 20

*1 入手したものは5cmの長さのもので、うちの電子測りでは軽すぎて計測できませんでした。

< KOU_CHAN@LED >
https://kouchanfpv.base.shop/
入手しやすくお勧めです。LEDの搭載密度が濃いです。光を拡散する被覆があるので美しさを惹き立たせていますが、重量的には不利です。65mm機に全周で搭載した場合4gを超える重量の増加になってしまいます。被覆を削って軽量化を図るという方法もあるようです。

< 秋葉原LEDピカリ館で見つけたもの >
https://www.akiba-led.jp/
実際に店頭で見つけて買ったものです。まあまあ粒の大きいLEDチップが剥き出しになっているものです。LED密度はまばらなのでタイニーより大きな機体に搭載したいと思います。

< Aliexpressで見つけたもの >
密度もあるし幅も狭く軽いので良い感じですが、5cm(10灯)と10cm(20灯)しか見つけられないです。全周装備するのは手間がかかりそう。使い所を検討中。送料がかかるので割高に感じる。また入手までの時間もかかリます。

HummingBird V3 AIO FCはかなり微妙

十字型で軽量かつELRS,25mW VTX搭載のAIOとして期待を胸にいっぱい詰めてHummingBird V3 AIOを試してみました。購入後に本家サイトを見たら日本語でかなり悪いコメントが付いていて愕然。元々英語で二つほど悪いコメントが付いているのは知ってはいましたが、日本語で書いてあるとインパクト強いです。ということをXで書いたらレスいただきました。

[ とりあえずハードウェア的に気になるところ ]
– カメラを接続するコネクターがめちゃ小さいものでした。もしかすると適合するコネクター持っているかも知れないけど、とりあえずはハンダ付けすることに。ハンダ付け用のランドもないのでコネクターを剥がしてそこにハンダ付け。コネクターの跡地が細すぎるので、そこはビデオだけを使用して+5VとGNDは別のところを使用。
– モータ取り付けのコネクターが普通より小さい。実戦機のモーターはハンダ付けだけどお手軽にテストする時はコネクターが使いたかった。モータ用のハンダ付けパッドはあるので、まあまあ問題なし。
– PIDは何かしら設定されてはいるけど、軽量(ドライ18.7g)な65として組み上げた機体には合わないみたい。まだあまり飛ばしていないけど、初期設定のPID値が怪しすぎるので別の機体に合わせて再テスト予定。
- ブザーは無い。ま、外で飛ばさないので良いか。
– 外付けRGB LEDの取り付けが出来ない。ボード上に4灯のRGB LEDが載っているので信号線は探せば見つかりそう。最悪の場合LEDを剥がせば簡単に信号を取り出せるはず。オンポードなLEDもなかなか綺麗。

[ 実際に飛ばしてみた ]
練習会に持って行って飛ばしてみたが、設定に問題があったりして十分にはテスト出来なかった。一応は飛びました。評判からVTXが心配でしたが、何とか写ってはいました。ただ高頻度でOSDの文字がおかしくなった。何文字か表示さけないところがある。で、ARM/DISARMで直ったりする。

まだ全然飛ばし込んではいないので何とも言えないが、お勧めするにはちょっと微妙な気がしている。