« ペットボトルで紐を作る!?”Plastic Bottle Cutter” | トップページ | 40m四方360度スキャン可能な”sweep” »

2016年3月12日 (土)

Arduinoで赤外線測距センサー”GP2Y0A710K”を使ってみた

Raspberry Piレーダーを”360度”仕様にしてみたで使っている赤外線測距センサーGP2Y0A710Kがもう一つあるので、Arduinoでも使ってみました。

参考にしたサイトはこちら。

arduino使い方:赤外線測距モジュール(GP2Y0A21)

VCCの2本をArduinoの5Vに、GNDはGNDに、VoをAnalog Inの0番に接続。

Img_1281

こんな感じになります。

Raspberry Piの接続に比べて、ずいぶんあっさりしてますね。

Raspberry Piにはアナログ入力がないのに対し、Arduinoはアナログ入力を持っているため、MCP3002のようなA/D変換が不要な分、簡単につなげられます。

Img_1282

ただし、線を直接突っ込んだだけではすぐに抜けてしまうため、ジャンパ線とテープで止めて使うことにしました。

ArduinoはRaspberry Piと違って、PCから切り離してしまうと値を表示できないため、16×2のLCDに表示させることにしました。

こちらを参考にLCDを設定しました。

16×2 I2C LiquidCrystal Display(LCD) | osoyoo.com

上のサイトで”Download LiquidCrystal_I2C.zip library file and Install I2C library:”からLCD用のライブラリをダウンロードするんですが、これをArduino IDEに取り込むには、「スケッチ」-「ライブラリをインクルード」で「.ZIP形式のライブラリをインストール」を選びます。

ダウンロードしたZIP形式のファイルを選択すると、LCD動作に必要なライブラリが入ります。

Arduino_gp2y0a70k02

まずはこんなコードを組んでみました。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup() {
     Serial.begin(9600) ;
     lcd.init();
     lcd.backlight();
}
void loop() {
     int ans ;
     float volt ;
     float distance ;
    
     ans = analogRead(0)  ;
     volt = ans * 5.0 / 1023 ;
     distance = ( 18.679 / volt ) -4.774 ;
     //Serial.println(ans) ;
     lcd.print(distance);
     delay(300) ;
     lcd.clear();
}

Img_1283

Arduinoのアナログ値は、Raspberry Pi+MCP3002と同様、電圧(5V)を0~1023の値にして返してくるため、値を距離に変換するのにRaspberry Piにシャープ製の赤外線距離センサー”GP2Y0A710K”つけてみたでつくった近似式を利用。

ただ、表示される距離がどうも倍くらいありそう・・・

てことで、

Img_1285

こんな感じにしてもう一度距離と電圧の校正を実施。

Arduino_gp2y0a70k03

この式を元にコードを作り直し。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup() {
     Serial.begin(9600) ;
     lcd.init();
     lcd.backlight();
}
void loop() {
     int ans ;
     float volt ;
     float distance ;
    
     ans = analogRead(0)  ;
     volt = ans * 5.0 / 1023 ;
     distance = ( 9.5974 / volt ) -3.0086 ;
     Serial.println(ans) ;
     lcd.print(distance);
     lcd.print("m");
     delay(300) ;
    lcd.clear();
}

Img_1287

これでまあまあ正確な距離を測定することができるようになりました。

Raspberry Piに比べて、反応速度は上々。数値しか返してきませんが、例えば車間距離などを測るだけならこんなのでもOKかと。

実はRaspberry Piでやりそこなった車載測距センサーとして使おうかと思ったわけです。

Arduinoならもっと手軽に載せられそうかなぁと。

ちょっと基板むき出しで、このままではやや載せにくいですが、なにか適当なケースにでも入れて今度こそ車載を目指してみよう、かな?

Arduinoをはじめよう 互換キット UNO R3対応互換ボード 初心者専用実験キット 基本部品セット20 in 1

« ペットボトルで紐を作る!?”Plastic Bottle Cutter” | トップページ | 40m四方360度スキャン可能な”sweep” »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Arduinoで赤外線測距センサー”GP2Y0A710K”を使ってみた:

« ペットボトルで紐を作る!?”Plastic Bottle Cutter” | トップページ | 40m四方360度スキャン可能な”sweep” »

無料ブログはココログ

スポンサード リンク

ブログ村