记一次联合开发控制单元的案例!
事件大背景
“xx工程"是以县、乡、村三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。它通过三级综治中心建设把治安防范措施延伸到群众身边,发动社会力量和广大群众共同监看视频监控,共同参与治安防范,从而真正实现治安防控“全覆盖、无死角”。因为“群众的眼睛是雪亮的”,所以称之为“xx工程”。
xx单位依托现有的视频技术联合实验室及海量的数据支撑,希望打造一套视频异构融合、视图库+等创新技术的全新作战单元。我们也有幸拿到硬件及I/O控制单元的研发任务!时间紧任务重,公司立即成立研发小组进行专项攻克。
以下是部分细节及项目施工效果图



需要实现的功能单元
实现人脸识别启动及一键启动!
中台实现控制单一屏幕面板!
中台实现控制三网数据传输!
主机断电后,全部用电器自动关闭!
原理
每个工位经过改造的三台塔式工作站的开关电路,在不影响质保的情况下,利用模块电路将引线拉到中台,保留状态灯;当摄像头捕捉到人脸画面后比对数据库,验证成功后3台主机+显示器+大屏同时上电自启,同时保留中台手动关闭某一设备的功能(主机已放置定制的保密柜中,禁止无关人员触碰),即进入工作状态;当有且只有3台主机都关闭的状态下,触发执行中断程序,有序安全的关闭掉大屏,显示器及其他用电器的电源,至此整套设备重新进入人脸识别带检测状态,等待再次唤醒!
过程
中台的设计,CAD绘图及打样试产
经过内部讨论,接口单元定稿后,这一部分便由老板亲自操刀,由于老板设计过几个机房建设的项目,CAD用的也是相当哇塞,介于本次外观结构比较简单,更是easy拿捏
中台逻辑控制单元的选型及外设
核心控制单元考虑到综合稳定性能,选用的是性能稳如老狗的C51系列单片机,利用内嵌的2个中断实现一键开机和自动关机的大循环;
N路继电器控制单元可手动控制用电器或触发程序自动执行;
中控台兼备LED信号同步功能,能时刻掌握各个主机及显示器是否处于工作状态!
树莓派实现人脸识别功能,兼备权限审计功能,只有经过后台验证的人员才能有权限开启本套设备的电源系统,保证使用本套系统的唯一性。
中台编程控制的功能实现限于篇幅,只示例开机中断,手动控制等函数
项目:中控台人脸识别及电器控制单元
日期:2020.2
描述:外部中断0接收脉冲、或者电平信号,开启设 备,外部中断1接收脉冲、或者电平信号,关闭设备。
#include 包含特殊寄存器
定义新变量
#define uchar unsigned char
#define uint unsigned int
单片机P1、P2、P3端口变量声明 默认端口状态为高电平
/***继电器控制2个外部中断,执行2套动作****/
sbit ExtTrigOn = P3^2; //外部中断0,接收开机信号
sbit ExtTrigOff = P3^3; //外部中断1,接收关机信号
sbit HUB = P2^0; 控制排插
sbit MPDP = P2^1; //控制拼接屏
sbit DisPlay1 = P2^2; //控制27寸显示器1
sbit DisPlay2 = P2^3; //控制27寸显示器2
sbit CameraPower =P2^7; //控制摄像机电源
sbit PC1 = P2^4; //控制电脑开机运行
sbit PC2 = P2^5; //控制电脑开机运行
sbit PC3 = P2^6; //控制电脑开机运行
sbit Keympdp = P1^0; //按钮控制拼接屏开关
sbit Keydp1 = P1^1; //按钮控制27寸显示器开关
sbit Keydp2 = P1^2; //按钮控制27寸显示器开关
sbit KeyCam = P1^4; //按钮控制摄像头电源开关
//中断信号(按键控制)
sbit MasterControl = P1^3; //总控开
sbit GeneralControl= P1^5; //总控关
用到的功能函数模块
void KeyProcess(); //按钮控制
void KeyDelayMs(unsigned char t); //延时消抖函数
void McuInitial(); //MCU上电初始化
void OnProcess(); //开机动作
void OffProcess(); //关机动作
主函数
void main(void)
{
while(1)
{
McuInitial(); //单片机上电初始化函数
KeyProcess(); //按钮控制大屏、摄像头等函数
}
}
按键控制总控开机、拼接屏开关、显示器1、2开关
void KeyProcess()
{
Keympdp = 0x01;
Keydp1 = 0x01;
Keydp2 = 0x01;
KeyCam = 0x01;
MasterControl = 0x01;
单片机I/0及中断初始化函数
void McuInitial(void)
{
P0=0XFF; //P0口全部为高电平
P1=0XFF; //P1口全部为高电平
P2=0XFF; //P2口全部为高电平
CameraPower=0; //摄像头电源打开
EA = 1; //开启总中断
IT0 = 1; //中断跳变采用边沿触发(下降沿触发)
IT1 = 1; //中断跳变采用边沿触发(下降沿触发)
EX0 = 1; //开启外部中断0
EX1 = 1; //开启外部中断1
IP=0x04; //设置外部中断1为高优先级
}
外部中断0中断执行接到开机指令进行开机动作子函数
void ExtTrigOn0(void) interrupt 0
{
EX0=0; //关闭外部中断0,放置在执行的过程中再次发生中断
KeyDelayMs(10);
EX0=1; //打开外部中断0
OnProcess(); //执行开机子函数
}
外部中断1中断执行接到关机指令进行关机动作
void ExtTrigOff1(void) interrupt 2
{
EX1=0; //关闭外部中断1,放置在执行的过程中再次发生中断
KeyDelayMs(10);
EX1=1; //打开外部中断1
OffProcess(); //执行关机子函数
}
延时函数,用于按键消抖 大致等于10ms
void DelayUs2x(unsigned char t)
{
while(--t);
}
void KeyDelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
秒级延时函数
void delay_m(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)< span="">
for(j=0;j<21738;j++);
}
本项目经过多方配合通力合作,经过1个月的研发实施已如期完美验收,后续也在*市2个区得到了加推,经过第一版的实施经验,第二版又根据具体需求增加了新功能,并且性能也得到了更好的优化!
关于树莓派实现人脸识别功能模块,鼠标跨主机穿越模块,KeyProcess()方法等等功能暂不展开,若有兴趣,敬请留言或联系我们,我们可以针对性进行交流!




