风筝
发表于: 2021-10-12 16:49:51 | 显示全部楼层

现今我们面临的最大危机是由于过度使用化石燃料而导致的气候变化,为了克服这些问题,我们只有一种解决方案就是利用可再生能源。可再生能源是一种从大自然中获取的能源,不会对环境造成不良影响。最突出的一种可再生能源是太阳能。来自太阳的辐射被太阳能电池板收集并转化为电能。输出的电能取决于落在太阳能电池板上的阳光量。


传统上,太阳能电池板是固定的,太阳在地平线上的运动意味着太阳能电池板在大部分时间都不能利用最大的能量。为了最大限度地发挥太阳能电池板的功率,电池板应始终面向太阳。在本篇文章中,我们将制作一个太阳跟踪系统,帮助太阳能电池板产生最大的能量。


太阳能跟踪器如何工作?

你一定想知道它是如何工作的?如前所述,太阳能电池板应面向太阳以利用最大功率。所以,我们的系统有两个步骤,第一是检测太阳的位置,第二是跟着太阳移动。


检测太阳的位置:

我们使用Arduino测量LDR的光照强度,然后比较落在两个LDR上的光照强度。LDR放置在太阳能电池板的边缘,如下图所示。

Solar-Panel.jpg


根据LDR上的光照强度,我们向伺服电机发出信号以引起工作。当落在右侧LDR上的光照强度较大时,太阳能板向右侧转动,如果左侧的强度较高,则太阳能板向左侧转动。

Sun-Tracking-Solar-Panel-Working.jpg

假设在一个美丽的冬天早晨,太阳从东边升起,因此东边的光照强度比西边大,所以太阳能板向东边移动。白天它会跟踪太阳,到了晚上,太阳已经向西移动,因此西边的强度会比东边向大,因此太阳能板将面向西方向。


所需的组件

●    Arduino Uno开发板

●    伺服电机

●    太阳能电池板

●    LDR光敏电阻

●    连接导线

●    10K电阻


伺服电机:

Servo-Motor.jpg

伺服电机用于旋转太阳能电池板。我们使用伺服电机是因为可以精确控制太阳能电池板的位置,并且它可以覆盖整个光照路径。


光敏电阻 (LDR):

光敏电阻器(Light Dependent Resistor)由具有光敏特性的半导体材料制成,因此对光非常敏感。 LDR的电阻根据落在其上的光而变化,并且与光强成反比。也就是说,LDR的电阻会在高强度光下增加,反之亦然。


太阳跟踪器的原理图

电路的连接非常简单。本文使用Arduino Uno开发板作为控制器,并将2个LDR分别连接到模拟引脚A0和A1。 Arduino的引脚9连接到伺服电机。因为,我们使用了5V伺服电机,因此不需要任何外部电源,所有组件都可以很容易地由Arduino供电。所有连接如下图所示。

Solar-Tracking-System-Circuit.png


组装太阳能跟踪器

组装我们的太阳能跟踪器之前的第一步是制作底座。为了制作底座,我将使用MDF纤维板。第一步是从MDF板上切割并制作12 * 8cm和12 * 2cm的矩形块,如图所示。

MDF-Board.jpg


然后将 12 * 2cm 的一块垂直粘贴到 12 * 8cm 的一块,如图所示。

Solar-Panel-Assembly.jpg


下一步是将太阳能电池板与伺服电机连接,为此我们需要L形装置。为此,我使用了一块塑料,最后将太阳能电池板粘到您的装置上。

L-Shaped-Contraption.jpg


现在,我们需要将LDR贴在太阳能电池板的两侧。然后,将10k电阻连接到两个LDR的任意一端,电阻的另一侧应接地。它们充当下拉电阻。 LDR的第二个端子直接连接到5v输出。LDR的输出,将其连接到Arduino的A1和A2引脚。

Arduino-based-Solar-Panel.jpg


下一步是连接伺服电机,伺服电机有三根线,即地、V_in 和信号线。 将V_in引脚连接到Arduino的5V,地连接到公共地,信号线连接到Arduino的9脚。

现在,我们所要做的就是组装所有组件。 首先,将Arduino粘在底座上。 然后使用胶枪将伺服电机连接到垂直部分。 最后,将伺服电机固定到太阳能电池板,并用螺丝固定。

Sun-Tracking-Solar-Panel.jpg


跳转到指定楼层
风筝
发表于: 2021-10-12 17:25:46 | 显示全部楼层

代码说明

在编写代码前,首先需要下载伺服电机库。我们需要一个伺服电机机库来控制伺服电机的运动。下面详细介绍了程序。

  1. #include <Servo.h>
  2. Servo servo ;
复制代码

首先,包含了伺服库的头文件,并创建了一个伺服对象,将其命名为“servo”。

  1. int eastLDR = 0;
  2. int westLDR = 1;
  3. int east = 0;
  4. int west = 0;
  5. int error = 0;
复制代码

本文LDR连接到了模拟引脚A0和A1,然后声明了传感器值相关的变量。

  1. int calibration = 0;
复制代码

此变量用于校准系统,如果您在两侧使用完全相同的LDR,则可以将其设置为零。但是如果您使用不同的 LDR,那么您应该使用它来校准。


串口打印传感器值,然后在中午检查每个传感器的读数或在太阳能电池板正上方放置一个光源。如果读数显示相同的值,那么您可以保持原样,如果显示任何差异,则必须在此处复制这些值。

  1. int servoposition = 90;
复制代码

该变量用于存储舵机位置。

  1. void setup()
  2. {
  3.   servo.attach(9);
  4. }
复制代码

在本节中,将伺服电机引脚定义为引脚9。


  1. east = calibration + analogRead(eastLDR);  
  2. west = analogRead(westLDR);
复制代码

loop()函数中,首先使用Arduino的analogRead()函数读取LDR值,并将其存储在变量east和west中。

  1. if(east<350 && west<350)
  2.   {
  3. while(servoposition<=150)
  4.   {
  5. servoposition++;
  6. servo.write(servoposition);
  7. delay(100);
  8.     }
复制代码

if条件是将太阳能电池板转回东侧,即如果两个 LDR 都读取低值,则面板向东移动。

  1. error = east - west;
复制代码

在这里,我们计算东西方读数之间的误差。如果误差值为正,则意味着东面具有更高的强度,如果误差值为负,则西面具有更高的光强度。所以,根据这个误差值,我们可以将舵机旋转到低强度侧。

  1. if(error>30)
  2.   {
  3. if(servoposition<=150)
  4. {
  5. servoposition++;
  6. servo.write(servoposition);
  7. }
  8.   }
复制代码

如果误差为正且大于 30,则表示东侧强度更大。系统会检查舵机的起始位置,如果小于150度则向东旋转。您可以根据您的系统调整这些角度。

  1. else if(error<-30)
  2.   {
  3. if(servoposition>20)
  4. {
  5. servoposition--;
  6. servo.write(servoposition);
  7.   }
复制代码

如果误差为负且小于 -30,则意味着西侧光照更强,因此伺服电机向西旋转。


以上就是本文的代码部分。现在您可以在Arduino IDE上打开此代码,然后上传到Arduino中。

Solar-Panel-using-Arduino.jpg


希望您喜欢这个项目。它在现实生活中有很多应用,并且在许多太阳能发电站和个人太阳能利用设置中得到实施。您可以通过用大扭矩伺服电机替换5V伺服电机并,或者使用继电器连接它,以及从外部电源为伺服供电来扩大该项目的应用范围。如果遇到任何问题,请随时在本帖下面回复。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-21 19:51 , Processed in 0.076809 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表