[48호]차량통행에 따른 차량 감지형 LED가로등 밝기제어 시스템
2017 ICT 융합 프로젝트 공모전 참가상
차량통행에 따른 차량 감지형 LED가로등
밝기제어 시스템
글 | 동아대학교 허수종
1. 심사평
칩센 작품의 개발 의도는 대략 이해할 수 있습니다만, 구체적으로 어떤 시나리오에 따라 동작하는지에 대해 명확히 파악이 되지 않습니다. 제품의 개발 의도와 같은 서비스를 각 지자체 등에서 충분히 고려하고 있어 아이템의 의도나 사용성은 충분한 분위기가 만들어져 있으나, 이를 실제로 적용함에 있어서 완성도를 떠나 구체적인 시나리오가 필요한 작품군입니다. PIR 센서의 동작 감지 범위 등과 같은 특성과 감지 주파수(감도) 등에 대한 기술적 부분을 먼저 이해하여, 이를 효율적으로 사용할 수 있는 것에 대한 내용이 없고, 또한 시스템 전체 동작 시나리오가 부족합니다. 이러한 부분이 보고서를 통해 이해를 하기에는 쉽지가 않습니다.
뉴티씨 요즘 고독사도 증가하고 있고, 이웃나라에서는 벌써 사회적 문제가 된지가 오래다. 우리나라도 조만간 독거노인이 매우 늘어나게 되는 데, 노인들의 안전은 우리 자신의 문제가 되어 가고 있다. 이 때, 이와 같은 아이템은 매우 중요한 아이템으로 보인다. 다만, 센서의 단순화로 감지할 수 있는 내용이 제한되므로, 좀 더 많은 종류의 여러가지 센서를 사용하여 접근하였으면 좋았을 것이다. 앞으로 관심을 가지고 좀 더 다양하고 실질적인 내용으로 거듭나기를 기대해 본다.
위드로봇 고령화 시대에 걸맞는 주제입니다. 실용성이나 작품의 완성도는 높습니다만, PIR 센서 이외에 추가 센서를 활용하여 이상 징후를 좀 더 명확하게 알 수 있는 부분이 아쉽습니다.
2. 작품 개요
세계 여러 나라에서 이미 자원의 효율적이고 환경친화적 이용에 국력을 집중하고 있으며 녹색 산업과 녹색 기술이 새로운 성장엔진으로 자리 잡아가고 있습니다. 제안하는 아이디어의 주요 의미는 전력 소모가 많고 수명이 짧은 기존 가로등의 단점을 LED 가로등으로 교체를 통한 개선을 하고 시스템을 추가하여 에너지를 절약하는 방안을 제안하고자 하는데 있습니다. 구체적인 내용으로는 LED 가로동의 사용으로 기존의 가로등에 비해 높은 효율성을 가지며 심야 조명에 차량유무를 확인하고, 최적의 광도로 조율함으로써 에너지를 절약하는 시스템을 구현하는 것입니다. 야간 LED 가로등 조명을 실시하는 목적은 운전자, 보해자 등 도로 이용자들에게 안정을 보장하고 가시성을 확보시켜 주기 위함이며, 차량 운전자들은 도로 조명이 되어있는 곳에서 원활한 운전을 할 수 있으며, 도로 형태와 주위 환경을 파악하기가 용이하고 전방의 장애물을 쉽게 인지할 수 있게 됩니다.
제안하는 아이디어를 통해 야간에 차량 운전자에게 최대한 안정성을 보장해주고 주행 속도, 도로 경과 관련한 각종 조건에 따른 운전자의 시각적 요구 조건을 만족시켜 줄 수 있는 최적의 LED 가로등 시스템을 제안하고자 합니다.
3. 작품 설명
3.1. 주요 동작 및 특징
적외선 센서는 입력 신호가 필요하지 않아 취급이 용이하고 모든 물체를 감지해서 아날로그 전압을 디지털 변환하여 ADC 분해능으로 다양하게 구현하는 특성이 있습니다. 반사물의 색상, 반사율에 의한 영향을 크게 받지 않으며 연속거리, 평균연산 출력에 의한 고정밀 측정 또한 가능합니다. 차량 감지형 LED 가로등 시스템에서는 적외선 센서에서 발생되는 파장을 이용하여 차량의 유무를 감지하며 구동원리는 렌즈가 2개로 한 곳으로 적외선을 보내고 반사되는 적외선의 양에 따라 거리를 측정하여 다른 한 곳으로 보낸 적외선을 받아들이는 동작원리입니다. 그렇기 때문에 적외선 센서에서 발생되는 적외선 신호를 이용하여 차량의 유무를 감지하여 센서의 전방에 물체가 움직이면 검지 되는 방식으로 구동합니다.
- 차량이 해당 도로에 진입하기 전에 적외선 센서에 의해 감지가 되고 이후 LED 가로등의 출력이 점차적으로 높아져 최종적으로 100%의 밝기 출력까지 밝아지고 밝기가 차량이 통과하는 동안 계속해서 유지.
- 해당 도로를 통과하는 차량이 없을 경우(차량이 모두 통과한 이후) LED 가로등의 출력이 점차적으로 낮아지며 최종적으로 10%의 밝기(임의적인 수치의 밝기. 테스트 후 최소한의 밝기 출력으로 정정 필요) 출력까지 어두워지고 차량의 통행이 있을 때까지 유지한다.
3.2. 전체 시스템 구성
센서를 통해 차량을 계속해서 검지를 하고 만약 차량이 검지가 되면 알고리즘과 같이 가로등의 밝기 출력을 높이고 차량 통행이 없을 경우 가로등의 출력을 낮은 상태로 유지해서 전력 소모를 줄입니다.
3.3. 추진 방안
마이크로웨이브 센서를 이용하여 도로의 차량들을 실제 검지할 수 있게 설계하기 위해 적외선 센서의 감도 레벨을 미세 조정하고 적외선 센서의 지향각을 최대한 좁히는 원리로 제작하여 마이크로웨이브 차량검지기를 제작하고 장기간으로 성능을 유지하기 위해 발열로 이한 LED의 수명 감소에 대한 문제를 해결해야 합니다. 파워 LED는 반도체 소자이므로 80%는 열로 방출이 되는데 LED의 중심 온도를 낮추기 위해 방열 설계에 대한 연구가 필요합니다.
표준규격에 적합한 LED 가로등을 제작하여 차량검지기(적외선 센서)로부터 인식이 되면 밝기를 조정할 수 있도록 설계 후 일부 도로에 한해 도입을 통한 추가적으로 발생하는 단점에 대해 보완하여 점차적으로 많은 도로에 도입이 되도록 해야 합니다.
3.4. 기대효과
일반 백열등이나 할로겐을 이용한 조명에 비해 LED 조명은 25~20%정도의 소비 전력(W)만을 필요로 하고 10배 이상의 조명 수명을 가지고 있습니다.
따라서 경제적 측면에서 보면 단기적으로는 기존의 가로등에서 LED 가로등으로 교체하면서 개발 및 교체하는 비용으로 적자일 수 있지만 장기적으로 보면 위의 창원시에서 제공하는 LED 가로등 교체 효과에 대한 표에서 알 수 있듯이 몇 십억의 절감 효과를 얻을 수 있습니다. 또한 제안하는 아이디어는 이러한 LED 가로등에서 추가로 도로마다 적외선 센서를 이용한 차량검지기를 설치해 차량 통행에 따른 LED 가로등의 밝기를 조정하며 만약 차량 통행이 적은 곳에 있어서는 절감 효과가 더욱 증대되는 효과가 있을 것으로 예상됩니다.
또한 환경적인 측면에서 LED 가로등은 기존 가로등에 비해 전력 소모가 적어 평균 CO2 배출량이 적어 친환경적이며 이것은 또한 비용 절감을 통한 경제 효과를 얻을 수 있습니다.
4. 단계별 제작 과정
· 전방에 차량 검지를 위한 센서를 설치한다.
· 센서에 인식이 되기 전까지 도로의 LED 가로등의 밝기를 낮게 설정 한다.
· 전방에서 센서에 차량이 검지될 경우 후방의 LED 가로등의 밝기를 100%의 출력까지 증가시켜 차량 통행에 도움을 준다.
· 외부 하드웨어 설계
5. 기타
5.1. 회로도
· 위의 회로는 센서부, 메인회로부, PWM 제어부로 나누어 회로를 구성했습니다.
임의로 DC 12V 구동 설계를 하였으며, LED 6EA 배열로 350mA를 구동할 수 있도록 회로를 구성한 예시입니다.
5.2. 소스 코드
AVR 소스
/*
* Reference about PIN Setting
* BlueTooth : PE1(RXD0/PDI), PE0(TXD0/PDO)
* PIR Sensor : PD0(SCL/INT0)
* LED : PB4-7
* Buzzer : PG3
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include “ATmega128_v20.H”
#include “sub32.h”
ISR(TIMER3_OVF_vect) // 타이머 카운터 오버플로우 인터럽트
{
OCR3A =360; // 0~360까지 비교일치 후 오버플로우 발생, Port : PE3
}
int main()
{
MCU_initialize(); // MCU 초기화
Delay_ms(50);
LCD_initialize(); // LCD 초기화
Beep();
LCD_string(0×80,”16 Fall Semester”);
LCD_string(0xC0,”PROJECT “);
/* The first setting for state initialize */
UCSR0B |=(1<<TXEN0); // 송신 허용
UCSR0C |=(1<<UCSZ01)|(1<<UCSZ00); // Data rate 8bit
UBRR0H=0; UBRR0L=103; // Communication(signal) speed 9600bps
sei(); // 전역 인터럽트 허용
/* Setting for USART(about BlueTooth) */
Delay_ms(1000);
LCD_string(0×80,”SENSOR “);
LCD_string(0xC0,”COUNTER “);
while (1) password_input();
}
/*
* 사용된 함수들만 따로 헤더파일 정리
*/
#include “sub32.h”
int detect_counter=-1; // 센서 횟수 카운터 변수
unsigned char str[100];
int pw[5]={1,2,3,4};
int pw_check=0;
int num;
int str_num[20];
int enter=0;
//char *str=”abc123″;
unsigned int sum, ad_result;
unsigned int i =0;
unsigned int ADC6=0, ADC7=0;
int ADConvertor(char ch)
{
ADMUX = (ch&0x1F) | 0×40; // AVCC 사용
ADCSRA = (1<<ADEN)|(1<<ADSC)|(7<<ADPS0);
// ADC 허용, 프리스케일러 128
while((ADCSRA & 0×10)!= 0×10); //AD 변환 과정이 끝났는지 확인
sum = ADCL+ADCH*256; // ADCW*256
return(ADC); // ADC의 값을 반환
}
void main_while()
{
ad_result = ADConvertor(6);
ADConvertor(6);
ADC6 = (sum/102.3*10);
LCD_command(0×80+12);
LCD_3d(ADC6); // LCD에 ADC6의 값을 출력
ADConvertor(7);
ADC7 = (sum/102.3*10); //in board ADC6 Position setting
LCD_command(0×80+8);
LCD_3d(ADC7);// LCD에 ADC7의 값을 출력
if(ADC6==100&ADC7==100)
{
Delay_ms(70);
if(ADC7==100)
{
Delay_ms(1000);
state_on();
tx_char(’1′);
}
}
else state_off();
}
void password_check(int input) // 비밀번호 확인 함수
{
num=input;
//LCD_command(0xC0+2);
//LCD_3d(num);
if(num==pw[pw_check]) // 미리 지정해둔 비밀번호와 일치 여부 확인
{
Beep();
pw_check++;
Delay_ms(100);
if(pw_check==4)
{
Beep();
Delay_ms(100);
Beep();
enter=1;
}
}
return enter;
}
void password_input() // 각각의 스위치에 숫자 지정
{
if(enter==0)
{
main_while();
switch(Key_input())
{
case 0x0E : password_check(1); // 1입력
break;
case 0x0D : password_check(2); // 2입력
break;
case 0x0B : password_check(3); // 3입력
break;
case 0×07 : password_check(4); // 4입력
break;
default : break;
}
}
else if(enter==1)
{
LCD_string(0×80,”LOGIN OK “);
LCD_string(0xC0,” “);
}
}
int counter(void)
{
++detect_counter; // 센서 감지
return detect_counter; // 카운터 값을 출력
}
void state_off(void) // PIR detect off
{
PORTB=0×00;
//PORTG=0×00;
//LCD_string(0×80,”SENSOR “);
}
void state_on(void) // PIR detect on
{
PORTB=0xf0; // LED 0000
//PORTG=0×08; // Buzzer
Beep();
//LCD_string(0×80,”SENSOR “);
LCD_command(0xC0+11);
counter();
LCD_3d(detect_counter);
}
void tx_char(unsigned char tx_data)// 한 문자 전송 함수
{
while((UCSR0A&0×20) == 0); // UDR0 레지스터가 빌 때까지 대기
UDR0 = tx_data; // UDR0 레지스터에 전송할 문자 입력
}
void tx_string(char *str) // 문자열 전송 함수
{
int i,j;
i=strlen(str); // 입력 받은 문자열의 길이를 변수 i로 지정
for(j=0;j<i;j++)
{
tx_char(*(str++));
/* 한 문자 전송 함수에 문자열의 길이를 파악 후 그 수치만큼 전송 */
}
}
6. 참고문헌
· http://kostat.go.kr/portal/korea/index.action
· www.kipris.or.kr
· https://prezi.com/_s67q4hxzcvq/copy-of-led/