[62호]자동시스템과 원격 제어 앱을 갖춘 버스용 창문
2020 ICT 융합 프로젝트 공모전 우수상
자동시스템과 원격 제어 앱을 갖춘 버스용 창문
글 | 국민대학교 구창진, 박지호, 임성현, 최형종
1. 심사평
칩센 기술을 논하자면 모터 제어를 통한 슬라이드 창문 개폐기 정도로 요약이 가능할듯 합니다. 하지만, 특정한 목표를 가지고 있고 그것이 필요한 이유에 대한 기획의도가 명확합니다. 또한, 그 기획의 타당성 또한 실제 수요층을 대상으로 수요 조사까지 이루어진 주제입니다. 많은 사람이 기능이 단순한 것은 문제가 아니라는 것, 그리고 그 기술이나 기능이 어떻게 쓰여질지 아는 것 또한 분명 중요한 포인트라는 것을 간과하는 경우가 있는데 지원자는 그 부분에 대하여 명확하게 짚어 낸 듯 합니다. 여러 상황에 대한 시연 동영상 또한 심플하지만, 제작 의도를 명확하게 보여주었습니다. 따로 흠잡을 것이 없지만, 창문이 열리고 닫히는 반응이 좀 느린 듯 한데 뭐가 원인일까 궁금해지기는 합니다.
펌테크 기획구성부터 제작과정을 포함해 사전 설문조사까지 시행하는 꼼꼼함이 반영된 실용적인 작품이라고 생각합니다. 제출된 보고서의 내용도 명확했고, 제품완성도 면에서 우수한 작품이라고 판단됩니다.
위드로봇 버스의 창문을 공기 질에 따라 자동으로 여닫는 아이디어는 좋으나 구현한 방법의 기대효과는 떨어집니다. 좀 더 다른 방법의 구현 아이디어가 필요합니다.
2. 개요
버스 외부의 미세먼지와 우천 시 빗물 유입을 자동 센서로 막겠다는 목적으로 작품 개발을 시작하였다. 우리 팀의 작품명은 ‘자동시스템과 원격제어 앱을 갖춘 버스용 창문’이다.
우리 팀이 해결하려는 문제점은 대중 버스의 창문이 열려있고, 그 좌석이 공석일 때 창문을 닫아줄 사람이 없다는 것이다. 이와 같은 문제 때문에 우천 시 빗물과 미세먼지의 유입에 대한 불만, 경제적 비효율, 불편리함 등을 줄이려고 이 작품을 만들게 되었다.
대중 버스 이용 중에 문제점의 실태를 파악하고, 그 문제점을 ICT 기술을 통해 해결하려 했다. 현재 우리나라 미세먼지의 위험성의 급증에 따른 피해를 최소화하기 위한 기술이다. 버스 천장에 미세먼지 센서와 빗물 센서를 부착하였고, 센서에서 인식한 값을 버스 기사가 편리하고 쉽게 알 수 있도록 어플을 개발하였다. 미세먼지 농도를 이미지로 표현하여 버스 기사가 앱을 통해 원격으로 제어할 수 있다.
대중 버스 창문 개방의 문제점과 이에 대한 해결책인 원격 제어 창문에 대한 대중의 인식을 버스기사와 승객한테 직접 설문조사하여 파악했다. 문제점을 자세히 알기 위해 관련 기사를 참고하였다. 원격 제어 창문의 기대효과의 설문 조사 결과가 매우 긍정적임을 보았을 때 기술의 효율성과 긍정성이 상당히 높다고 판단하였다.
2.1 작품의 필요성
2.1.1 미세먼지
2.1.1.1 심각성
미세먼지는 인체에 매우 유해하다. 위의 기사에 따르면, 세계보건기구(WHO)가 ‘2019년 건강을 위협하는 10대 요인’의 첫 번째로 ‘대기오염과 온난화’를 꼽았는데 이 대기오염을 유발하는 미세먼지를 ‘1군 발암물질’로 분류하고 있다. 미세먼지는 암, 치매, 우울증 등 많은 병을 유발하고 미세먼지 때문에 이른 나이에 사망하는 인구가 세계적으로 연간 700만 명에 달한다고 한다. 이는 흡연으로 인한 사망자보다 많은 수이다. 이런 미세먼지를 우리는 더 이상 간과해서 안 되며, 심각성을 인지하고 대비해야 한다. 또한 미세먼지에 대한 뉴스의 보도는 약 3시간을 간격으로 발표될 만큼 상당히 민감한 문제임을 확인할 수 있다.
2.1.1.2 미세먼지에 대한 대중 버스의 취약점
창문이 열려있는 공석에서의 미세먼지 유입이 버스 내부의 미세먼지 농도를 높이는 주요 원인이다. 공석 자리의 창문 개방을 확인하기 위해 총 45번의 버스를 이용하였고(기간 :2020.02.15.~2020.03.27.), 총 24번 이러한 상황을 목격하였다. 열려있을 확률은 53.3%로 꽤 높다는 것을 확인하였다.
2.1.1.3 미세먼지에 대한 대중의 시선
2.1.1.4 미세먼지에 대한 설문조사 (대상 : 버스기사)
총 3일간 버스 기사님 43명을 직접 만나 설문조사하였습니다.
버스 창문 설문지 결과 조사 미세먼지와 빗물의 유입으로 인해서 불편한 점이 많고, 이 문제를 해결해야 할 필요성을 느끼게 되었다.
2.1.2. 고속버스
2.1.2.1. 고속버스의 특성
고속버스는 안전성, 소음 최소화, 연료 효율성을 위해 통유리를 사용한다. 통유리를 사용하지 않으면 승객이 창문을 열 수 있고, 위에 적은 다양한 문제가 발생할 것이다. 통유리를 사용하기 때문에 고속버스 내부를 청소한다거나 저속 주행 시에 내부 환기 시스템에만 의존해야 한다.
2.1.2.2. 통유리의 불이익과 해결방안
통유리가 아닌 자동 창문을 사용하게 되면 승객들의 자의적인 창문을 열고 닫음을 방지할 수 있으며, 통유리 구조가 아닌 개·폐형 창문을 사용할 수 있게 된다. 또한 저속 주행을 할 때, 차량 내부를 청소할 때 창문을 열 수 있다.
2.2. 기술 도입에 따른 기대 효과
① 편리성
자동 창문 시스템으로 인하여 공석의 열려있는 창문을 불편하다고 생각하는 누군가가 대신해서 닫아야 하거나, 열려있는 상태 그대로 미세먼지가 버스 내부로 유입되는 것을 방지할 수 있다.
② 만족감
미세먼지 방지의 기술을 탑재함으로써 버스 내 미세먼지를 저감해 승객들의 만족감을 올려줄 수 있다. 위 기술의 도입으로 인해 대중버스에 대한 신뢰성이 높아질 것이다.
③ 경제성
원격 제어 앱을 통해 창문을 한 번에 열고 닫아 냉, 난방 손실을 줄이고 에너지 효율을 높일 수 있다. 고속버스가 고속 주행할 때 창문을 한 번에 닫아 공기저항을 줄여서 연비 효율을 높일 수 있다.
3. 작품 설명
3.1. 주요 동작 및 특징
3.1.1. 앱을 통한 주요 동작 및 특징
3.1.2. 센서 값에 따른 모터의 주요 동작 및 특징
3.1.3. app 버튼에 따른 모터의 주요 동작 및 특징
ⓐ app에서 제공하는 버튼은 총 3개이며 open, close, stop이 있다. ⓑ open은 ‘a’, close는 ‘b’, stop은 ‘c’를 나타낸다. ⓒ 각 버튼을 눌렀을 시, 버튼에 해당하는 값을 블루투스를 통해 아두이노로 보내준다. ⓔ 이렇게 얻어온 값은 bluetoothh()함수를 통해 motor_run()함수로 값을 보내준다. ⓕ ‘a’가 입력되면 case4, ‘b’가 입력되면 case5, ‘c’가 입력되면 case3로 이동하게 된다. ⓖ case4와 case5에선 case1과 case2로 이동하게 된다. case 1번과 2번으로 바로 넘어가지 않은 이유는 Timer2의 초기화 작업이 필요해서이다. ⓗ case1은 창문을 여는 방향, case2는 닫는 방향, case 3는 창문의 구동을 멈춘다. |
3.2. 전체 시스템 구성
3.2.1. HW
3.2.1.1. 하드웨어 구성
· 아두이노 보드 : 총 44개의 핀과 단자들로 구성되어 있고, 각 핀과 단자들은 아두이노와 다른 보드 또는 센서들의 제어에 이용할 수 있는 장비이다.
· 구동 모터 : 헬리컬기어의 모터로써 다른 모터보다 출력이 상대적으로 높아 낮은 감속비일 때 더 높은 토크와 RPM을 낼 수 있다. 이 모터를 활용하여 창문을 닫고 여는데 실질적인 역할을 하는 구성요소이다.
· 블루투스 HC-06 모듈 : 아두이노에서 시리얼통신을 이용하여 우리가 직접 만든 앱과 데이터 값을 주고받을 수 있는 모듈이며, 약 10m 정도 거리에서 무선으로 데이터를 보내거나 받을 수 있는 요소이다.
· 모터 드라이버 (L298N) : 모터와 아두이노를 연결하는 모듈로써, 모터의 속도와 위치 제어를 할 수 있다. 또한 DC모터 2개 또는 스테핑 모터를 연결하여 제어가 가능하며, 입력전압은 여기선 5V를 이용하였다.
· 빗물 센서 : 창문에 부착하여 비가 오는지 안 오는지 판단할 수 있게 하는 센서이다. 빗방울 감지 센서 기판의 전극부분이 물과 접한 면적이 클수록 저항 값이 작아지고, 흐르는 전류량이 상대적으로 커지게 된다.
· 미세먼지 센서 : 대기 중의 미세먼지를 측정하는 센서로써, 직경 10마이크로 이하의 입자상 물질을 측정해 낸 다. 미세먼지 센서 안에는 적외선 센서가 포함되어, 적외선 수신기와 송신기가 먼지에 의해 반사되는 빛의 양을 파악해 입자를 감지하여 대기 중의 미세먼지를 측정한다.
· 랙과 피니언 : CATIA 프로그램을 통해 3D 설계를 한 후 랙과 피니언 시뮬레이션을 거쳤다. 이에 3D 프린팅을 외주 작업을 거쳐 만들었다.
· 각목, 골판지, 단프라박스, 아크릴판: 버스를 만드는 데에 쓰인 재료이다. 각목을 통해 창틀을 만들었고, 창문은 아크릴 판을 제작하여 만들었다. 골판지를 통해 차체 내부를 만들었으며 단프라 박스를 이용하여 차체의 카울을 만들었다.
3.2.1.2 하드웨어 구조
3.2.2 SW
3.2.2.1 구성 및 각 함수별 기능
① 미세먼지 센서 함수 주요 기능
② 빗물 센서 함수 주요 기능
③ 블루투스 함수 주요 기능
④ 모터 방향 및 속도제어
⑤ 모터 타이머 설정하는 함수 주요 기능
⑥ 상황에 따른 모터 제어 함수의 주요 기능
3.2.3. SW – App – Remote Control
3.2.3.1. 앱 화면
환경부의 기준에 맞게 분류하였다. 나쁨과 매우나쁨에서 자동화 시스템이 작동하며, OPEN, CLOSE, STOP으로 작동을 시킬 수 있다.
3.2.3.2. 앱 개발
① 앱 설명
① 맨 왼쪽 위에 블루투스 설정을 할 수 있는 버튼을 생성해주었다. ② 그 바로 아래에 가로로 나눠서 OPEN, CLOSE, STOP 버튼을 만들어 주었다. 다만, 수직 배치 레이아웃을 사용하여 왼쪽 사진에는 버튼이 보이지 않는다. ③ 레이블1 : 아두이노에 연결한 미세먼지, 빗물 센서의 값을 블루투스 모듈을 통하여 앱에 전송해주는 칸이다. ④ 레이블3 : 미세먼지 센서에 의한 측정값에 따라 ‘인식중’, ‘좋음’, ‘보통’, ‘나쁨’, ‘매우나쁨’을 표시해주도록 설계하였다. ⑤ 이미지 : 사용자가 쉽고 빠르게 미세먼지 농도를 알아차릴 수 있도록 레이블 3 밑에 이미지가 같이 나타나게끔 사진을 첨부하였다. ⑥ ‘보이지 않는 컴포넌트’ : ‘BluetoothClient1’ 과 ‘시계1’을 추가하였다. ‘BluetoothClient1’은 블루투스를 연결하기 위해 필요한 컴포넌트이고 ‘시계1’은 앱 내부에서 작동하는 시계로, 시간이 증가함에 따라 다음 센서 값을 받아오기 위해 필요한 컴포넌트이다. |
② 블루투스 연결
위 사진은 블루투스를 연결하기 위해 필요한 블록이다. ‘목록선택버튼1’이란 앱 디자인 사진에서 ‘블루투스 설정’ 버튼을 의미한다.
① ‘목록선택버튼1’을 클릭하기 전 : 앱 상에 ‘블루투스 설정’이라고 나타나있다.
② ‘목록선택버튼1’을 클릭한 후 : 연결 가능한 블루투스 기기들 목록이 표시된다. 아두이노의 블루투스 모듈(HC-06)을 선택하면 사용자의 기기와 이 시스템이 통신을 시작한다.
③ 블루투스 기능 블록
① “Button1 = OPEN 버튼” 이 버튼을 누르면 Bluetooth로 아두이노에 a라는 값을 보내게 된다.
② 이 값은 아두이노 소스코드의 ‘val’이라는 값에 저장된다.
③ ‘val’은 소스코드의 조건문을 타고 모터를 구동 시키게 되고 창문을 열 수 있다.
동일한 원리로 “Button2 = CLOSE(창문을 닫음)”, “Button3 = STOP(모터를 멈춤)” 기능을 한다.
④ 센서에 따른 이미지 블록
미세먼지 센서 값과 그에 따른 이미지를 보여주는 블록이다. 시계1을 항상 활성화 시켜 놓고 타이머 간격은 1초로 설정하였다. 앱이 시작하자마자 앱 내의 시계가 작동하며, 1초 간격으로 위 조건문이 실행하게 된다.
① 가장 우선순위가 높은 조건문은 ‘블루투스 연결이 되었는가’이다.
② 연결이 되었다면 다음 조건문인 ‘블루투스로 받을 데이터가 0보다 큰 가’를 확인한다. 받을 데이터가 있다면 그 데이터를 레이블1에 표시해준다. 아두이노 코드를 통해 미세먼지 센서 값과 빗물 센서 값을 블루투스로 송신하도록 설계하였다.
③ 블루투스로 송신한 값을 받기 위해 앱 자체적으로 지역 변수 ‘dust_standard’를 만들었다. 1바이트의 숫자데이터를 받는다. 이 값은 -1, 0, 1, 2, 3이 되는데 각 경우는 미세먼지 농도에 따른다.
④ 텍스트와 이미지로 각 경우에 따라서 스마트폰 화면에 함께 나타내준다.
3.3. 개발 환경
3.3.1. S.W 개발
개발 OS : Windows 10, 통합개발환경 : Arduino IDE, 개발 언어 : C언어
3.3.2. H.W 개발
설계 프로그램 : CATIA, 제작 프로그램 : 3D Printing5
3.3.3. 앱 개발
사용 OS : Android, 개발 프로그램 : MIT APP INVENTOR
4. 단계별 제작 과정
4.1. 아이디어 구상
4.2. S/W 개발 및 설계
4.3. H/W 설계 및 제작
4.4. 조립 완성 및 기술 시연
5. 기타
5.1. 회로도
5.2. 소스코드
#include <MsTimer2.h>
#include <SoftwareSerial.h>
#define BT_RXD 8
#define BT_TXD 7
SoftwareSerial bluetooth(BT_RXD, BT_TXD);
int dust_sensor = A0; // 미세먼지 핀 번호
int Raindrops_pin = A1; // 빗방울센서 핀을 A1으로 설정
int rain_value = 0; // 센서에서 입력 받은 빗물 값
int dust_value = 0; // 센서에서 입력 받은 미세먼지 값
int dustDensityug=0; // ug/m^3 값을 계산
int sensor_led = 12; // 미세먼지 센서 안에 있는 적외선 led 핀 번호
int sampling = 280;
int waiting = 40;
float stop_time = 9680; // 센서를 구동하지 않는 시간
int Dir1Pin_A = 2; // 제어신호 1핀
int Dir2Pin_A = 3; // 제어신호 2핀
int SpeedPin_A = 10; // PWM제어를 위한 핀
int Dir1Pin_B = 4; // 제어신호 1핀
int Dir2Pin_B = 5; // 제어신호 2핀
int SpeedPin_B = 11; // PWM제어를 위한 핀
int Timer = 0;
int Timer2 = 0;
static int MOTER_DIR = 0; // 모터제동 bool
static int motor_check = 0; // 모터 on/off
char dust_standard = 0;
void bluetoothh();
void rain_sensor();
void dust_sensorr();
void motor_clock1();
void motor_counterclock1();
void motor_clock2();
void motor_counterclock2();
void motor_stop();
void motor_run();
void ISR_Timer();
void Serial_print();
void setup(){
Serial.begin(9600); // 시리얼 모니터 시작, 속도는 9600
pinMode(sensor_led,OUTPUT); // 미세먼지 적외선 led를 출력으로 설정
pinMode(A1 , INPUT);
pinMode(4, OUTPUT);
pinMode(Dir1Pin_A, OUTPUT); // 제어 1번핀 출력모드 설정
pinMode(Dir2Pin_A, OUTPUT); // 제어 2번핀 출력모드 설정
pinMode(SpeedPin_A, OUTPUT); // PWM제어핀 출력모드 설정
pinMode(Dir1Pin_B, OUTPUT); // 제어 1번핀 출력모드 설정
pinMode(Dir2Pin_B, OUTPUT); // 제어 2번핀 출력모드 설정
pinMode(SpeedPin_B, OUTPUT); // PWM제어핀 출력모드 설정
MsTimer2::set(1000, ISR_Timer); //1000ms, ISR_Timer
MsTimer2::start(); // Timer start
bluetooth.begin(9600);
}
void loop(){
dust_sensorr();
rain_sensor();
motor_run();
bluetoothh();
Serial_print();
}
void bluetoothh(){
if(bluetooth.available()){
char val = bluetooth.read();
Serial.write(bluetooth.read());
if(val == ‘a’){
MOTER_DIR=4;
}
if(val == ‘b’){
MOTER_DIR=5;
}
if(val == ‘c’){
MOTER_DIR=3;
}
}
if(Serial.available()) {
bluetooth.write(Serial.read());
}
bluetooth.print(dust_standard);
bluetooth.print(“\n”);
bluetooth.print(“미세먼지: “);
bluetooth.print((dustDensityug+50));
bluetooth.print(“[ug/m3] “);
bluetooth.print(“\n빗물 센서값: “);
bluetooth.print(analogRead(A1));
}
void rain_sensor(){
rain_value = analogRead(Raindrops_pin);//빗물 값 읽어오기
delay(1000);
}
void dust_sensorr(){
digitalWrite(sensor_led, LOW); // LED 켜기
delayMicroseconds(sampling); // 샘플링해주는 시간.
dust_value = analogRead(dust_sensor); // 센서 값 읽어오기
delayMicroseconds(waiting); // 너무 많은 데이터 입력을 피해주기 위해 잠시 멈춰주는 시간.
digitalWrite(sensor_led, HIGH); // LED 끄기
delayMicroseconds(stop_time); // LED 끄고 대기
dustDensityug = (0.17 * (dust_value * (5.0 / 1024)) – 0.1) * 1000; // 미세먼지 값 계산
delay(1000);
if ((dustDensityug)<0){
dust_standard = -1; //인식중
}
else if ((dustDensityug>=0) && (dustDensityug<30)){
dust_standard = 0;
}
else if ((dustDensityug>=30) && (dustDensityug<80)){
dust_standard = 1;
}
else if ((dustDensityug>=80) && (dustDensityug<120)){
dust_standard = 2;
}
else{
dust_standard = 3;
}
}
void motor_clock1(){ //창문 닫는 방향
digitalWrite(Dir1Pin_A, HIGH); //모터가 시계 방향으로 회전
digitalWrite(Dir2Pin_A, LOW);
digitalWrite(SpeedPin_A, HIGH); //모터 속도를 최대로 설정
delay(1000);
}
void motor_counterclock1(){ //창문 여는 방향
digitalWrite(Dir1Pin_A, LOW); //모터가 반시계 방향으로 회전
digitalWrite(Dir2Pin_A, HIGH);
digitalWrite(SpeedPin_A, HIGH); //모터 속도를 최대로 설정
delay(1000);
}
void motor_clock2(){
digitalWrite(Dir1Pin_B, HIGH); //모터가 시계 방향으로 회전
digitalWrite(Dir2Pin_B, LOW);
digitalWrite(SpeedPin_B, HIGH); //모터 속도를 최대로 설정
delay(1000);
}
void motor_counterclock2(){
digitalWrite(Dir1Pin_B, LOW); //모터가 반시계 방향으로 회전
digitalWrite(Dir2Pin_B, HIGH);
digitalWrite(SpeedPin_B, HIGH); //모터 속도를 최대로 설정
delay(1000);
}
void motor_stop(){
digitalWrite(SpeedPin_A, LOW);
digitalWrite(SpeedPin_B, LOW);
}
void motor_run(){
switch (MOTER_DIR)
{
case 0:
if((rain_value >60)&&(dustDensityug < 80)&&motor_check == 1 ){
motor_stop();
}
else if(((dustDensityug > 80)|| (rain_value < 60)) && motor_check == 1)
{
motor_counterclock1();
motor_counterclock2();
}
else{
motor_clock1();
motor_clock2();
}
break;
case 1:
if(Timer2<4){
motor_clock1();
motor_clock2();
}
else{
MOTER_DIR = 0;
}
break;
case 2:
if(Timer2<4){
motor_counterclock1();
motor_counterclock2();
}
else{
MOTER_DIR = 0;
}
break;
case 3:
motor_stop();
MOTER_DIR = 0;
break;
case 4:
Timer2=0;
motor_stop();
MOTER_DIR=1;
break;
case 5:
Timer2 = 0;
motor_stop();
MOTER_DIR = 2;
break;
default:
break;
}
}
void Serial_print(){ // 시리얼 모니터에 미세먼지 값 출력
Serial.print(“Dust Density [ug/m3]: “);
Serial.print(dustDensityug);
Serial.print(“\n”);
Serial.println(analogRead(A1));
Serial.println(MOTER_DIR);
Serial.print(“Timer2 : “);
Serial.println(Timer2);
}
void ISR_Timer(){
Timer++;
Timer2++;
if(Timer > 4){
Timer = 0;
motor_check = 0;
}
motor_check = 1;
}
5.3. 제품도
5.4. 참고문헌
1. 기어 한국미스미, 기어 기술자료, file:///C:/Users/user/AppData/Local/Microsoft/Windows/INetCache/IE/8U9RBEK8/3010gijutu_kr.pdf
2. IAMAMAKER, MIT APP INVENTOR 교육자료, http://www.iamamaker.kr/ko/tutorials/%EC%95%B1-%EC%9D%B8%EB%B2%A4%ED %84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0/
3. NAVER 지식 IN, 미세먼지 싫어요 검색, https://search.naver.com/search.naver?sm=top_hty&fbm=0&ie=utf8&query=%EB%AF%B8%EC%84%B8%EB%A8%BC%EC%A7%80+%EC%8B%AB%EC%96%B4%EC%9A%94
4. 조현진,“[학생 칼럼] 한반도 뒤덮는 미세먼지의 심각성”, 경기일보, 2020.03.26 http://www.kyeonggi.com/news/articleView.html?idxno=2262228
5. 최영일,“비상 문 없는 통유리, 참사 키워”, YTN, 2016.10.14 https://www.ytn.co.kr/_ln/0103_201610142027549854
6. naver포스트, 통 유리 사고 https://m.post.naver.com/viewer/postView.nhn?volumeNo=15321360&memberNo=40864363&vType=VERTICAL, 2020년
7. 환경부, 미세먼지 대처방안, http://www.me.go.kr/home/file/readDownloadFile.do?fileId=97828&fileSeq=1&openYn=Y
8. 우성은 외 2명 , 대중교통 차량의 실외 미세먼지 유입에 관한 연구, 대한건축학회 학술발표대회 논문집 , 2018년
9. 이용일 외 6명 , 대중교통수단 및 자동차의 실내공기질에 대한 노출 분석, 환경독성보건학회 추계국제학술대회[초록집] , 2013년
10. 이현우 외 7명 , 국내 외 자동차 실내공기질 관련 연구 동향 , 한국자동차공학회 춘 추계 학술대회 논문집 , 2006년