콘텐츠로 이동

초음파 센서로 거리 경보 시스템 만들기

🎯 이 장에서 배우는 것

  • [ ] 거리에 따라 다른 경보음을 내는 프로그램을 작성할 수 있다
  • [ ] 연속적인 값을 단계별로 구분하는 알고리즘을 구현할 수 있다

⏱️ 예상 학습 시간: 약 45분


📚 핵심 개념

개념: 임계값 기반 단계 분류

비유로 시작해요!

신호등을 떠올려 보세요. 🚦

  • 초록불 → 안전, 지나가세요
  • 노란불 → 주의, 속도를 줄이세요
  • 빨간불 → 위험, 멈추세요

거리 경보 시스템도 똑같아요! 측정된 거리를 임계값(기준점)으로 나눠서 단계별로 다른 반응을 만들어요.

flowchart LR A[거리 측정] --> B{30cm 이상?} B -->|Yes| C[🟢 안전] B -->|No| D{15cm 이상?} D -->|Yes| E[🟡 주의] D -->|No| F[🔴 위험]

정확한 정의

📖 임계값(Threshold): 상태가 바뀌는 기준점이 되는 값


🔨 따라하기

Step 1: 거리 단계 판별 함수 만들기

코드:

def get_danger_level(distance):
    """거리에 따라 위험 단계 반환"""
    if distance >= 30:
        return "safe"      # 안전
    elif distance >= 15:
        return "warning"   # 주의
    else:
        return "danger"    # 위험

Step 2: 단계별 경보음 설정

코드:

def alert_by_level(level):
    """단계에 따라 다른 경보"""
    if level == "safe":
        print("🟢 안전 - 경보 없음")
    elif level == "warning":
        print("🟡 주의 - 삐- 삐-")
    else:
        print("🔴 위험 - 삐삐삐삐!")

실행 테스트:

# 테스트해보기
test_distances = [50, 20, 10]

for d in test_distances:
    level = get_danger_level(d)
    print(f"거리: {d}cm")
    alert_by_level(level)
    print()

실행 결과:

거리: 50cm
🟢 안전 - 경보 없음

거리: 20cm
🟡 주의 - 삐- 삐-

거리: 10cm
🔴 위험 - 삐삐삐삐!


📝 전체 코드

# 거리 경보 시스템

def get_danger_level(distance):
    """거리에 따라 위험 단계 반환"""
    if distance >= 30:
        return "safe"
    elif distance >= 15:
        return "warning"
    else:
        return "danger"

def alert_by_level(level):
    """단계에 따라 다른 경보"""
    alerts = {
        "safe": "🟢 안전 - 경보 없음",
        "warning": "🟡 주의 - 삐- 삐-",
        "danger": "🔴 위험 - 삐삐삐삐!"
    }
    print(alerts[level])

# 시뮬레이션 실행
print("=== 거리 경보 시스템 테스트 ===\n")

for distance in [50, 25, 10, 5]:
    print(f"📏 측정 거리: {distance}cm")
    level = get_danger_level(distance)
    alert_by_level(level)
    print()

⚠️ 주의할 점

임계값 순서가 중요해요!

# ❌ 잘못된 순서
if distance >= 15:    # 20cm도 여기서 걸림!
    return "warning"
elif distance >= 30:  # 절대 실행 안 됨
    return "safe"

# ✅ 올바른 순서 (큰 값부터!)
if distance >= 30:
    return "safe"
elif distance >= 15:
    return "warning"

💡 : 조건문은 큰 값 → 작은 값 순서로 검사하세요!


✅ 점검하기

  1. 25cm일 때 어떤 단계인가요?
정답 확인 `warning` (주의) - 15 이상 30 미만이므로
  1. 임계값을 20cm, 10cm로 바꾸려면 어디를 수정하나요?
정답 확인 `get_danger_level` 함수의 숫자를 `30→20`, `15→10`으로 변경

🔗 다음 장 미리보기

이번 장에서 거리를 단계로 분류하는 법을 배웠어요! 🎉

다음 장에서는 실제 하드웨어와 연결하여 진짜 경보음이 울리는 시스템을 완성해볼 거예요!