使用Arduino制作一个太阳跟踪系统

使用Arduino制作一个太阳跟踪系统,第1张

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

  传统上,太阳能电池板是固定的,太阳在地平线上的移动意味着太阳能电池板在大多数时间都不能利用最大的能量。为了最大化太阳能电池板的功率,电池板应始终面向太阳。在这个项目中,我们将制作一个太阳跟踪系统,帮助太阳能电池板产生最大的电力。在我们之前的一些文章中,我们建立了简单的系统来 跟踪太阳能电池板和其他太阳能相关项目产生的电力。如果您正在寻找更多关于太阳能的项目,您可以查看这些内容。

  太阳能跟踪器如何工作?

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

  检测太阳的位置:

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

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSq-ANzadAAN2YizlhBU918.png,第2张

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

使用Arduino制作一个太阳跟踪系统,poYBAGLiSqmAEEjnAAF2OeqdekY890.png,第3张

  考虑一个美丽的冬天早晨的场景,太阳从东边升起,因此它比西边有更多的光强度,所以面板向东边移动。它整天都会跟踪太阳,到了晚上,太阳已经向西移动,因此它的强度将比东方向更大,因此面板将面向西方向。

  制作太阳能跟踪器所需的组件

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSqeAYV6KAAXKeKYY5II976.png,第4张

  1 x Arduino Uno

  1 x 伺服电机

  1 x 太阳能电池板

  2 个 LDR

  2 个 10k 电阻器

  跳线

  1 x MDF 板

  伺服电机:

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSqGAYI-BAALq2tEamsI335.png,第5张

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

  光敏电阻 (LDR):

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

  太阳能跟踪器的示意图和连接

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

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSp2ASH09AABih35YXcI854.png,第6张

  组装太阳能跟踪器

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

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSpeACeZFAALXDiJIeBg858.png,第7张

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

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSpOAaejQAAJakLyeBn0766.png,第8张

  下一步是将太阳能电池板与伺服电机连接起来,为此我们需要 L 形装置。为此,我使用的是塑料片,你也可以通过弯曲塑料片或铝片来制作它,最后将太阳能电池板粘在你的装置上。

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSo-AYy70AAP2cSwofkc499.png,第9张

  注意:如果您要为大型太阳能电池板制作跟踪器,那么您应该使用不同的材料制作底座,例如铝或木头。

  现在,我们需要将 LDR 固定在太阳能电池板的相对两侧,为此,我将 LDR 粘在面板上。然后,我将 10k 电阻连接到两个 LDR 的任一引线上,电阻的另一侧应接地。这些充当下拉电阻。LDR 的第二个端子直接连接到 5v 输出。每个 LDR 的输出,我将它连接到 Arduino 的 A1 和 A2 引脚。

使用Arduino制作一个太阳跟踪系统,poYBAGLiSouAQ5CvAARfpmLyz84523.png,第10张

  下一步是连接伺服电机,伺服电机有三根线,即地线、V_in 和信号线。我将 V_in 引脚连接到 Arduino 的 5 伏,接地到公共地,信号线连接到 Arduino 的引脚 9。这就是电路的全部内容。

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

使用Arduino制作一个太阳跟踪系统,poYBAGLiSoeAFMYwAAN9BJddo_Q103.png,第11张

让我们看看代码是如何工作的?

这个项目的完整代码可以在这个页面的底部找到。编写代码之前的第一步是下载伺服库。我们需要一个伺服库来控制伺服的运动。该程序的分步说明如下。

 

#include <伺服.h>
伺服伺服;

 

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

 

int 东 LDR = 0;
int westLDR = 1;
诠释东= 0;
诠释西= 0;
整数错误 = 0;

 

在这里,我为 LDR 分配了模拟引脚 A0 和 A1 引脚,并声明了传感器值的变量。

 

int校准= 0;

 

此变量用于校准系统,如果您在两侧使用完全相同的 LDR,则可以将其保留为零。但是如果您使用不同的 LDR,那么您应该使用它来校准。要进行校准,请按照下一段中的说明进行。

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

 

int 伺服位置 = 90;

 

该变量用于存储伺服位置。

 

无效设置()
{
  伺服.attach(9);
 }

 

在该部分中,我将伺服引脚定义为引脚 9

 

东=校准+模拟读取(eastLDR);  
西 = 模拟读取(westLDR);

 

在循环部分,第一步是使用 Arduino 的模拟读取功能读取 LDR 值并将其存储在东西变量中。

 

如果(东<350 && 西<350)
  {
 而(伺服位置<=150)
  {
伺服位置++;
伺服写入(伺服位置);
延迟(100);
    }

 

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

 

错误 = 东 - 西;

 

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

 

如果(错误> 30)
  {
 如果(伺服位置<=150)
{
伺服位置++;
 伺服写入(伺服位置);
}
  }

 

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

 

否则如果(错误<-30)
  {
 如果(伺服位置>20)
{
 伺服位置——;
 伺服写入(伺服位置);
  }

 

  如果误差为负且小于-30,则意味着西侧更强烈,因此伺服旋转到西侧。

  所以,这就是编码。现在您可以在您的 Arduino IDE 上打开此代码并将草图上传到您的 Arduino。

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSoCAPYp7AAWudOMhT-E328.png,第12张

使用Arduino制作一个太阳跟踪系统,pYYBAGLiSnuAWXDdAACfi1gchRs378.png,第13张

  我希望你喜欢这个项目。它在现实生活中有很多应用,并在许多太阳能农场和个人太阳能利用设置中实施。您可以通过用高扭矩伺服电机替换 5V 伺服电机并使用继电器连接并从外部电源为伺服供电来扩大该项目的范围。如上所述,如果您有更大的太阳能电池板,那么您将不得不使用更坚固的材料,例如铝作为底座。

  代码

  #include

伺服伺服 ;
int 东 LDR = 0;
int westLDR = 1;
诠释东= 0;
诠释西= 0;
整数错误 = 0;
int校准= 600;
int 伺服位置 = 90;
无效设置()
{
  伺服.attach(9);
}
无效循环()
{
  东 = 校准 + 模拟读取(eastLDR);
  西 = 模拟读取(westLDR);
  if (east < 350 && west < 350)
  {
    while (servoposiTIon <= 150)
    {
      servoposiTIon++;
      伺服写入(伺服位置);
      延迟(100);
    }
  }
  错误 = 东 - 西;
  如果(错误 > 15)
  {
    如果(伺服位置<= 150)
    {
      伺服位置++;
      伺服写入(伺服位置);
    }
  }
  else if (error < -15)
  {
    if (servoposition > 20)
    {
      servoposiTIon--;
      伺服写入(伺服位置);
    }
  }
  延迟(100);
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2711435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存