Arduino Duemilanove 328 AND UNO
赤外線距離計を作ってみる
赤外線距離計を作ろう(2)


さて、LCDディスプレイがつながったので、何か表示させてみましょう。
アナログ入力を使うことにして、たまたま部品箱にあったシャープの赤外線距離センサーを使ってみることにします。
このセンサーは、4-5年前に面白半分で買ったものですが、調べてみると今でも現役。
この手の製品にしては息が長いですね。もはや定番。
バイブルといっても良い”Making Things Talk"(オライリー・ジャパン、オーム社)にもしっかり載っていますね・・・。



これがシャープの赤外線距離センサー”GP2Y0A21"
LEDからの光を受光素子で受けて、距離をアナログ値(電圧)で出力します。
受光素子にはPSD(Position Sensitive Detector)が使われています。
この素子の特性上、出力される電圧は、距離に比例していません。何らかの関数で距離の値に変換する必要があります。


結論から言うと”Making Things Talk"にあるように、すでに近似値を算出する関数(変換式)が発表されています。
www.acroname.com/robotics/info/articles/irlinear/irlinear.html

R = (6787 / (V - 3)) - 4

ということで、この変換式を使わせたいただきました。


さて、接続ですが、非常に簡単です。電源と出力の3本の線をつなぐだけです。
電源は、+5Vが必要です。+3.3Vでも動作しますが、当然出力される電圧値はあてになりません。
上の写真左から
  @黄:Vo(出力値)   ---→ AnalogIn 0
  A白:GND        ---→ GND
  B赤:+5V       ---→ +5V


L
CDディスプレイと一緒にブレッドボードに実装するとこんな感じになります。




スケッチ
距離計のスケッチはこんな感じになります

/*************************************************************
/*
/* 赤外線距離計 有効測定距離 10cm−80cm
/*
/*************************************************************
*/
// LCDキャラクタディスプレイ関数のインクルード
#include <LiquidCrystal.h>

// 接続メモ
// LiquidCrystal display with:
// rs on pin 12
// rw on pin 11
// enable on pin 10 
// d0, d1, d2, d3 on pins 5, 4, 3, 2
// 使用するピンの定義
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

// GP2Y0A21
// Vo pin analog 0
  int sensorPin = 0;    // センサーのインプットピンの定義

// Globan value
  int sensorValue = 0;  // センサーの読み取り値を格納する変数

void setup()
{ // オープニングメッセージの表示
  lcd.begin(2,16);  // 使用するLCDの行数、桁数を設定する  
  lcd.clear();
  lcd.print("*Distance Meter*");
  lcd.setCursor(3,1);
}

void loop()
{ 
  sensorValue = analogRead(sensorPin);         // 距離センサーの値の読み取り
  int range = (6787 / (sensorValue - 3)) - 4;  // センサー電圧 −> 距離(cm)変換
  
  // 値の表示
  lcd.setCursor(6,1);
  lcd.print ("   ");
  lcd.setCursor(6,1);
  lcd.print (range);
  lcd.setCursor(9,1);
  lcd.print ("cm");
  delay(500); 
}




この距離計に必要な部品はShopTechandで購入できます。



Copyright (C) 2006-2008, Techand All rights reserved