[아두이노] 거리경보장치 응용

IOT/아두이노|2019. 2. 7. 18:50

[아두이노] 거리경보장치 응용



예전에 실험한 내용인데 초음파 응용편으로 소개할까 합니다. 거리경보장치는 실생활에 가장 유사한것이 자동차 후진 주차할때 경보장치를 연상하시면 될꺼에요. 뒤에 장애물과의 거리가 위험할때 나는 경보음을 생각하시면 아마 이해가 빠를꺼에요.

1. 회로도 구성


  • 준비물 : 초음파센서3핀 1개, led 2개, 저항 220옴 2개, 피에조부저 1개, 아두이노우노, 뻥판
  • 내용 : 장애물과의 거리가 50cm미만일때 경보음과 Red Led에 불이 들어오고 위험을 알리고, 50cm이상일때 Green Led에 불이 들어오고 안전상태를 표현합니다.


2. 코딩


  • Led : 선언-pinMode(핀번호, OUTPUT) 제어-digitalWrite(핀번호,상태값); 로 상태값 1(5V) or 0(0V)

  • 피에조부조 : 제어-tone(출력핀,음계,음길이), noTone(출력핀)으로 음과 음사이를 끊어줌

  • 초음파센서 : 선언pinMode(핀번호, 입/출력모드), delayMicroseconds(시간값)으로 마이크로초로 잡게 딜레이 시킴, pulseIn(7, HIGH)로 초음파가 장애물에 부딪치고 되돌아온 거리시간값을 입력받음

  • 거리계산 : ((float)(340 * 초음파거리시간값) / 10000) / 2;


코딩 설계는

  1. 초음파센서 거리 측정한다.
  2. Led 2개로 안전/위험 상태를 나타낸다.
  3. 피에조부조에서 위험거리일때 경보음이 울리게 한다.

1번 코딩 :
지난시간의 초음파 거리측정 코딩을 그대로 적용한다. 하지만 안전/위험 상태를 기준을 50cm로 설정한다면 어떻게 코딩해야할까요. 지난시간에 배웠던 문법 if문 조건이 참/거짓으로 나뉘면 쉽겠죠.

  • 거리측정은 7번핀에서 pulseIn(7, HIGH)로 거리시간값을 ((float)(340 * 초음파거리시간값) / 10000) / 2 로 거리가 구함
  • if(거리<50) {처리문1; } else {처리문2;}

2번 코딩 :
led 2개로 led은 위험, green은 안전으로 1번 코딩에서 50cm미만일때 red led 켜고, 50cm이상일때 green led 켜면 되겠죠.

if(거리<50){
    digitalWrite(11, HIGH);  
    digitalWrite(10, LOW);  
}
else
{
   digitalWrite(11, LOW);  
   digitalWrite(10, HIGH);  
}

참쉽죠

3번 코딩 :
경보음은 피에조부저에서 tone(), noTone()함수를 어떤 음계로 음의길이를 어느정도 할지는 자유입니다. 그런데 어디에 코딩할까. 50cm이하 일때 경보음을 울려야 겠죠.

if(거리<50){
    tone(12,523,1000/8);     // 도음으로 8분음표(음길이)
    delay(1000/4*1.30);             
    noTone(12);            
}
else
{
}

이렇게 해서 코딩은 간단히 해결되었습니다. 쪼개서 보면 별거 없습니다. 처음 기준이 되는 부품이 어떤 상태가 되면 다른 부품이 그 상태를 기준으로 어떻게 변화되는지만 글로 한번 설계해보시고 그걸 코딩으로 표현하시면 됩니다.

초음파센서로 거리가 50cm미만이면 위험상태(red led 켜고, 피에조부저 경보음)와 안전상태(green led 켜기)를 표현한 것 뿐이죠. 그런데 이걸 다 합쳐진 코딩을 보면 복잡해 보일 수 있습니다. 하지만 부품 한개 한개의 제어한 것들을 합치니깐 복잡해 보일뿐 부품을 개별적으로 생각하시면 아주 간단한 코딩입니다.

종합해서 코딩하면은

void setup() {  
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}
void loop() {   
  pinMode(7,OUTPUT); //7번핀 출력모드로
  digitalWrite(7, LOW); 
  delayMicroseconds(2); 
  digitalWrite(7,HIGH); 
  delayMicroseconds(10); 
  digitalWrite(7,LOW); 
  
  pinMode(7,INPUT);    //7번핀 입력모드로
  float duration = pulseIn(7, HIGH);
  float distance = duration / 57.5;  
  

  if(distance < 50){    //50cm 미만 경보발동

    digitalWrite(11, HIGH);  
    digitalWrite(10, LOW);  

    tone(12,523,1000/8);     // 도음으로 8분음표(음길이)
    delay(1000/4*1.30);             
    noTone(12);            

  } else{                   //50cm 이상 안정거리
    digitalWrite(11, LOW);  
    digitalWrite(10, HIGH); 
  } 
}  

3. 결과



마무리


led, 피에조부저, 초음파센서를 각각 이전 시간에 배웠고 그걸 합쳐서 하나의 경보장치를 만들어 보았습니다.
또, 어떤것들이 있을까요 한번 상상의 나래를 펼쳐보세요.

초음파센서가 은근 재밌는 소재라 또다른 응용편을 다음에 소개 할께요.


댓글()