×

超级太阳能跟踪器开源分享

消耗积分:2 | 格式:zip | 大小:0.02 MB | 2022-11-21

吕钢格

分享资料个

描述

背景

对于那些还没有读过故事第一部分的人

因此,当我即将对双胞胎进行改造/大修时,出于机械原因,显而易见的选择可能首先是南塔。它是用东西颠倒的机制建造的。这是一个实验,它告诉我有充分的理由以“正确的方式”构建事物。“双胞胎”是更小的单元,每个单元只有 1.5KW,详细的 CAD 图纸包含在该项目的底部。两座塔为位于北塔上的单个双输入逆变器供电。每个塔都有自己的电池组、太阳能调节器和跟踪计算机。然而,它们都来自位于南塔的同一个 DC 小马面板。这两个都是 24V 系统,而不是像东塔那样的 12V。

如果您想知道我为什么要更换光学跟踪器?这张在部分阴天拍摄的照片显示了这个问题。

所以在我今年的圣诞清单上是来自 GPS 的时间和位置、网络互联网访问(NTP 时间服务器),也许还可以与逆变器聊天以获得太阳能输出。我还希望该装置更紧凑,最好放在一个盒子里,这样我就可以安装在跟踪器框架的背面,与第一个装置中的传感器大致相同。当然,我决心把 OTA 搞好,这样我就不必带着笔记本电脑爬上电源阶梯来更改程序。

更多内存 - 更大的 CPU

随着我在上一个项目中的 UNO 被打包到椽子上,是时候带上 Mega 了。这项工作的其他竞争者是 WeMos (ESP8266),但这将是下一部分。

Mega 芯片的优点在于它有四 (4) 个串行端口,这是芯片中串行通信的梦想。所以我可以连接 GPS 和逆变器以及蓝牙适配器,并且仍然有诊断端口的空间。

它还拥有更多的内存/代码空间,这是在芯片上生成网站的基本项目。

物联网这次将取代 GUI

是的,得到这个程序,这次不把液晶面板放在设备上。一点点,因为它会在塔上,你将无法阅读它。旁边认为将它连接到互联网并让人们看到它一段时间可能会很有趣。

 
pYYBAGN28tOAUW72AAGVDGjI0lQ941.jpg
在以太网盾版上工作的 GUI
 

编码

所以我们丢失了 80% 的 GUI 原始代码。因此,我们获得了一个堆内存空间来删除​​它,但使用了更多的装载量来运行 Web 服务器。

我们你知道我怎么说没有 LCD,我通常在开发过程中作弊并使用一个。特别是当我似乎有办法解决系统中的许多错误时。

 

无论如何,当我开始工作时,这是一个方便的版本。易于拔出,并且 I2C 代码实际上可以留在原处,因此我可以随时将其重新插入以进行基准测试。

我使用 TinyGPS 作为 GPS NEMA 流的解析器。这从 u-blox 提供的大量数据中挑选出了跟踪器所需的 3 位信息。谈论用大锤敲碎花生,买,嘿,你可以一边做该死的光滑花生酱。GPS锁定部分似乎非常重要,它确定数据是否有效,所以我想我可以通过逐渐点亮角落来指示肉丸上的卫星数量。

作为 Arduino IoT 的新手,写网页发生的第一件事就是我的可变内存用完了。嗯,怎么会这样?我没有使用很多有意义的变量。经过一番“诡计多端”和一些阅读后,事实证明“F()”宏是一个方便的工具包,没有它你不应该离开家。这将字符串塞回它们可能属于的“代码段”中。您可以通过代码看到这些内容。我敢说这会让事情变慢一点,但我正在跟踪太阳而不是来袭的 skud 导弹,所以额外的几毫秒不会受到伤害。

我必须为网页设计道歉,非常习惯于在一个大量空闲运行的庞然大物上使用 ASP 来生成我的页面(我是一个老派的纯 HTML 粉丝)。在 Arduino 领域,可怜的旧 CPU 正在尖叫着生成一个基本页面。更好的方法是使用 javascript 卸载到 Web 浏览器,因为主机 CPU 很可能打包至少 10 倍于 Mega 的计算机功率。也就是说,我的页面与 99.9% 的设备/浏览器兼容,因为它是纯 HTML 并且不需要生成其他在线服务。非常适合独立应用。

该网站也是第一个切入点,因为我仍在研究在 Arduino 领域适合我的方法。因此,有很多代码示例 Frankensteined 以及我的一点点展示。

时间的东西有点令人生畏,因为似乎有太多的标准和细节需要结合在一起。最后,我设法弄清楚每个部分的方式和原因,并将计算全部放在同一个时区基础上,无论传入的真相来源是什么。跟踪器通过外部 RTC 使用基于 Internet 的 GPS NTP。这是矫枉过正,但代码是这样编写的,因此您可以在硬件构建中删除时间源,并且软件在很大程度上可以接受。一个问题是,一旦你绑定到一个实时源,你就不能作弊,只需将时钟提前以偏置阵列或补偿角度偏移。您实际上必须使用角度偏移,因为时钟成为绝对变量而不是变量。

无线上网

完成了一个工作网络界面,却发现我真的希望它是 WiFi,谈论任何道路和未知目的地!所以回到 WeMos,无论是作为屏蔽还是通过串行或 modbus RTU 接口的独立接口。另一种选择是外部以太网桥,功率是唯一的问题,因为需要手动绘制大约 100 mA。请注意,经过几次测量后,arduino 以太网防护罩也变成了一只饥饿的野兽。

从我第一次体验 ESP8266 开始,它似乎真的很难生成页面,请注意我一直在使用错误的螺丝刀一端。绝对是您应该将处理加载到更好的 CPU 的示例,或者在我的情况下,只需将螺丝刀保持在正确的方向!

我对 eBay 上瘾意味着很快就会出现一个新的 WiFi 模块,它只有一个 uart、电平转换器,仅此而已。将它连接到 CH340 并从我最喜欢的工具之一向其发送 AT 命令,这让我陶醉在哪里以及如何浪费时间。如果您组织起来并且可以一口气吐出所有响应,那么这些工作非常出色,对于即时构建来说不是那么好,因为当您交换发送模式时会有很大的发送开销。这与 Arduino 以太网屏蔽不同,无论您发送多小块,它似乎都没有受到影响。因此,根据经验教训,我将跟踪器配置页面的生成时间从 10 秒缩短到了几秒。这也是在我侵入已经工作的以太网屏蔽版本之前,首先在概念验证代码中完成的。最终结果是 Mega 的两个版本的代码,

外壳

我决定把除了保险丝以外的所有电子设备都放在一个有透明盖子的盒子里,这样我就可以从下面看到我的 LED 矩阵。Web 界面允许我交换 XY 轴并翻转 +/-,因此我可以将设备放置在任何地方并且仍然可以正常工作。

 
 
 
 
poYBAGN28tyAblAgAAS1ljS2jso510.jpg
 
1 / 4以太网版本在带全坐锁的办公室工作台上完全运行。
 

透明的亚克力板也被用作安装所有板的底盘,因为我希望它对光和微波都是透明的。我没有测试过的一个问题是,如果 GPS 可以看穿太阳能电池板,但是考虑到外部天线的 B 计划。单个底盘层迅速变成了 2 层,并带有所有额外的衣架以实现功能蔓延。

以太网屏蔽有点像操作时刻,RJ45 连接器靠在外壳边缘。嗯,也许我们需要将插座更改为垂直安装,或者更改为可以安装在电子设备顶层的不同类型的屏蔽。最后,我将代码分成两个版本,以太网和 ESP 通过串行接口连接。同一个网站不同的输出界面。

我以为我的大盒子里会有很多空间,但功能蠕变是一个杀手,电源、RTC、矩阵显示、GPS 和蓝牙模块。我的一位同事总是建议留出 25% 的额外机柜空间,只要你不想多放 30% 就可以了 :)

在塔上,到跟踪器上的 N/S 和 E/W 电机的执行器电缆必须重新布线,使用的电缆要少得多,因为它们不需要连接到塔底部的控制箱。当我们刚刚用完盒子里的空间时,保险丝将安装在外部,没什么大不了的,而且断开设备进行维修也是一个很好的点。我将使用一条临时电源线并将设备连接到跟踪器的底部并进行老化测试。我不会工作,但不会连接到电机。我可以监控它并确保它在交换之前是 100%。

功耗是唯一出现的问题。总功耗高于预期。我实际上认为可能存在短路,但对 12V 的输入电源进行了一些测量并发现。

  • 总功耗为 250mA,这在当今时代已经很高了。
  • 全球定位系统 60 毫安
  • WiFi 60 mA - 这两个造成了近 50% 的烧毁!
  • LED显示10-20毫安
  • 传感器 20 mA
  • RS-232 10mA
  • 剩下的(Mega 和 H 桥)90 mA

现在在 24V 下,整个批次消耗大约 150 mA,因此我们的夜间燃烧将在 1.2 到 2.1 AH 之间,具体取决于季节。嗯,我们需要它来适应 7/9AH 电池的 20% 放电深度。差不多,但如果你将 6 的魔法系数应用于太阳能设计,我需要将电池提升到 20AH ish(不会发生!)。

所以 - 我认为这可能是一个糟糕的时刻。可能出现的结果:

  • 我可以将所有代码放入 ESP 芯片中并节省大量电力。
  • 我可以实现这样的省电代码来在一夜之间关闭 GPS。
  • 可以在没有 GPS 的情况下运行系统并使用 NTP over WiFi 来获取时间吗?

 


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

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