暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于单片机开发实现多屏工作站控制单元

数据中心知识 2022-05-07
44

记一次联合开发控制单元的案例!


事件大背景


“xx工程"是以县、乡、村三级综治中心为指挥平台、以综治信息化为支撑、以网格化管理为基础、以公共安全视频监控联网应用为重点的“群众性治安防控工程”。它通过三级综治中心建设把治安防范措施延伸到群众身边,发动社会力量和广大群众共同监看视频监控,共同参与治安防范,从而真正实现治安防控“全覆盖、无死角”。因为“群众的眼睛是雪亮的”,所以称之为“xx工程”。


xx单位依托现有的视频技术联合实验室及海量的数据支撑,希望打造一套视频异构融合、视图库+等创新技术的全新作战单元。我们也有幸拿到硬件及I/O控制单元的研发任务!时间紧任务重,公司立即成立研发小组进行专项攻克。


以下是部分细节及项目施工效果图



需要实现的功能单元


  1.  实现人脸识别启动及一键启动!

  2. 中台实现控制单一屏幕面板!

  3. 中台实现控制三网数据传输!

  4. 主机断电后,全部用电器自动关闭!

原理


每个工位经过改造的三台塔式工作站的开关电路,在不影响质保的情况下,利用模块电路将引线拉到中台,保留状态灯;当摄像头捕捉到人脸画面后比对数据库,验证成功后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()方法等等功能暂不展开,若有兴趣,敬请留言或联系我们,我们可以针对性进行交流!


文章转载自数据中心知识,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论