なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう - 超音波距離センサー「LV-MaxSonar」

Posted by arms22 on 2011年01月31日 2  0

LV-MaxSonar-EZ0 front LV-MaxSonar-EZ0 back

LV-MaxSonarはMaxbotix社の低価格・高性能の超音波距離センサだ。アナログ電圧出力、パルス幅出力、シリアル出力の3つのインターフェースを持ち、デッドゾーンがなく、自動キャリブレーション機能が付いている。超音波を送信する部品と受信する部品が1つになっていて非常にコンパクトだ。親指大サイズの基板にセンサ部とPICマイコンが実装されている。このようにピンヘッダをはんだづけするとブレッドボードに立てて実験できる。

LV-MaxSonar-EZ0 on Breadboard

ブレッドボードで実験中。超音波センサで求めた距離を振動モータの振動の強さに変換し、暗闇でも物体との距離がわかるようなガジェットを計画中。

主な特徴

  • 動作電圧:2.5V~5V
  • 測定範囲:0m~6.45m(0~254インチ)0m~6.54m(0~255インチ)
  • 測定精度:2.54cm(1インチ)
  • 測定頻度:20Hz
  • インターフェース
    アナログ電圧出力:(VCC/512)/インチ
    パルス幅出力:174us/インチ
    シリアル出力:9600bps、TTLレベル負論理

検出パターン
LV-MaxSonarシリーズ ビームパターン

LV-MaxSonarは検出パターンによってEZ0~EZ4の5種類がある。上図はある太さの棒状の突起物がどのように検出されるかを表している。1グリッド=1フィート(300 x 300mm)。赤い点は3.3V動作時。僕が買ったセンサはEZ0でもっとも検出範囲が広い。

1/8インチの物体であれば距離にして1.8m、幅±30cm、3 1/4インチの物体であれば距離にして3.6m、幅±1.2mの範囲内にあれば検出できる。イメージとしてセンサの先にこの図のような風船がついていると考えるとわかりやすい。


Arduinoに接続する

GND  -->  GND (Arduino)
+5V --> VCC (Arduino)
TX --> 2番 (Arduino)
RX <-- 3番 (Arduino)
AN --> Analog 0番 (Arduino)
PW --> 4番 (Arduino)
LV-MaxSonarの動作電圧は2.5V~5Vで、5VのArduino(UNOやDuemilanove)や3.3VのArduino(ProやPro mini)どちらでも使える。MaxSonarの基板には"+5V"と書かれているが3.3Vを入れても問題はない。ここではアナログ電圧出力、パルス幅出力、シリアル出力の3つ動作を確認する為に3つの端子(AN・PW・TX)すべて接続している。実際に組み込む場合はどれか1つ、あるいは必要な端子のみ接続すれば良い。


サンプルスケッチ


アナログ電圧出力、パルス幅出力、シリアル出力から距離を取得し、PCに送信するサンプルスケッチ。インチ→センチメートルへの変換に浮動小数点を使わないようにしている。
#include <NewSoftSerial.h>

// MaxSonar Arduino
//      GND GND
//      +5V VCC
//       TX 2
//       RX 3
//       AN Analog 0
//       PW 4

NewSoftSerial sonar(2, 3, true); // 3番目の引数:論理を反転する
const int anPin = 0;
const int pwPin = 4;

void setup()
{
  Serial.begin(57600);
  sonar.begin(9600);
  pinMode(pwPin, INPUT);
}

void loop()
{
  // アナログポートから読み込む
  int range_an = analogRead(anPin);
  int inch = range_an / 2; // VCC/512 per inch

  Serial.print( inch );
  Serial.print( " inch (" );
  Serial.print( ((unsigned int)(inch) * (unsigned int)(2.54 * 64)) >> 6 );
  Serial.println( " cm) from Analog" );

  // パルスポートから読み込む
  unsigned long range_pw = pulseIn(pwPin, HIGH);
  inch = range_pw / 147; // 147us per inch

  Serial.print( inch );
  Serial.print( " inch (" );
  Serial.print( ((unsigned int)(inch) * (unsigned int)(2.54 * 64)) >> 6 );
  Serial.println( " cm) from Pulse" );

  // シリアルポートから読み込む
  while( sonar.available() >= 4 ){
    // シリアル出力は大文字のRから始まって、
    // 000から255の3桁の距離(インチ)に続き、
    // キャリッジリターン(13)が送られてくる。
    if( sonar.read() == 'R' ){
      Serial.print( (char)sonar.read() );
      Serial.print( (char)sonar.read() );
      Serial.print( (char)sonar.read() );
      Serial.println(" inch from Serial");
      sonar.flush();
    }
  }

  delay(60);
}


参考URL


LV-MaxSonar®-EZ0™ High Performance Sonar Range Finder
http://www.maxbotix.com/uploads/LV-MaxSonar-EZ0-Datasheet.pdf

Ultrasonic Rangefinders Feature Custom Beam Width
http://www.maxbotix.com/uploads/MaxBotixNewProducts.pdf

メカロボショップ - LV-MaxSonar®-EZ1™ 低価格・超小型・高性能超音波センサー
http://www.mecharoboshop.com/Products/sensor/LV-MaxSonar-EZ1

花岡ちゃんに花束を - ソナー(超音波センサ)を考える(その1)
http://cyberworks.cocolog-nifty.com/blog/2010/09/post-77aa-1.html

花岡ちゃんに花束を - ソナー(超音波センサ)を考える(その2)
http://cyberworks.cocolog-nifty.com/blog/2010/09/post-c6ff.html

花岡ちゃんに花束を - ソナー(超音波センサ)を考える(その3)
http://cyberworks.cocolog-nifty.com/blog/2010/09/post-281e.html



Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)
小林 茂
オライリージャパン
売り上げランキング: 34038



Ads by Google

2 Comments

says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2013.05.16 15:09 | | # [edit]
arms22 says..."Re: inch⇒cmへの変換"
> ①inch = range_an / 2; // VCC/512 per inch

analogReadはアナログピンの電圧を0~1023の範囲で返します。
そのため2で割るとちょうどVCC/512=inchになります。

> ②Serial.print( ((unsigned int)(inch) * (unsigned int)(2.54 * 64)) >> 6 );

浮動小数点演算を行わないようにするために64倍して、
unsigned int型に変換しています。
2013.05.24 11:39 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。