盲人智能导航拐杖:Arduino + 1Sheeld + 超声波 + GPS短信求助
组件与物料清单
| 组件 | 数量 | 备注 |
|---|---|---|
| 1Sheeld 扩展板 | 1 | 手机传感器虚拟化盾板 |
| Arduino UNO | 1 | 主控板 |
| Android 手机 | 1 | 提供GPS、短信、蓝牙 |
| HC-SR04 超声波测距模块 | 2 | 高/低位各一个,检测前方与地面障碍 |
| DC 振动马达 | 2 | 对应两个超声波,触觉反馈 |
| 继电器模块 | 1 | 驱动振动马达 |
| 拨动开关 | 1 | 紧急求助触发 |
| 9V 电池 + USB转接板 | 1 | 供电,续航有限,建议升级锂电/太阳能 |
| PVC管、跳线等 | 若干 | 结构件与连接 |
软件与APP
- Arduino IDE
- 1Sheeld手机APP(需安装在Android手机,开启GPS与短信权限)
项目背景
看到视障人士仅凭传统白色长杖艰难避让路面坑洼、台阶,触动我开发此原型。虽非电子专业,但利用网络资源与1Sheeld平台,历时6个月完成毕设。核心创新:双超声波检测高低障碍 + 手机GPS定位 + 一键短信求助。


步骤1:供电系统
9V电池经USB转接板供电Arduino。已知不足:续航短,后续应加装太阳能板或改用锂电池组。

步骤2:蓝牙连接与APP配置
上电后,监护人需在手机开启1Sheeld APP,启用GPS Shield与SMS Shield。视障者无法操作手机,未来需开发盲文键盘或语音唤醒方案。

步骤3:障碍检测与振动反馈
两个HC-SR04分别安装在拐杖上端(检测胸部高度障碍)和下端(检测地面坑洼/台阶):
- 下端传感器:距离>40cm持续振动提醒
- 上端传感器:距离<100cm间歇振动(200ms on/off)
振动马达内置PVC管内,用户手握即可感知。检测阈值可在代码中调整。
步骤4:GPS定位与紧急求助
拨动开关按下(读取为低电平)触发求助:
- 读取手机GPS经纬度
- 生成Google Maps链接
- 发送短信至预设号码(监护人/救援)
拐杖长度可按用户身高调节,检测距离阈值代码可改。
步骤5:展望与反思
希望原型能商业化造福视障群体。受限于英语水平与学生身份,文档不完善,相关资料见附件链接(FYP文档、海报、演示视频)。
核心代码
#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);
long distanceL = (durationL / 2) / 29.1;
// 读取上端超声波
digitalWrite(trigPinH, LOW); delayMicroseconds(2);
digitalWrite(trigPinH, HIGH); delayMicroseconds(10);
digitalWrite(trigPinH, LOW);
long durationH = pulseIn(echoPinH, HIGH);
long distanceH = (durationH / 2) / 29.1;
// 下端:>40cm 持续振动(无障碍时提醒? 逻辑似反,建议<40cm振动)
if (distanceL > 40) digitalWrite(Vib1, HIGH);
else digitalWrite(Vib1, LOW);
// 上端:<100cm 间歇振动
if (distanceH < 100) {
digitalWrite(Vib1, HIGH); delay(200);
digitalWrite(Vib1, LOW); delay(200);
}
// 紧急求助按键检测(低电平触发)
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 +
" Google Maps - https://www.google.co.in/maps/place/" +
Message1 + "," + Message2;
SMS.send(PhoneNumber, Message);
delay(3000); // 防抖
}
delay(1000);
}
原理图文件
OneSheeldTONGKAT.fzz (Fritzing源文件)
改进建议
- 供电:加装18650锂电池+TP4056充电板+太阳能板
- 交互:增加蜂鸣器语音播报距离/方向,或骨传导耳机
- 手机依赖:改用ESP32内置WiFi/BLE+GPS模块,脱离手机独立运行
- 结构:集成PCB、3D打印外壳,提升耐用度与美观
- 算法:融合IMU姿态判断跌倒自动报警
制造工艺
- 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- ATtiny85 迷你街机:贪吃蛇 — 打造掌上 OLED 游戏机
- 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
- 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
- Arduino Nano + OpenCV 人脸追踪自主机器人小车
- 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- 使用 Arduino 移位寄存器创建绚丽灯光序列
- 智能插座:基于 Arduino 与 RTC 的 120V 定时开关插座