アストロボーイへの道        astro1

9.  Bluetoothリモコン


 赤外線(IR)リモコンが動くようになったものの、アストロ1号の一番上に配置したフォトセンサの向きによっては感度が悪い。また、IRリモ コンを動き回るアストロ1後に正確に向けるのも、なかなか難しい。やはり、無線で操作するのが良いと考えたものの、敷居が高そう。ネット上で実施例を探し たら、秋月電子の「RN42使用 Bluetooth無線モジュール評価キット」(単価:2400円。マニュアル)を使った例が幾つかあった。他にも中国製など1000円以下の物もあったが、技術基準適合証明が取れていなかったり、ネット上に使用例が見当たらないなどの難点があり、Bluetooth初心者としては、少し高いが安心材料として秋月電子の物を使う事にした。

(1)「RN-42使用 Bluetooth無線モジュール評価キット」(以下、Bluetoothモジュールと略す)

 Bluetoothモジュールの外観を図1に、回路図を図2に示す。
 本モジュールは、搭載されているRN42チップの評価キットとして、製造元のマイクロチップ社が開発した物をベースに、秋月電子がピン互換品を開発した物と推定される。

 Bluetoothの規格では、機器同士のデータ転送の手順の上位階層部分を、細かい応用毎にプロファイルと称する通信手順を決めて標準化している。こ のプロファイルは幾つもあるが、本モジュールではSPP (Serial Port Profile)という、Bluetooth機器を仮想的なシリアルポートとして扱うプロファイルのみをサポートしている。RN42チップは複数のチッ プを内蔵しており、無線通信などの物理的なハンドリングを行うチップ以外に、SSPを処理するコプロが含まれている。このため、アプリケーション開発者の負担が少ない。

 本モジュールはBluetooth2.1 + EDR/2.1/2.0/1.1 をサポートしている。Bluetoothの規格には2種類あって、BR/EDR (Basic Rate / Enhanced Data Rate):従来方式とLE (Low Energy):低消費電力用途の通信方式の二つである。本モジュールは前者の規格に対応している。2種類の規格には互換性がない。最新のPCやスマホで は両方をサポートしているが、古い機種では前者のみのサポート。iPhoneの場合、4SからLEをサポートしている。ワイヤレスキーボードやワイヤレス マウスはBR/EDR、最近のApple Watchなどのスマートウォッチや、体重計などはLEで通信している。

 本モジュールの動作モードとして、
Data Mode と Command Mode の2種類を持っている。前者はデータのパイプ(通り道)としての機能だけ。後者はコマンドを送ってチップに多様な機能を持たせることができる。今回は前者の Data Mode のみを使用する。 

 本モジュールにはマイクロBコネクタとUSB UARTをハンドリングするFT231XQチップが搭載されており、PCとUSBケーブルで接続して他のBluetooth機器と無線で仮想シリアル通信 を行うか、或いは、直接、Arduinoを本モジュールのTX/RX端子に接続して、PCなどと無線で仮想シリアル通信を行うことができる。今回は、後者を選ぶ。

 今回はBluetoothモジュールをArduinoでコントロールしてPCと無線通信するのが目的なので、マイクロBコネクタは使用しない。これに伴 い、USBケーブルからの5V給電は無くなるので、RN42チップが必要とする3.3V電源はArduinoの3.3Vから給電する事にした。

 RN42チップの入出力電圧はLOWが0V、HIGHが3.3Vなので、Arduinoと接続するためには、TTL - 0/3.3Vのレベル変換が必要である。これには、秋月電子の「I2Cバス用双方向電圧レベル変換モジュール(PCA9306)」(単価:150円)(以下、I2C変換モジュールと略す)を使用することにした。図2に外観、図3に基板上の部品配置、図4に回路図を示す。



                図1.Bluetoothモジュール 外観



                                                                   図2.Bluetoothモジュール 回路図




 
   図3.I2C変換モジュール                                    図4.I2C変換モジュール部品配置



                図5.I2C変換モジュール回路図


(2)シールドの製作

 アストロ1号に搭載すべく、Arduino用のシールドを製作する。
   表1にRN42のピン番号とピンの定義を示す。13ピンと14ピンのRX, TXを使用して、UART(Universal Asynchronous Receiver Transmitter : 汎用非同期送受信または調歩同期送受信)で、Arduinoとの通信を行うこととする。ボーレートは、PCとの接続で良く使われる9600ボーとする。

 BluetoothモジュールとI2C変換モジュール、Arduinoとを接続した回路図を図6に示す。ArduinoのD-1ピン、D-2ピンは RX、TXと定義されているが、PCとのUART用に使用されており、プログラムのダウンロード時に使うので、競合を避けるために、今回はD-5、D- 10を使用し、ソフトウェアでUARTをサポートするライブラリ上のSoftwareSerial.h を用いる。Arduino UNOでは全てのピンをソフトウェア・シリアル用RX、TXとして選ぶことができる。
D-10をRX、D-5をTXとして、BluetoothモジュールとArduinoのRX、TXは対向させる接続とする。

  Bluetoothモジュール用の3.3V、I2C変換モジュール用の5Vの両方ともArduinoから供給することにした。Bluetoothモジュールの動作時の消費電流は50mAと大きいが、Arduino UNO内に実装されている3.3V用のシリーズレギュレータLP2985-33の定格出力電流は150mA、大本の5V用のシリーズレギュレータNCP1117の定格出力電流は1Aあるので、対応可能と判断した。今後、負荷が大きくなった場合には専用のレギュレータを配置するなどの見直しが必要となるかも知れない。

 以上の検討を経て出来上がったArduino用の自作Bluetooth用シールドの外観を図7に示す。Arduino用ユニバーサル基板の上にミニブレッドボードを乗せてから配線を行った。


                               表1.RN-42のピン番号と定義




                          図6.Bluetooth用シールド回路図



      図7.Bluetooth用シールド


(3)Arduinoプログラム

 図8はBluetoothシールドの動作確認用プログラムである。
 行#1でライブラリのSoftwareSerial.hを組み込む宣言をしている。
 行#13から15で、PCからデータが送られて来たら、読み込んだデータをincomingByteに代入している。
 行#18で、送られたデータが "^" だったら、"Hellow World !"のメッセージをPCに返す。
 その他のデータの場合には行#23, 24にて、"I received: "というメッセージと共に、送られた文字を10進でPCに返す。   



                     図8.プログラムリスト

 プログラムを実行した結果のArduino IDEのモニタ画面を図9に示す。
 "^" 送信時に "Hellow World !"が返っており、"a" 送信時には "I recieved: 97"が返っている。これは期待した通り。
 ところが、"abc" と3文字同時に送った場合には、改行されて 97, 141, 255が返っている。"a"のアスキーコードは"97"であるが、"b"のアスキーコードは"98"であって"141"ではない。同様に"c"も誤ってい る。原因は不明だが、このシステムでは1文字の場合しか、正しく送れないようである。
 なお、ドライバとしてはBluetooth用を選び、右下の通信の条件は9600ボーで「改行なし」を選ぶ必要がある。



                   図9.Arduino IDE モニタ画面


< Topページへ戻る >