亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于物联网 (IoT) 的太阳能跟踪器

组件和用品

Arduino Mega 2560
× 1
用于 Arduino 的以太网屏蔽 (Wiznet W5100)
× 1
SG90 微伺服电机
× 2
LDR,5 Mohm
× 4
DHT22 温度传感器
× 1
迷你太阳能电池板
× 1
电阻 330 ohm
× 4
通孔电阻,10 ohm
× 2
电阻 220 ohm
× 1
5 毫米 LED:红色
× 1

应用和在线服务

myDevices Cayenne
Arduino IDE

关于这个项目

该项目提出了一种简单且低成本的物联网解决方案,用于监测和控制智能双轴太阳能跟踪器系统以进行性能评估。

拟议的基于物联网的太阳能跟踪器系统如图 1 所示。它是一个双轴太阳能跟踪器,可以使用 LDR 传感器自动旋转以跟踪太阳的位置,或由用户通过物联网应用程序的仪表板手动跟踪。系统首先通过 LDR 传感器检测太阳位置(光强度)并将数据发送到控制器(Arduino Mega 板)。后者然后处理这些数据以命令伺服电机(SM1 和 SM2)保持光伏面板向太阳旋转。生成的光伏电压和电流、温度和湿度的值也通过相关传感器发送到 Arduino。接下来,安装有 Arduino 并允许其连接到 Internet 的以太网扩展板会将 Arduino 已获取和/或处理的数据发送到云(网络服务器)。最后,太阳能跟踪器数据,包括 LDR 传感器、光伏功率、温度和湿度,通过预先创建的小部件在物联网监控应用程序中实时显示。 IoT 监控应用程序是使用 Cayenne myDevicesplatform 设计的。一旦用户从他的计算机或智能手机连接到互联网,他就可以在物联网应用程序的仪表板中可视化其相关小部件中的所有太阳能跟踪器数据。因此,用户拥有与光伏电池板的环境和性能相关的必要数据。此外,在手动模式下,伺服电机将从仪表板中的相关小部件获取角度方向。因此,用户可以控制他的系统以寻求最佳环境条件并从 PV 面板提取最大能量。 IoT 应用程序还被编程为当传感器达到预定义的阈值时发送通知警报(短信或电子邮件)。

硬件设计

如图 2 所示,物联网太阳能跟踪器系统由一个光伏面板、两个伺服电机、四个 LDR 传感器、一个分压器电路、一个温湿度传感器、一个 LED 和 Arduino Mega 板组成。

使用的 PV 面板尺寸为 115 毫米 x 85 毫米,输出功率为 1.6 W,可产生高达 6 V 的电压。两个 180 度伺服电机用于驱动太阳能跟踪器,它们由 Arduino 板通过 PWM 引脚 5 和引脚控制6.左右(LR)伺服电机(MG996R)在垂直轴(东/西)上旋转太阳能跟踪器,而上下(UD)伺服电机(SG90)在水平轴上旋转太阳能跟踪器(南/北)。

四个 LDR (Cds GL5528) 用于感应太阳的位置,并已固定在面板的四个角。 LDR 传感器通过从 A0 到 A3 的模拟引脚连接到 Arduino。 LDR 是一个电阻,其值随着入射到其表面的光强度增加而减小。 LDR 传感器被设计为分压器电路,如图 2 所示。分压器输出电压由 Arduino Mega 的微控制器从模拟值转换为 0 到 1023 之间的数字值。因为模拟到数字微控制器的转换器(ADC)以 10 位编码。 LDR传感器电路中串联电阻值为330Ω。

温度和湿度通过 DHT22 传感器测量。 DHT22 内置了一个热敏电阻和一个电容式湿度传感器,用于测量温度和相对湿度。其温度范围为 -40 至 80 °C,精度 <±0.5°C,湿度范围为 0 至 100 %,精度为 ±2%(最大 ±5%)。该传感器使用一根信号线将数据传输到 Arduino(数字引脚 2),两根线用于电源。

PV 电压和电流是通过分压器电路测量的,该电路也用作负载,由两个 10 欧姆的串联电阻组成。分压器电路输出连接到 Arduino 的模拟引脚 A4。此外,连接到数字引脚 3 的 LED 在系统电路中反映太阳能跟踪器的模式状态(手动或自动)。

Arduino Mega with ATmega2560 微控制器用作嵌入式控制器,与 Arduino 以太网扩展板以及监控平台进行交互。 TheEthernet Shield 安装在 Arduino 板上方,必须通过 RJ45 电缆与 Wi-Fi 路由器(或 PC)连接,如图 3 所示。 Ethernet Shield 基于 Wiznet W5100 以太网芯片,提供TCP 和 UDP 协议的网络(IP)堆栈。

软件设计

一个。 Arduino IDE

Arduino 是一个开源电子原型平台,具有易于使用的硬件和软件。 Arduino 平台提供了一个集成开发环境 (IDE),其中包括对 C 和 C++ 编程语言的支持。在这项工作中使用的 Arduino 板由用作代码编辑器的 IDE 进行编程,程序代码可以通过 USB 电缆上传到微控制器,如图 3 所示。 Arduino Mega 板被利用实现基于物联网的太阳能跟踪器的所有软件要求。

b. myDevices 卡宴

MyDevices 是一家提供物联网解决方案的公司。它为物联网提供端到端平台。在我们的项目中,我们将重点关注来自 myDevices 的解决方案之一 Cayenne。该工具允许开发人员、设计师和工程师构建物联网原型。 Cayenne 使用消息队列遥测传输 (MQTT) 协议将任何设备与 Cayennecloud 连接起来。连接后,用户可以通过创建的小部件从设备向 Cayenne 仪表板发送和接收数据。 MQTT 是一种基于 TCP/IP 协议的发布订阅消息协议。发布-订阅方法使用消息代理,负责将消息传递给客户端。 MQTT 是用于向 Cayenne 云或 Cayenne 控制的设备发送信息的 API。此连接中的消息代理是云,它管理发送和接收数据的不同客户端(传感器和执行器)。

要将 MQTT 与 Cayenne 结合使用,我们需要使用 Cayenne 库。对于 Arduino,可以从 IDE 的库管理器安装 CayenneMQTT 库。为了对基于 Cayenne IoT 平台的 IoT 应用程序进行编程,我们将利用预定义的功能。例如,要在 Cayenne 云和配备以太网模块的 Arduino Mega 之间建立连接,我们调用 CayenneMQTTEthernet 库,在该库中我们声明应从 Cayenne Dashboard 获取的身份验证信息(用户名、密码和客户端 ID)。然后,在程序的设置部分,我们调用Cayenne.begin() 功能来建立与 Cayenne 仪表板的连接。对于每个执行器,我们创建一个函数,其参数介于 0 到 31 之间,命令式称为 CAYENNE IN (VIRTUAL CHANNEL) .对于每个传感器,我们创建一个函数,其参数介于 0 和 31 之间,强制称为 CAYENNE_OUT (VIRTUAL_CHANNEL) .在程序的循环部分,我们调用了预定义的函数Cayenne.loop() ,这个函数本身调用函数CAYENNE_OUTCAYENNE_IN。 顾名思义,虚拟通道是一个物理上不存在的通道,它表征了可视化或命令小部件。它允许它们与相应的传感器或执行器链接。

c. 嵌入式 软件设计

嵌入式软件是将嵌入 Arduino Mega 以在以太网模块和 Cayenne 云之间进行交互的部分(参见附录)。其设计如下:

(i) 基于物联网的太阳能跟踪器有两种功能模式:手动和自动。在 Cayenne 仪表板中创建的按钮具有在两种模式之间切换的作用。当它不活动时,选择手动模式,否则选择自动模式。此外,Arduino 代码中建立了一个功能,可以恢复按钮的状态。系统电路中的LED反映了该开关的状态。

因此,为了让控制器知道所选的工作模式,我们只需要测试 LED 连接的引脚的状态。例如,如果LED状态为低,则控制器调用手动模式功能执行,否则调用自动功能。

(ii) 如果选择手动模式,用户可以直接控制伺服电机的位置,由 L-R 伺服电机或由 U-D 伺服电机从南向北定位光伏板。控制由物联网应用仪表板中伺服电机的相关小部件组成。

在这种模式下,控制器调用 Cayenne.loop() 函数本身调用所有函数CAYENNE_IN ,包括那些与伺服电机相关的,来执行。 Cayenne.loop() 函数还将调用与传感器链接的所有函数 CAYENNE_OUT 来执行。与 LDR 传感器、光伏电流、电压和功率、温度和湿度相关的数据将发送到服务器,以便在物联网应用程序中的相关小部件中对其进行可视化。

(iii) 如果选择自动模式,将执行图 4 所示的算法。该算法首先读取 LDR 传感器返回的模拟值。然后,它处理这些数据以命令伺服电机将 PV 面板移向太阳位置。考虑到基于垂直轴的太阳能跟踪器运动,比较左侧两个 LDR 和右侧两个 LDR 的平均值,如果左侧接收到更多光,则 PV 面板将向该方向移动(顺时针)通过 LR 伺服电机。后者在差值结果在-10 和10 之间时停止。该范围用于稳定控制器和降低伺服电机的功耗。否则,如果右侧的一组 LDR 接收到更多光,则 PV 面板将通过 L-R 伺服电机沿该方向(逆时针)移动,并将继续旋转,直到差异结果在 [-10, 10] 范围内。同样的方法用于基于水平轴的太阳跟踪器运动,比较顶部的两个 LDR 和底部的两个 LDR 的平均值。

除了在自动模式下,控制器还将调用 Cayenne.loop() 功能将太阳能跟踪器数据发送到物联网应用程序。

d. 物联网监控应用的开发

(i) 与 Cayenne 物联网平台的硬件接口

要将包括传感器和执行器在内的硬件与 IoT 平台连接起来,我们需要执行以下步骤:

+ 创建帐户后登录 Cayenne myDevice 网站(图 5(a))。

+ 然后,点击 Cayenne API 中的“Bring Your Own Things”(图 5(b))。

+ 从 Crete App 复制 MQTT 凭据(用户名、密码和客户端 ID)(图 6),并将它们粘贴到 Arduino 源代码中,如前所述。成功编译并将整个代码上传到 Arduino Mega 后,在 Arduino IDE 中打开 Serial Monitor 以获取 Cayenne 日志打印(图 7)。一旦我们的设备上线并连接到 Cayenne,上一页(图 6)就会自动更新,我们将在在线仪表板中看到我们的设备,如图 8 所示。

+ 然后,要连接传感器和执行器,即创建它们的小部件,单击“添加新...”,选择“设备/小部件”并单击“自定义小部件”(图 9)。然后,选择一个小部件并填充所有相关设置(通道号必须与代码中的一样),最后点击“Add Widget”将其添加到设备的仪表盘中。对于我们来说,我们为所有传感器选择了“value”小部件,“Button”小部件用于模式切换和伺服电机的“滑块”小部件。

最后,图 10 说明了设计用于监控太阳能跟踪器数据的 IoT 应用程序。与太阳能跟踪系统建立连接后,传感器数据可以在其关联的小部件上可视化,可以从开关按钮选择跟踪模式(自动或手动),以及通过小部件控制伺服电机的角度。传感器数据也可以通过修改其设置中的表示类型以图形形式获取,或者只需单击小部件上方的图形图标即可。

(ii) 警报创建

监控系统中最重要的标准之一是它能够发送通知警报,以在发生与受监控设备相关的事件时通知用户。为此,我们利用 Cayenne 的一项功能向我们的 IoT 应用程序添加警报,我们可以在其中对应用程序进行预编程以发送通知警报(短信、电子邮件或两者)或执行指定的操作。例如,创建温度警报以在监测到的温度达到阈值时向用户(或收件人)发送电子邮件通知,如图 11 所示。要创建警报,请单击“添加新的”。 ..”并选择“触发器”,然后设置事件及其动作,最后单击“保存”将其添加到仪表板。

原型

图 12 展示了处于分离和组装状态的太阳能跟踪器原型。它由光伏面板、-R 和 U-D 伺服电机和 LDR 传感器组成。面板一侧连接到 U 型伺服电机,另一侧带有轴承,以确保太阳能跟踪器绕水平轴旋转时具有更好的灵活性。该组件连接到 L-R 伺服电机。 LDR 传感器固定在空心圆柱体内面板的四个角上。如果面板不垂直于太阳,至少一个 LDR 会被周围圆柱体造成的阴影覆盖。因此,光强会有差异。最佳方向是当所有 LDR 传感器中的光强度相等时。图 13 显示了基于 IoT 的太阳能跟踪器系统的整个原型,很明显,硬件部分中所有报告的组件都已用于构建它。

获得的结果的更多细节,请参阅此链接中的论文:https://link.springer.com/chapter/10.1007%2F978-3-030-64565-6_4

代码

  • 基于物联网的太阳能跟踪器系统的嵌入式代码
基于物联网的太阳能跟踪系统的嵌入式代码Arduino
/**************************************************** ***************** 项目:基于物联网的太阳能跟踪系统/嵌入式软件 Aboubakr El Hammoumi/ [email protected]********* ****************************************************** ****/#define CAYENNE_PRINT Serial#include  //CayenneMQTT 库#include  //伺服电机库#include  //DHT 库#define DHTTYPE DHT22#define DHTPIN 2DHT dht(DHTPIN,DHTTYPE);//MQTT 凭证 char username[]="498d2d00-afe2-11ea-883c-638d8ce4c23d";char password[]="ab4a8f92d94033c01f6e18ce1d8a84c07c840000000000" 93bf-d33a96695544";伺服servo_x; //上下伺服电机intservoh=0;intservohLimitHigh=170; INT 伺服限制低 =10;伺服servo_z; //左右伺服电机 int Servov =0; int servovLimitHigh =170;int servovLimitLow =10;int topl,topr,botl,botr;int threshold_value=10;浮动输出;无效设置(){ Serial.begin(9600); Cayenne.begin(用户名、密码、clientID);伺服_x.attach(5);伺服_z.attach(6); dht.begin(); pinMode(3,输出);数字写入(3,低); }void loop(){ topr=analogRead(A2); topl=模拟读取(A3); botl=模拟读取(A4); botr=模拟读取(A5); Vout=(analogRead(A1) * 5.0) / 1023; Serial.println("手动模式");卡宴.loop(); if (digitalRead(3)==HIGH){ Serial.println("自动模式");伺服h =伺服_x.read();伺服 v =伺服_z.read(); int avgtop =(topr + topl) / 2; int avgbot =(botr + botl) / 2; int avgright =(topr + botr) / 2; int avgleft =(topl + botl) / 2; int diffhori =avgtop - avgbot; int diffverti =avgleft - avgright; /*根据水平轴跟踪*/ if (abs(diffhori) <=threshold_value) {servo_x.write(servoh); //停止伺服上下 }else { if (diffhori> threshold_value) { Serial.println(" x - 2 ");伺服_x.写(伺服-2); //顺时针旋转CW if (servoh>servohLimitHigh){servoh=servohLimitHigh; } 延迟(10); }else {servo_x.write(servoh +2); //逆时针如果(servoh  threshold_value) {servo_z.write(servov -2); //CW if (servov>servovLimitHigh){servov=servovLimitHigh; } 延迟(10); }else{servo_z.write(servov +2); //CCW if (servov  

示意图


制造工艺

  1. 迷人的物联网:物联网从业者的动力是什么?
  2. 一千万物联网
  3. 物联网和制造业的未来
  4. 将区块链带入物联网
  5. 物联网带来的安全挑战:第 2 部分
  6. 网络安全和物联网:面向未来的物联网安全
  7. 投资于物联网的潜力
  8. 真正的物联网?
  9. 物联网:管理涌入的数据
  10. 物联网仍面临5个挑战
  11. 释放工业物联网的力量
  12. 太阳能追踪器 V2.0