本文首发于DF创客社区,作者:云天
原文链接:http://mc.dfrobot.com.cn/thread-296401-1-1.html
【设计背景】 当在公园、郊区等偏僻区域或黑夜无人情景,发生突发事件,手机等通讯设备被抢、丢失或未携带等,需报警求救。在这种孤立无援情况下,我们急需报警求救设施。
根据以上需求,相关部分可在以上这种环境下设置智能报警路灯。
【设计思路】
1、路灯配置智能终端(手机),利用人脸识别技术,采集人脸信息,后台记录(减少谎报),采集成功后,开启报警页面。
2、利用超声波检测到报警人,点亮路灯,并利用路灯发出求救信号,扩大求救范围。
【设计草图】
设计草图
【演示视频】
报警端演示
后台显示报警人
首先根据设计思路,准备好制作智能报警路灯所需的材料,清单和说明如下表和下图所示。
【电路设计】
为了方便编写程序,先设计智能报警路灯的电路连接关系,电路原理图如下图所示。
# 程序流程图设计
在写程序之前,先梳理一下思路,设计程序流程图,如下图所示。
##硬件程序流程图
##APP程序流程图
#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();
}
}
报警主控设备使用一部旧的VIVO手机,APP编写使用MIT APP Inventor2汉化版。
#首页