B-ART:UARTをBLEで無線化するモジュール
TweetUARTをBLEを使って無線化するモジュールを作っています。 あと、端面スルーホールをKiCad+Elecrowで作ってみました。
概要
B-ARTはXbee ZigBeeモジュールみたいにUARTを無線で飛ばすモジュールです。 マイコンのプログラムを追加で書くことなく、UARTのTXとRXだけをつなげるだけでUARTを無線化できます。 無線部分はBLE(Bluetooth Low Energy)で実装をしています。
非常に小さいことが特徴で、開発中の基板に挿して簡単に使える無線モジュールをコンセプトに開発をしています。 (現状、秋月で買えるどの無線モジュールよりも小さいはず)
B-ARTにはType-PとType-Uの2種類があり、Type-Pはピンヘッダ、Type-UはUSBコネクタがついています。 Type-Pには4pinのピンヘッダが付いていて、3.3V-GND-TX-RX の4本を接続するだけで使うことができます。 Type-UにはPCに直接挿せるUSBコネクタと、FTDIのUSB-UART変換IC(FT234XD)が載っています。 FT234XDのおかげでPCにさすとシリアルポートとして認識されるので、 普段シリアルポートを使うときと全く変わることなく使うことができます。
B-ARTのType-PとType-Uの基板の裏にはDIPスイッチが4bit分あり、 1bitはクライアント動作をするかサーバー動作をするか、3bitはIDを意味していています。
B-ARTは通信においてはType-PであるかType-Uであるかは関係なく、 同じIDを持つサーバーとクライアントが1対1で通信できるという仕組みになっています。 なので、同じIDを持っていさえすれば、
- TypeU <-> TypeU
- TypeP <-> TypeP
- TypeU <-> TypeP
の全ての組み合わせで通信が可能です。 IDが同じ相手を選択して通信をするので、同じ環境にB-ARTが何組もあってもIDさえ違えば混線が起きないようになっています。
現在開発中の回路・ファームはType-P、Type-UどちらもGithubで公開しているので 興味があれば見てみてください。
設計
コンセプト
最初にも言いましたが、開発中の基板に挿して簡単に使える無線モジュールを目指しています。 具体的には
- モジュールのサイズが小さい
- 消費電流が小さい
- 特に設定なく簡単に使える
を目指して開発をしています。
なぜBLEなのか
BLEはBluetooth Low Energyという名前にある通り、 消費電流の小さいモジュールで動作可能な通信方式です。
ほかの通信方式(Bluetooth、WiFi、ZigBee)と比べて BLEは通信速度と電波強度が落ちてしまうのですが、 とにかく低消費電力での通信が可能となっています。 また、電波強度が小さいからか、通信モジュールも非常に小さなものが多いです。 (理由はよくわかっていません….)
このような特徴を持つBLEを採用したため、B-ARTも最大でも30mAくらいの消費電流で動作可能で、基板サイズも非常に小さくなっています。
消費電流が小さいというのは個人的に今回のこだわったポイントになっています。 適当に挿して使えるモジュールを目指す場合は基板サイズとピン配置だけを気にすればよいかというと、そうでもありません。 そのモジュールが非常に大きな電流を必要としてしまってはおおもとの電源回路でも無線モジュールへの配慮が必要となってしまい、 簡単に使えるとは言えないからです。 なので消費電流が小さいというのは簡単に使えるという意味も担っていると考えています。
BLEによって小ささとお手軽さを得ることができましたが、 そこまで通信帯域が広くはないので通信速度に関しては少し心配があります。 まだきちんと評価をしていないので詳細は分かりませんが、B-ARTもUART側にデータを連続して流しっぱなしにした場合、 115200bpsがギリギリいけるかいけないかという感じです。 もちろんB-ART内部にバッファ(512Byte)を持っているので、連続でなければ115200bpsでも問題なく通信をすることができています。 ロボットのセンサ値を連続して高速にログを取るのはできないかもしれませんが、 コマンドや結果を送受信したり、ちょろちょろと出るログを見るといった使い方であれば全く問題なく使えます。
BLEマイコン
BLE搭載マイコンモジュールとして Braveridge BVMCN5103(技適対応)を使っています。 BVMCN5103にはBLE搭載マイコンであるNordic nRF51822が入っています。 nRF51822にはARMのCortex-M0をコアに持っているので、 STM32などと同じようなARMの開発環境で開発が可能です。
NordicはnRFシリーズのためにPeripheralやBLEを簡単に使うためのSDKを提供してくれているので、 基本的にはこのSDKにある関数を呼ぶことで色々な機能を使うことができます。
BVMCN5103の開発キットはamazonにも売っています。 ブレッドボードに刺さる開発ボードになっているので、簡単に実験することができます。
売り上げランキング: 83,675
BVMCN5103単体のモジュールもamazonに売っています。
売り上げランキング: 504,767
設定が簡単
Xbeeなどは事前にPCで設定をしないと使えませんが、B-ARTは裏面のDIPスイッチをいじるだけの設定で動作可能となっています。 動作は単純にUARTを無線で飛ばしていいるだけ(Xbeeでいう透過モード)なので、 B-ARTを接続するマイコンで特別B-ARTようにコードを書いたりする必要もなく、 いつも通りUARTでデータを出力するだけでどうにかしてくれます。
Type P
回路図
部品をつないだだけです。 ピンヘッダで他の基板につなぐときにきっと逆挿しなどが起こると思うので、電源にはダイオードが入れてあります。
アートワーク
Type U
回路図
Type Pの回路にFTDIのFT243XDを追加した構成になっています。 電源はUSBから5Vをとり、FT234XD内部のレギュレータを通して3.3V電源を生成しています。
アートワーク
端面スルーホール
なるべく横幅を狭くしたかったので、 USBコネクタの大きな足のためのパッドは長孔半分のスルーホールでどうにかしようと思いました。 いわゆる端面スルーホールをつくろうとしました。 どうすればいいのかよくわからなかったので、KiCad上でスルーホール上を基板の外形線を引いてみました。
Type-UとType-Pを面付けしてElecrowに2層基板として発注しました。 するとこんな感じで基板が来ました。
端面スルーホールにしたかった部分にバリが出て汚くなっています。 このバリはよく見るとこんな感じで金属片が一枚飛び出ています。 たぶんスルーホール内部の金属のうち、外形線の外側にあった部分がつくっついたままになってしまったのだと思います。
このバリをニッパーでカットすると一応端面スルーホールのようになりました。 はんだ付けをしてコネクタに力をかけてもスルーホール部分がはがれることはなく、 やりたかったことができました。
!!!もっと正しい端面スルーホールの作り方があればだれか教えてください!!!
-> 2019/4 FusionPCBで注文する際に端面スルーホールを作るオプションを指定することでうまくできることが分かりました。
id研:KiCad + FusionPCBで端面スルーホールを作る
使用例
例えば小さい走行ロボットを無線を使ってデバッグする時にB-ARTは役立つでしょう。 走行をさせるときに有線だと線が邪魔になり、Xbeeなどはモジュールが大きすぎて載せられないという状況です。
下の写真は現在制作中のマイクロマウスの機体MIZUHOv2に B-ART TypePを挿しているところです。
B-ARTは非常に小さく軽いので、マイクロマウスの機体に乗せても走行時にそれほど問題にはなりません。 基板に4pinのコネクタさえつけておけばほしい時にだけB-ARTを挿して使うことができます。
これから改良したいこと
通信速度の限界を評価
先にもありましたが、BLEは広帯域な通信ではありません。 まずは限界値を測って遅ければ対策を考えていきたいです。
BLEを通したファームウェアアップデート
いわゆるDFU-OTA (Device Firmware Update Over The Air)です。 そのためのNordicのスマホアプリとnRFのチップ側のコード例が用意されているので、 それらを使って実装したいと考えています。(コミケとかで配布しても後からアップデートできるように)