×

太阳能/风能自持物联网开源分享

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

吴湛

分享资料个

描述

介绍

该项目研究使用太阳能或风能为传感器供电,并将其价值传输到云服务,采用部署后不用管的方法。

它遵循Liquid Electricity项目中提出的想法,使用 Blues Wireless 的 WiFi Notecard 将数据传感器、电池和电源数据传输到Adafruit.io云服务。

材料

以下是收集传感器数据并通过Notehub.io传输到云服务的核心系统材料

 
 
 
pYYBAGSAZ7aASTs5AAHsBDmun90527.jpg
 
1 / 7
 

核心系统

核心系统分为两个主要任务:电源/传感器监控和数据传输到云端。

我们使用 Adafruit FeatherWing Doubler 将 ESP32 V2 微控制器(主机)连接到 Adafruit FeatherWing INA219 以监控发电。它还通过 I2C 连接到 Adafruit LC709203F 以监控电池状态,最后通过 I2C 连接到 OLED 显示器以更新状态。

数据流如此镜像所显示。

poYBAGSAZ7iAEE5xAABO8macuQY348.jpg
 

传感器和监控数据由 ESP32 主机获取并格式化,然后传输到记事卡 WiFi,后者将其发送到Notehub.io ,并从那里路由到其目的地Adafruit.io。

系统每 10 秒采样一次数据并将其发送到 Notehub.io。每分钟都会通过 MQTT 路由将示例数据发送到Adafruit.io 。

有效负载经过 JSON 编码并通过 JSONATA 进行转换以传送到云服务;有关更多信息,请参阅使用 JSONATA 进行路由和数据格式化部分。

Notehub.io 设置

将数据发送到 Notehub 是一件轻而易举的事情。

有效负载包含三组数据。灯的亮度,电池和电源组。

明亮的亮度...

电池组包含电池百分比、温度和电压,来自 LC709203 电池监控器。

电源组由总线电压、电流、负载、分流和功率数据组成,来自 INA219 器件。

太阳能基地系统具有以下有效载荷。

//Light data.
lightRead(&lightDataRecord);
J *light = JCreateObject();
JAddNumberToObject(light, "lum", lightDataRecord.lum);
JAddNumberToObject(light, "ir", lightDataRecord.ir);
JAddNumberToObject(light, "full", lightDataRecord.full);
JAddNumberToObject(light, "visible", lightDataRecord.visible);
JAddNumberToObject(light, "lux", lightDataRecord.lux);
JAddItemToObject(body, "light", light);
//Battery monitor data
J *battery = JCreateObject();
readBattery(batteryStatus, bufTemp, battery);
JAddItemToObject(body, "battery", battery);
//Water turbine power data
J *power = JCreateObject();
readPower(inPowerStatus, power);
JAddItemToObject(body, "power", power);
JAddItemToObject(req, "body", body);

The风电基地系统具有以下有效载荷。

//Air sensor data
readAirFlow(&airDataRecord);
J *air = JCreateObject();
JAddNumberToObject(air, "raw", airDataRecord.raw);
JAddNumberToObject(air, "mtspersec", airDataRecord.mtspersec);
JAddNumberToObject(air, "mph", airDataRecord.mph);
JAddItemToObject(body, "air", air);
//Battery monitor data
J *battery = JCreateObject();
readBattery(batteryStatus, bufTemp, battery);
JAddItemToObject(body, "battery", battery);
//Wind turbine power data
J *power = JCreateObject();
readPower(inPowerStatus, power);
JAddItemToObject(body, "power", power);
JAddItemToObject(req, "body", body);

有效负载每 10 秒发送一次到 Notehub.io,并通过 MQTT 路由器每分钟发送一次到Adafruit.io 。

Notehub.io 路由和数据格式化

一开始,我为负载中的每个数据组件创建了一个路由(如下所示),但这是Adafruit.io服务的过载。

然后,我了解到Adafruit.io可以处理作为 JSON 对象传递的数据组。使用这种格式,我能够将路由数量减少到 3 条,并将有效负载中传递的组数据保持在一起。

pYYBAGSAZ7-AcqvLAAErSPEawBs649.jpg
 

需要使用 JSONATA 格式化数据,下面是每个路由的 JSONATA 代码:分别是 AdafruitFlow、AdafruitPower 和 AdafruitBattery。

太阳能有效载荷如下:

LIGHT
{ "feeds":{
  "light.lum": body.light.lum,
  "light.ir": body.light.ir,
  "light.full": body.light.full,
  "light.lux": body.light.lux,
  "light.visible": body.light.visible},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

POWER  
  { "feeds":{
  "power.busvoltage": body.power.Bus,
  "power.current": body.power.Current,
  "power.load": body.power.Load,
"power.shunt": body.power.Shunt,
"power.power": body.power.Power},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

BATTERY
  { "feeds":{
  "battery.batterypercentage": body.battery.Percent,
  "battery.batterytemperature": body.battery.Temp,
  "battery.batteryvoltage": body.battery.Voltage},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

The风电有效载荷如下:

WIND
{ "feeds":{
  "air.raw": body.air.raw,
  "air.mps": body.air.mtspersec,
  "air.mph": body.air.mph},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

POWER  
  { "feeds":{
  "power.busvoltage": body.power.Bus,
  "power.current": body.power.Current,
  "power.load": body.power.Load,
"power.shunt": body.power.Shunt,
"power.power": body.power.Power},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

BATTERY
  { "feeds":{
  "battery.batterypercentage": body.battery.Percent,
  "battery.batterytemperature": body.battery.Temp,
  "battery.batteryvoltage": body.battery.Voltage},
  "location": {
    "lat": 0.0,
    "lon": 0.0,
    "ele": 0.0
  }}

请注意,为了使其成为Adafruit.io 的有效组,添加了没有数据的位置字段。

太阳能

我的第一个尝试是使用两个并联的太阳能电池板,在晴朗的天气产生大约 120 毫安的电流。

这不足以维持系统和为电池充电。我又增加了两个并联面板,导致在晴天时电流增加到 250 毫安。

下面是带有四个太阳能电池板和一个光强度传感器的系统快照,用于测量达到所需电流所需的光强度。

pYYBAGSAZ8OAI2AFAAcAOmXCJ_4721.jpg
 

下图显示了白天记录的电流和电池百分比。

poYBAGSAZ8WAQuTEAABO6hzx0xI557.png
 

请注意,一旦电流达到 180 mA 及以上的阈值,电池就会充电。

pYYBAGSAZ8iAU0GsAABhTAvXH3U227.png
 

在另一天,我们得到了这个数据快照。

poYBAGSAZ8uAeqtfAABNhcc48Zk181.png
 

目前是

pYYBAGSAZ86AHUkgAABYv6VJqVI560.png
 

光传感器返回完整值是

poYBAGSAZ9CAOI_CAABwopvby0Q210.png
 

我们可以注意到,太阳能电池板对白天的光量反应足够,随着日落的临近而减弱。

该系统响应可靠的太阳能。

Adafruit.io 太阳能仪表板

我使用Adafruit.io仪表板创建小部件创建了以下仪表板该小部件显示光特性(Lux、IR、Visible、Full 和 Lum)、电池状态(电压和百分比)和太阳能生成的数据(总线电压、电流和负载)作为仪表。

poYBAGSAZ9SAOSKIAAGGLuEm5Sk422.jpg
 

仪表板每分钟刷新一次。

风力

风力发电系统由两台直流0.1V-5.5V 100-6000RPM微型垂直风力涡轮机组成。

pYYBAGSAZ9uAMtHwAAxevwpBl0c684.jpg
 

该系统提供约 65 至 80 毫安的并联电流;用两个气垫泵吹风。

 

系统无法用如此大的电流充电或自我维持。需要更多并联的涡轮机,或者更大的风力涡轮机。

考虑到鼓风机泵送的空气速度高于 7.23 m/s 的传感器限制。这种风在正常天气的日子是无法获得的,因此很难将任何一天的地面自然风视为良好的能源来源。至少与我使用的涡轮机有关。

Adafruit.io 风仪表盘

在Adafruit.io上创建仪表板既简单又快速。一旦创建了有效载荷组,就可以快速可靠地链接到以下仪表。

此仪表板显示空气(以 mph 为单位的速度、以 m/s 为单位的速度和原始速度)、电池状态(电压和百分比)以及空气风力涡轮机产生的功率(总线电压、电流和负载)。

poYBAGSAZ96AOZW6AAEhT7kgSzg549.jpg
 

风力自持提案

使用连接到地面的风力涡轮机不能提供足够的能量来维持所提供的核心系统。但是,如果我们改变视角并考虑移动系统而不是静态系统,会怎样呢?

pYYBAGSAZ-SACepxAAtVaJ6aO94801.jpg
 

使用穿过车窗的手持式 5V 鼓风机,并连接到万用表,我能够在 65 mph 的速度下测量大约 40-48 毫安的电流。

 

考虑一下,原则上在我们汽车的侧面、顶部或底部安装一个类似的风扇以收集风能,并为 GPS 系统供电,该系统可以提供在我们的高速公路上行驶的车辆的位置。在未来的项目中需要更详细地探索一些东西。

结论

•太阳能依赖于天气,但统计上更频繁地发生,因为我们可以有更多的晴天。在晴天达到发电要求。

•风能是不确定的,因为我们依赖大自然来度过大风天。发电也需要相当大的风速。

Adafruit.io 数据分组

Adafruit.io允许对有效负载中发送的数据进行分组。你可以在这里阅读更多。

使用组减少了对我的数据的请求数量并使其响应更快。


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

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