시각장애인용 스마트 블라인드 스틱: 아두이노 & 1Sheeld 기반 내비게이션 보조기기
부품 및 소모품
| 부품 | 수량 | 비고 |
| 1Sheeld 보드 | 1 | 스마트폰 센서/통신 연동 쉴드 |
| 아두이노 우노 | 1 | 메인 컨트롤러 |
| 안드로이드 스마트폰 | 1 | GPS, SMS, 블루투스 제공 |
| HC-SR04 초음파 센서 | 2 | 상/하단 장애물 감지용 |
| DC 진동 모터 | 2 | 촉각 피드백용 (PVC 파이프 내장) |
| 릴레이 모듈 | 1 | 외부 전원 제어용 |
| 토글 스위치 | 1 | 긴급 SOS 버튼 |
| 9V 배터리 + USB 변환 어댑터 | 1 | 휴대용 전원 |
| 점퍼 와이어, PVC 파이프 등 | - | 구조물 및 배선용 |
소프트웨어 및 앱
- 아두이노 IDE
- 1Sheeld 모바일 앱 (GPS, SMS 쉴드 활성화 필수)
프로젝트 배경
기존 흰 지팡이는 사용자가 좌우로 흔들어 장애물을 탐지해야 하므로 피로도가 높고, 계단/구멍 등 높이 차이 감지가 어렵습니다. 이를 보완하고자 초음파 센서로 전방/하단 장애물을 감지해 진동으로 알리고, 스마트폰 GPS/SMS로 위치 기반 긴급 호출 기능을 추가한 프로토타입을 졸업작품으로 제작했습니다. 1Sheeld 덕분에 6개월 만에 완성할 수 있었습니다.
작동 원리
전원 및 초기화
9V 배터리 → USB 어댑터 → 아두이노 전원 공급. 1Sheeld와 스마트폰 블루투스 페어링 후 1Sheeld 앱에서 GPS, SMS 쉴드 활성화 필요. ※ 시각장애인 단독 사용 시 스마트폰 조작이 어려우므로, 향후 점자 키패드나 음성 명령 연동 필요.
장애물 감지 및 진동 피드백
- 상단 초음파 센서(트리거 핀 6, 에코 핀 7): 100cm 이내 장애물 감지 시 진동 모터 1번 간헐 진동 (200ms on/off)
- 하단 초음파 센서(트리거 핀 4, 에코 핀 5): 40cm 이내 감지 시 진동 모터 1번 연속 진동
- 두 센서 모두 PVC 파이프 내부에 장착해 지팡이 형태 유지
- 감지 거리 임계값은 코드에서 상수(40cm, 100cm)로 조정 가능
GPS 위치 기반 긴급 SOS
- 토글 스위치(핀 8) 누르면 스마트폰 GPS로 현재 위도/경도 읽기
- 사전 설정된 보호자 번호로 "도움이 필요합니다! 위치: 위도, 경도 + 구글맵 링크" SMS 전송
- 전송 후 3초 대기(중복 방지)
스틱 길이 조절
PVC 파이프 연결부 나사식으로 사용자 신장에 맞게 길이 조절 가능. 감지 거리도 코드 상수 수정으로 조정.
코드 (핵심부)
#define CUSTOM_SETTINGS
#define INCLUDE_GPS_SHIELD
#define INCLUDE_SMS_SHIELD
#include <OneSheeld.h>
#include <string.h>
#define trigPinL 4
#define echoPinL 5
#define trigPinH 6
#define echoPinH 7
#define Vib1 12
#define Vib2 13
#define SW 8
boolean isInRange = false;
float lat, lon;
String PhoneNumber = "0134087286"; // 보호자 번호로 변경 필요
String Message, Message1, Message2;
char latitude[10], longitude[10];
void setup() {
pinMode(trigPinL, OUTPUT); pinMode(echoPinL, INPUT);
pinMode(trigPinH, OUTPUT); pinMode(echoPinH, INPUT);
pinMode(Vib1, OUTPUT); pinMode(Vib2, OUTPUT);
pinMode(SW, INPUT_PULLUP); // 풀업 권장
OneSheeld.begin();
}
void loop() {
// 하단 센서 읽기
digitalWrite(trigPinL, LOW); delayMicroseconds(2);
digitalWrite(trigPinL, HIGH); delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
long durationL = pulseIn(echoPinL, HIGH);
int distanceL = (durationL / 2) / 29.1;
// 상단 센서 읽기
digitalWrite(trigPinH, LOW); delayMicroseconds(2);
digitalWrite(trigPinH, HIGH); delayMicroseconds(10);
digitalWrite(trigPinH, LOW);
long durationH = pulseIn(echoPinH, HIGH);
int distanceH = (durationH / 2) / 29.1;
// 진동 피드백
if (distanceL > 40) digitalWrite(Vib1, HIGH); else digitalWrite(Vib1, LOW);
if (distanceH < 100) {
digitalWrite(Vib1, HIGH); delay(200);
digitalWrite(Vib1, LOW); delay(200);
}
// SOS 버튼 (토글 스위치 LOW 시 전송)
if (digitalRead(SW) == LOW) {
lat = GPS.getLatitude();
lon = GPS.getLongitude();
Message1 = String(lat, 8);
Message2 = String(lon, 8);
Message = "I need Help! I'm at latitude: " + Message1 + " and longitude: " + Message2;
Message += " Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
SMS.send(PhoneNumber, Message);
delay(3000);
}
delay(1000);
}
회로도
Fritzing 파일(`OneSheeldTONGKAT.fzz`) 제공. 주요 연결: 초음파 센서 2개, 진동 모터 2개, 토글 스위치, 1Sheeld 보드(아두이노 위에 적층).
개선 과제 및 향후 계획
- 전원 문제: 9V 배터리 수명 짧음 → 태양광 충전 회로 또는 대용량 리튬이온 팩 도입 필요
- 스마트폰 의존성: 시각장애인 단독 조작 어려움 → 전용 하드웨어 버튼/음성 인식/점자 디스플레이 연동 연구
- 센서 융합: IMU(자이로/가속도) 추가로 낙상 감지, 걸음걸이 분석 가능
- 양산화: PCB 통합, 방수/내구성 강화, 인체공학적 그립 설계
- 오픈소스화: 설계 파일, 코드, 문서(FYP 1/2, 포스터, 영상) 공유로 커뮤니티 개선 유도
참고 자료
- 프로젝트 문서: FYP 1, FYP 2
- 포스터: FYP 1, FYP 2
- 시연 영상: Video 1, Video 2