Menu
CoddyTech

주차 센서: 경고음

Coddy Arduino 여정의 프로젝트 섹션에 포함된 레슨. 24개 중 11번째.

주차 센서는 소리와 표시로 알려 줍니다. 벽에 가까워질수록 경고음이 더 빠르게 울리다가, 멈추라는 뜻의 일정한 소리로 바뀝니다. 부저는 8번 핀에 연결되어 있습니다.

경고음 사이의 간격은 거리에 따라 달라집니다. 거리에 10을 곱한 값이며, 단위는 밀리초입니다. 70cm에서는 700ms마다, 20cm에서는 200ms마다 경고음이 울립니다. millis() 타이머가 다음 경고음이 울릴 시점을 결정합니다.

if (millis() - lastBeep >= cm * 10) {
  lastBeep = millis();
  tone(buzzerPin, 1000, 50);  // 50 ms 길이의 삐 소리
}

두 가지 경우가 더 있습니다. 10cm 미만에서는 길이를 지정하지 않고 tone(buzzerPin, 1000)을 재생합니다. 이 소리는 무언가가 멈출 때까지 계속 울립니다. 100cm 이상에서는 소리를 끄고, 이전에 남아 있는 일정한 소리도 멈추도록 noTone(buzzerPin)을 호출합니다.

challenge icon

챌린지

중급

삐 소리를 추가하세요:

  • 100 cm 이상: 소리 없음 (noTone() 호출)
  • 10~99 cm: millis()로 시간을 측정하여 cm * 10 ms마다 1000 Hz로 50 ms 동안 삐 소리
  • 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 플레이그라운드