久々にMONOワイヤレスのページを見たらTWE-Liteの電波強力版である”RED”というのが出ていました。最大3Kmぐらい届くとの事。これなら空ものラジコンでも全く問題なく飛ばせそうです(実際は私が飛ばすものなんて100m程しか離れないんですけどね)。
そこでTWE-Liteを使ってラジコンプロポの代りにならないか試してみたくなりました。
なおTWE-Liteとは、当初は東京コスモス電機でしたが今はそこから分離したMONOワイヤレスが出している無線モジュールです。
こんなの・・・
TWE-Lite(下) とTWE-Lite DIP(上)
TWE-Liteは内蔵マイコンのプログラムを書き換える事ができるので、MONOワイヤレス社からは色々な用途のプログラムをダウンロードできる様になっています。この中にはラジコン用のアプリもあるのですが、ラジコンカーを前提にされたもので、そのままで飛行機やマルチコプターを制御するのには向きません。
これを何とかして受信側TWE-LiteからS-BUS信号を出せれば小さなマルチコプターぐらい飛ばせるんじゃないかと考えています。するとフタバとかの立派なプロポを使わなくても済むし、またフライトヨークやラダーペダルで操縦したり、ちょっと夢が広がるじゃないですか。
で、試してみる事にします。でもいきなり高出力版のREDを買うのもなんなので、まずは手持ちの通常出力版(こちらはBLUEという名前になったらしい)で試します。
まず送信側のTWE-Liteにはボリューム4個+スイッチ4個を付けて状態を発信します。この部分は「OpenStick無線化実験」の時のプログラムをほぼ流用です。
これを受けて受信側TWE-LiteがS-BUS信号を生成してフライトコントローラ(F3EVO)に入れるという計画です。
という事で早速プログラムを書いてデバッグです。受信側TWE-Liteが出すS-BUS信号を先日作成したS-BUS信号解読機(ArduinoMEGA256)に入力してデバッグを開始したのですが・・・受信機のデバッグ以前にS-BUS解読機側のスケッチがミスっていたのを発見。修正しました。
~~修正版S-BUS解読スケッチ(11bitデータに並び替える部分のミス修正)~~
int count;
long interval;
void setup() {
Serial.begin(115200); // Terminal
Serial1.begin(100000,SERIAL_8E2); // S-BUS
count=0;
}
void loop() {
int data[26];
int val[19];
int i;
if (Serial1.available() > 0) {
data[count]=Serial1.read();
interval=millis();
count++;
}
if ((interval+4 < millis()) && (0 < count) ) {
count=0;
val[0] =((data[1] & 0xff)<<0) + ((data[2] & 0x07)<<8);
val[1] =((data[2] & 0xf8)>>3) + ((data[3] & 0x3f)<<5);
val[2] =((data[3] & 0xc0)>>6) + ((data[4] & 0xff)<<2) + ((data[5] & 0x01)<<10);
val[3] =((data[5] & 0xfe)>>1) + ((data[6] & 0x0f)<<7);
val[4] =((data[6] & 0xf0)>>4) + ((data[7] & 0x7f)<<4);
val[5] =((data[7] & 0x80)>>7) + ((data[8] & 0xff)<<1) + ((data[9] & 0x03) <<9);
val[6] =((data[9] & 0xfc)>>2) + ((data[10] & 0x1f)<<6);
val[7] =((data[10] & 0xe0)>>5) + ((data[11] & 0xff)<<3);
val[8] =((data[12] & 0xff)<<0) + ((data[13] & 0x07)<<8);
val[9] =((data[13] & 0xf8)>>3) + ((data[14] & 0x3f)<<5);
val[10]=((data[14] & 0xc0)>>6) + ((data[15] & 0xff)<<2) + ((data[16] & 0x01)<<10);
val[11]=((data[16] & 0xfe)>>1) + ((data[17] & 0x0f)<<7);
val[12]=((data[17] & 0xf0)>>4) + ((data[18] & 0x7f)<<4);
val[13]=((data[18] & 0x80)>>7) + ((data[19] & 0xff)<<1) + ((data[20] & 0x03) <<9);
val[14]=((data[20] & 0xfc)>>2) + ((data[21] & 0x1f)<<6);
val[15]=((data[21] & 0xe0)>>5) + ((data[22] & 0xff)<<3);
val[16] = (data[23] & 0x1) ? 0x7ff : 0 ;
val[17] = (data[23] & 0x2) ? 0x7ff : 0 ;
val[18] = (data[23] & 0x8) ? 0x7ff : 0 ; // Failsafe
for (i=0 ; i<19; i++ ) {
Serial.print(val[i],DEC);
Serial.print(F(" "));
}
Serial.print(F("\n"));
}
}
大体動作がOKになったところでフライトコントローラ’F3EVO’に接続してみます。
フライトコントローラはUSBでPCに接続しておき、設定ソフト ’CleanFlight’ の ’Receiver‘ タブ使うと送信機の操作に合わせて信号が変化するのが確認できました。
CleanFlightで受信機の信号をモニター中。
ここまではTWE-LiteのDIPタイプをブレッドボードに載せて試していました。
大体イケてるっぽいので次は表面実装版のTWE-Liteモジュールを使い、実際に機体に載せる基板を作ります。
いつもの様にKicadでパターンを書いてガーバーデータを出力して・・・
Kicadで出力したパターン
でもウチのCNCの精度でこのパターンそのままでは削れる気がしません。そこでガーバーデータの座標値をテキストエディタで抜き出してJw-cadに読み込ませ、これを下書きにしてカットする部分を手書きしていきました。
こうしてカットラインの間隔を極力広いパターンに作り変えます。
ピンク色がガーバーから抜き出した下書き。
黒線が手書きのカットライン。
そして切削。
切削完了。
と、軽く書きましたが何だかんだで失敗しながら3回切削しました。
チップ抵抗、チップコンデンサを1608サイズにしたのも失敗で、ルーペを見て汗をかきながらハンダ付けを行いました。
そして実装したのがこれ。
クワッドコプターと接続したところ。
まだ受信機は固定していません。
次は送信機を作っていきたいと思います。