【脑洞大赛】智能报警路灯
本帖最后由 云天 于 2019-8-11 07:14 编辑【设计背景】
当在公园、郊区等偏僻区域或黑夜无人情景,发生突发事件,手机等通讯设备被抢、丢失或未携带等,需报警求救。在这种孤立无援情况下,我们急需报警求救设施。
根据以上需求,相关部分可在以上这种环境下设置智能报警路灯。
【设计思路】
1、路灯配置智能终端(手机),利用人脸识别技术,采集人脸信息,后台记录(减少谎报),采集成功后,开启报警页面。
2、利用超声波检测到报警人,点亮路灯,并利用路灯发出求救信号,扩大求救范围。
【设计草图】
设计草图【演示视频】
https://v.youku.com/v_show/id_XNDMwODg5MTAyOA==.html?spm=a2h3j.8428770.3416059.1报警端演示https://v.youku.com/v_show/id_XNDMwODg5NTEyOA==.html?spm=a2h3j.8428770.3416059.1后台显示报警人
【材料准备】
首先根据设计思路,准备好制作智能报警路灯所需的材料,清单和说明如下表和下图所示。
【电路设计】
为了方便编写程序,先设计智能报警路灯的电路连接关系,电路原理图如下图所示。
【程序设计】
# 程序流程图设计
在写程序之前,先梳理一下思路,设计程序流程图,如下图所示。
##硬件程序流程图
##APP程序流程图
【Arduino Leonardo硬件代码】
#include <DFRobot_LedControl.h>
#include <DFRobot_Ultrasonic.h>
double mind_n_bs;
char mind_s_str;
const byte LedArray_BBlG[] = {//"S"字模
B00111000,
B01100100,
B01100000,
B00110000,
B00011000,
B00001100,
B00100110,
B00011100,
};
const byte LedArray_pFgv[] = {//"O"字模
B00011000,
B00100100,
B01000010,
B01000010,
B01000010,
B01000010,
B00100100,
B00011000};
const byte LedArray_42Se[] ={//“S”字模
B00111000,
B01100100,
B01100000,
B00110000,
B00011000,
B00001100,
B00100110,
B00011100,
};
const byte LedArray_PPNP[] = {B01100110,B11111111,B10011001,B10000001,B11000011,B01100110,B00111100,B00011000};//“心型”图案
DFRobot_LedControl max7219(5, 3, 4);//LED点阵(MAX7219),初始化DIN引脚为5,CS管脚为4,CLK管脚为3
DFRobot_Ultrasonic ultraA0;//模拟超声波
void SOS();
void XianShi();
void SOS()//12引脚上接电磁继电器,控制灯的开关,发出“SOS”莫尔代码
{
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(1500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(1500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(1500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
delay(100);
}
void XianShi()//LED点阵显示内容
{
max7219.show(LedArray_BBlG);
delay(200);
max7219.show(LedArray_pFgv);
delay(200);
max7219.show(LedArray_42Se);
delay(200);
}
void setup() {
Serial1.begin(9600);//主板使用Leonardo,所以蓝牙使用Serial1串口通讯
max7219.begin();
mind_n_bs = 0;
ultraA0.begin(A0);//初始化模拟超声波,接A0引脚。
}
void loop() {
if ((Serial1.available())) {//等待蓝牙接收数据
mind_s_str = Serial1.read();
if ((mind_s_str == 'G')) {//手机人脸验证成功,返回"G",利用灯同时发出报警求救信号SOS
digitalWrite(13, HIGH);
SOS();
}
if ((mind_s_str == 'K')) {
digitalWrite(13, LOW);
mind_n_bs = 0;
}
}
if (((ultraA0.getDistanceCm() < 50) && (mind_n_bs == 0))) {//超声波测试有人,向手机APP发送信息,并在LED点阵上显示关怀图案
mind_n_bs = 1;
Serial.println("t");
max7219.show(LedArray_PPNP);
}
if(mind_n_bs == 0){//平时LED点阵显示“SOS”标识
XianShi();
}
}APP设计
报警主控设备使用一部旧的VIVO手机,APP编写使用MIT APP Inventor2汉化版。
【路灯APP】#首页#操控页
#人脸识别成功后显示报警按钮
#APP逻辑设计部分
##屏幕初始化,完成连接蓝牙和使用注册百度人工智能获取的信息进行人脸识别连接
##利用定时器,检测Arduino+超声波+蓝牙,发送过来的信息,以“t”,作为有人靠近的标识。如检测到,进入操作页面。
##人脸拍照识别
人脸检测成功,显示报警按钮
点击按钮,进行报警,并向Arduino发送标识“K",完成报警。
##其中可进行语音操控,如拍照、拨打报警电话
【后台服务APP】
用来显示报警人的人脸及相关信息,并增加人脸识别功能,识别出报警人。
#主页面,组件设计
#逻辑代码设计
##屏幕初始化,连接百度人脸识别。
##点击”显示报警人信息“按钮
##”上一个“”下一个“按钮,显示报警人。
#人脸识别
##点击”报警人验证“,可拍照,然后与记录的报警人进行比对
##代码
制作过程
#制作底座,主框架
利用装修剩余木角料,使用热熔胶进行固定。
#安装台灯
将旧台灯内容电路进行改造,将台灯电路断开,引出两个线,将与电磁继电器连接,利用Arduino进行控制。并安装在主体最上端,路灯照明部分。
#安装电磁继电器
#安装LED点阵屏、超声波、Arduino主控板、扩展板、蓝牙模块
#安装充电宝
#安装手机
最终成品
# 后续思考
1、设想实现实时检测人脸,自动拍照
2、使用其它设备代替手机,比如树梅派+摄像头+通信模块等
{:6_213:}{:6_215:}
页:
[1]