arduino+超音波センサーで玄関ウェルカムボイス装置


やりたいこと

  • 誰か(大抵は家族)が玄関に入ってきたときに、ちょっとほっこりできるように声をかけてあげたい。
  • 余っているarduinoUNOと超音波センサーHC-SR04とISD1840搭載録再ボードを組み合わせて何か作りたい。

やったこと

準備物

  • arduino (UNO R1) 多分互換機でも動く。
  • HC-SR04 多分アマゾンで買った。
  • ISD1840を積んだボード どこから買ったか忘れた。百数十円だった。

動作原理

超音波センサーで距離をリアルタイム測定し、決められた距離以下になったら録再ボードに再生信号を送る。

配線の様子

P-Eに接続すると、1回の信号入力で最後まで一通り再生される。
下の画像は、arduino4番ピンからP-Eに接続されています。

arduino側ピン。ソースにも書いてありますが、

  • 2番ピン→超音波センサーのエコー
  • 3番ピン→超音波センサーのトリガー
  • 4番ピン→録再ボードへの再生トリガー

です。画像の「再生用」の4番ピンが録再ボードのP-Eにつながってます。
Vccは、超音波センサーのVccとブレッドボード上で共有しています。

全体

とりあえず動作すればいいや、なのでこんな感じに。
超音波センサーの超音波が出る部分を玄関側にセットしています。

コード

uss-isd1820.c
//********************************************************************
//*超音波センサを使って距離を表示するプログラム
//
//*ピンアサイン
// 基板を正面(超音波がでる裏側)から見たときの左から順に
// GND Echo Trig Vcc
//********************************************************************
#define echoPin 2 // Echo Pin
#define trigPin 3 // Trigger Pin
#define soundPin 4 // Playback Pin
#define waittime 30 // playback waittime
#define dt 10 // trigger time
#define therm 24 // therm
#define LED 13 // if <10.0cm , blink LED13
#define LIMIT 50 // LIMIT distance 10cm

double Duration = 0; //受信した間隔
double Distance = 0; //距離

void setup() {
Serial.begin( 9600 );
pinMode( echoPin, INPUT );
pinMode( trigPin, OUTPUT );
pinMode( soundPin, OUTPUT );
digitalWrite( soundPin, LOW );
pinMode( LED, OUTPUT );
}
void is10cm(double dist)
{
  if (dist < LIMIT)
  {
    digitalWrite( LED, HIGH);
    digitalWrite( soundPin, HIGH);
    delay( waittime ); //この行がなくても動いた。
    digitalWrite( soundPin, LOW);
  } else
    digitalWrite( LED, LOW);
}
void loop() {
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2); 
  digitalWrite( trigPin, HIGH ); //超音波を出力0
  delayMicroseconds(dt); //
  digitalWrite( trigPin, LOW );
  Duration = pulseIn( echoPin, HIGH ); //センサからの入力
  if (Duration > 0) {
    Duration = Duration/2; //往復距離を半分にする
    Distance = Duration*(331.45+therm*0.6)*100/1000000; // 音速を340m/sに設定
    Serial.print("Distance:");
    Serial.print(Distance);
    Serial.println(" cm");
    is10cm(Distance);
  }
  delay(200);
}

動作の様子

一応、「お帰りっス」と言ってます。聞こえるかな?