본문 바로가기
전자공학/아두이노

[아두이노] LED, 초음파센서, 부저를 이용하여 거리 측정 및 경고음내기

by ohj921189 2020. 6. 12.
반응형

문제 : LED 3개를 이용해 물체와의 거리를 3단계로 나누어 표시하세요. 가능하다면 부저를 이용하여 경고음을 내도록 하세요.


준비물은 다음과 같습니다.


초음파 센서(HC-SR04) 1개, LED 3개, 피에조 부저(수동 부저) 1개, 아두이노 우노 1개, 브레드 보드 1개, MM, MF 핀 여러 개, 300옴 저항(또는 그냥 본인이 가지고 있는 저항) 4개를 준비합니다. 저는 300 옴을 가지고 있어서 300 옴을 사용하였지만 본인이 가지고 있는 저항 아무거나 사용해도 무관합니다. 다만 값이 너무 크면 LED의 불빛이 잘 보이지 않을 수도 있습니다.

 

 

 

회로도는 위와 같습니다. 

 

빨간색 LED + 부분 ----- 아두이노 디지털핀 3번

빨간색 LED -  부분----- GND

노란색 LED + 부분----- 아두이노 디지털핀 4번

노란색 LED -  부분----- GND

초록색 LED + 부분----- 아두이노 디지털핀 5번

초록색 LED -  부분----- GND

 

참고로 LED는 다리가 긴 쪽이 +이고 짧은 쪽이 - 입니다. 

 

부저 + 부분(빨간색선) ----- 아두이노 디지털핀 8번

부저 - 부분(검은색선)  ----- GND

 

초음파센서 VCC ----- 아두이노 5V

초음파센서 GND ----- 아두이노 GND 

초음파센서 ECHO ----- 아두이노 디지털핀 12번

초음파센서 TRIG  -----  아두이노 디지털핀 13번

 

위와 같이 연결해줍니다. 

 

 

LED와 아두이노를 연결할 때에는 중간에 저항을 끼워주는 것이 좋습니다. 저항을 끼워주는 이유는 led에 바로 큰 전압이 들어가지 않게 하기 위함입니다. led에 바로 큰 전압이 들어가게 되면 쉽게 타버리기 때문입니다. 부저와 아두이노 사이에 연결할 때에도 저항을 하나 넣어주었습니다. 부저에 저항을 넣지 않아도 상관없지만 부저의 소리가 너무 커서 소리의 크기를 줄이고자 저항을 넣어 소리의 크기를 줄여주었습니다. 저항의 값이 클수록 소리가 작아집니다. 

 

int echoPin = 12;
int trigPin = 13;
int led1=3,led2=4,led3=5,speakerpin=8;

void setup() {
  Serial.begin(9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
}

void loop() {
    
    digitalWrite(trigPin, LOW);
    digitalWrite(echoPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    unsigned long duration = pulseIn(echoPin, HIGH);
  float distance = ((float)(340 * duration) / 10000) / 2;
  Serial.print(distance);
  Serial.println("cm"); 
  if(distance<10){
    digitalWrite(led3,HIGH);
    digitalWrite(led2,LOW);
    digitalWrite(led1,LOW);
    }
  else if(distance>=10 && distance<40){
    digitalWrite(led3,LOW);
    digitalWrite(led2,HIGH);
    digitalWrite(led1,LOW);
    }
  else{
    digitalWrite(led3,LOW);
    digitalWrite(led1,HIGH);
    digitalWrite(led2,LOW);
    tone(speakerpin,500,1000);
    }      
  delay(1000);
}

시리얼 모니터를 사용하여 시리얼 모니터에 초음파 센서가 측정한 거리 값이 뜨게 코딩하였습니다. 거리가 10cm 미만일 경우 초록색 LED가 켜지며, 거리가 10cm 이상 40cm 미만일 경우 노란색 LED가 켜지게 됩니다. 마지막으로 40cm 이상일 경우 빨간색 LED가 켜지게 되고 부저가 1초 동안 울리게 됩니다.

tone() 함수는 tone(핀 번호, 음의 높낮이(주파수), 음의 지속시간)을 설정해 주는 함수입니다. 저는 8번 핀에 500만큼의 주파수로 1초 동안 지속되게 코딩하였습니다.


아래는 동작 동영상입니다.

youtu.be/WoK-eO7YvI4

 

반응형

댓글