2023.04.04本記事はプロモーションが含まれています。こんにちは、ENGかぴです。Arduinoとトワイライトを使って超音波距離センサーUS-015から取得した距離のデータを表示するシステムを作ることができます。ArduinoとUS-015で一定間隔で距離データを計算しトワイライトで無線通信を使用してモニターします。今回はArduinoとUS-015とトワイライトを組み合わせた距離測定モジュールを製作してみました。下記リンクの応用編になります。US-015単体の動作については下記リンクを参考にしてください。UNOを使って動作確認を行ったことを下記リンクにまとめています。Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方トライライト(TWELITE)で動作確認したことについてまとめています。親機はタイムスタンプを表示しながら子機からの受信を待ちます。動作手順は以下の通りです。Arduinoで超音波距離センサ(US-015)から距離データを取得し計算するトワイライトがウェイクアップしたらArduinoに対して距離データを要求するトワイライトはArduinoから取得した距離データを親機に無線通信するトワイライトは無線通信後スリープするArduinoはUS-015に対して一定間隔でパルス出力を行い距離データを計算します。トワイライトから距離データの要求電文が受信できれば距離データを送信します。トワイライトは消費電流を抑えるためにスリープを使って一定間隔(今回は1秒)毎に距離データの要求を行います。スリープすることによって数mAの消費が1uA程度に抑えられるため電池が少しでも長く使えるようになります。MONOSTICKは距離データをモニタ表示するためにデータを換算するようにします。スポンサーリンクArduinoとトワイライトによる子機の構成(距離測定モジュール)子機の構成(距離測定モジュール)Arduinoは5V電源で動作しトワイライトは3.3V電源で動作するためArduinoの送信側の電圧をそのまま印加することができません。そのためR1とR2によってArudinoからトワイライトに向かう信号を分圧しています。Arduinoはトワイライトの出力の3.3Vを受けてもHレベルと判定できるためArduinoのRXに直接信号を入力しています。Arduinoへの配線はトワイライトをシリアル通信に超音波距離センサをDIDO接続しています。Arduinoは距離センサーから250ms(任意でよい)毎に距離データを取得して4回分のデータを平均化してばらつきを押さえます。}}トワイライトがスリープからウェイクアップしたときシリアル通信を使ってデータの要求を行います。Arduinoはトワイライトから送信された電文をSerial.read()で受信してRxDataChk()で電文のチェックを行います。Arduinoが受信するシリアルデータ(トワイライトが送信)もトワイライトのバイナリデータの電文フォーマットに従ってHEADER1(0xA5)・HEADER2(0x5A)・HEADER3(0x80)として電文ヘッダが一致することを確認してから受信データを受け取りSUMが一致すると正常なデータとして受け取るようにします。外部機器と接続する際はメインとなる機器に対して電文が共通になるように管理すると可読性が良くなります。電文が問題なければSerialTxSet()でUS-015から取得した距離データを返信する処理を行います。Serial.write(txdata.sum);}トワイライトにバイナリデータでシリアル通信を行うためにはヘッダを含めてルールに従う必要があります。詳細は下記のリンクで説明しています。トワイライト(TWELITE)とArduino間でシリアル通信するトワイライトのSerialParser()の電文フォーマットに従って送信電文を作成します。距離データは4バイトデータですが、txdata.buf[]は1バイトデータとして定義しているため4バイトデータをそのまま格納することができないためシフトによる分割を行って格納しています。距離データしか送らないためtxdata.buf[]を4バイトデータとして宣言し4バイトデータをセットする方法もあります。この方法においてもデータ送信する際に1バイトのポインタとしてアドレスを更新しながらセットすることで4バイトデータも1バイトの単位で送信できます。広告トワイライトの親機トワイライトの親機はMONOSTICK(USBタイプ)子機からデータを受信するとシリアル通信を使ってArduinoにデータを送信するようにします。mwx::flush;}親機と子機の間でアプリケーションの判定をするため文字ヘッダによるデータの判別を行っています。strncmp()で文字ヘッダを比較して同一であれば残りのデータを受け入れる処理を行います。US-015の距離データは100倍値になっているので100で割った商が整数部となり余りが小数点以下の値になります。これらをトワイライトのSerialモニタで表示するようにしています。本棚を使って動作確認を行いました。本棚は床から870mmの高さのものであり本棚の上に今回製作した距離測定モジュールを設置しました。Termのモニタで確認すると割と正確に取得できていることが分かります。段ボールを使ってUS-015やArduinoを固定できるようにしましたが設置環境によって誤差が出ることもありました。130mmの対象物を測定すると128mm付近になったりと不安定な部分もありましたが、誤差は大きくても30mm以内に収まる傾向でした。自作の段ボールによる固定の誤差も大きく出ている可能性や音波を当てている床を移動しただけでも結果が数十mm変わることがあったので測定環境の影響もありそうです。誤差はありますが、それなりに測定できており段ボールで固定したりと作るのが面白かったの満足しています。以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。mwx::flush;}参考記事のArduinoと超音波距離センサーUS-015で距離を測定では超音波距離センサの円筒のトップを基準にするために5mm分補正していましたが、距離が長くなるほど誤差が気にならなくなったためコメントアウトしています。関連リンクArduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。XIAOで学べるソフト開発と標準ライブラリの使い方ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方また無線モジュールであるトワイライトを使ってソフト開発したことについてまとめています。トワイライト(TWELITE)のソフト開発と無線通信でできることPR:技術系の通信教育講座ならJTEX最後まで、読んでいただきありがとうございました。組み込みエンジニアトワイライト(TWELITE)のPWMを使ってブザーを鳴らすZigBeeモジュールであるトワイライト(TWELITE)はタイマ機能を備えておりPWM波形を生成することができます。PWMでLEDの明るさなどを調整したりできます。PWMで振動波形を模擬することでブザーを鳴らして動作を確かめました。組み込みエンジニアESP32-WROOM-32Eでシリアル通信を実装するArudinoの標準ライブラリであるSerialを使用すると外部機器とシリアル通信ができます。ESP32-WROOM-32Eは複数のシリアル通信ポートを持っているためシリアルモニタと外部機器と接続するシリアル通信を区別することができます。XIAOはArduino環境でソフト開発ができるため標準搭載のライブラリを使用することで各種センサーの動作確認ができます。ソフト開発に対して苦手意識がある方でも簡単に動作確認ができるためお勧めのモジュールです。組み込みエンジニアArduinoのライブラリでGPSモジュールで時刻を取得するGPSモジュールは現在地の情報や時刻情報などを衛星からの電波を受信してユーザーに通知するモジュールです。Arduino環境ではGPSモジュールのためのライブラリをインストールすることで時刻データや位置情報を簡単に取得できます。XIAO31ESP32-WROOM-32E37TWELITE(トワイライト)26PIC16F182731PIC12F67522ノウハウ(体験談)36趣味と生活29その他6タグオペアンププロフィールENGかぴ当ブログの運営者のENGカピです。組み込みエンジニアとして10年以上の経験を活かしてセンサーモジュール等の動作確認したことをまとめています。広告、アフィリエイト収益で当ブログを運営させていただいております。defined.")}))})()タイトルとURLをコピーしました。