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

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

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

    

  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を差してく
    ださい(ポートを検索します)
    A通信速度
    Arduinoと合わせてください
    Bフロー制御
    Arduinoには、フロー用の
    信号線は無さげなので、
    利用しません
    余裕をもったタイミングでの
    通信が必要です
    C通信接続切断ボタン
    D開始ボタンを押すと、
    100msecごとに、測定要求
    を出します
    なので、180度測定するのに
    18秒かかります
    G試験ボタンは、1回だけ
    測定要求を出します
    Hテキストボックスに値を入れて
    送信ボタンを押すと値が送信
    されます
    J受信したデータをそのまま
    表示します


    本ソフトですが、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
    ライブラリを使っていますので
    利用するには事前に読み込まして
    おいてください





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

   

    ご意見箱