この記事ではraspberry pi 3とDJIのPhantom2を使用しています
なぜラジコン無線を送出することになったか
まずはじめになぜこのようなことをすることになったかについて少し掲載させていただきたいと思います。
大学で開催されたハッカソンに出展するためDJI Phantom2をLeap Motionで操作しようとしたためです。
基本的な構成
大まかな構造については以下のとおりになります。
ラズパイ側のプログラミングにはNode-REDを使用していますが今回はラズパイから送出する部分にのみフォーカスします。
ラズパイから送出される信号
ラズパイから送出される信号はPWMと呼ばれるもので、そのままだと信号は以下の様になっている。
https://hekilledmywire.wordpress.com/2011/08/03/introduction-to-pwm-part-7/
この信号はONにしている時間の割合を調節している。
この信号を凹凸のない平均的なものすることで任意の電圧を作り出すことが可能になる。
このようなことを平滑化という。
PWMの平滑化
この信号を平滑化する方法はいくつかあるものの最も安価でシンプルな方法として自作のアナログローパスフィルタを制作してみた。
ちょっと配線が汚いのでFritzingで書いてみました。
信号線をラズパイとつなぐとこんな感じ
(なんだか汚い設計ですね…うまくなりたいものです…)
さて、この回路ではPWMを平滑化しているわけなのですが。
最も基本となる回路はこちら
http://www.ys-labo.com/pic/pic%20chips/pic%20chips%20contets/061230%20DA.html
一つの信号に対しこれをすべて行うわけですが、
コントローラーは左右のスティックがそれぞれ上下左右に傾くため4ch、つまり
- 左スティック
- 左右
- 上下
- 右スティック
- 左右
- 上下
があれば足りるはずですね。
私もそう考えて4ch分だけ作ったのですがどうにも制御には
- 左スティック
- 左
- 右
- 上
- 下
- 右スティック
- 左
- 右
- 上
- 下
といった具合に8ch必要になりました。
(勉強不足で理由はわかっていません)
そしてオペアンプ(LM358)の内部は以下のようになっているため
http://blog.nearfuturelaboratory.com/2011/07/28/lm358-op-amp-issues/
一つのオペアンプで2つの信号を処理できることになります。
その上で計算すると8chのためには4つのLM358が必要になりますね。
こうして先程のブレッドボードを設計しました。
平滑化した信号をラジコン無線に変換する
この点を本当はラズパイから直接行いたかったのですが時間と技術の問題で断念しました。
今回はPhantomのコントローラーから基板の部分を引っこ抜いてレバーの操作を入力します。
こうすることでレバーと同じような電圧になるよう調節するだけで簡単にラジコンの無線を送信できるわけですね。
(姑息な解決方法ですね…)
この基板の左から2,3番目がレバーに接続されていたので今回生成した信号をそこに流し込みます。
ちなみにブレッドボードと基板を接続しているコネクタは自作です。(楽しかった)
以上のながれでラズパイからラジコンの無線をハックすることに成功しました!(してないしてない)
実際にはラズパイ側のPWM信号の調節などで時間はかかりましたが、その調節は一度だけ行えば良いのでそのあとはPhantomどころか2.4GHz帯のラジコンならなんでも信号を飛ばせますね。
ちなみに信号はLeapMotionのデータをWebSocket通信で受信し処理したものを流し込んでいます。
Phantom2を手で制御するのはすごく興奮しましたが懐が寒いです。
最後まで読んでいただきありがとうございました。