Arduino 项目:太阳能跟踪器

        在本文中,您将逐步学习如何使用 光敏电阻和舵机制作双轴太阳能跟踪器 Arduino 项目。在这个项目中,我们将使用一些光敏传感器来跟踪阳光,并将利用舵机将太阳能电池板引导到可提高其效率的区域。

此项目所需的组件

序号部件名称描述数量备注
1Arduino UNOArduino UNO R31
2舵机微型舵机 - SG902
3        光敏电阻LDR(光敏电阻)传感器4
4电阻10k欧姆电阻4
5面包板迷你面包板1

光敏电阻的工作原理

        光敏电阻。实际上,它是一种光敏设备。当光线照射到它上面时,电阻会减小。在这个项目中,我们使用 4 个光敏电阻来检测阳光。

        根据上方两个光敏电阻和下方两个光敏电阻的读数差额,调整垂直方向的舵机角度,根据左边两个光敏电阻和右面两个光敏电阻的读数差额调整水平方向的舵机角度,从而更好地放置太阳能电池板,以最大限度地提高其效率。

接线图

注意

1.光敏电阻之间要使用隔断将各个光敏电阻之间分隔开来。

2.在实施项目时应该注意调试光敏电阻之间的距离。

代码

#include <Servo.h>


Servo horizontal; //水平方向电机
int servoh = 180;
int servohLimitHigh = 175;
int servohLimitLow = 5;
// 65 degrees MAX

Servo vertical; //垂直方向电机
int servov = 45;
int servovLimitHigh = 60;
int servovLimitLow = 1;

// LDR pin connections
// name = analogpin;
int ldrlt = A0; //LDR top left 
int ldrrt = A2; //LDR top rigt 
int ldrld = A1; //LDR down left 
int ldrrd = A3; //ldr down rigt 

void setup() {
  horizontal.attach(9);//水平方向舵机接9号管脚
  vertical.attach(10);//垂直方向舵机接10号管脚
  horizontal.write(180);//初始化水平方向舵机为180度
  vertical.write(45);//初始化垂直方向舵机为45度
  delay(2500);
}
void loop() {
  int lt = analogRead(ldrlt); // 上左光敏电阻
  int rt = analogRead(ldrrt); // 上右光敏电阻
  int ld = analogRead(ldrld); // 下左光敏电阻
  int rd = analogRead(ldrrd); // 下右光敏电阻
  int dtime = 10; //检测时间
  int tol = 90; 
  int avt = (lt + rt) / 2; // 顶部两个光敏电阻读数平均值
  int avd = (ld + rd) / 2; // 下方两个光敏电阻读数平均值
  int avl = (lt + ld) / 2; // 左边两个光敏电阻读数平均值
  int avr = (rt + rd) / 2; // 右边两个光敏电阻读数平均值
  int dvert = avt - avd; // 检测上下两组光敏电阻读数差异,这个差异决定了垂直舵机的转向角度
  int dhoriz = avl - avr;// 检测左右两组光敏电阻读数差异,这个差异决定了水平舵机的转向角度

  if (-1 * tol > dvert || dvert > tol)
  {
    if (avt > avd)
    {
      servov = ++servov;//顶部传感器值大于底部值,舵机角度增加。
      if (servov > servovLimitHigh)
      {
        servov = servovLimitHigh;//转动角度大于最大值时角度设置为最大值。
      }
    }
    else if (avt < avd)
    { servov = --servov;//顶部传感器值小于底部值,舵机角度减小
      if (servov < servovLimitLow)
      {
        servov = servovLimitLow;//转动角小于最大值时设置为最小值。
      }
    }
    vertical.write(servov);//转动舵机。
  }
  if (-1 * tol > dhoriz || dhoriz > tol) // check if the diffirence is in the tolerance else change horizontal angle
  {
    if (avl > avr)
    {
      servoh = --servoh;
      if (servoh < servohLimitLow)
      {
        servoh = servohLimitLow;
      }
    }
    else if (avl < avr)
    {
      servoh = ++servoh;
      if (servoh > servohLimitHigh)
      {
        servoh = servohLimitHigh;
      }
    }
    else if (avl = avr)
    {
      delay(5000);
    }
    horizontal.write(servoh);
  }

  delay(dtime);

}

Mixly源程序:

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值