공부중

[Arduino] 초음파 센서 본문

프로그래밍/Arduino

[Arduino] 초음파 센서

복습 2025. 1. 24. 05:28
728x90

 

 

 

 

1. 이론 

 

 

2. 코드 

int echo = 9;
int trig = 8;

void setup() {
  Serial.begin(9600);          // 시리얼 통신 시작, 통신 속도 9600bps
  pinMode(trig, OUTPUT);       // Trig 핀을 출력으로 설정
  pinMode(echo, INPUT);        // Echo 핀을 입력으로 설정
}

void loop() {
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다. 
  digitalWrite(trig, LOW);     // Trig 핀을 LOW로 설정
  digitalWrite(echo, LOW);
  delayMicroseconds(2);

  // 진동 
  digitalWrite(trig, HIGH);    // Trig 핀을 HIGH로 설정하여 펄스 발생
  delayMicroseconds(10);       // 10마이크로초 동안 유지
  digitalWrite(trig, LOW);     // Trig 핀을 LOW로 설정하여 펄스 종료

  // 수신
  // echoPin이 H를 유지한 시간을 저장한다. 
  unsigned long duration = pulseIn(echo, HIGH);  // Echo 핀에서 HIGH 신호가 오는 시간을 측정
  //H일때 시간(초음파가 보냈다가 다시 돌아온 시간을 가지고 거리를 계산한다. 
  float distance = ((float)(340 * duration) / 10000) / 2;  // 거리 계산 (음속 340m/s 사용)

  // 출력 
  Serial.print(distance);      // 거리를 시리얼 모니터에 출력
  Serial.println("cm");
  delay(500);                  // 500밀리초 동안 대기
}

 

 

 

3. 회로 

 

 

 

4. 결과 

 

800이 나오는건 튀는 값이다. 

15, 16 cm까지 측정 가능한듯, 

 

초음파 센서 3개중에 2개 고장.. 

 

 

 

 


5. 실습 예제 

// 초음파 센서로 LED 표현

// 초음파 센서와 물체가 가까워지면 LED 수가 많이 켜지고(4개)
// 물체와 물어지면 LED 수가 적게 켜지도록 (1개)

 

 

 

6. 코드 

 

// 실습 2 거리에 따른 LED 켜지기 
// 초음파 센서와 물체가 가까워지면 LED의 수가 많이 켜지고, (4개)
// 반대로 초음파 센서와 물체가 멀어지면 LED 수가 적게 켜지도록 설정 (1개 )

#define PIN1 4  // LED가 연결된 핀 번호
#define PIN2 5  // LED가 연결된 핀 번호
#define PIN3 6  // LED가 연결된 핀 번호
#define PIN4 7  // LED가 연결된 핀 번호

int echo = 9;
int trig = 8;

void setup() {
  Serial.begin(9600);          // 시리얼 통신 시작, 통신 속도 9600bps
  pinMode(trig, OUTPUT);       // Trig 핀을 출력으로 설정
  pinMode(echo, INPUT);        // Echo 핀을 입력으로 설정

  pinMode(PIN1, OUTPUT);
  pinMode(PIN2, OUTPUT);
  pinMode(PIN3, OUTPUT);
  pinMode(PIN4, OUTPUT);
}

void loop() {
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다. 
  digitalWrite(trig, LOW);     // Trig 핀을 LOW로 설정
  digitalWrite(echo, LOW);
  delayMicroseconds(2);

  // 진동 
  digitalWrite(trig, HIGH);    // Trig 핀을 HIGH로 설정하여 펄스 발생
  delayMicroseconds(10);       // 10마이크로초 동안 유지
  digitalWrite(trig, LOW);     // Trig 핀을 LOW로 설정하여 펄스 종료

  // 수신
  // echoPin이 H를 유지한 시간을 저장한다. 
  unsigned long duration = pulseIn(echo, HIGH);  // Echo 핀에서 HIGH 신호가 오는 시간을 측정
  //H일때 시간(초음파가 보냈다가 다시 돌아온 시간을 가지고 거리를 계산한다. 
  float distance = ((float)(340 * duration) / 10000) / 2;  // 거리 계산 (음속 340m/s 사용)

  // 출력 
  Serial.print(distance);      // 거리를 시리얼 모니터에 출력
  Serial.println("cm");
  delay(500);                  // 500밀리초 동안 대기

    if (distance > 5) {
      digitalWrite(PIN1, HIGH);
    }else {
      digitalWrite(PIN1, LOW);
    }
    
    if (distance > 8) {
      digitalWrite(PIN2, HIGH);
    }else {
      digitalWrite(PIN2, LOW);
    }

    if (distance > 11) {
      digitalWrite(PIN3, HIGH);
    }else {
      digitalWrite(PIN3, LOW);
    }
    
    if (distance > 14) {
      digitalWrite(PIN4, HIGH);
    }else {
      digitalWrite(PIN4, LOW);
    }



}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90