ちょっと背伸びする子供のためにも、人気のドローンを制御する、ちょっと高度なプログラミングに挑戦してみます。
使ったのは格安ドローンの安い方(H8)、カメラ非搭載で小型な分、バッテリー含めても重さは21g。
軽いので室内でいろいろぶつかっても壊れにくく、安定性もそこそこあって楽しいドローンです。
プロポ(コントローラー)は、ゲーム機のようなちゃんとしたアナログスティック2つを使った本格派。
これで2,000円ちょっととは本当に衝撃的!
2.4GHz帯を使った無線制御、通信プロトコルが公開されていればいいんですが、なさそうなので物理的にコントローラーを乗っとってみます。
ネジだけで簡単に分解できる中の基板は、とってもシンプル。アナログスティックの真ん中のピンが信号線、0Vから3.3Vのアナログ値をICが読み取っているようです。
まずは上下移動だけ試すために、基板上のパターンを切って、ジャンパー線をはんだづけ。GNDも引き出しておきます。
離陸編 on Vine
飛びました!
IchigoJam-FANで教わったPWMを平滑化してアナログ出力に変える方法を使っています。 OUT2から33kΩ(なかったので100kΩの3本並列で代用)でコントローラーの上下信号線へつなぎ、信号線とGNDを0.1uFのコンデンサでつないでおくと、ちゃんと反応してくれました。 (抵抗、コンデンサで平滑化しないと、動作にムラができます)
PWM 2,40,-100
この1行のプログラムで離陸します。ver1.2からの高速PWMモードを使って、10/100の高速パルス信号を出すとプロペラが回り始めます。 40/100くらいまで上げると離陸! そのまま飛び続けてしまうので、OUT 2,0 とすばやく停止させる準備をしておきましょう。OUT0コマンドはPWM出力したピンには効きません。 (この辺りが上級者向けです)
エルチカの要領で、ドローンを自動的にぴょんぴょん跳ねさせてみます。
10 PWM 2,60,-100:WAIT 30 20 OUT 2,0:WAIT 60 30 IF INKEY() END 40 GOTO 10
何かキーが押されたら停止している状態で終了します。ESCで中断すると飛んでいってしまうので注意! 危ない目に遭うほどに、リスクを考えたプログラミングスキルが身につきます。
うまくいったので、4ch全部つないでしまいます。テスターで導通チェックすればすぐに分かりますが、上下に加えて、回転、前後移動、左右移動もパターンカット&ジャンパー線のはんだづけ。
全信号、平滑化してアナログ信号出力するような回路をブレッドボードに組み、OUT2:上下、OUT3:左右移動、OUT4:前後移動、OUT5:回転と接続。
キーボードを使ったドローン制御プログラムはこんな感じで書けます。
100 N=0:X=50:Y=50:D=50 110 K=INKEY() 120 IF K=ASC("A") N=N+5 130 IF K=ASC("Z") N=N-5 140 IF K=SPACE GOTO 100 150 PWM 2,N,-100 160 IF K=UP Y=Y+5 170 IF K=DOWN Y=Y-5 180 PWM 4,Y,-100 190 IF K=RIGHT X=X+5 200 IF K=LEFT X=X-5 210 PWM 3,X,-100 220 IF K=ASC("X") D=D-5 230 IF K=ASC("C") D=D+5 240 PWM 5,D,-100 250 CLS:LC 8,12:?N,X,Y,D 260 GOTO 110
一番大事なのは140行、スペースキーによる緊急停止機能。 キー割り当てや、増分などは好みに合わせて調整ください。
前後左右のバランス取りが難しい! 広いところでダイナミックにプログラミングした動きを再現するとかできると楽しそうです。 何台か同期させて動かしたり、落下や衝突したら負けのドローンバトルプロコンなど、あれこれ想像膨らみます。
この21gのドローンに追加で何か積むのは厳しそうですが、外部カメラで位置を捕捉して制御するなど、いろいろやりようはあるはずです。Enjoy!!