XBeeとPWM/サーボシールドを使ってラジコン化してみます
〔マイコンのトップに戻る〕
前回のページでPWM/サーボシールド(PCA9685)の基本と操作方法の話は記事にしました。
又、サーボモータの基本動作と制御方法の話はこちらです。
今回ラジコン化するにあたりXBeeに無線部分を担当させました、XBeeの基本と操作方法の話はこちらに
書いていますので基本の話は其々そちらを参照下さい。

XBeeを使った送受信の概念図
送信側のXBeeは"S2C"モジュールを使いました、これは"S2"モジュールの後継器なのでぇ、
どの様な物か調査する為に1個購入した物です、よって受信側のXBeeは"S2"モジュールとなりました。
出来るなら送受信共に"S2C"を使った方が良いです、消費電力も少ない感じで電波の届く距離も長いです。
尚、送信側"S2C"をブーストさせれば1200m程届くらしいが消費電力もアップします。
送信側XBeeはデータを送るだけ、受信側XBeeは受取るだけの単純な通信なので"AT(透過)モード"で行います。
受信側は"PWM/サーボシールド"しか持ってないのでぇ使うのは"Arduino"となります。
先ずは実験時の写真を載せます。
こちらは送信器側の風景です。
PICは、16F1829を使いました。
ジョイスティックの横方向(X軸)でチャンネル0の
サーボモータが動き、縦方向(Y軸)でチャンネル1
のサーボモータが動きます。
半固定抵抗はサーボのニュートラル調整用です。
押しボタンSWは受信機側のLEDが点灯します。
でぇ、こちらがぁ受信器側の風景です。
XBeeは"XBee USBインターフェースボード"に
載せていますが、Arduinoを使うならXBeeシールドを利用した方がスッキリするでしょう。
"PWM/サーボシールド"でなくこちらを利用し
PICで作ればもっとぉコンパクトになる様な気もしますが...
ブーストの設定について

コンフィギュレーションの"PM"でEnabled/Disabledが変更できますが、
デフォルトは既にブースト有効となっていますね。
"PL"は送信出力レベルを選択出来、デフォルトは最大出力ですね。
送信データフレームについて
XBee間のデータは"AT(透過)モード"で送信しますがデータのフォーマットを書いて置きます。
ヘッダ 制御対象を示す番号
↓ ↓
[0xFF][データ個数][CH.No][2byteデータ]-------[CH.No][2byteデータ]
────┬─────
1データ辺り3byte(MAX6データ、変更可)
サーボモータ:[CH.No]はPWM/シールドのチャンネル番号 0-15 を指定
[2byteデータ]はPWM/シールドのPWMレジスタ値 0-4095 を指定
LED:[CH.No]は 16 で[2byteデータ]は1(ON)/0(OFF)を指定
例) [0xFF][3] [0][475] [1][135] [16][1]
全部で11byte、[データ個数]は9byteでなく3個とする
※ PWMレジスタ値 0-4095は実際は135-475の値を送っています、これは今回使ったサーボモータの
動作範囲であり、使うサーボモータにより異なります。
各サーボモータの動作範囲を探るのは"PWM/サーボシールドを動かしてみます(1/2)"を見ましょう。
《XBeeの設定》
XBeeは"AT(透過)モード"で行いますが、"S2C"/"S2"モジュール共にデフォルトは[ルータのATモード]で
動作するのでそのままですが、設定ヶ所は"PAN ID"と"DH/DL"に相手のアドレスを設定するだけです。
その方法は”XBee(無線通信)の実験パート2”を参照下さい。
《送信器側》
左図はジョイスティックピンの構成図です。
ジョイスティックは、Parallax Inc.のこちらを購入しました。
今回は、ブレッドボードにジョイスティックを挿す関係上、
横に配置(下図)している事に注意しましょう。
使うジョイスティックの読取り値により、
プログラム(XBeeTransmitter.c)の105/106行目を調整する必要が
有るでしょう。

PIC16F1829を使った送信器側実態配線図
電源は5.0Vです、XBeeは3.3VですがXBee用2.54mmピッチ変換基板に
3.3V電圧レギュレータを実装しているので5.0Vとします。
XBeeのI/Oも3.3VなのでPICからのTX(USART)信号は5.0Vだから分圧で3.29Vとしています。
SW1/SW2のプルアップ抵抗はPIC内部のプルアップを利用しています。
尚、XBeeからPICへ送信するUSART信号(橙色線)は今回使っていないので配線しなくてもOKです。
ダウンロードプログラムについて
↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
XBeeTransmitter.zip
プログラムソースをダウンロードしたら、MPLAB Xにてプロジェクトを作成します。
以下のファイルをプロジェクトディレクトリにコピーしてプロジェクトに取込んで下さい。
次にコンパイルとPIC書き込みを実行して下さい。
MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。
ダウンロードファイルを解凍すると下記の様なファイル構成です。
XBeeTransmitter.c・・・・・・・・ 本体の送信サンプルプログラム
skUARTlib.c・・・・・・・・・・・・・・ USART通信を行う関数ソースファイル
skUARTlib.h・・・・・・・・・・・・・・ USART通信を行う関数のヘッダファイル
尚、CPUのクロックは16MHzを想定しています。
XBeeTransmitter.c
通常はスライドスイッチ(SW2)は"1"側にて操作します。
各サーボの中央(ニュートラル)位置を操作する場合に、SW2を"2"側にして半固定抵抗で調整します。
調整が終了したらSW2を"1"側に戻します。
ジョイスティックを操作すれば受信器側のサーボモータが動作すると思います。
押しボタンスイッチ(SW1)を押せば受信器側のLEDが点灯し、放せばLEDは消灯します。
尚、SWにてLEDのON/OFFでなく、LEDをPWM/サーボシールドに配線し半固定抵抗辺りで行えばLEDの
調光が出来るでしょう。
電源を入れる前に半固定抵抗は中央辺りに回して置いた方が良いでしょう。
半固定抵抗ではなく小型のスライドボリュームを使った方が操作しやすいと思います。
アルプス電気のこちらかこちら辺りです。
skUARTlib.c
skUARTlib.h
この内容は”FT232RL使用によりUSBをシリアル変換してマイコンと繋ぎます”を参照下さい。
但し、"skUARTlib.h"はUSART1側を利用する様に#define定義しています。
又、USARTの受信バッファサイズは32byteとしています。
尚、XBeeとの通信は 9600bps Data=8bit Parity=none Stop=1bit Flow=none で行っています。
《Arduino受信器側》

受信器側実態配線図
電源は5.0Vです、サーボモータ用の電源5.0VとArduinoの制御用外部電源が必要です。
尚、ArduinoからXBeeへ送信するUSART信号(分圧ライン)は今回使っていないので配線しなくてもOK。
サーボの接続でほとんどのサーボには、サーボドライバのヘッダーに直接接続する標準の
3ピンメスコネクタが付属しています、必ずプラグをアース線(GND:通常は黒または茶色)に合わせ、
底部の行と信号線(PWM:通常は黄色または白色)を上にして下さい。
こちら(S03N 2BBM/JR)のサーボは"JR"タイプですがここで使っているのは"フタバタイプ"です。
サンプルプログラムについて
先ずは↓ここからPWM/サーボ(PCA9685)用関数ライブラリをダウンロードして下さい。
skPWMServo.zip
使い方やインストール方法等は、PWM/サーボシールド(PCA9685)を動かしてみます(2/2)を見ましょう。
Arduino用受信器側のサンプルスケッチファイルは↓からダウンロードして下さい。
XBeeReceiver.zip
解凍させディレクトリ丸ごとArduinoの作業フォルダの有る場所に移動させます。
作業フォルダの確認は、IDEのメニュバーから[ファイル]→[環境設定]を操作し開かれた画面内の
"スケッチブックの保存場所"を見ましょう。
XBeeReceiver.ino
受信器側のサンプルです、XBeeReceiver.inoを開くには、
IDEを起動して、メニューバーの「ファイル」→「スケッチブック」→[XBeeReceiver]
をクリック操作すればファイルが開かれます。
次に、IDEツールバーの「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを行います。
XBeeとの通信は"SoftwareSerial"を使いました。
《 その他 》
XBeeを使い、少ない部品で意外と比較的簡単にラジコン化出来ました。
XBeeを利用すると受信器側からのデータ送信も行えるので操作対象器機からのセンサー等の
アンサーバックが出来たりもしますね。
また、XBeeなので受信機を数台ぶら下げる事も可能でしょう、多分、おそらく。
それとぉ、XBeeの電波がどの位届くのかは実験していません。 m(_ _)m
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2018 Shigehiro Kimura All Rights Reserved.