티스토리 뷰
요즘 자동차에는 대부분 물체를 감지하는 센서가 달려있습니다. 저는 작년 12월에 차가 오래되어 새 차를 구매하였는데 기존 차에는 후방감지 센서가 없었습니다. 그래서 뒤쪽 범퍼를 보면 크고 작은 흠집이 많이 있었습니다. 이번에 새로 구매한 차에는 뒤쪽은 물론 앞쪽에도 센서가 있어 주차하기가 아주 편합니다. 또 고속도로를 달릴 때 자동주행 기능을 켜면 앞차가 세팅한 거리 이내로 들어오면 알아서 속도도 줄여줍니다. 이렇듯 요즘 생산되는 차들은 운전을 쉽게 할 수 있게 하는 많은 기능을 가지고 있습니다. 오늘은 거리에 따라 알람음의 속도와 LED 색이 변하는 후방감지 시스템을 만들어 보겠습니다.
목차 1. 회로 구성 2. 소스 코드 3. 데모 |
1. 회로 구성
이번 프로젝트에 사용할 센서는 HC-SR04라고 불리는 초음파 센서입니다. 초음파를 이용하여 물체를 감지하는 센서이며 자동차의 후방 감지센서와 동일한 원리로 동작합니다.
송신부에서 초음파를 발생하여 물체에 닿은 후 수신부로 들어오게 되는데 전파가 이동한 시간을 측정하여 거리로 계산하는 방식으로 동작합니다.
이번 프로젝트에는 RBG가 같이 있는 LED를 사용해 보겠습니다. 같이 있다고 해도 각 색에 대한 컨트롤 신호는 따로 연결해 줘야 합니다.
2. 소스코드
int RLED = 2; // R,G,B LED를 아두이노 우노 보드 2,3,4번 핀에 연결
int GLED = 3; int BLED = 4; int BUZZER = 11; // Active BUZZER 핀을 11에 연결 int TRIGIN = 12; // Ultrasonic 센서의 TRIG pin 13에 연결 int ECHOPIN = 13; // Ultrasonic 센서의ECHO pin 12에 연결 //센서에서 보낸 신호가 되돌아 오는 시간, 물체와의 거리를 저장할 값 지정 float duration_us, distance_cm; void setup() { pinMode(RLED, OUTPUT); //세가지 LED 핀을 출력으로 설정 pinMode(GLED, OUTPUT); pinMode(BLED, OUTPUT); pinMode(BUZZER, OUTPUT);//부저의 출력설정 pinMode(TRIGIN, OUTPUT);//센서에서 보내는 신호를 출력으로 설정 pinMode(ECHOPIN, INPUT);//센서에서 보내는 신호를 입력으로 설정 Serial.begin(9600); // 시리얼 모니터 시작 } void loop() { digitalWrite(TRIGIN, HIGH);// 보내는 신호를 10 마이크로초 간격의 펄스로 만들어줌 delayMicroseconds(10); digitalWrite(TRIGIN, LOW); duration_us = pulseIn(ECHOPIN, HIGH);//받는 신호가 돌아오는 시간을 저장 distance_cm = 0.017 * duration_us;//물체와의 거리를 계산 if(distance_cm < 20) //거리가 20cm 미만일 때 { digitalWrite(BLED, LOW); digitalWrite(GLED, LOW); digitalWrite(RLED, HIGH); //Red LED가 켜짐 digitalWrite(BUZZER,HIGH);//알람이 연속으로 울림 } else if(distance_cm <= 30)//거리가 30cm 미만일 때 { digitalWrite(BUZZER,LOW);//기존에 울리던 알람 off digitalWrite(BLED, LOW); digitalWrite(RLED, LOW); digitalWrite(GLED, HIGH); //Green LED가 200ms 간격으로 깜빡거림 digitalWrite(BUZZER,HIGH);//알람이 200ms 간격으로 울림 delay(200); digitalWrite(GLED, LOW); digitalWrite(BUZZER,LOW); delay(200); } else if( distance_cm <= 50)//거리가 50cm 미만일 때 { digitalWrite(BUZZER,LOW);//기존에 울리던 알람 off digitalWrite(GLED, LOW); digitalWrite(RLED, LOW); digitalWrite(BLED, HIGH); //BLue LED가 0.5초 간격으로 깜빡거림 digitalWrite(BUZZER,HIGH);//알람이 0.5초 간격으로 울림 delay(500); digitalWrite(BLED, LOW); digitalWrite(BUZZER,LOW); delay(500); // } } else //거리가 50cm 이상일 때 { digitalWrite(BUZZER,LOW); //알림 없음 digitalWrite(RLED, LOW); digitalWrite(GLED, LOW); digitalWrite(BLED, LOW); } Serial.print("distance: "); //거리를 시리얼 모니터에 출력 Serial.print(distance_cm); Serial.println(" cm"); delay(500); } |
감지 거리는 20,30,50cm로 세팅하고 거리가 가까워질수록 알람과 LED가 빨리 동작하도록 하였습니다. 거리가 20cm 미만일 때는 알람이 계속 울리게 세팅하고 실행을 했는데 감지하는 거리가 늘어나도 LED만 꺼질 뿐 소리는 계속 울려서 어디가 잘못되었는지 확인해 보니 거리가 변경될 때 기존의 알람을 끄지 않고 LED만 off 하도록 세팅해 놨던 것이었습니다. 아래와 같이 알람을 off 하는 코드가 추가되어있지 않아 각 거리마다 아래 코드를 추가하였더니 소리가 사라졌습니다.
digitalWrite(GLED, LOW); digitalWrite(RLED, LOW); 추가 digitalWrite(BUZZER,LOW); |
3.데모
실행 결과 원하는 대로 동작하였습니다. 제 차에는 이미 센서가 있기 때문에 좀 더 난이도가 높은 자율주행 자동차 프로젝트와 같은 곳에 사용해 봐야겠습니다.