Menu
CoddyTech

駐車センサー:ビープ音

CoddyのArduinoジャーニー「プロジェクト」セクションの一部。レッスン 11/24。

駐車センサーは表示するだけでなく音でも知らせます。壁に近づくほどビープ音の間隔が短くなり、やがて止まるよう促す一定の音になります。ブザーはピン 8 に接続されています。

ビープ音の間隔は距離から決まります。距離に 10 を掛けた値がミリ秒単位の間隔です。70 cm では 700 ms ごと、20 cm では 200 ms ごとにビープ音が鳴ります。millis() タイマーで次のビープ音を鳴らすタイミングを判断します。

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // 50 msのビープ音
}

ほかに 2 つの場合があります。10 cm 未満では、長さを指定せずにtone(buzzerPin, 1000)を再生します。何かが停止させるまで音が鳴り続けます。100 cm 以上では音を鳴らさず、noTone(buzzerPin)を呼び出して、それまで鳴り続けていた音も停止します。

challenge icon

チャレンジ

中級

ビープ音を追加しましょう:

  • 100 cm以上: 音なし(noTone()を呼び出す)
  • 10〜99 cm: millis()を使ってタイミングを取り、cm * 10 msごとに50 ms、1000 Hzのビープ音を鳴らす
  • 10 cm未満: 1000 Hzの連続音

ライトと出力はそのままにします。Runを押し、物体を近づけてから、Checkを押します。

自分で試してみよう

// 距離センサー
const int trigPin = 9;
const int echoPin = 10;
// 警告灯
const int greenPin = 6;
const int yellowPin = 7;
const int redPin = 13;

// パルスを送信し、距離をcm単位で返す。
long readDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration / 58;
}

// 十分に離れていれば緑、近ければ黄、近すぎれば赤にする。
void showLights(long cm) {
  digitalWrite(greenPin, LOW);
  digitalWrite(yellowPin, LOW);
  digitalWrite(redPin, LOW);
  if (cm >= 100) {
    digitalWrite(greenPin, HIGH);
  } else if (cm >= 30) {
    digitalWrite(yellowPin, HIGH);
  } else {
    digitalWrite(redPin, HIGH);
  }
}

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(yellowPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long cm = readDistance();
  Serial.println(cm);
  showLights(cm);
  delay(100);
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

プロジェクトのすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド