×

使用粒子光子跟踪自行车运动

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

分享资料个

描述

概述

无论您是想吹嘘自己能跑多快,还是只想跟踪周末的自行车旅行,这个项目都可以让您密切关注距离、速度和加速度。两个粒子光子和一个霍尔效应传感器用于测量自行车后轮胎的转数。这允许计算距离、速度和加速度。

硬件

电气设置

对于电子元件设置,我们需要两个粒子光子和两个小型无焊面包板。可以从 Particle 以每个 19.00 美元的价格购买粒子光子我们还需要一些跳线、两个4-AA 电池座、各种电阻器、一个霍尔效应传感器和一个OLED 显示屏。有关电路图,请参阅原理图部分。

 
pYYBAGNiLhOAQKFtAA1e9Qqv1dQ015.jpg
没有电池组的车速表光子电路设置
 
 
poYBAGNiLkeAM32tABR1ir8BlSI483.jpg
无电池组的数据采集光子电路设置
 

安装设置

对于安装设置,我们使用 3d 打印机制作外壳。.stl 文件可以在附件部分找到。

 
pYYBAGNiLmiAYGncAAu8JLuikDU923.jpg
车速表外壳
 
 
poYBAGNiLmuAZMJOAAEQChQaefk426.jpg
数据采集​​光子外壳
 

根据您的自行车以及您想要安装外壳的方式,您可能需要编辑一些尺寸。这种特殊的设置为自行车把立部分使用了 0.5 英寸的直径。

 
poYBAGNiLoGAac6XAAs_l8k684g479.jpg
本项目使用的自行车把立颈
 

拉链用于将支架固定在自行车上,但也可以使用更永久的选项,例如金属系带。

将电气和安装设置放在一起

速度计光子[显示模块]

也许这个项目最困难的部分是将电气元件设置安装到外壳中。建议从速度计中使用的面包板上取下侧翼片,以获得额外的空间。由于塑料向上偏转,面包板应滑入到位并“锁定”。

 
poYBAGNiLoSAAQ2RAAFa3fu-xDw088.jpg
速度计外壳中带有侧片的面包板
 

我们还需要将电缆连接到显示器。我们使用连接到公对公线的母对母线,因为由于高度限制,实际上没有多少母对公线可以安装在外壳中。母线对母线是这样捆绑的:

 
pYYBAGNiLqaAOVzyAAy_3DQSDNM778.jpg
母-母线束
 

然后连接并固定公-公线:

 
poYBAGNiLs-AWVADABAwkDU7Z80706.jpg
母-母和公-母线束
 

如果两者之间的连接不是很牢固,您可能需要在此交叉点将两个捆绑包粘在一起。我们使用的那些可以很好地卡入到位,并且需要最少的胶带。将电缆组件放在一起后,将其穿过速度表前面的插槽:

 
pYYBAGNiLu-AZlryAAuN9SguW9c005.jpg
通过槽馈线组件
 

你可能想用一根小绳子来引导它。图中还有插入底部隔间的电池组。它只是滑入到位并由门固定到位。现在是最困难的部分,将电路安装到上部隔间中。我们建议使用胶带将电线固定下来,这样它们就不会滑出面包板。或者,您可以只焊接电线,但这会耗费更多时间。非常有组织的电路插入:

 
pYYBAGNiLvqAAjDVAAbF2VWT3p0057.jpg
上层车速表
 

同样,请注意面包板的尺寸已减小以适应电线。最后一件事是连接屏幕。印刷了一个小的间隔块以调整屏幕高度。您可以不使用此块,但如果您想调整屏幕与您在自行车上的角度,这是一种方法。我们打印的垫片看起来像:

 
poYBAGNiLv-ABLiOAASCtWjp03I696.jpg
屏幕间隔
 

在使用垫片固定屏幕后,或仅使用原始模型中的配置后,速度计光子几乎完成。只需将电池组插入支架,然后将其打开!

 
pYYBAGNiLxiALvOmAAj6qCdeuDc223.jpg
完成车速表支架
 

数据采集​​光子[霍尔效应传感器模块]

这种组装比 Speedometer Photon 容易得多。一旦电路组装好,面包板就可以滑入到位。唯一需要的预防措施是首先将 LED 连接到面包板上,将其穿过其中一个外壳孔,然后用您喜欢的粘合剂将其固定到外壳上。这可以在最终构建中看到:

 
poYBAGNiLzmAXeuKAA1dt0mthFM768.jpg
完成数据采集光子
 

然而,在我们完成这个组装之前,我们还有一点路要走。组装电路后,建议使用胶带将电线固定到面包板上。或者,可以为此使用焊料。

 
poYBAGNiL2SAWhX3AA9uYkUlBfM326.jpg
把电线绑下来
 

将电线用胶带固定好后,将霍尔效应传感器和电池组电线从外壳中剩余的 2 个孔中引出。

 
poYBAGNiL4CAX0RgAAxiL_xdxDY124.jpg
馈线
 

电线应如上图所示。现在,剩下要做的就是把面包板滑进去,把电池组滑进去,然后把门关上。此外,请记住将代码闪存到光子。将两个 Photon 电路组装并放置在它们的外壳中后,我们就可以开始将它们安装到自行车上。

安装

速度计光子

唯一的步骤是将外壳用拉链系在自行车上,如图所示:

 
pYYBAGNiL-iAYmgQACmMr-ybWkc766.jpg
完成车速表
 

数据采集​​光子

这个 Photon 很容易安装,但在霍尔效应传感器方面需要一些额外的工作。首先,如图所示将外壳安装到自行车上:

 
poYBAGNiMAGAVfltAA3a_frAyWs944.jpg
数据采集​​光子安装
 

安装外壳后,拿起电线并将它们粘在框架上,然后将它们捆绑在一起。为了获得出色的外观和组织,可以将电线编织成这样:

 
poYBAGNiMASAWUONAAD25vAKiUU616.png
最佳电线编织示例(来源:BoatUS)
 

将电线拉向自行车后部。您应该以如下所示的霍尔效应传感器放置结束:

 
pYYBAGNiMDOASTQaABQXWvgcI9g160.jpg
霍尔效应传感器放置
 

照片中还可以看到磁铁的位置。对于这个项目,我们首先尝试使用传统的自行车辐条磁铁,但发现它们的强度不足以触发霍尔效应传感器。我们想出的解决办法是使用更坚固但更丑陋的磁铁。安装磁铁的重要细节是确保它们与车轮中心的距离相等,并且沿车轮的转动方向等距。我们选择使用 4 个磁铁,但代码设计为可以更改控制磁铁数量的单个变量,以自定义自行车上使用的磁铁数量。存在的磁铁越多,速度表的精度就会越高。但是,请记住,Photon 收集数据的速度不会超过其时钟速度(120MHz)。完成的设置如下所示:

 
pYYBAGNiMJSAVsO3ACCBZSu8O3M312.png
霍尔效应传感器安装完成
 

至此,整个组装完成。成品应如下所示:

 
pYYBAGNiMRyAAMF5ADkC0umX8vk090.png
完成组装
 

计算

为了估计自行车的速度,需要位置对时间的导数的离散形式。速度通过位置变化除以时间变化来估计。为了找到距离,使用轮子的旋转次数和轮子每转所经过的距离。霍尔效应传感器模块和安装在自行车车轮周围的磁铁用于确定转数(霍尔效应传感器通过磁铁的次数除以磁铁的数量),并使用卷尺来确定转数。车轮转动所经过的距离。对于从霍尔效应传感器模块到显示模块的每次数据提交,都会有3.3第二个时间窗口来观察通过。当第一次通过时3.3检测到第二个窗口(通过零),计时器启动并增加通过之间的时间。3.3第二个窗口用于确定平均速度的参数是通过零后的通过次数以及通过零和最终通过之间的时间。使用上面列出的参数通过此处的代码计算速度:

calculatedvelocity = ((simplefloat-(1))*(calibration/(magcount*timepass*5280*12/(3600*1000))));
// simplefloat - Number of Passes in 3.3 second window including pass zero
// calibration - Distance traveled per rotation of the wheel in Inches
// magcount    - Number of Magnets on the Wheel
// timepass    - time passed between pass zero and the final pass in milliseconds
// conversions - 12 inches in 1 foot
//               5280 feet in 1 mile
//               3600 seconds in 1 hour
//               1000 seconds in 1 millisecond
    1 Line, 8 Comment Lines

对于提交到 Thingspeak 实时图表的数据,原始传递次数和16.5秒时间窗口(Thingspeak 需要 15 秒之间的数据提交)用于确定平均速度。由于提交给 Thingspeak 的数据的时间窗口很大,因此错误时间被认为是微不足道的。

Thingspeak 实时图表

速度是使用 webhook 集成实时绘制的,以将粒子发布数据从光子发送到 Thingspeak。使用 MATLAB,速度数据用于绘制行驶距离、速度、加速度和空闲时间的图表。通过运动学方程的离散计算并使用未知常数为零的假设来确定行进距离和加速度。空闲时间是霍尔效应传感器打开但没有明显运动(速度小于 1 MPH)的时间。用于该项目的设备的所有这些图表都可以在此处公开访问:Thingspeak Graphs, 注意:有时 Thingspeak 无法正确加载 MATLAB 代码并返回错误,需要刷新页面才能解决此问题。以下是图表页面的示例,其中包含 2018 年 9 月 11 日的测试数据:

 
poYBAGNiMR6AC7dzAADnjmekg-w724.jpg
Thingspeak 输出图示例 (11/09/2018)
 

 


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

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