所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
【冬季赛第三轮】“二哈”智能导盲系统
媛媛 媛媛 2020-04-01 09:52:23
0
0
简单

项目背景:

      据统计,我国现有1700多万视力残疾人,平均每80人中就有一个"黑暗中的行者",在世界上的排名非常前。可能很多人都觉得不敢相信,毕竟我们平日里上街,并没有见到多少盲人。可是,你想过这是为什么吗?

       因为他们真的不敢出门。几乎所有的公共设施,对盲人都谈不上友善。例如盲道,确实,现在不少城市的主要道路上都设置了盲道。盲道的存在有很重要的意义,它可以帮助盲人知道他们现在在哪里,是继续前行,还是转弯或者是到达了起点和终点。中国的盲道长度很长,分布很广,但是有些盲道是不走心的。

      还有就是导盲犬了,非常难求到。培育一种导盲犬非常难,耗时也非常长,这样的情况下,导盲犬的数量非常有限,能拥有的人也非常少。而且,很多地方导盲犬是不能进入公共交通工具的,这样的出行也让盲人非常不便利。

     如何让盲人放心出门,融入到我们这个社会中,是我们这个项目想要解决的问题。

projectImage

基本原理:

      让二哈实现二哈的基本功能

1.利用二哈的识别标签,方便识别道路当中的各种情况,并用语音进行播报(哈士奇、语音合成实现)

2.利用超声波传感器了解前方障碍物的距离(超声波传感器实现)

3.物联网一键报警系统(blynk实现)

制作过程:

步骤1 步骤1
打印标签,并对二哈进行训练

把二哈特定的标签打印出来,并进行裁剪,贴到相应的物体上(这里是模拟),同时把第一、二两个标签作为红绿灯的对应符号。电脑裁剪后保存,等下放掌控板程序中(显示图片那)

projectImage

对二哈进行训练,具体也可以参看前面我写的二哈训练https://makelog.dfrobot.com.cn/article-308258.html

projectImage
步骤2 步骤2
2.1编写红绿灯程序(掌控板)
projectImage

 编写另一块掌控板程序

2.2初始化相关内容(哈士奇、blynk、语音合成)

projectImage

2.3 哈士奇识别标签程序 (这里是部分程序,可以自己适当增加内容,按下A键也可以换做触摸的方式,让盲人触摸来让哈士奇开始正常工作),标签除了放在盲道上外,还可以放在路标上,通过盲人拿着的哈士奇镜头扫到这个路标就可以,记忆去过的地方,方便其他人员找寻盲人,或者帮助盲人解决一些困难。

projectImage

2.4  超声波传感器程序(考虑到有可能盲道有障碍物,所以设置了超声波传感器,以提醒盲人注意前方可能有障碍物)

projectImage

2.5 紧急情况下一键求救程序(通过前面列表记住盲人去过的地方,把最后一次盲人经过的地方一键推送到相关人员邮箱,以便及时进行施救)当然,程序也可以设置列表上传到物联网,方便其他人员了解盲人去过的一些场所。(blynk操作可以参考这里https://mc.dfrobot.com.cn/thread-303476-1-1.html

projectImage
步骤3 步骤3
盲道等设计

盲道条纹代表直线、圆点一般代表有障碍,需要拐弯或者注意安全

projectImage

根据这个大致设计制作了盲道,方便进行实验

projectImage

 家里没有激光雕刻机,自己比较懒惰,也不想用纸板等做个盒子,大致设置了一个环境,如果把这些硬件设备都放在一个盒子里可能会更美观点。

projectImage
步骤4 步骤4
连接线路

 红绿灯的线路比较简单,直接电源就可以,语音合成插入IO扩展板上,然后连到IIC处,超声波传感器注意要3.5v可以工作的这种,不要选错哦,把引脚连到UART处,然后哈士奇连到正负极以及P0和P1处,按钮连接到数字口,我这了选择的是9号。

projectImage

实操视频

 通过二哈识别红绿灯情况,以及基本的道路和路况,还可以一键求救,发送信息到手机

projectImage
材料清单 材料清单
1x
Speech Synthesizer Bee语音合成模块
1x
WiFi Bee IO扩展板
2x
掌控板 IO扩展板 IO电机驱动扩展板套餐
1x
超声波传感器
1x
Gravity: 二哈识图(HuskyLens)AI 视觉传感器
1x
数字大按钮模块 黄色
代码 代码
	                    					/*!
 * MindPlus
 * mpython
 *
 */
#include <WiFi.h>
#include <MPython.h>
#include <WiFiClient.h>
#include <SimpleList.h>
#define BLYNK_PRINT Serial
#include <DFRobot_URM10.h>
#include <DFRobot_SYN6288.h>
#include <DFRobot_HuskyLens.h>
#define BLYNK_MAX_SENDBYTES 128
#include <BlynkSimpleEsp32.h>
#include <WidgetRTC.h>

// 动态变量
SimpleList<String> mind_l_DiMing;
// 函数声明
void onButtonAPressed();
// 创建对象
DFRobot_HuskyLens huskylens;
DFRobot_SYN6288   syn6288;
DFRobot_URM10     urm10;


// 主程序开始
void setup() {
	mPython.begin();
	Serial.begin(9600);
	Blynk.connectWiFi("wyk", "12345678");
	Blynk.config("K17p1QRPt3A0voW0giwzOT5HiTTu6KMR", IPAddress(116,62,49,166), 8080);
	buttonA.setPressedCallback(onButtonAPressed);
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_TAG_RECOGNITION);
	syn6288.begin(&Serial1, P0, P1, P2);
	display.setCursorLine(1);
	display.printLine("连接成功");
}
void loop() {
	Blynk.run();
}


// 事件回调函数
 BLYNK_CONNECTED() {
	while (1) {
		digitalWrite(P9, LOW);
		if (((digitalRead(P9))==1)) {
			display.fillScreen(0);
			display.setCursor(42, 22);
			display.print("求救");
			Blynk.email("28294889@qq.com", "求救", mind_l_DiMing[mind_l_DiMing.size()-1]);
			delay(1000);
			digitalWrite(P9, LOW);
		}
		yield();
	}
}
void onButtonAPressed() {
	mind_l_DiMing.clear();
	while (1) {
		huskylens.request();
		if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
			syn6288.playText("前方红灯", 0);
			delay(2000);
		}
		if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {
			syn6288.playText("前方绿灯", 0);
			delay(2000);
		}
		if (huskylens.isAppear(3,HUSKYLENSResultBlock)) {
			syn6288.playText("前方可直行", 0);
			delay(2000);
		}
		if (huskylens.isAppear(5,HUSKYLENSResultBlock)) {
			syn6288.playText("前方即将左转", 0);
			delay(2000);
		}
		if (huskylens.isAppear(4,HUSKYLENSResultBlock)) {
			syn6288.playText("此地为人民路", 0);
			mind_l_DiMing.push_back("人民路");
			delay(2000);
		}
		if (huskylens.isAppear(6,HUSKYLENSResultBlock)) {
			syn6288.playText("此地为解放路", 0);
			mind_l_DiMing.push_back("解放路");
			delay(2000);
		}
		if (huskylens.isAppear(8,HUSKYLENSResultBlock)) {
			syn6288.playText("前方有人行道", 0);
			delay(3000);
		}
		if ((((urm10.getDistanceCM(P14, P13))>=3) && ((urm10.getDistanceCM(P14, P13))<=8))) {
			syn6288.playText("前方有障碍物,请小心", 0);
			delay(3000);
		}
		yield();
	}
}

	                    				

项目反思:

    本项目因为缺少雕刻机等,没有做外壳,可以配上外壳安装在盲人的拐杖上。喇叭可以用耳机代替,定位也可以采用GPS的形式。二哈识别如果能识别人等,那可能会更好些,这样盲人就知道前方是何物体等,还有可以做天气语音播报等等,其实可以做很多,也欢迎大家不断完善本项目,更好地服务盲人群体。

Makelog作者原创文章,未经授权禁止转载。
0
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]