Home
超音波通信の実験 (超音波を利用した送信機、受信機の製作)
JA3OOK 中村 利和
Ver.1.0 '17/09/09
赤外線を使った通信はテレビのリモコンなどに利用されていますが、超音波を使った通信は一
般的ではないように思います。
秋月で買った超音波式距離センサーモジュールを利用して距離測定の実験を行い成果があった
ので、同じモジュールを活用して超音波による通信を実験しました。
直線で10m程度離れても、あるいは、直接見えなくても反射を利用して通信できましたので報告
します。
1.通信プロトコルの選定
一番簡単に通信するには「超音波の有無を検出できればよい」と言えます。そしてモールス符
号に基づいて超音波を出し、それを耳や目で聞き取れれば通信が立派にできたことになります。
しかし、この方法での通信が可能なことは容易に想像でき面白くありません。
今回の実験では一歩進めて
「コンピューター間の通信を行う」
ことを目指します。
一番基本的な、言い換えると一番原始的な方式、つまり、次のプロトコルを採用します。
・シリアル通信の一つてある RS-232C方式を採用(詳細は以下のとおり)
・調歩同期式通信
・符号構成 スタートビット1+データビット8+ストップビット1
・パリティチェック なし
・通信速度 20bps
超音波は反射性がよいので信号が乱れることが予想され高速通信での信頼性が下がり
そうだ。
使用する距離センサーモジュール(スピーカーやマイクおよび回路構成)の応答特性
も不明。
なので超低速の20bpsとした。
通信したいデータ量が少ない場合はこれでも十分実用になると思う。
・超音波の周波数 40,000kHz
活用しようとしている「超音波距離センサーモジュール US-015」(参考資料1)が
使用している周波数は明示されていないが、使われている超音波スピーカーおよび
マイクが、市販されている「超音波センサ(送受信セット)」(参考資料2)に
酷似している。その仕様書によると周波数は 40,000Hz(+-1kHz)。
・伝送路 片方向1
つまり送信機1、受信機1で構成。 実験なので片方向通信で十分。
・伝送誤り検出方式
超音波を使った伝送路なので乱反射が多いだろうし、安定した品質の伝送路だけでな
く、なるべく離れた場所や遮蔽物や反射物があるような悪条件での通信も期待してい
るので、伝送誤りが発生する可能性が高い。
そこで、受信側で伝送誤りを検出するために、
・ストップビットを認識でき
・伝送可能な文字コードを限定し、受信した文字コードがその範囲にあり
' '(0x21)以上 'Z'(0x5A)以下
・文字 ';'(0x3B)を受信した場合に受信文字列の最後と判断する
・文字列の最大文字数は ; を含め10文字
・さらに、実験内容として、受信した文字列を限定する
4.2項の表内の三種類の文字列
ことを規則とし、これに反している文字や文字列は伝送誤りとし無視する。
2.ハードウェア
・受信の心臓部には「超音波距離センサーモジュール US-015」(次の写真、参考資料1)を使
用し、必要な改造を加える。
これにより、特に受信機の設計手間と部品代金、製作手間を少なくすることができ、
チップ部品が使われているので基板サイズも大幅に小さくできる。
・送信制御と受信制御は MCU(PIC16F1619)で行う。
このPICが乾電池2本3Vでも動作すること、PERIPHERAL PIN SELECT(PPS) 機能を持ってお
り、入出力ピンの割り当てが柔軟にできるので、プリント基板の流用やポート設計の柔軟
性が高いことが採用の理由。
・電源はDC5Vまたは電池3〜4.5Vを使用する。5Vレギュレーターを内蔵していないので、決して
5Vを超える電源を接続しないこと。
3.ソフトウェア(PIC16F1619上)
・使い慣れたC言語を使用。
・シリアル通信プロトコルの実装はMCU内蔵のUSARTを使用せず、全てC言語で記述。
その理由は7項に記述している。
4.送信機
4.1 送信機ハードウェア
LEDは1文字列を送信するごとに一瞬点灯する。
ショートピンの抵抗は 0〜10kΩくらい。
4.2 送信機ソフトウェア
・PIC16F1619で実験してみると、40,000Hzを発生させるには CPUクロックに16Mhzが必要。
・内藤竜治さんのWeb(参考資料4)が、
シリアル通信の詳しい約束事
特に符号構成(スタートビット〜ストップビット)
信号がないときのポート電位のあり方やビット1や0のポート電位との対応
などの理解にとても参考になった。
・送信する文字列は次表のように三種類が可能。
超音波の出力の違いによる実験も行えるように、出力を1/2に減じてことも可能。
・これらの文字列を送信し続け、1文字列を送信するごとにLEDを一瞬点灯させ送信機の動
作中であることを表示する。
|
動作中のショートピン状態(途中で抜き差し可) |
断 |
接 |
電源投入時 |
ショートピン 断 で電源投入 |
ABC; を通常電圧で送信 |
ABC; を通常電圧の1/2で送信 |
ショートピン 接 で電源投入 |
XYZ; を通常電圧で送信 |
ビット 101010・・・; (UUUUUUUUU;)を通常電圧で送信 注1 |
注1 ビット 101010・・・; (UUUUUUUUU;) はオシロでの波形観測用
5.受信機
5.1 受信機ハードウェア
LCD画面の1行目
正しく受信した;までの文字列が表示される。
LCD画面の2行目
左端には 直前の1文字とそれの16進 が表示される。(伝送誤りを検出した場合でも)
右端には スタートビット割り込みが発生した時に i が一瞬点灯する。
LEDは文字列を正しく受信した場合に一瞬点灯する。
別に記載した「CAT、CI−V モニター」の基盤を活用して実験しているので、この写真
には白や赤色の押しボタンやトランジスタなど、超音波受信機には不要な部品や配線も写って
いる。超音波受信機に必要な部品や配線は回路図のとおり。
LCDは受信機が完成すれば抜いてもよい。LEDの点滅で通信できているかどうかが分かるので。
次の写真は US-015 の改造後の写真。
5.2 受信機ソフトウェア
・伝送誤りを検出するために、受信した文字や文字列を1項で述べた規則に合っているかチェ
ックする。
・文字列を正しく受信した場合にLEDを一瞬点灯させる。
6.評価
最短距離
送信機と受信機が近すぎても安定した通信はできない。1.5m程度は離し、離せない場合
は送信機と受信機を対向させず、何かに反射させればよい。
最長距離
ABC; を送って室内で実験した。
見通しにおいて10m程度は比較的安定して通信可能。
不安定なら12m程度まで、送信機の電源電圧を半分にすると8m程度まで可能であった。
壁やドアなどの反射を利用すれば、お互いが見えなくても通信できる。
乾電池2〜3本でも動作するので持ち運んで実験できる。
LEDの点滅で、超音波が来ているか、通信できているか、が分かるのでLCDは抜いておいてもよい。
但し、LCDがあると受信した文字の16進表示で FF などFが多いと超音波が弱いことが分かり、
不正確だがSメーターの代わりになるかも (^_^;)
7.ソースプログラムなど
・超音波通信-送信機・ソースプログラム
・超音波通信-受信機・ソースプログラム
・LCDドライバー・ソースプログラム
・LCDヘッダーファイル・ソースプログラム
開発環境
MPLAB X IDE v3.40
MPLAB XC8 C Compiler (Free mode) V1.40
シリアル通信プロトコルの実装はMCU内蔵のUSARTを使用せず、全てC言語で記述している。
C言語で記述する理由:
PIC16F1619内蔵USARTの Baud Rate Generator(BRG)記載の表によると300bpsが最低。
(資料3の335P)
20bpsを行うためのパラメータを求める計算式は同じ資料に書かれており、20bpsに対
応するパラメーターを電卓で求めて実験したが、なぜか目的の信号速度にならず、も
っと速くなる。
(ちなみに、tera Term がサポートしている最低速度110bps も実現できない。)
私のプログラム記述ミスかもしれないが、あきらめてC言語で割込などを使って記述
した。
送信機プログラムの補足説明
・40,000Hz は1サイクルが25μs。 正弦波が理想だが矩形波で代用する。
半サイクル毎のON/OFFで矩形波を作るためには12.5μs毎の割り込みが必要。
PIC16F1619 で実験すると12.5μs毎の割り込みを実現するにはFoscが16MHz必要。
・送信機からシリアル信号が正しく出ているかの確認(デバッグ)方法。
20bpsの送信ロジックのまま、割り込み間隔だけ110bpsに変更して、
送信機回路図の「シリアル送信データ(確認用)」端子
↓
RS232変換デバイス(ADM3202ANなど)
↓
RS-232Cケーブル
↓
PCのRS-232C端子
↓
Tera Termなどで110bpsで受信
・シリアル信号が乗った超音波が受信機に届いているかの確認(デバッグ)方法。
送信機側の割り込み間隔だけ110bpsに変更して、(上記同様に)
US-015 の Echo ピン(US-015には電源が供給されていること)
↓
RS232変換デバイス(ADM3202ANなど)
↓
以下、上記と同じ
受信機プログラムの補足説明
・ 信号が1から0に変わった時に割込みを起こさせ、スタートビットとみなしており、
この時にLCDの2行目右端に i を一瞬表示している。
・ただし、ミームス(MEMEs)のサポートページ(参考資料5)によると
「連続送信した場合は文字と文字との間に待ち時間などはない」
とのことで、その観測波形(”ABCDEFG”を連続送信した時の波形)も載っている。
これに従って、
送信プログラムは
「連続文字の送信は連続したビットで送信」するようにプログラミングしている。
受信プログラムは、
「ストップビット(つまり1)の次のビットが0の場合は割り込みは起こさないで、
この0をスタートビットとする」ようにしている。
・伝送誤りを検出した場合、スタートビットを正しく認識していない(つまりデータビッ
トの0をスタートビットに認識してしまっている)可能性があるので、スタートビットと
判断するタイミングをずらしながら受信を試み続ける。
(同じ文字列が送られてくるので受信の試みがループし、いつまでたっても伝送誤りで
あると認識してしまい、いつまでも正しく受信できない問題が起こる。
この問題を解決するプログラムロジックの工夫に苦労した)
参考資料
1 Akizukidenshi SainSmart 超音波距離センサーモジュール US-015 Ultrasonic Distance Measurement Module V2.0
2 Akizukidenshi SPL Limited 超音波センサ(送信・受信)セット UT1612MPR Ultrasonic Sensor SU1612 series
3 Microchip PIC16F1615_1619.pdf
4 技術士 内藤竜治 なひたふ なひたふ新聞 RS232C
5 ミームス(MEMEs)のサポートページ SCIの使い方(その1) 調歩同期式シリアル通信
6 JR5HEJ/1(高橋正剛) ご自身設計製作の汎用LCD基板および説明書
直前の画面へは ブラウザの戻る をクリックしてください。Topに戻るにはHome