上位に戻る 距離センサーを使ったレーダもどき 初版2021/11/14

思わず、買ってしまったELEGOOのArduino用UNO R3スターターキット 距離センサーと、サーボモータが入っていたので、室内の
距離を測って、自動で、室内レイアウト図を起こせたらいちいちメジャーで測定しなくてもすむかと思ってチャレンジしてみましたが
ダメでした
①センサーの測定距離 データシート上は、4mになっていますが、おそらくノイズで測れません。 1m以内です。ノートPCだと若干
 ましです。アースがあれば、もう少し距離伸びる可能性はあります
②斜めに照射されると、反射がうまくないようで直線の壁が湾曲して測定されます

で諦めて、レーダもどきを作ってみました 斜め照射でも正しく距離が測れるセンサーがあれば良かったですが・・・・。

    

  1. 使ったもの



    思わず、安! と思ってポチってしまいました
    ELEGOOの Arduino用UNO R3スターターキット
    まあ知ってはいましたが、特に作って見たいもの
    が思いつかなったので、触手が伸びませんでし
    たが、各種センサーやら、LCD表示器やらなに
    やら、一杯入って\3,959
    遊ぶにはいいかと、買ってしまいました

    添付の距離センサーと、サーボモータを使いました



  2. 回路図
    回路は、下図のように超簡単です


    スタータキットの接続回路と同じものです

    物理的には、下記写真のような感じです
    サーボモータは、名刺ケースの空箱にセット
    距離センサーは、ユニバーサルの基盤にICソケットを付けて、それに差し込みました
    基盤に直接ハンダでつけると、センサーに力かかると、基盤剥がれるので




  3. 出来上がった感じは、下記です
    まあ 全く使い道ないですねえ・・・・。

    PCから、数字の「1」を送出すると、Arduino側で、サーボの角度を1度進めて距離を測定し、「Sxxx,yy.yyE」を返します
    S スタートコード E データエンドコード コンマ区切りで、xxxが角度 yy.yyが、距離(cm)となっています
    100msecごとに、1を送出してポーリングします
    ①シリアルポート番号
    プログラムを起動する前に
    ArduinoのUSBを差してく
    ださい(ポートを検索します)
    ②通信速度
    Arduinoと合わせてください
    ③フロー制御
    Arduinoには、フロー用の
    信号線は無さげなので、
    利用しません
    余裕をもったタイミングでの
    通信が必要です
    ④通信接続切断ボタン
    ⑤開始ボタンを押すと、
    100msecごとに、測定要求
    を出します
    なので、180度測定するのに
    18秒かかります
    ⑧試験ボタンは、1回だけ
    測定要求を出します
    ⑨テキストボックスに値を入れて
    送信ボタンを押すと値が送信
    されます
    ⑪受信したデータをそのまま
    表示します


    本ソフトですが、RS232Cの通信ソフト 一から作るの面倒いなあ、どこかにあるんじゃないかと探していたら、バッチリなのがありました
    描画しないといけないので、これまた、マルチスレッド処理しないといけなく 両方の機能がありました。

    VB.NETでシリアル通信を行う (kana-soft.com)

    金澤ソフト設計 様のサンプルコードで、確認すると、自由に使って、ソースも公開してよいとのことでした
    但し著作権は、金澤ソフト設計様にあるので、商用などで使うときは確認してくださいね

    ■PC側ソフト
    実行ファイル .NET 4.04084
    ソースファイル Visual Studio 2019 v16.1.2
    ■Arduino側のソースです
    ソースファイル
    #include <HCSR04.h>
    #include <Servo.h>
    byte triggerPin = 12;
    byte echoPin = 11;
    char inputdata;
    int pos = 0;
    int flgg = 0;
    Servo myservo;
    void setup () {
    Serial.begin(9600);
    HCSR04.begin(triggerPin, echoPin);
    myservo.attach(9);
    }

    void loop () {


    inputdata=Serial.read();
    // inputdata='1';

    if (inputdata == '1'){


    if (flgg==0){
    pos =pos + 1;
    if (pos==181){flgg=1;}
    myservo.write(pos);
    }
    if (flgg==1){
    pos =pos - 1;
    if (pos==0){flgg=0;}
    myservo.write(pos);
    }
    double* distances = HCSR04.measureDistanceCm();
    Serial.print("S");
    Serial.print(pos);
    Serial.print(",");
    Serial.print(distances[0]);
    Serial.println("E");
    }
    }
    距離センサー HCSR04と
    サーボモータ Servo
    ライブラリを使っていますので
    利用するには事前に読み込まして
    おいてください





    以上間違い等ありましたら、以下ご意見箱にお願いします

   

    ご意見箱