VOLTECHNO(ボルテクノ)

ガジェットとモノづくりのニッチな情報を伝えるメディア

2020年9月2日

【Arduino】超音波センサー URM37をArduinoで動かしてみる

【Arduino】超音波センサー URM37をArduinoで動かしてみる

DF RobotのURM37を使ったArduino距離センサを作ります。

今回サーボモータ制御や温度センサが追加されたURM37 V3.2を使ってみました。(秋月電子では販売終了となりました、後継品のURM37 V4.0が販売されています。)

秋月電子通商で¥1,300で購入。

IMG_5947

距離センサとは

距離センサとは光や音波を放射して、物体の表面からの反射波が戻ってくるまでの時間を計測して距離を測るセンサです。

今回使う超音波距離センサは超音波を放射して、もう一つのセンサで受信した際の反射時間を計測することによって距離を算出するセンサです。

IMG_5951

URM37 V3.2概要

URM37のスペックを下記の表に示します。RS232接続ができ温度センサやサーボモータのコントロール機能が追加されてるのが特徴です。

主な仕様
項目 URM37
電源電圧 +5V
動作電流 20mA以下
動作温度範囲 -10℃~+70℃
検出範囲 4cm~3m
解像度 1cm
インターフェース PWM、RS232レベルまたはTTLレベル
サーボコントロール 1制御出力
動作モード シリアル(PWM)受動コントロールモード、自律モード、ON/OFFモード
温度センサ出力 12ビット(シリアルポートから出力)
入出力端子 9ピンヘッダ(2.54ミリピッチ)
サイズ 22mm×51mm
重量 30g

 

使い方

いろいろな機能が搭載されているURM32ですが、今回は距離センサだけを使用します。目標としてはスケッチを書いて配線して無事に動けばOKということにします。

スケッチ

スケッチはDF Robot社のウェブサイトマニュアルからそのまま引用します→(URM37 V3.2 Ultrasonic Sensor )

今回はPWM passive control modeで動作させてみます。ウェブサイトからスケッチをそのままコピーして使用してみます。

// # Editor    :Jiang from DFRobot
// # Data      :18.09.2012
 
// # Product name:ultrasonic scanner 
// # Product SKU:SEN0001
// # Version :  0.2
 
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
 
// # Connection:
// #       Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -> GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
  
unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01};    // distance measure command
  
void setup()
{                                 // Serial initialization
  Serial.begin(9600);                         // Sets the baud rate to 9600
  PWM_Mode_Setup();
}
  
void loop()
{
 PWM_Mode();
 delay(20);
}                      //PWM mode setup function
  
void PWM_Mode_Setup()
{ 
  pinMode(URTRIG,OUTPUT);                     // A low pull on pin COMP/TRIG
  digitalWrite(URTRIG,HIGH);                  // Set to HIGH
   
  pinMode(URPWM, INPUT);                      // Sending Enable PWM mode command
   
  for(int i=0;i<4;i++)
  {
      Serial.write(EnPwmCmd[i]);
  } 
}
  
void PWM_Mode()
{                              // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);               // reading Pin PWM will output pulses
      
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
      
    if(DistanceMeasured>=10200)
    {              // the reading is invalid.
      Serial.println("Invalid");    
    }
    else
    {
      Distance=DistanceMeasured/50;           // every 50us low level stands for 1cm
      Serial.print("Distance=");
      Serial.print(Distance);
      Serial.println("cm");
    }
 
}

 

スケッチの記述と書き込みにはArduino Software (IDE)を使用します。

初期状態_エディタ編集

先ほどコピーしたスケッチをペーストし、左上の「マイコンボードに書き込む」ボタンを押したらコンパイルと書き込み完了です。

コード貼り付け_エディタ編集

URM37のジャンパ変更

URM37にはRS232 ModeとTTL Modeの2つの動作モードがあるため、スケッチに合わせてジャンパを切り替える必要があります。今回、PWMでURM37を起動するため配線作業を行う前にTTL Modeに変更しておきます。(→Working Mode Selection)。

TTLモードはJ1ジャンパを外してJ2,J3をRS232側からTTL側に変更します

ジャンパ設定

配線

配線はスケッチのコメント文に書かれているピンアサイン通りに行います。配線そのものはワイヤーで直接つなげればOKです。

Untitled Sketch_ブレッドボード

配線にはブレッドボードのジャンパワイヤを使いました。

IMG_5931

 

動作チェック

USBケーブルをつなげるとArduinoが起動し、5Vラインを通じて超音波センサも起動します。

Arduino Software (IDE)を起動して右上の虫眼鏡のボタン(シリアルモニタボタン)を押すとシリアルモニタが起動して、距離を測ることができます。

写真ではディスプレイ超音波センサとディスプレイの間の距離を測定させています。

IMG_5927

まとめ

URM37はサンプルコードが用意されているので、非常に簡単に動かすことができます。

使用したいピンはスケッチ上から簡単に変更できるので、ほかのArduinoシールドに応じたピン変更も簡単です。

※使用ピンの変更箇所 11~18行目(変更する場合後々見てちゃんとわかるようにコメント文も変更しておくといいでしょう)

// #       Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -> GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -> Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// #
int URPWM = 3; // ここを変更するとArduino側のピンを変更できます
int URTRIG=5; // ここを変更するとArduino側のピンを変更できます

また、測定した距離で条件分岐を行いたいときはDistance変数を参照してloop関数内に条件式を追加すれば自由に制御が行えます。

※Distance変数 20行目

unsigned int Distance=0;  //距離がcm単位で格納されるDistance変数

今回の作業環境

  • ハードウェア
    • Arduino UNO R3
    • URM37 v3.2
    • ブレッドボード・ジャンパーコード(オス-オス)
    • ピンソケット
    • USBケーブル A-Bコネクタ
  • ソフトウェア
    • Arduno 1.6.7
Return Top