November 24, 2020

디바이스마트 미디어:

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[디웰전자] 전류센서 파격할인!! 50% 할인이벤트!! -

2015-02-02

[에스엔에스] 신상품 대량 입고기념 할인이벤트!! -

2015-02-02

[Uni-Trend] 인기상품 10종 할인이벤트!! -

2015-02-02

신학기 기념 니덱서보모터 할인이벤트!! -

2015-02-02

UDT와 유나이티드 콤프레샤 인기모델 15종 최대15% 할인!! -

2015-02-02

[OWON] 오실로스코프 VDS시리즈 최대12% 특별할인!! -

2015-02-02

보조배터리 최대 35% 할인이벤트!! -

2015-02-02

[60호]시각장애인 안전 지킴이

Cap 2020-09-07 14-46-19-345

2019 ICT 융합 프로젝트 공모전 참가상

시각장애인 안전 지킴이

글 | 광운대학교 백현은, 김주원

1.심사평
칩센 시각 장애인과 같은 사회적 약자들에게 도움이 될 수 있는 많은 방안이 준비되고 있습니다. “시각 장애인 안전 지킴이” 또한 그러한 의도로 기획이 되었으리라는 것을 충분히 알 수 있습니다만, 몇 가지 고려되지 않은 부분들이 보여 아쉬움이 있습니다. Device2의 경우 사용자가 소유하고 다녀야 하는데, 그것을 고려하면 최소화 및 경량화가 필요할 것으로 보입니다. 이를 위해 다양한 방안이 있겠으나, 이어폰 적용 등을 고려했으면 어떠했을까 하는 아쉬움이 듭니다. 그리고 제작 과정상에 나타난 문제점으로 여러 peripheral을 연동하여 동작하는데 조금은 불안한 형태가 보입니다. 기능별 모듈 등을 적용하는데 조금 더 신중하게 검토가 필요할 것으로 보입니다. 조금 더 안정된 제품을 위한 연구가 추가로 진행되면 좋을 듯 합니다.
뉴티씨 해당 기능을 실제로 구현하는 것은 핸드폰에 기능을 넣어도 좋지 않을까 생각해 보았습니다. 핸드폰용 어플로 제작을 해서, 해당 기능의 일부분을 구현해 준다면 시각장애인들에게 도움이 되지 않을까 하고, 실제로 많이 쓰이는 필수 어플로 등극하기를 기대해 봅니다.
위드로봇 GPS 정밀도에 대한 대책이 추가되면 더욱 좋은 작품이 될 것 같습니다.
펌테크 작품의 아이디어가 돋보이며 추후 작품을 발전시키면 실제 시각장애인에게서 활용이 가능한 제품이 될 수 있으리라 생각이 듭니다. 단 사용자가 사용할 디바이스의 경우 아두이노로 구성된 디바이스가 아닌 편의성과 휴대성을 갖춘 스마트폰으로 구성이 되어야 좀더 완성도 높은 작품이 되지 않을까 생각이 듭니다. 제출된 문서 내용을 고려하자면 계획 대비 최종 완성이 되지는 않은 것으로 판단됩니다.

2. 작품 개요
위험한 도로를 이용하는 시각장애인을 보고 있으면 사고가 나지는 않을까 하는 불편한 마음이 들었고 시각장애인이 길을 건널 때에는 도움을 주지 않을 수 없었습니다. 또, 시각장애인들을 위한 점자 블록들은 보도 공사 후 다시 제자리를 찾지 못하여 제 기능을 못 하거나, 심지어는 도시 미관을 해친다는 이유로 없애기도 합니다. 그래서 시각장애인들이 잘못된 점자로 인한 위험에 처할 일이 없는, 점자블록이 없는 보도에서 정확한 방향을 찾아갈 수 있도록 도와주는 휴대 가능한 디바이스(이하 디바이스1)를 설계하고자 했습니다.
시각장애인들을 안전한 방향으로 안내해 줄 휴대용 디바이스를 설계할 것에 더하여, 횡단보도가 있음에도 알지 못하여 돌아가는 일이 없도록, 또, 시각장애인용 음성안내 버튼을 찾아 헤매며 위험한 상황에 처하는 일이 없도록 하기 위해, 시각장애인이 건널목 근방에 오면 자동으로 음성 안내가 시작되고 멀어지면 음성 출력을 하지 않는 장치(이하 디바이스2)를 설계하고자 했습니다.
두 가지 장치(디바이스1과 디바이스2)가 서로 통신하며 시각장애인들의 안전한 보행을 보장해줄 수 있는 작품을 설계하는 것을 목표로 프로젝트를 진행 하였습니다.

3. 작품 설명
3.1 주요 동작 및 특징
3.1.1. Device 1 동작
보행자 디바이스는 크게 두 가지 가능을 수행합니다. 첫번째 기능은 위성통신과 지자기센서로 읽은 값을 이용하여 디바이스의 화살표가 보도를 가리키도록 합니다. 그리고, 보행자의 위치가 건널목 주변인 경우(GPS로 알 수 있음.) 건널목이 있음을 알리기 위해 모터를 좌 우로 회전시키는 방식으로 진동을 만들어 보행자에게 건널목임을 알려줍니다. 두번째 기능은 신호등에 부착된 Device2와 무선 통신하여 보행자가 신호등이 주변에 도달할 경우 신호등 디바이스에 주변에 있음을 알립니다.

3.1.2. Device 2 동작
보행자 디바이스가 신호등 디바이스의 일정거리 이내로 들어오면 nRF를 이용한 무선통신을 하게 됩니다. 신호등과 동기화된 신호등 디바이스는 두 디바이스가 연결된 순간 신호등의 상태를 음성신호로 나타내 줍니다. 초록신호인 경우 남은 시간을 계산해 보행자가 건너기에 충분치 못한 시간이 남았을 경우 다음 신호를 기다리라는 안내를 내보낸 후 다음 초록불 신호를 알려줍니다. 건너기에 충분한 시간이 남았을 경우 기존 신호등 알리미가 내는 소리를 스피커로 출력해줍니다.
위 Device1의 두 가지 기능과 Device2의 동작으로 시각장애인이 점자가 없거나 잘못된 보도에서도 안전하게 보행할 수 있도록 도움을 줄 수 있습니다.

Cap 2020-09-07 14-46-31-361

3.1.3. Device 1. 보행자 휴대용 (processor: 1. Arduino Mega & 2. Promicro)
1. GPS Module: 위치 정보 파악. -> 보도별로 나아가 나아가는 방향을 분류
2. Gyro Sensor: 방향 정보 파악. -> 회전량 계산
3. Servo Motor: 방향 정보 제시. -> GPS에서 분류된 Case와 회전량을 계산하여 도로가 나아가는 방향으로 화살표가 가리키도록 모터 제어.
4. RF Sensor: 무선통신. -> Device 2로 송신
사용 모듈 : Arduino Mega, Arduino Micro, GPS, MPU6050, nRF24l01, NEO 06M

Cap 2020-09-07 14-46-41-011

3.1.4. Device 2. 신호등 부착용 (processor: 1. Arduino Uno)
1. NRF Sensor: 무선통신 -> Device 1으로부터 수신 (통신거리에 Device 1 이 들어 올시)
2. DFPlayer mini: mp3 파일 저장 -> 시간정보를 주는 millis() 함수를 이용하여 시간에 맞는 소리 출력 (빨간불, 파란불)
3. Speaker: 소리 신호 알림 -> SDPlayer mini의 data를 소리로 출력
사용 모듈 : Arduino UNO, DFPlayer mini, nRF24l01

4. 개발 환경
4.1.1. Device 2 중요 코드 설명

void loop() {

printFloat1(gps.location.lat(), gps.location.isValid(), 11, 10);
printFloat(gps.location.lng(), gps.location.isValid(), 12, 10);
c=a+b;
Serial.println(c);
motorControl = c;
if (millis() > 5000 && gps.charsProcessed() < 10){
Serial.println(F(“No GPS data received: check wiring”));
}

if (mpuInterrupt ) {
GetDMP();
}
if ( motorControl == 101 || motorControl == 304 || motorControl == 405 || motorControl == 709 || motorControl == 109 ) { // GPS case0 == 90
if(-180<Yaw&&Yaw<-90) { // Target Angle : -90 – Yaw
targetAngle = -90 – Yaw;
}
else if(-90<=Yaw&&Yaw<90) { // Target Angle : 90 – Yaw
targetAngle = 90 – Yaw;
}
else if(90<=Yaw&&Yaw<180) { //Target Angle : 270 – Yaw
targetAngle = 270 – Yaw;
}

if(targetAngle>angle) {
angle++;
}
else if (targetAngle < angle) {
angle–;
}
servo.write(180-angle);
}
else if( motorControl == 813 || motorControl == 713 ) {

GPS의 위도와 경도를 “TinyGPS++.h”에 있는 gps.location.lat()와 gps.location.lng() 함수를 이용하여 받아옵니다. 그리고 받아온 값을 이용하여 ‘미리 나누어 놓은 일정 범위의 GPS값’(학교주변)에 대입하고 값으로 받고 (경도 * 100 + 위도) 값을 변수 c에 저장합니다. 그 후 “MPU6050_6Axis_MotionApps20.h”를 이용하여 만든 GetDMP()를 사용하여 디바이스의 Yaw(초기로부터의 회전)값을 설정합니다. 마지막으로 GPS정보인 c값과 자이로정보인 yaw값을 이용하여 Servo를 컨트롤합니다.

void loop(){

mp3.setVolume(5);

if(Serial.write(9))
{ callTime=millis();
exeTime=callTime/1000;
callee=exeTime%78;

if( (0<=callee) && callee<=53)
{ Red=53-callee;
r=Red*1000;
Serial.println(“RED”);
mp3.playMp3FolderTrack(1); // sd:/mp3/0001.mp3
waitMilliseconds(r);

Serial.println(“NOW YOU CAN GO(CHANGE TO GREEN)”);
mp3.playMp3FolderTrack(2);
waitMilliseconds(25000);
}

if( (54 <= callee) && (callee <78 ))
{
Green=78-callee;
g=Green*1000;

if(Green<15)
{
Serial.println(“WAIT UNTIL NEXT SIGNAL”);
delay(g);
}
else{
g=Green*1000;
Serial.println(“GREEN”);
mp3.playMp3FolderTrack(2);//sd:mp3.0002.mp3
waitMilliseconds(g);}
}
}

신호등 디바이스는 신호등의 빨간불의 시작시간부터 동기가 맞춰져 있습니다. 케이스로 잡은 신호등은 빨간불이 53초 초록불이 25초로 설정되어 있습니다. 신호등은 78초의 주기를 가지고 있습니다.
nRF통신이 연결되면 프로그램카운터의 시간(millis())을 읽어와 신호등의 상태를 계산합니다. Milliseconds를 초단위로 바꾸기 위해 1000으로 나눠 줍니다. 초로 계산된 시간은 신호등의 상태를 알기 위해 신호등의 주기인 78로 나누어 계산된 callee변수를 이용해 신호등의 상태를 아래 코드와 같이 출력해줍니다.
초록색인 신호등이 건너기에 충분치 못한 시간이 남은 경우(15초 미만) 저장된 음성파일을 출력해줍니다.

5. 단계별 제작 과정
5.1.1. 1주차 : 설계 시작
nRF 모듈 및 아두이노 구매 후, 무선통신으로 데이터 주고받는 코드를 작성합니다.
무선통신이 이루어지지 않아 nRF24l01 모듈과 아두이노를 바꾸어 가며 해보았고 결국 와이어 문제임을 발견하여 문제를 해결합니다.

Cap 2020-09-07 14-48-28-616

5.1.2. 2주차 : GPS 모듈
GPS모듈 NEO6M으로 위성에서 보내는 GPS 정보를 받아 실생활에서 사용하는 Google Earth에서 지도 확인결과 위성에서 보내는 값을 변환해야 함을 인지하였고, www.gonmand.co.uk 에서 값 변환 후 정확한 위치가 찍힘을 확인했습니다.

5.1.3. 3주차 : 엡을 이용한 GPS 위치 정보 파악
더 정확한 위치 파악을 위해 안드로이드 App을 계발하여 GPS정보를 블루투스로 송신합니다.

Cap 2020-09-07 14-48-40-894

5.1.4. 4주차 : 아두이노를 이용하여 GPS 정보 파악
시각 장애인들이 핸드폰을 사용하기에 무리가 있을 수 있으므로 핸드폰을 이용하지 않기로 하였고, Navigation처럼 이용 할 계획으로 GPS모듈 NEO 6M을 이용하여 광운대 주변을 Case분류하여 나눔니다.

5.1.5. 5주차 : 자이로 센서를 이용하여 회전량 측정
이용자가 향하는 방향을 알 수 있어야 하므로 디바이스의 회전 정보를 측정하기 위해 지자기센서 이용합니다.
지자기센서가 축의 기울기 DATA를 측정하는 것을 확인하고 오일러 변환을 통하여 회전 값으로 변환.(소프트웨어적 해결)합니다.

5.1.6. 6주차 : 자이로 모터 연동
지자기센서를 이용하여 측정된 디바이스의 회전 값만큼 모터가 반대로 회전하여 화살표가 한 방향만 가르치도록 설계 후 GPS로 분류한 Case별로 화살표가 가리킬 방향을 설정합니다.

5.1.7. 7주차 : 음성출력 코드 작성
두 nRF24l01 모듈의 통신을 이용하여 RTT(round trip time)값을 계산하여 두 디바이스간의 거리를 파악 한 후 일정 거리안에 들어오면 음성 출력을 하도록 설계 계획합니다. 구매한 nRF의 통신 거리가 사전 조사한 거리보다 많이 짧아 RTT값을 계산 할 필요 없이 통신이 될때 신호등에서 음성이 출력 되도록 한 후, DFPlayer mini 모듈과 음성 파일을 저장한 SD카드를 이용하여 적절한 시간에 필요한 음성파일이 출력 되도록 합니다.

5.1.8. 8주차 : 아두이노 핀과 용량부족(uno -> mega)
아두이노 우노에 nRF, GPS, 지자기, 모터를 집어 넣기에 프로세서의 용량이 부족함을 인지 하고 용량이 더 큰 마이크로 프로세서 보드인 아두이노 메가를 구매하기로 결정합니다.

5.1.9. 9주차 : 서로 다른 프로세서간의 통신 문제발생 and 해결 UNO & MEGA
UNO와 MEGA사이에 통신 문제 발생하였으나, 코드에서 통신을 제한하는 부분을 제거하여 문제를 해결합니다.

5.1.10. 10주차 : 서로 다른 두 통신( GPS & 나머지 ) 간의 Serial 문제 소프트웨어적 해결
GPS 위성통신과 프로세서의 Serial 통신간의 충돌 발생하여 기존에 아두이노에서 지원하던 softwareserial.h 헤더파일을 수정하여 문제를 해결합니다.

5.1.11. 11주차 : 두 I2C 통신 모듈을 한 보드에 사용하여 충돌 발생
GPS와 nRF모듈의 충돌 발생, nRF를 작은 보드에 담아 동작시킵니다.

5.1.12. 12주차 : 보고서 작성
회로도, 시각자료, 플로우 차트, 시각자료 보고서를 작성합니다.

6. 전체 시스템 구성

Cap 2020-09-07 14-48-52-346

Cap 2020-09-07 14-48-58-995

7. 회로도 및 완성작

Cap 2020-09-07 14-49-07-913

Cap 2020-09-07 14-49-17-127 Cap 2020-09-07 14-49-24-261

8. 참고문헌
· https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
· https://github.com/DFRobot/DFPlayer-Mini-mp3
· https://github.com/nRF24/RF24
· https://kocoafab.cc/make/view/657
· http://jamcoding.me/22111073439
· https://forum.arduino.cc/index.php?topic=385659.0
· http://forum.arduino.cc/index.php?topic=219375.0

 

 

Leave A Comment

*