Mechanic 공방

16. 아두이노 초음파 센서 실습 (2) with LED 본문

아두이노 (Arduino)

16. 아두이노 초음파 센서 실습 (2) with LED

H-Mechanic 2020. 8. 18. 20:24
728x90
반응형

이번 포스팅에서는 저번 실습에 이어 LED를 추가하여 진행해보고자 한다.

 

LED를 사용하여 초음파 센서에 일정 거리 이하로 인식되었을 경우 LED가 켜지도록 하는 실습을 진행해보겠다.

 

[회로도]

회로도는 저번 실습과 동일하며, LED만 추가되었다.

 

[코드 설명]

#define EchoPin 13
#define TrigPin 12
#define LED 11

unsigned long duration;

float dist;
float dist_ref = 5.0;

int led = 0;

void setup() {
    Serial.begin(9600);
    pinMode(EchoPin,INPUT);
    pinMode(TrigPin,OUTPUT);
    pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
}

void loop() {
    digitalWrite(TrigPin,LOW);
    digitalWrite(EchoPin,LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin,HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin,LOW);
    
    duration = pulseIn(EchoPin,HIGH);
    dist = ((float)(331 * duration) / 10000) / 2;

    if (dist < dist_ref) {
        digitalWrite(LED,HIGH);
        led = 1;
    } else {
        digitalWrite(LED,LOW);
        led = 0;
    }

    if (led == 1) {
        Serial.print(dist);
        Serial.print(" cm/ ");
        Serial.println(" LED ON ");
        delay(100);
    } else {
        Serial.print(dist);
        Serial.print(" cm/ ");
        Serial.println(" LED OFF ");
        delay(100);
    }
}

초음파 센서의 거리 측정에 관한 부분은 이전 실습의 코드와 동일하다.

 

다만 저번 포스팅에서 설명하지 못하고 넘어간 부분이 있어, 이번에 추가 설명을 하도록 하겠다.

 

코드의 중간 부분에 'duration'이라는 변수에 값을 넣어주는 과정에서 'pulseIn()'이라는 함수가 사용되었다.

 

이는 펄스를 가지는 신호에 대하여 HIGH 혹은 LOW가 될 때까지의 시간을 ms 단위로 계산하는 함수이다.

 

즉, 위 코드에서는 EchoPin에 HIGH 신호가 들어올 때까지 타이머를 동작시켜 시간을 측정한다.

 

Echo 핀은 수신을 담당하는 핀이기 때문에, 이곳에 HIGH 신호가 잡힌다는 것은 송신된 초음파 신호가 다시 돌아왔다는 것을 의미한다.

 

또 한 가지 추가된 점은, 특정 거리 이내로 측정되게 되면 LED가 켜지도록 하는 부분이다.

 

‘dist_ref’라는 변수명으로 기준 거리를 선언한 뒤, 매 루프마다 초음파 센서로 거리를 측정해서 나온 결과 값이 해당 변수보다 작을 경우에 LED를 켜도록 작성하였다.

 

물론 거리가 다시 멀어질 경우 LED가 꺼지도록 하였다.

 

코드에서 사용된 'led'라는 변수는 Serial Monitor 상에 실제 LED가 켜졌는지 꺼졌는지에 대한 신호를 알고자 사용한 변수이다.

 

값이 1인 경우에는 LED가 켜졌다는 것을 의미하고, 0일 경우에는 꺼졌다는 것을 의미한다.

 

이처럼 Serial Monitor는 실제 코드가 정상적으로 돌아가고 있는지 확인할 수 있는 아주 유용한 수단 중 하나이다.

 

관련 문법들을 잘 숙지하고 있는 것이 좋다.

 

[동작 영상]

위 코드를 정상적으로 업로드하였다면 아래와 같이 동작하는 것을 볼 수 있을 것이다.

 

 

728x90
반응형