×

用于家庭自动化的机器人灯开关

消耗积分:0 | 格式:zip | 大小:0.03 MB | 2022-11-14

王秀兰

分享资料个

描述

今天我将向您展示我是如何解决自动照明的超级烦人的问题,当无法更换电灯开关或切换到智能灯泡时。解决方案是制作一个机器人化的盖子,让我的笨灯开关更智能!

在过去的几年里,我一直在对我的公寓进行各种家庭自动化升级,以使其更加智能,但始终有一个我无法解决的明显问题:自动化我的天花板灯。

因为我租了公寓,所以我能做的改变有限。起初我寻找智能灯泡安装在我的天花板聚光灯中,但因为它们太多了,所以真的很贵。增加成本因素​​是,在我国找不到具有智能家居功能的特殊类型的灯泡连接器,所以我不得不进口灯泡。这将显着增加成本,并且每次灯泡烧坏并且我需要更换它们时都会变得非常麻烦。

另一种选择是安装一个智能开关,在我看来,无论连接灯泡的成本和可用性如何,它都会更智能。但再一次,我无法对公寓进行任何永久性更改,这包括使用电源电压运行和更换电灯开关。

虽然我喜欢我能做的智能家居升级,但它们痛苦地提醒着我想要的升级,但不能。我可以不再生活在家庭自动化的困境中,并决定用我知道的最好的方式来解决这个问题,那就是制造一个机器人。

第 1 步:概述

首先,我建议您观看视频,了解开发过程和最终的电灯开关。

此构建中将包含三个主要组件:

  • 机械设计,使用开关和调光器手动重新创建我
  • 用于与 Home Assistant 或任何其他 MQTT 服务器通信的控制电子设备
  • 编程,使逻辑自动化并将一切联系在一起

构建和配置项目后,可以通过四种主要方式控制灯光:

  • 通过手机、平板电脑、电脑或任何你可以访问家庭助理的东西。我将它设置为本地服务器,因此即使互联网断开连接它也能继续工作,这很重要
  • 通过 Google Assistant 的语音,它将命令传递给 Home Assistant。这仅在您拥有有效的互联网连接时才有效
  • 通过带有内置按钮的旋转编码器。即使两个互联网都关闭并且我的本地自动化服务器由于某种原因停止响应,这仍将继续工作
  • 控制灯光的最后一种方法是手动控制。因为即使安装了升级,我也可以轻松地推动或转动电灯开关

第 2 步:3D 打印

对于 3D 打印,我使用了白色灯丝来匹配我的墙壁和原始固定装置。以 0.2 毫米层高打印的部分,因为大部分是直壁,这看起来非常好。

随意偏离我的颜色选择和层高,你做你!

您始终可以在此链接中找到最新的 3D 文件。

第 3 步:PCB 和电子产品

我通过将所有组件放置在正面以及仅使用 SMD 组件(电源插孔除外)将 PCB 设计为薄型。我在电源插孔上使用了通孔连接器,以减轻电源线的机械应力。为了使筒形千斤顶也与 PCB 齐平,我修剪了引线并从正面焊接它,而不是 PCB 的背面。

为了使焊接更容易,我建议先从所有较小的组件开始,然后再进行较大的组件,例如旋转编码器和 ECAP。

安装板上的 PCB 支架设计用于容纳厚度为 1mm 的 PCB。我有点希望我订购带有白色阻焊层的电路板,因为如果我没有在最终组装中覆盖电子设备,那看起来真的很酷。您可以做出我在制作 PCB 时没有做出的选择,如果您想使用项目的赞助商 JLCPCB,您可以以 2 美元的价格制造 1-4 层,新用户使用优惠券可获得 18 美元的折扣:https ://jlcpcb.com/DAA

您可以在此处找到我为该项目设计的 GERBER 文件

第 4 步:上传代码

电灯开关本身接收来自 MQTT 服务器的信号,如果您没有自己的设置(在 Raspberry PI 上非常容易),您可以使用 Adafruit IO 等免费选项。

我在本地 Linux 服务器上运行的 Home Assistant 实例上设置了 MQTT 主机。这是超级灵活的,让我对所有控制信号使用 MQTT,并使用 Home Assistant 来让一切变得用户友好。

在图片中,您可以看到下载代码( Github repo )时需要更改的特定设置,以及上传时要在 Arduino IDE 中使用的设置,选择您机器上的 COM 端口。

要上传代码,请按照下列步骤操作:

  • 在您的 FTDI 上传工具上选择模式 FTDI、3V3 和 VREG
  • 如图所示,按下 PCB 接头上的弹簧针
  • 按住闪光灯按钮
  • 按住 RESET 按钮
  • 一秒钟后松开RESET按钮
  • 再过一秒松开 FLASH 按钮
  • 在 Arduino IDE 中按下上传按钮
  • 重置板

上传第一个代码后,您可以选择上传新代码 OTA,此草图的密码是:ESPOTA。如果您要设置 OTA,我推荐本指南。

第 5 步:家庭助理

 
 
pYYBAGNxItSAMghqAADr3-EcY5I420.png
 
1 / 4
 

微控制器连接到 WiFi 和 MQTT 服务器后,可以将其配置为 Home Assistant 中的灯实体。这将使智能伺服开关像市场上的任何其他智能灯泡和开关一样工作,同时保持改变物理世界中光线所需的命令结构和自定义功能。

首先,我在light.yaml文件中添加了以下几行:

- platform: "mqtt"
name: "Smart Switch"
command_topic: "smartswitch/set"
payload_on: "ON"
payload_off: "OFF"
state_topic: "smartswitch/state/status"
brightness_command_topic: "smartswitch/brightness"
brightness_state_topic: "smartswitch/state/brightness"
brightness_scale: 100
optimistic: false

重新启动 Home Assistant 后,智能开关将显示并像任何其他实体一样进行配置。这使我的吸顶灯可以成为来自世界各地的控制器,包括像 Google Assistant 这样的智能扬声器。

第 6 步:总装

现在是时候将它们整合在一起了!

最小的齿轮可以拧到它之前的旋转伺服器上,而较大的伺服器可以拧到主安装板上。所有这些我都使用了随附的伺服螺丝。

PCB 设计用于滑入紧贴的口袋中。您可能需要使用一些力来实现这一点,但如果您感觉到 PCB 弯曲,则说明您使用了太大的力。

我用双面胶带覆盖了安装板的背面,因为我不能在我的公寓里做任何永久性的改变,哈哈。

对于主调光装置,我在张力钉周围盘绕并弯曲了一些铜线,以帮助它们保持在调光转子上。后来我把电线换成了橡皮筋,因为它感觉更安全、更结实。

现在只需将安装板和调光装置安装到旧灯开关上即可。纯粹出于美观的原因,我还为电机和 PCB 添加了一些白色盖子,并让组装看起来不那么忙碌。最后,我在旋转编码器上安装了一个闪亮的银色旋钮。

连接电源,就是这样!


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

评论(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.lene-v.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.lene-v.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);