제 블로그에서 예전에 실험한 내용인데 초음파 응용편으로 소개할까 합니다.
거리경보장치는 실생활에 가장 유사한것이 자동차 후진 주차할때 경보장치를 연상하시면 될꺼에요. 뒤에 장애물과의 거리가 위험할때 나는 경보음을 생각하시면 아마 이해가 빠를꺼에요.
Led : 선언-pinMode(핀번호, OUTPUT) 제어-digitalWrite(핀번호,상태값); 로 상태값 1(5V) or 0(0V)
피에조부조 : 제어-tone(출력핀,음계,음길이), noTone(출력핀)으로 음과 음사이를 끊어줌
초음파센서 : 선언pinMode(핀번호, 입/출력모드), delayMicroseconds(시간값)으로 마이크로초로 잡게 딜레이 시킴, pulseIn(7, HIGH)로 초음파가 장애물에 부딪치고 되돌아온 거리시간값을 입력받음
거리계산 : ((float)(340 * 초음파거리시간값) / 10000) / 2;
코딩 설계는
1번 코딩 :
지난시간의 초음파 거리측정 코딩을 그대로 적용한다. 하지만 안전/위험 상태를 기준을 50cm로 설정한다면 어떻게 코딩해야할까요. 지난시간에 배웠던 문법 if문 조건이 참/거짓으로 나뉘면 쉽겠죠.
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);
}
}
led, 피에조부저, 초음파센서를 각각 이전 시간에 배웠고 그걸 합쳐서 하나의 경보장치를 만들어 보았습니다.
또, 어떤것들이 있을까요 한번 상상의 나래를 펼쳐보세요.
초음파센서가 은근 재밌는 소재라 또다른 응용편을 다음에 소개 할께요.