이번 회로에서는 아두이노로 충돌 경보기를 만들어 볼 예정입니다.
일반적으로 차량 후방에 있는 초음파 센서와 같은 역할을 하는 충돌 경보기입니다.
여기서 거리 값은 제가 임의로 정했는데요.
300cm가 넘으면 물체 감지가 안되는 것으로 하고,
100~300cm사이는 알림음이 울리는데 거리가 줄어들 수록 알림음의 간격이 짧아지는 것이죠.
마지막으로 100cm이하는 부저가 삑삑거리지 않고 계속해서 알림음을 삐~~하고 계속해서 내주게 됩니다.
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,4,8,9,10,11);
void setup()
{
lcd.begin(16,2);
pinMode(6, OUTPUT);
}
long readTravelTime(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT);
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin, HIGH);
}
void loop()
{
int cm=0.01723*readTravelTime(12,12);
int duration=map(cm, 100, 300, 50, 700);
if (cm>300)
{
lcd.setCursor(0,0);
lcd.print("Object Detector");
lcd.setCursor(0,1);
lcd.print("No Object");
noTone(6);
}
else if (cm>100&&cm<300)
{
tone(6, 247, duration);
delay(duration);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distance : ");
lcd.setCursor(0,1);
lcd.print(cm);
lcd.setCursor(3,1);
lcd.print(" cm");
}
else if(cm<100)
{
tone(6, 247);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Distance : ");
lcd.setCursor(0,1);
lcd.print(cm);
lcd.setCursor(3,1);
lcd.print(" cm");
delay(500);
}
}
저번에 사용했던 LCD와 초음파 센서의 코드를 그대로 가져왔습니다.
setup 함수에서 추가된 것은 피에조 부저가 연결되어있기 때문에, 출력모드로 설정한 코드가 추가되었습니다.
loop 함수에서 duration이라는 변수가 하나 생성되어있는데요.
duration은 피에조 부저의 출력 시간을 조절하기 위한 변수입니다.
따라서, cm가 작아지면 작아질수록 출력되는 주기가 빨라져야 하기때문에
map함수를 이용해 cm값이 100~300사이일 때, 50~700이라는 duration값을 가지게 만들었습니다.
그리고 if, else if 문으로 cm값에 따라 동작을 구분했습니다.
cm값이 300이 넘으면 물체를 감지못하는 것으로 간주하고 부저가 울리면 안됩니다.
이것을 작동시킨다면 아래와 같은 사진처럼 작동이 될 겁니다.
또, cm값이 100~300사이일 때, 일정시간 tone을 주고 delay를 줌으로 tone출력에 텀을 줄 수 있습니다.
lcd.clear를 하는 이유는 다른 if문이 실행될 때,
커서의 위치가 안 맞거나 다른 조건문의 문자가 같이 출력이 되는 오류가 있으므로 clear를 해주었습니다.
마지막으로, cm값이 100아래면 계속해서 부저가 울리고 거리가 출력되도록 설정해주었습니다.
실행시켜본다면 아래 사진처럼 작동이 될 겁니다.
이번 회로에서는 실생활에서 볼 수 있는 차량의 충돌 경보기를 만들어 봤는데요.
크게 어려운 부분은 없었다고 생각합니다.
사실, 저는 저 if문 쪽에서 여러 번 헤매다가 해결을 했는데요.
솔직히 이 회로를 만든 지가 조금 오래되다보니 정확히 어떤 문제였는 지는 기억이 잘 안나지만
컴파일 에러는 아니었고, 제가 의도한 대로 실행되지 않았던 에러가 조금 있었습니다만 지금 코드는 잘 듣더군요.
이 글 보시는 분들도 여러가지 문제들 잘 해결하셔서 성공적으로 프로젝트를 마치셨으면 좋겠네요.
읽어주셔서 감사합니다.
'Dev > C언어' 카테고리의 다른 글
아두이노 가변저항으로 밝기 제어하기 (0) | 2020.08.24 |
---|---|
아두이노 조도 센서 사용하기 (0) | 2020.08.22 |
아두이노 초음파 센서 사용하기 (0) | 2020.08.09 |
아두이노 Text LCD 사용하기 (0) | 2020.08.02 |
아두이노 가로등 만들기 (0) | 2020.07.25 |