【Arduino自作ドローン】No.7 XBee使用のラジコン送信機(プロポ )の自作(11ch)

ドローン製作記のメインページ 【完全自作】Arduinoを使用した自作ドローンの製作記(完成)


ドローン本体以外にも製作しなければいけないもの,それはドローンのリモコンです.正直言って,ドローン製作の中で一番苦労し,時間がかかった部分です. ドローンのテスト飛行をするにあたってリモコンが必要になるのですが,これが何やっても上手くいかなかったために,数ヶ月ドローンの製作を放置してました. 結果的にはしっかりと動くようになり,アナログ入力4つ(ジョイステック×2)と,スイッチ7個の11チャンネルリモコンが製作できました.(スイッチは1個しか使っていませんが) スイッチは,プログラム次第でどんな機能もつけられます.

インターネット上に全く情報がなく,非常に時間がかかったのでここに書いておきます.

 


使用した部品

  • XBee S2C 2個
  • XBee2.4GHzアンテナ(RPSMAタイプ)2個
  • PS4アナログスティック 2個
  • 3.3Vレギュレータ 1個
  • レギュレータの放熱器(多分不要)1個
  • タクトスイッチ 6個
  • トグルスイッチ 2個
  • 抵抗&コンデンサ
  • 9V電池 1個
  • 9V電池アダプタ 1個
  • 生基板 1枚

XBeeの通信モード

XBeeには2つの通信モードがあります.これらの違いを最初に説明します.

  • 透過モード(トランスペアレントモード)

これは簡単で,有線で行なっているシリアル通信を,そのまま無線に置き換えたものです.

(有線のシリアル通信) PCーセンサ

(透過モードを使用したシリアル通信) PCーXBee     (((無線)))     XBeeーマイコンーセンサ

ただ単に,USBケーブルがなくなったシリアル通信です. ドローンで使うには,センサの値(ジョイスティックの角度など)をマイコンで読み込みそれを送信する必要があるので,リモコン側にマイコンが必要になります(要確認).なので,今回は次のAPIモードを使用しました.

  • APIモード

これを簡単に説明すると,APIフレームという通信フォーマットでデータを送るモードです.透過モードと違ってそのままデータを送信しないはず(よくわかってない) これの最大の利点は,マイコンを必要とせずにセンサの値を送信できることです. わざわざArduinoを積まなくて良いので,基板も簡単になり,プログラミングの手間も省けます. こちらを採用しました.


XBeeの接続方法

XBeeの接続方法は簡単です.3.3Vを電源端子に接続し,センサー類を決められたピンに接続するだけです. 今回製作した,XBeeS2Cを使用したリモコンの回路図を置いておきます(パターン図の方がわかりやすいかも). 回路図の左右にあるのは,ジョイステックです. デジタル,アナログ入力できる端子は決まっています.データシートを確認するようにしてください.


XBeeの設定

これに一番手間取りました. ドローン側をAPIモードにし,リモコン側をAT(透過)モードにしないといけないです. APIモードを使うのに,リモコンは透過モードなんて普通考えないので非常に時間がかかりました. その他の設定項目は以下の通りです.

ドローン側

”ファームウェア”>xb24-s2c-th_405F “ID”>0000(任意の数,リモコン側と合わせる) “SC”>7FFF “SD”>3 “ZS”>0 “NJ”>FF “NW”>0 “JV”>0 “JN”>0 “CE”>1 “DO”>0 “DC”>0 “DH”>XXXXXXXX(リモコン側のXBeeの裏面の英数字の上位8桁分) “DL”>XXXXXXXX(リモコン側のXBeeの裏面の英数字の下位8桁分) “NI”>0x20 “NH”>1E “BH”>0 “AR”>FF “DD”>A0000 “NT”>3C “NO”>0 “CR”>3 “SE”>E8 “DE”>E8 “CI”>11 “TO”>0 “PL”>4 “PM”>1 “EE”>0 “EO”>0 “KY”> “NK”> “BD”>3 “NB”>0 “SB”>0 “RO”>3 “D7”>1 “D6”>0 “AP”>1 “AO”>0 “CT”>64 “GT”>3E8 “CC”>2B “SP”>20 “SN”>1 “SM”>0 “ST”>1388 “SO”>0 “WH”>0 “PO”>0 “D0”>1 “D1”>0 “D2”>0 “D3”>0 “D4”>0 “D5”>1 “D8”>1 “D9”>1 “P0”>1 “P1”>0 “P2”>0 “P3”>1 “P4”>1 “PR”>1FBF “PD”>1FFF “LT”>0 “RP”>28 “IR”>0 “IC”>0 “V+”>0

 

リモコン側

”ファームウェア”>xb24-s2c-th_405F “ID”>0000(任意の数,ドローン側と合わせる) “SC”>7FFF “SD”>3 “ZS”>0 “NJ”>FF “NW”>0 “JV”>1 “JN”>0 “CE”>0 “DO”>0 “DC”>0 “DH”>XXXXXXXX(ドローン側のXBeeの裏面の英数字の上位8桁分) “DL”>XXXXXXXX(ドローン側のXBeeの裏面の英数字の下位8桁分) “NI”>0x20 “NH”>1E “BH”>0 “AR”>FF “DD”>A0000 “NT”>3C “NO”>0 “CR”>3 “SE”>E8 “DE”>E8 “CI”>11 “TO”>0 “PL”>4 “PM”>1 “EE”>0 “EO”>0 “KY”> “NK”> “BD”>3 “NB”>0 “SB”>0 “RO”>3 “D7”>1 “D6”>3 “AP”>0 “AO”>0 “CT”>64 “GT”>3E8 “CC”>2B “SP”>20 “SN”>1 “SM”>0 “ST”>1388 “SO”>0 “WH”>0 “PO”>0 “D0”>2 “D1”>2 “D2”>2 “D3”>2 “D4”>3 “D5”>3 “D8”>3 “D9”>3 “P0”>3 “P1”>3 “P2”>3 “P3”>3 “P4”>1 “PR”>7FFF “PD”>7FFF “LT”>0 “RP”>28 “IR”>64 “IC”>0 “V+”>0

 


受信プログラム

上記の設定と全く同じにすれば,以下のプログラムで受信ができると思います.(動作未確認,該当プログラムのみの抜粋) 


ちなみに,ジョイステックのAD変換値は,数日置くと変わっていたりと安定しなかったので,コントローラーのスイッチを使って,キャリブレーションするモードをつけました.

特にドローンを操作する場合は,ジョイステックを触っていないのに前後左右に動いてしまうということが起こってしまうので,飛ばす前は毎回キャリブレーションしてから飛ばしています.

 

質問などがあればコメント欄にお願いします.

11件のコメント

  1. インジェクターの記事のコメントの返信、ありがとうございました。

    この通信の記事も気になって書き込ませていただきました。

    この記事の内容を殆ど理解出来ない初心者の自分ですが、この記事を見て、車の電気を触ってみようと考えておりまして、まずスピードメーターのようなものを作ってみようと考えています。

    仕様は、スピードメーターに接続されている機械式のワイヤーの間にパルスを発生させる装置を接続して、そのパルスを読み取ってスマートフォン(Android)に表示させようというものです。

    そこで質問なのですが、パルスの発生装置から、スマートフォンへ無線でデータを飛ばそうと思ったら、当該記事のXbeeなる装置は有効でしょうか?

    当初はBluetoothが使えるかと思ったのですが、ネット上になかなか記事もなく、初心者には敷居が高いように感じています。

    また、マイコンにArduinoをご利用されていますが、初心者にはArduinoはオススメですか?
    Mbedというのにも、少し興味があります。Bluetooth同様、常識量的にこちらもあまりありませんが…。

    長文ですみません。失礼いたします。

    1. コメントありがとうございます.

      スマートフォンへデータを送信するのであれば,XBeeは通信規格が違うので使用することができません.
      もし,スマホと通信したいのであれば,BluetoothやWiFiなどの通信規格の部品を使用する必要があります.また,Android側のプログラミングも必要になるので難易度は上がります.

      スピードを表示するだけであれば,LCDディスプレイなどを使用することで簡単に表示させることができます.

      また,初心者におすすめなマイコンは断然Arduinoだと思います.まず,Arduinoの特徴として非常に使いやすいようにできています.Arduinoの前は,PICというマイコンを使用していたのですが,PICには数十数百もの種類があります.すなわち,他のPICで作った他人のプログラムが動かないので,なかなか本やインターネットのプログラムがそのまま使えませんでした.しかし,Arduinoはラインナップが数種類しかなく,だいたいの場合はプログラムの変更なしで動くように設計されています.そのため,周波数や機能の違いを気にすることなく使用することができます.

      そのため,書店などにいけばわかると思いますが,マイコン関係の本の7割程度はArduinoの本だと思います.それは,インターネットでも同じです.情報量が桁違いに多いです.
      個人的には,趣味で使用するならArduinoがベストだと思っています.

      1. 返信ありがとうございました。

        ネットでArduinoを調べて、書店にて本を1冊買ってみようと思います。

        ご指摘の通り、スマホに表示する為には、Android側のプログラムも行う必要がありますので、Android StudioをPCにインストールしてみたのですが、重くて私のPCでは動きませんでした。
        HTML5というものがあるようですが、こちらも検索が悪いのか情報が少ないようです、通信関係の情報が無くて、悩んでいます(笑)。

        1. Arduino頑張ってください.
          自分もiPhoneのソフトウェア開発の本を買ったんですけれども,まだ読んでいません(笑)

          ECU関係で書いてほしい内容や詳しく書いて欲しいなどがあれば,気軽に教えてください.
          書こうと思ったんですが,書く内容があまり思いつかなかったです(笑)

          (追記)制御方式の種類について書き始めました.

          1. 返信ありがとうございます。

            本当にいいですか?(笑)
            では、かなりお言葉に甘えます(笑)。

            ECU関係といいますか、まずはタコメータとスピードメータに関わる事をしようと自分は思っていまして、点火と速度について、下記のとおり知りたいです。

            例えば、

            点火については

            ・点火信号の波形の処理の仕方(一瞬、100Vくらいまで上がります)
            ・信号の電圧が微弱だった場合の増幅方法(実際、自分が持っているスピードセンサーには0.2Vしか出力しないものがあります)
            ・レシプロカル形式(?)を使ったプログラミング法

            速度については、

            ・ステッピングモーターを使ったアナログメーターの製作

            などをテーマとして取り上げてもらえたら、嬉しいです。

            凄く具体的に書きました(笑)。
            ご検討をよろしくお願いいたします。

  2. >信号の電圧が微弱だった場合の増幅方法(実際、自分が持っているスピードセンサーには0.2Vしか出力しないものがあります)

    これは速度の方でした(笑)。

  3. こんにちは
    Xbee s2c で質問良いでしょうか。
    PICとジョイスティックでラジコンのコントローラを作っておりPIC同士を有線接続しているときはラグや取りこぼしなくスムーズに動作するものができました。
    無線化しようとXbeeを繋ぎ、

    PAN ID
    相手Xbeeアドレス
    コーディネーター/ルーター
    ATモード

    上記設定してPICと繋いだところ動作はしているのですが
    1.立ち上がりが10秒程度かかる。
    2.反応が悪くラグが0.5~1秒ある。
    3.取りこぼし?等のエラーがある。

    通信速度9600から4800、2400に変えても変化無し。
    その他いくつか試してみましたが改善されず…
    同じXbeeタイプを使用されていたようなので何か情報あればと思いまして。

    1. プログラムがないのでわかりませんが,私のXBeeも立ち上がりは2,3秒ぐらいかかると思います.
      しかし,ラグはなく,とりこぼしは極たまに発生しますが,頻繁にはありません.

      プログラムか基板の問題でしょうが,原因はわからないです.

ぼんじん へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。