제12회 임베디드SW 경진대회 웨어러블 디바이스 부문 최우수상
항공기 및 군사적용도로 제한적으로 사용되었던 HUD(Head Up Display)가 최근 전방주시로 인한 사고 감소를 위해 BMW를 비롯한 여러 고급 자동차에 탑재되어 출시되고 있다. 국내 업체로는 K9시리즈에 적용되어 출시되었다.
교통안전공단에 따르면 차량 계기판을 확인하기위해 짧게는 1초에서 길게는 3초까지 전방도로에서 시선을 뗀다고 한다.
시속 150km로 주행할 경우 80여미터를 전방을 주시하지 않고 운전하는 셈이다. 운전 중 전방주시 태만은 사고 발생확률을 23배, 사고시 중상을 입을 확률은 6배 이상높이며 운전조작 중 실수 가능성은 30여배 더 증가한다는 보고도 있다.
이처럼 내비게이션과 스마트폰 등의 보급 확산으로 운전자의 시인성이 감소함에 따라 사고 방지를 위해서도 HUD 기기에 대한 관심이 높아질 수밖에 없다. 2014년 5월 기준 국내 이륜차 등록대수는 2백만대를 넘어서고 있다.
하지만 이륜차 운전자를 위한 HUD시장은 국내는 전무한 실정이며 해외시장 역시 걸음마 수준이다.
또한 시간대별 구성비를 보면 야간시간대인 18시~24시에 가장 많은 사고가 발생하고 있다. 이는 일반 자동차에 비해 상대적으로 2차 사고 가능성이 높은 이륜차 운전자를 위한 최소한의 보호수단의 필요성을 잘 보여주는 부분이다.
따라서 본 프로젝트는 이륜차 운전자를 위하여 Android OS 기반 스마트폰과 AVR을 기반으로한 HUD(=HMD;Head Mounted Display), 음향장치를 통합하고 여기에 사고전파 및 운전자 보호 기능을 더한 통합 스마트 헬멧을 제작하는데 그 목적이 있다.
이번 글에서는 프로그램 개발환경과 각 함수별 기능에 대해 알아보겠다.
2.4. 개발환경
3. 프로그램 설명
3.1. 파일 구성
3.1.1. Hardware 파일 구성
3.1.2. Software 파일 구성
3.2. 함수별 기능
3.2.1. Hardware 함수별 기능
void UART1_Init()
// UART 초기화 함수 (UART1을 사용 설정 및 각 레지스터 세팅)
char rx_char()
// 블루투스 신호 한 문자 수신 함수
void rx_string()
// rx_char 를 이용한 블루투스 신호 문자열 수신 함수
void tx_char()
// 블루투스 신호 한 문자 송신 함수
void tx_string()
// tx_char 를 이용한 블루투스 신호 문자열 송신 함수
int adc()
// ADC 함수 (전압을 숫자로 변환하여 배터리 잔량을 확인)
ISR(USART1_RX_vect)
// 블루투스 신호가 수신되면 동작하는 Interrupt 함수
ISR(INT0_vect)
// 충격센서에 충격이 감지되면 동작하는 Interrupt 함수
switch(BUFFER[0]) { case ... }
// 블루투스 신호 BUFFER의 Header를 파악해 각 동작을 구현하는 함수
for(int i = 0; i < sizeof(BUFFER) - 1 ; i++)
// 블루투스 신호 BUFFER의 데이터를 복사하는 함수
if (ADResult 비교) { } else if (ADResult 비교) { } ...
// ad() 함수의 결과값인 ADResult의 값을 비교하여 배터리 잔량을 블루투스 신호로 송신하는 함수
strncpy(BUFFER, ‘