×

智能家居安全系统开源分享

消耗积分:0 | 格式:zip | 大小:0.07 MB | 2022-10-28

杨福林

分享资料个

描述

描述

我们认为,没有某种形式的安全系统,任何智能家居都是不完整的。这只是我们安全系统的原型,在设计最终确定之前,硬件和软件将进行许多修改。无论如何,这里是我们一直在努力的一瞥。

过程

第 1 步:构建硬件

首先收集上面零件列表中列出的所有硬件。我们将从键盘和 LCD 威廉希尔官方网站 开始,然后转到触发器(运动传感器、距离传感器和蜂鸣器)威廉希尔官方网站 。

键盘和 LCD 的威廉希尔官方网站 非常简单。您可以使用面包板来构建此威廉希尔官方网站 ,但我们发现将所有组件直接连接到 Builder Base 更简单。

使用 7 MM 跳线并从左到右将键盘的引脚连接到构建器底座上的端口。因此,键盘最左边的引脚连接到 GP0,最左边的第二个引脚连接到 GP1,依此类推。

现在,将 LCD 上的 Vcc 和 GND 端子连接到 Builder Base 上的 5V 和 GND 端口,然后将 LCD 上的 SDA 和 SCL 引脚连接到 Builder Base 上的 SDA 和 SCL 端口。

**在 I2C LCD 的背面应该有 6 个引脚。其中4个是5v、GND、SDA和SCL引脚,另外两个用于亮度。这两个引脚应该连接在一起,但如果不是,则需要连接它们。否则,您的 LCD 将不会亮起。**

使用下面列出的原理图和面包板视图作为参考。

 

 
 
 
pYYBAGNY07CALVbOAAA3GvIIzsk900.png
 
1 / 2
 

现在让我们组装触发器威廉希尔官方网站 。我们建议为该威廉希尔官方网站 使用面包板,因为它可以更轻松地为所有组件供电。

拿起你的面包板,将 GND 和 Vcc 导轨分别连接到 Builder Base 上的 GND 和 5V 端口。

 
 
 
poYBAGNY07WAXzxgAAAqoN9RacE144.png
 
1 / 2
 

现在,让我们连接运动传感器。将 VCC 和 GND 引脚连接到面包板上的 5V 和 GND 导轨。将数据引脚连接到 Builder Base,如下所示:

pYYBAGNY07eAYpVNAAATfu7OzsY241.png
 

现在,我们将连接蜂鸣器。将蜂鸣器上的 GND 引脚连接到面包板上的 GND 导轨,并将正极引脚连接到 Builder Base,如下所示:

poYBAGNY07mAOCr1AAASE06SDKo838.png
 

最后,我们将连接距离传感器。再次,将距离传感器上的 Vcc 和 GND 引脚连接到面包板上的 5v 和 GND 导轨。现在将 Echo 和 Trigger 引脚连接到构建器底座,如下所示:

poYBAGNY07uAI2YvAAAaDricqow198.png
 

恭喜!安全系统所需的所有威廉希尔官方网站 现已完成!

第 2 步:构建固件

由于我们在这个项目中使用了两个 Builder Base,我们需要构建两个单独的固件文件。

首先导航到固件生成器并创建一个名为“安全键盘”的新固件。

pYYBAGNY08CACuVsAAAczfpjo4k304.png
 

单击“+添加硬件”按钮并添加 LCD 和 4x3 键盘。

 
 
 
poYBAGNY08OAfXa8AAAZ1uQie_M600.png
 
1 / 2
 

 

poYBAGNY08aAHpUHAAA2QvZwlv8485.png
 

现在,单击 LCD 设备并从驱动程序下拉菜单中选择“Generic LCD2004 Display (I2C)”驱动程序。

pYYBAGNY08iAXiQ8AABBs9oRAZo154.png
 

配置驱动程序如下:

I2C 地址:0x27

布局:2x16

pYYBAGNY08qAGMweAABENPIPMKM187.png
 

现在,我们将配置 4x3 键盘。您会注意到 4x3 键盘有 12 种服务需要配置。您可以通过单击左右箭头来循环浏览这些内容。

 
 
 
poYBAGNY08-AbFHLAAAlW856Ans203.png
 
1 / 2
 

对于每项服务,您必须选择驱动程序以及服务的行/列引脚。每个服务对应于键盘上的一个按钮。按照下表配置所有 12 项服务。

poYBAGNY09KAAobtAACKZ8-QeQc973.png
 

配置完所有服务后,保存固件!

现在,创建另一个名为“Security Triggers”的固件文件。

 
 
 
poYBAGNY09WAGDHKAAAWHEEnbL0893.png
 
1 / 2
 

现在,单击“+ 添加硬件”按钮并将运动传感器、距离传感器和模拟输出设备添加到您的文件中。像我们一样命名它们。

 
 
 
pYYBAGNY09eASgNCAAAM--0qWTA382.png
 
1 / 3
 

对于运动传感器,从驱动程序下拉菜单中选择 HC-SR501 驱动程序。

poYBAGNY09yAWX0sAAB9tUf8pgI814.png
 

配置驱动程序如下:

引脚:GP0

poYBAGNY096AXrNXAAA4sglKvzY382.png
 

现在我们将配置蜂鸣器。从驱动程序下拉菜单中选择“GPIO”驱动程序。

poYBAGNY0-GARXFDAAA7g2jpxSs744.png
 

现在我们将配置驱动程序如下:

引脚:GP1

pYYBAGNY0-OAIabbAAA53jUPPyM775.png
 

现在,我们将配置距离传感器。

从驱动程序下拉菜单中选择 HC-SR04 驱动程序:

poYBAGNY0-aAVnPhAAAy4mnZPAk579.png
 

现在我们将配置驱动程序如下:

回声针:GP3

触发引脚:GP2

分辨率(I):1

pYYBAGNY0-uAK9djAABBXfrx3gs960.png
 

**我们的系统在设置中设置为英制。如果您的设置为公制,您可能需要更改分辨率值。**

就是这样,您的安全系统固件文件现已完成。保存并上传您的固件文件。安全键盘固件应上传到连接键盘和 LCD 的 Builder Base,安全触发器固件应上传到连接传感器和蜂鸣器的 Builder Base。

第 3 步:对应用程序进行编程

对于这个应用程序,我们将引导您了解所涉及的基本逻辑。您可以按照我们的描述构建应用程序,或者您可以下载该应用程序并将其导入您的应用程序列表。

这是安全系统应用程序:

**请注意,此安全系统应用程序处于高度原型状态,无法完美运行。我们将在未来几个月内更新此应用程序以更有效地工作。**

在本说明中,我们将把应用程序分为四个主要部分:1. 代码集,2. 代码输入/评估,3. 传感器输入,和 4. 布防警报倒计时

poYBAGNY0-6AUpgyAAC2TbdoQ-E668.png
 

在当前状态下,当应用程序启动时,您需要通过仪表板界面设置密码。这发生在应用程序的代码集部分。

 
 
 
pYYBAGNY0_CAM76fAAAnFR6KNwQ050.png
 
1 / 2
 

使用两个自定义代码块设置引脚。一个将仪表板按钮按下转换为数字,另一个将数字存储在全局上下文数组中。

对于Number Convert代码和Set Pin 代码,请查看我们的文档

现在我们来看看程序的代码输入/评估部分。

poYBAGNY0_KAGfPlAABegWPIqkc141.png
 

在这里,我们有一个 4x3 键盘对象连接到另一个数字转换自定义片段。这会从 4x3 键盘对象获取数字输出,并根据接收到的端口将其转换为数字。此数字转换自定义代码段与上面使用的代码段相同。

然后将此数字传递到名为“安全?”的自定义片段中。

 
 
 
poYBAGNY0_eAF17iAAAXG05NjWA412.png
 
1 / 2
 

“安全?” 片段从三个端口获取输入。第一个端口“InNode0”用作布防系统的一种方式。我们通过使用键盘上的“*”键来布防系统如果从该端口接收到触发器,则执行以下代码:

1.案例0:{

2. globalContext.safe = 0;

3.};打破;

第二个端口“inNode1”从数字转换自定义片段中获取数字并将它们存储在输入数组中。当通过此端口接收到值时,将执行以下代码:

1.案例1:{

2. context.entr[context.i] = val2;

3.上下文.i++;

最后,第三个端口用作代码评估的触发器。第三个端口连接到 4x3 键盘对象上的“#”键。当按下“#”键时,它充当输入按钮。你可以在这里看到代码:

pYYBAGNY0_qAJQRYAAB-KLce4CQ761.png
 

这是“安全?”的完整代码 自定义片段:

 
 
 
poYBAGNY0_yALv5RAABbLcd_whQ094.png
 
1 / 2
 

每次按下 4x3 键盘上的一个数字时,此程序部分还会向 LCD 发送一个“*”。每按下一个数字,就会触发“Send *”数据序列,然后将计数加一,范围为 [10 → 16]。此计数对应于 LCD 上的列位置,因此每次输入一个新数字时,在最后一个数字之后输入一个新的“*”。此外,每次按下“#”键时,都会重置此计数。无论如何,这个数字被发送到 LCD 对象上的列位置端口。

然后数据序列触发包含“*”的静态字符串块,并将其发送到 LCD 上的字符串端口。

最后,数据序列触发 LCD 上的“Send to Display”端口,实际上使新消息出现在 LCD 上。

poYBAGNY0_-AH8nWAACdJ8u_puw389.png
 

我们现在来看看程序的传感器输入部分。

 

 
 
 
poYBAGNY1AGAMtz5AAB9W1nX37c110.png
 
1 / 2
 

我们有一个初始触发器连接到一个名为“Set Safe”的自定义片段。当应用程序最初启动时,系统被设置为安全位置,因此警报不会立即触发。

poYBAGNY1AaAFp_bAAAbQA9JAOo577.png
 

这是代码:

1.globalContext.safe = 1;

初始触发器还触发“输入代码”数据序列。此数据序列触发“输入代码:”的静态字符串并将其发送到 LCD 硬件对象。

pYYBAGNY1AmAEmrMAACH6ro-vYI562.png
 

现在,我们将看看所有传感器如何用作警报的触发器。

poYBAGNY1AuAFjxCAABofeOPWg8494.png
 

所有三个传感器,门触点、运动传感器和距离传感器,都通向一个 2 秒的超时对象。然后,此超时对象会导致一个名为 Sound Alarm 的自定义代码片段。

pYYBAGNY1A6AIdQRAABpSul4Q6A664.png
 

此自定义代码段检查 globalContext.safe 变量是设置为 0 还是 1。如果设置为 1,则系统是安全的,并且没有任何反应。但是,如果变量设置为 0,则字符串“Intruder Alert”通过端口“outNode0”发送到“Access G/D Data Sequence”,并通过第二个端口向“Beep Alarm”振荡器对象发送触发器“outNode1”。

pYYBAGNY1BKAPztbAAA_FEbcnJM718.png
 

然后触发“拉伸脉冲”脉冲拉伸器,进而激活蜂鸣器。

pYYBAGNY1BWAeZZTAAAmk1-E6qU862.png
 

如果我们正在输入代码并试图撤防系统,则采用 4x3 键盘上的“#”键的这条路线。

poYBAGNY1BeAE6B1AACIlQTLW3g628.png
 

在 4x3 键盘上“授予访问权限?” 触发自定义片段,如果 globalContext.safe 变量设置为 1,则将字符串“Access Granted”传递给 LCD,并触发“Access G/D”数据序列。

poYBAGNY1BqAC165AABY34XOMDM467.png
 

这是“授予访问权限?”的代码。自定义片段:

1.if(globalContext.safe ===1){

2. return["Access Granted",new Date()];

3.}

最后,我们将看看应用程序的 Arm Alarm Countdown 部分。

pYYBAGNY1B6ASzfYAACeFPPRetE529.png
 

当按下 4x3 键盘上的“*”键时,会触发“倒计时序列”对象,并触发 20 秒超时。这些同时执行。20 秒超时结束后,系统将在“安全?”上设置为“inNode0”。我们之前讨论的块将被触发。

poYBAGNY1CCARkhVAABKKfCT49s031.png
 

倒计时序列对象处理出现在 LCD 屏幕上的 20 秒倒计时。首先,清除 LCD,然后将字符串“Alarm Armed:”发送到“字符串合并”对象。

pYYBAGNY1COALlOhAABrBDaBB3M874.png
 

接下来,数字 20 被发送到数据计数器对象上的值端口。然后将该值传递到数据计数器上的“字符串 B”端口。“Alarm Armed:”+“20”的连接字符串然后通过任意数据序列发送到 LCD。

pYYBAGNY1CWAV-vwAABuc5RfmnE677.png
 

然后触发振荡代码块,计数设置为 20,间隔设置为 1000 毫秒。

然后这会触发数据计数器 20 次,每秒递减一次计数器,直到计数达到 0。每次计数递减时,都会向 String Merge 对象发送一个新值,然后将新合并的字符串传递给“Any Data Sequence”,最终将新字符串“Alarm Armed:”+“(一些新的计数)”到液晶显示器。

pYYBAGNY1CeAPgRCAABrW9pGbyw712.png
 

最后,已同时运行的超时块完成其超时并触发 LCD 上的“清除”端口和“输入代码:”序列。这使系统处于其布防状态,准备好输入密码以解除其布防。

poYBAGNY1CyAM7UeAABwfLC8WME973.png
 

这就是对应用程序进行编程的过程。保存您的应用程序并返回应用程序页面。

第 4 步:映射应用程序

您现在应该回到应用程序页面。

找到您的“安全系统”应用程序并点击播放按钮。

pYYBAGNY1C6AFHD-AAAR7Hq1p8s353.png
 

包含应用程序中所有设备的列表将展开。

poYBAGNY1DGAbrF1AACDzy8l7Ig553.png
 

接下来单击“运动传感器”设备,客户端下拉菜单将出现在右侧。

从下拉菜单中选择运动传感器驱动程序并点击“完成”。

poYBAGNY1DSAbeP5AACDjOUNuNs798.png
 

对其余设备重复相同的步骤。对于此应用程序,每个设备应该只有一个可选驱动程序。

请注意,除了一个状态符号之外的所有状态符号都已更改为绿色复选标记。我们在我们的应用程序中使用了门触点设置,但目前我们没有通过三星 SmartThings 或我们的 Builder Bases 之一设置。因此,您可以将此设备保留为未映射,或者您可以将一个设备与系统配对。

poYBAGNY1DeAK-I0AACEOzGzypk080.png
 

**将固件设备映射到您的应用程序中的对象时,请务必注意,只有相同类型的设备和对象才能映射在一起。例如,使用此应用程序,我们只能选择将带有按钮固件的客户端映射到按钮对象。**

您现在已经完成了应用程序的映射!

第 5 步:运行应用程序!

接下来,点击“保存+运行”

poYBAGNY1DeAK-I0AACEOzGzypk080.png
 

 

poYBAGNY1D2AZtdgAAAQwtdlrCg835.png
 

恭喜!您的安全系统现已完成,玩得开心!

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'智能家居安全系统开源分享',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);