このセンサーはスイッチサイエンスのこちらで購入しました。
---------------------------------------------------------------------
#define pingPin 7 // センサー接続のピン番号
// 電源起動時とリセットの時だけのみ処理される関数(初期化と設定処理)
void setup() {
Serial.begin(9600) ; // 9600bpsでシリアル通信のポートを開きます
}
// 繰り返し実行される処理の関数(メインの処理)
void loop() {
int cm ;
cm = UsonicMeasurRead(pingPin) ; // センサーから距離を調べる
Serial.print(cm) ; // 距離を表示する
Serial.println("cm") ;
delay(1000) ; // 1s後に繰り返す
}
// 超音波センサーから距離を得る処理
// pin=センサーに接続しているピン番号
// 距離をcmで返す(検出できない場合は0を返す)
int UsonicMeasurRead(int pin)
{
long t ;
int ans ;
// 超音波センサーに5usのパルスを出力する
pinMode(pin, OUTPUT) ; // ピンを出力モードにする
digitalWrite(pin, LOW) ;
delayMicroseconds(2) ;
digitalWrite(pin, HIGH) ;
delayMicroseconds(5) ;
digitalWrite(pin, LOW) ;
// センサーからの反射パルスを受信する
pinMode(pin, INPUT) ; // ピンを入力モードにする
t = pulseIn(pin, HIGH) ; // パルス幅の時間を測る
if (t < 18000) { // 3m以上の距離は計算しない
ans = (t / 29) / 2 ; // 往復なので2で割る
} else ans = 0 ;
return ans ;
}
---------------------------------------------------------------------
CIDEツールバーの赤枠部分「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを
NJM4580Dは左下が1番ピンです、
下図はLM358NですがNJM4580Dも同じです。

---------------------------------------------------------------------
#define USS_T_PIN 7 // 送信側センサー接続のピン番号(デジタル接続)
#define USS_R_PIN 0 // 受信側センサー接続のピン番号(アナログ接続)
// 電源起動時とリセットの時だけのみ処理される関数(初期化と設定処理)
void setup() {
Serial.begin(9600); // 9600bpsでシリアル通信のポートを開きます
}
// 繰り返し実行される処理の関数(メインの処理)
void loop() {
int ans ;
ans = UsonicMeasurRead(USS_T_PIN,USS_R_PIN,20,30) ;
Serial.print(ans) ; // 表示を行う
Serial.println("mm") ;
delay(500) ; // 500ms後に繰り返す
}
// 超音波センサーから距離を得る処理
// txpin=送信接続ピン rxpin=受信接続ピン temp=周辺温度 correction=距離補正
// 距離をmmで返す(検出できない場合は0を返す)
int UsonicMeasurRead(int txpin,int rxpin,int temp,int correction)
{
unsigned long t , t2 ;
int ans , val ;
ans = 0 ;
tone(txpin,40000) ; // 送信センサーに40KHz信号を200us出力
delayMicroseconds(200) ;
noTone(txpin) ; // 40KHz信号停止
t = micros() ; // 現在の時間を記憶する
while(1) {
val = analogRead(rxpin) ; // 受信センサーの値を読む
t2 = micros() - t ; // 時間をカウントする
if (val >= 410) break ; // 受信値の電圧が2V以上なら反射信号とする
if (t2 >= 30000) break ; // 反射信号が返って来なかった場合の処理
}
if (t2 < 30000) {
t = 331500 + (600 * temp) ; // 音波の伝搬する速度を求める
t = (t * t2) / 1000000 ; // 距離の計算
ans = t / 2 ; // 往復なので÷2
ans = ans + correction ; // 距離の補正値を加える
}
return ans ;
}
---------------------------------------------------------------------
送信器センサーにArduinoの7番ピンから40KHzの信号を200us出力します、40KHz信号はArduinoの標準関数tone()を使用して行っています。
リンクの見直し(*3) 2020/03/20
回路図の追加(*2) 2014/02/06
追記(*1) 2013/06/17
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.