距離計

超音波測距センサー赤外線測距センサーとを使って距離計を作った。

とりあえずセンサーとスケッチの動作確認だけした。   

f:id:ti-nspire:20150127194706j:plain

 

最終的には以下のようなモノが出来上がった。

センサー面(左上にあるのが超音波センサー、右上が赤外線センサー):

f:id:ti-nspire:20141130151411j:plain

f:id:ti-nspire:20141130151431j:plain

f:id:ti-nspire:20141130151436j:plain

 

ディスプレイ面(上段の数字が超音波センサーの計測値、下段が赤外線センサーの計測値):

f:id:ti-nspire:20141130151455j:plain

 

マイコン基板は、Arduino 互換機(『作って遊べるArduino互換機』)を使った。スケッチは、『Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)』に掲載されたものに変更を加えた。変更点は、赤外線用と超音波用のスケッチをニコイチにしたこと、および超音波センサーの出力電圧の代わりにパルス幅を読み取る設定にしたことである。

// 超音波距離センサー LV-MaxSonar-EZ1 のパルス幅出力 (PW) と PSD 測距センサー GP2Y0A21YK のアナログ出力とLCD に表示する。
#include <LiquidCrystal.h>
const int sonorPin = 8;  // Arduinoの「D8」に LV-MaxSonar-EZ1 の PW 出力を接続する
const int irPin       = 0;  // Arduino の「A0」に赤外線センサーの出力電圧を接続する

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD シールドの配線は『プロトタイピング』版


void setup() {
  lcd.begin(16, 2);
}

void loop() {
  lcd.clear();

  // 1 行目に "USM:      cm" と表示する。
  // 2 行目に "InR:      cm" と表示する。
  lcd.setCursor(0, 0); lcd.print("USM: ");
  lcd.setCursor(9, 0); lcd.print(" cm");
  lcd.setCursor(0, 1); lcd.print("InR: ");
  lcd.setCursor(9, 1); lcd.print(" cm");

  // 超音波センサーの距離を表示する
  float tU = pulseIn(sonorPin, HIGH); // sonorPin に入力されたパルスのパルス幅 (147μs で 1 インチ) を読み取って
  float InIn = tU / 147;                     // インチ単位に変換する。
  float InCM = InIn * 2.54;               // センチメートル単位に変換する。

  // 測定距離が短すぎる (6 インチ未満) 場合の処理
  if (InIn < 6.0) {
    lcd.setCursor(5, 0); lcd.print("Too Close");
  }


  // 測定距離が長すぎる (256インチ超) 場合の処理
  else if (InIn > 256.0) {
    lcd.setCursor(5, 0); lcd.print("Too Far");
  }
  else {
    lcd.setCursor(5, 0); lcd.print(InCM);
  }

  // 赤外線センサーの距離を表示する
  float tI = analogRead(irPin); // 赤外線センサーの出力電圧を読み取って 0~1023 に AD 変換
  float V = 5 * tI/1024;          // AD 変換値を電圧に変換
  if (tI > 80) {                       // analogRead の値が 80 以上の場合 (約 0.4V 以上の場合) は距離を表示する
     // float range = (6787 / (tI - 3)) - 4;    // Prototyping 版の変換式(使わない)
    float range = tan((34.56 - V) / 21.92); // ボクの電子工作ノート版の変換式
    lcd.setCursor(5, 1); lcd.print(range);
  }
  else {
    lcd.setCursor(5, 1); lcd.print("Too Far");
  }

  delay(500); // 0.5 秒待ってから繰り返す。
}

 参考文献:

作って遊べるArduino互換機

作って遊べるArduino互換機

 

 

ボクの電子工作ノート

ボクの電子工作ノート

  • 作者: 鈴木哲哉
  • 出版社/メーカー: ラトルズ
  • 発売日: 2012/06/18
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 7回
  • この商品を含むブログを見る
 

 

Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)
 

 

広告を非表示にする