×

制作可以检测墙壁和用户周围移动的Arduino设备

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-07-06

李郝荫

分享资料个

描述

 

 

首先——感谢DFRobot为这个项目提供大部分零件!

 
pYYBAGOIM3aAD6GNAACUiWu3yPo897.jpg
 

主要目标:

  • 制作一个可以检测墙壁和用户周围移动的 Arduino 设备。

     

     
    poYBAGOIM3mAAsjRAABLBuoy1P0077.png
    一如既往,我的不会这么好。
     

    对于那些没有玩过游戏的人来说,这是用于导航关卡和避开游戏中敌人的雷达/地图系统。

    当然我不能让我的像游戏中的那样先进,但我可以让它绘制用户周围的区域并检测一些运动!

    它全部由现有技术制成。

     
    poYBAGOIM4GATEZ1AABGxt9xmFw370.png
     

    好吧,我知道接下来的 18 个小时我不会感到无聊。

    现在,在阅读那里的“微波炉”时,您可能会想“这是什么……”但不要担心——它的输出功率很低,对人类无害——如DFRobot 维基页面所述

    首先,将 I/O 扩展板连接到 Arduino 主板上——这很简单,只需匹配引脚并牢固但小心地将其推入即可。

     
    pYYBAGOIM46AdcEQAACehRrOYT4352.jpg
     

    微波传感器连接到 I/O 板数字引脚布局上的 TX 行,确保 VCC 与 VCC、GND 与 GND 等相匹配……

     
    pYYBAGOIM5GAAJ2OAAA4Wn3N-A0359.jpg
    IMG_5770
     
     
    poYBAGOIM5OAAzGKAAA1-88Srvo787.jpg
    IMG_5769
     

    OLED 屏幕连接到扩展板上的 I2C 引脚。

     
    poYBAGOIM5aAPg9nAACEL3dSvYE180.jpg
     
     
    pYYBAGOIM5qANMgIAABUkuTpoak562.jpg
    IMG_5463
     
     
    poYBAGOIM52AP92VAABjd9srLts023.jpg
    IMG_5767
     

    在这一点上,最好在每个超声波传感器上分别用 F/B/R/L 标记——这样你就知道哪个连接到哪个引脚。

    超声波传感器连接到数字引脚:

    前端超声波引脚:前端触发引脚 = 11 前端回波引脚 = 12

    Back ultrasonic pin: Back trigger pin = 9Back echo pin = 10

    右超声波针:右触发针 = 7 右回波针 = 8

    左超声波针:左触发针 = 5 左回波针 = 6

    VCC/GND 引脚可以放置在 I/O 板上相应线上的任何位置。

    连接好所有硬件后,您需要使用 A>B USB 电缆将 Arduino 连接到 PC 并安装Arduino IDE

    启动 IDE 并从我的 GitHub获取代码

    感谢Adafruits 方便的 OLED 指南获取屏幕代码,感谢DFRobots wiki 页面获取微波传感器代码。

    代码都带有注释以显示它在做什么。但这里有一个概述:

    从本质上讲,它从每个传感器进行测量,一个向前,一个向后,一个向左,一个向右。这给出了他们每个人到墙壁(或任何其他物体,但想法是让他们检测墙壁)的距离,然后将这个距离处理到屏幕上的一个位置,然后绘制为一条线来表示墙壁以及它离中心有多近——中心是用户所在的位置。

    这应该显示用户周围墙壁的非常基本的视图——它会随着用户四处移动而移动和调整。

    微波传感器在此期间也在前方进行检测——当它检测到运动时会在屏幕上显示一个“X”——微波传感器的巧妙之处在于它会检测穿过非金属物体的运动;所以透过薄壁它应该显示另一边的运动。

    在 IDE 打开的情况下,转到工具 > 开发板并选择 Arduino UNO。

    接下来转到 Sketch > Include Library > Manage Libraries 并搜索并安装以下内容:

    • MsTimer2
    • Adafruit_GFX
    • Adafruit_SSD1306

    现在您可以将代码放入并保存项目,按 CTRL+R 验证/编译以检查代码是否一切正常,然后按 CTRL+U 将其上传到 Arduino 板。

    快速测试一下然后拔下插头,现在可以插入电池组来操作设备。

    然后是时候使用 Blu-tack/Sugru 和 Tie wraps 的组合将所有硬件放在 Nerf Blast Shield 上了——就像这样:

     
    poYBAGOIM5-AUPmeAAAyTIjIlQY030.jpg
    IMG_6106
     
     
     
     
     
    poYBAGOIM6OAWN7OAAAgDwHF3JQ404.jpg
     
    1 / 2IMG_6107
     

    并附上一个 Nerf——就像这里:

     
    pYYBAGOIM6aAOmYeAABCYzNBZlc123.jpg
    IMG_6108
     
     
     
     
     
    poYBAGOIM6qAIlwuAAAdW5nX-dg905.jpg
     
    1 / 2IMG_6109
     
     

    还没有蛇!还没结束!

    我对这个项目的结果感到非常满意——它在映射用户周围的区域方面工作得很好,即使只是在非常基本的水平上有很多小故障。

    与我的大多数项目一样,这可以/应该被视为原型/实验性的东西。

    一路上我学到了很多东西,对未来的项目应该很方便,并希望能激励其他人!

    请随意使用设计代码并对其进行改进,或者让我知道我可以做出的任何改进。

    这是一个很棒的项目,可以从事并从中获得一些乐趣,当然它远不及游戏中的项目先进;也许有一天我会想出一种方法来从自上而下的角度查看人们的视锥和建筑物的布局。

    一天。

     
     
     

     


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

评论(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:'制作可以检测墙壁和用户周围移动的Arduino设备',//标题 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);