やりたいこと
- 誰か(大抵は家族)が玄関に入ってきたときに、ちょっとほっこりできるように声をかけてあげたい。
- 余っている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);
}
動作の様子
一応、「お帰りっス」と言ってます。聞こえるかな?