본문 바로가기
C++

[C++] 아두이노로 충돌방지모듈 만들기

by teamnova 2024. 1. 31.

이번 시간에는 아두이노와 초음파센서, 피에조 스피커를 사용해서 충돌방지모듈을 만들어보겠습니다.

아래 게시글에서 이어집니다.

https://stickode.tistory.com/1060

 

[C++] 아두이노로 초음파센서 사용하기

안녕하세요. 이번 시간에는 아두이노로 초음파센서를 사용해서 거리 측정하는 예제를 진행하겠습니다. 아두이노에 대해 기본적인 내용을 알고 싶다면 아래 게시글을 참고해주세요. https://stickod

stickode.tistory.com

 

1. 준비

아두이노 우노, 초음파 센서, 피에조 부저를 준비합니다.

아두이노 우노, 초음파 센서, 피에조 부저

 

 

2. 피에조 부저(Piezo Buzzer)란?

피에조 부저는 톤, 알람 또는 소리를 내는 데 사용되는 전자 장치의 일종입니다. 간단한 구조에 가볍고 저렴한 편이라서 아두이노에서 주로 소형 스피커로 사용됩니다.

 

 

3. 회로도

회로도

 

 

4. 소스 코드

int echo = 8;  // 초음파센서 ECHO 핀 번호
int trig = 12; // 초음파센서 TRIG 핀 번호
int spk = 13;  // 피에조부저 핀 번호

void setup() {
  Serial.begin(9600);  // 시리얼 통신을 9600 bps로 초기화
  pinMode(trig, OUTPUT);  // TRIG 핀을 출력으로 설정
  pinMode(echo, INPUT);   // ECHO 핀을 입력으로 설정
  pinMOde(spk, OUTPUT);   // 피에조부저 핀을 출력으로 설정
}

void loop() {
  float cycle_time;  // 초음파 신호의 왕복 시간을 저장하는 변수
  float distance;    // 계산된 거리를 저장하는 변수
  
  digitalWrite(trig, HIGH);  // 초음파 신호를 생성하기 위해 TRIG 핀을 HIGH로 설정
  delay(10);                  // 10 마이크로초 동안 신호를 유지
  digitalWrite(trig, LOW);   // TRIG 핀을 LOW로 설정하여 초음파 신호 생성 완료
  
  cycle_time = pulseIn(echo, HIGH);  // ECHO 핀에서 초음파의 왕복 시간을 측정하여 저장
  
  // 거리 계산: 초음파는 속도가 340m/s 이므로, 왕복 시간을 거리로 변환 (2로 나누어야 정확한 단일 방향 거리)
  distance = ((340 * cycle_time) / 10000) / 2;  

  Serial.print("Distance:");  // 거리 정보 출력 시작
  Serial.print(distance);      // 계산된 거리 값 출력
  Serial.println("cm");        // 거리 단위인 센티미터(cm) 출력
  delay(100);                  // 100 밀리초(0.1초) 동안 대기.

  // 거리에 따라 경고음 발생
  // 거리가 20cm 이하일 때부터 경고음 울리기, 가까워질수록 간격이 짧아짐
  if (distance <= 20 && distance > 15) {
    tone(SPK, 523, 250); // 523Hz의 소리를 0.25초 동안 발생
    delay(1000);         // 1초 간격으로
  } else if (distance <= 15 && distance > 10) {
    tone(SPK, 523, 250);
    delay(500);
  } else if (distance <= 10 && distance > 5) {
    tone(SPK, 523, 250);
    delay(200);
  } else if (distance <= 5) {
    tone(SPK, 523, 250);
    delay(50);
  }

}

 

 

 

5. 실행 영상