欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Arduino 项目:太阳能跟踪器

Arduino 项目:太阳能跟踪器

2024/10/25 1:31:31 来源:https://blog.csdn.net/sxstj/article/details/139657370  浏览:    关键词: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 MAXServo 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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com