使用Arduino的太阳追踪太阳能电池板
使用Arduino的太阳追踪太阳能电池板ARDUINO的经过**穆罕默德·阿奇布(Muhammad Aqib)** 2017年1月12日25使用LDR和伺服电机的基于Arduino的Sun Tracking Solar Panel项目在本文中,我们将使用Arduino制作一个太阳追踪太阳能电池板,其中我们将使用两个LDR(取决于光的电阻器)感应光,并使用一个伺服电机自动将太阳能电池板朝着太阳光的方
原文地址:https://circuitdigest.com/microcontroller-projects/arduino-solar-panel-tracker
参考:
- 太阳能板追光装置
- 智能采光实时追日的电能管理系统,此文章在设计上有科学的依据。
- DIY创意家庭:实现LED台灯的智能化,提供软硬件解决方案的设计细节
使用Arduino的太阳追踪太阳能电池板
经过**穆罕默德·阿奇布(Muhammad Aqib)** 2017年1月12日25
使用LDR和伺服电机的基于Arduino的Sun Tracking Solar Panel项目
在本文中,我们将使用Arduino制作一个太阳追踪太阳能电池板,其中我们将使用两个LDR(取决于光的电阻器)感应光,并使用一个伺服电机自动将太阳能电池板朝着太阳光的方向旋转。该项目的优势在于,太阳能电池板将始终跟随太阳光,始终始终面对太阳以保持充电状态,并可以为电源提供最大的功率。该原型非常易于构建。在下面,您将找到有关其工作原理和原型制造方式的完整说明。
Arduino Solar Tracker的必需组件:
以下是使用Arduino构建太阳能跟踪系统所需的组件,大多数组件应在您当地的商店中可用。
- 伺服马达(SG90)
- 太阳能板
- Arduino Uno
- LDR的X 2(光敏电阻)
- 10K电阻器X 2
- 电池(6至12V)
单轴太阳能跟踪器如何工作?
在此项目中,LDR用作光检测器。在详细介绍之前,我们将必须了解LDR的工作方式。**LDR(光敏电阻)**也称为光敏电阻,是一种光敏设备。当光落在其上时,其电阻会降低,这就是为什么它经常在黑暗或光探测器电路中使用的原因。在此处检查基于LDR的各种电路。
两个LDR放置在太阳能电池板的两侧,而伺服电机用于旋转太阳能电池板。伺服器会将太阳能电池板移向电阻较低的LDR,即朝着光线下降的LDR移动,这样它将一直跟随光线。如果两个LDR上都照射有少量光,则伺服器将不会旋转。伺服器将尝试将太阳能电池板移动到两个LDR都具有相同电阻的位置,这意味着两个电阻上的光量会相同,如果其中一个LDR的电阻发生变化,则它将朝较低电阻旋转LDR。查看本文末尾的演示视频。
光敏电阻的检测
A、用一黑纸片将光敏电阻的透光窗口遮住,此时万用表的指针基本保持不动,阻值接近无穷大。此值越大说明光敏电阻性能越好。若此值很小或接近为零,说明光敏电阻已烧穿损坏,不能再继续使用。
B、将一光源对准光敏电阻的透光窗口,此时万用表的指针应有较大幅度的摆动,阻值明显减些此值越小说明光敏电阻性能越好。若此值很大甚至无穷大,表明光敏电阻内部开路损坏,也不能再继续使用。
C、将光敏电阻透光窗口对准入射光线,用小黑纸片在光敏电阻的遮光窗上部晃动,使其间断受光,此时万用表指针应随黑纸片的晃动而左右摆动。如果万用表指针始终停在某一位置不随纸片晃动而摆动,说明光敏电阻的光敏材料已经损坏。
如何使用Arduino构建旋转的太阳能电池板:
要制作原型,您将必须执行以下步骤:
步骤1:
首先,取一小块硬纸板,并在其一端打一个孔。稍后,我们将螺丝插入其中以使用伺服器将其固定。
第2步:
现在,借助胶水或热风枪将两小块纸板彼此固定为V形,然后将太阳能电池板放置在其上。
第三步:
然后将V形的底面连接到小纸板的另一端,在第一步中在小纸板上打了一个孔。
第四步:
现在,将螺丝插入您在卡板上制作的孔中,并将其穿过该孔插入伺服器中。购买时,伺服电机随附螺钉。
步骤5:
现在,将伺服器放在另一块纸板上。硬纸板的尺寸应足够大,以便您可以在其上放置Arduino Uno,面包板和电池。
步骤6:
借助胶水将LDR固定在太阳能电池板的两侧。确保您已将电线与LDR的支脚焊接在一起。稍后,您将必须将它们与电阻器连接。
步骤7:
现在,将Arduino,电池和面包板放在纸板上,并按照下面的“电路图”和“说明”部分所述进行连接。最终的原型如下所示。
电路图和说明:
下面显示了太阳能跟踪arduino项目的完整电路图。如您所见,该电路非常简单,并且可以借助小型面包板轻松构建。
在此Arduino Solar Panel Tracker中,Arduino由9V电池供电,而所有其他部件均由Arduino供电。Arduino建议的输入电压为7到12伏,但是您可以在6到20伏的范围内为它供电(这是极限)。尝试在建议的输入电压范围内为其供电。因此,将电池的正极线连接到Arduino的Vin,将电池的负极线连接到Arduino的地。
接下来, 将舵机连接到Arduino。将伺服的正极线连接到Arduino的5V,并将接地线连接到Arduino的地线,然后将Servo的信号线连接到Arduino的数字引脚9。伺服器将帮助移动太阳能电池板。
现在将LDR连接到Arduino。将LDR的一端连接到10k电阻器的一端,然后将该端连接到Arduino的A0,然后将该电阻器的另一端接地,并将LDR的另一端连接到5V。同样,将第二个LDR的一端连接到另一个10k电阻器的一端,并将该端连接到Arduino的A1并将该电阻器的另一端接地,并将LDR的另一端连接到5V Arduino的。
使用Arduino代码的单轴太阳能跟踪器:
此基于Arduino的Solar Panel Tracker的代码很简单,并通过注释进行了很好的解释。首先,我们将包括伺服电机库。然后,我们将初始化伺服电机初始位置的变量。之后,我们将初始化变量以从LDR传感器和伺服读取。
#include <Servo.h> //including the library of servo motor
Servo sg90; //initializing a variable for servo named sg90
int initial_position = 90; //Declaring the initial position at 90
int LDR1 = A0; //Pin at which LDR is connected
int LDR2 = A1; //Pin at which LDR is connected
int error = 5; //initializing variable for error
int servopin=9;
*sg90.atach(servopin)*命令将从Arduino的引脚9读取Servo。接下来,我们将LDR引脚设置为输入引脚,以便我们可以从传感器读取值并据此移动太阳能电池板。然后,将伺服电机设置为90度,这是伺服的初始位置。
void setup()
{
sg90.attach(servopin); // attaches the servo on pin 9
pinMode(LDR1, INPUT); //Making the LDR pin as input
pinMode(LDR2, INPUT);
sg90.write(initial_position); //Move servo at 90 degree
delay(2000); // giving a delay of 2 seconds
}
然后,我们将从LDR中读取值,并将其保存在R1和R2中。然后,我们将使两个LDR之间存在差异,以相应地移动伺服器。如果它们之间的差为零,则意味着两个LDR上的光量相同,因此太阳能电池板将不会移动。我们使用了一个名为error的变量,其值为5,该变量的用途是,如果两个LDR之间的差异小于5,则伺服机构将不会移动。如果我们不这样做,那么伺服将继续旋转。如果差值大于误差值(5),则伺服器将使太阳能电池板朝LDR方向移动,在LDR方向上光线会朝着该方向移动。查看下面的完整代码和演示视频。
int R1 = analogRead(LDR1); // reading value from LDR 1
int R2 = analogRead(LDR2); // reading value from LDR 2
int diff1= abs(R1 - R2); // Calculating the difference between the LDR's
int diff2= abs(R2 - R1);
if((diff1 <= error) || (diff2 <= error)) {
//if the difference is under the error then do nothing
} else {
if(R1 > R2)
{
initial_position = --initial_position; //Move the servo towards 0 degree
}
if(R1 < R2)
{
initial_position = ++initial_position; //Move the servo towards 180 degree
}
}
这样便可以构建一个简单的Solar Panel Tracker,它将自动朝着像向日葵一样的光线移动。在这里,我们使用了低功率太阳能电池板来减轻重量,如果您打算使用高功率或重型太阳能电池板,则需要相应地选择伺服电机。
代码
/*
Arduino solar tracker code
www.circuitdigest.com
*/
#include <Servo.h> //including the library of servo motor
Servo sg90; //initializing a variable for servo named sg90
int initial_position = 90; //Declaring the initial position at 90
int LDR1 = A0; //Pin at which LDR is connected
int LDR2 = A1; //Pin at which LDR is connected
int error = 5; //initializing variable for error
int servopin=9;
void setup()
{
sg90.attach(servopin); // attaches the servo on pin 9
pinMode(LDR1, INPUT); //Making the LDR pin as input
pinMode(LDR2, INPUT);
sg90.write(initial_position); //Move servo at 90 degree
delay(2000); // giving a delay of 2 seconds
}
void loop()
{
int R1 = analogRead(LDR1); // reading value from LDR 1
int R2 = analogRead(LDR2); // reading value from LDR 2
int diff1= abs(R1 - R2); // Calculating the difference between the LDR's
int diff2= abs(R2 - R1);
if((diff1 <= error) || (diff2 <= error)) {
//if the difference is under the error then do nothing
} else {
if(R1 > R2)
{
initial_position = --initial_position; //Move the servo towards 0 degree
}
if(R1 < R2)
{
initial_position = ++initial_position; //Move the servo towards 180 degree
}
}
sg90.write(initial_position); // write the position to servo
delay(100);
}
基于Arduino的太阳能板追光装置设计(二)
原文链接:https://blog.csdn.net/weixin_43999167/article/details/103191387
本装置使用光敏电阻,暗电阻几乎达到1MΩ,强光条件下只有几百Ω,因此我们串联1K可调电阻进行限流分压,否则光敏电阻电阻过低近似导通会烧坏东西吧
为了适应环境的变化,我采用了可调电阻。而且光敏电阻可能因为你放的不够平,会使接收到的数据不一样,你感觉没对着太阳,你就可以调分压电阻调节。
AD采集数据把Arduino把5V对应0-1023的整数值,约等于每个单位0.049V。通过测试,在正常阳光条件下,可调电阻为500Ω,采集数据在800-900之间,根据各个光敏电阻的电压不同,可以判断四周分布光源强弱。
本来我想着直接使用光敏电阻判断即可,用手电筒测试还好,但是在阳光下由于阳光大小相同,并不能正常工作,于是我加了挡光板,只有光线垂直才会同时接收到光线,当光线不垂直时会产生阴影,造成部分光敏电阻接收不到光线。下面是纸板模型。
当光线不垂直时,产生阴影。
用的板子是Arduino nano和配套的扩展板,因为要用到舵机,用扩展板方便。
这些是全部程序:
#include <Servo.h>
Servo lr_servo;//定义左右旋转舵机名称
Servo ud_servo;//定义上下旋转舵机名称
int lr_angle = 90;//设置初始角度为90度
int ud_angle = 0;//设置初始角度为0度,让太阳能板水平朝上,检测太阳光最强点
int l_state = A0;//定义光敏电阻模拟电压输入
int r_state = A1;
int u_state = A2;
int d_state = A3;
int lr_servopin = 3;//定义舵机控制信号引脚
int ud_servopin = 5;
void setup() {
Serial.begin(9600); //定义串口波特率
lr_servo.attach(lr_servopin); // 设置舵机控制针脚
ud_servo.attach(ud_servopin); // 设置舵机控制针脚
pinMode(l_state, INPUT); //设置引脚类型
pinMode(r_state, INPUT);
pinMode(u_state, INPUT);
pinMode(d_state, INPUT);
lr_servo.write(lr_angle);//恢复初始角度
delay(1000);
ud_servo.write(ud_angle);
delay(1000);
}
void loop() {
int L = analogRead(l_state);//读取传感器模拟电压值,0-1200
int R = analogRead(r_state);
int U = analogRead(u_state);
int D = analogRead(d_state);
int error = 9;//定义误差范围,防止抖动
int m_speed = 20;//设置舵机速度
/**********************左右调节程序**********************/
// abs()是求绝对值函数
if (abs(L - R) > error && L > R) { //判断误差是否在允许范围内,否者调整舵机
lr_angle--;//调小角度
if (lr_angle < 0) { //限制舵机转动角度
lr_angle = 0;
}
lr_servo.write(lr_angle); //输出舵机角度
delay(m_speed);
}
else if (abs(L - R) > error && L < R) { //判断误差是否在允许范围内,否者调整舵机
lr_angle++;//调大角度
if (lr_angle > 180) { //限制舵机转动角度
lr_angle = 180;
}
lr_servo.write(lr_angle); //输出舵机角度
delay(m_speed);
}
else if (abs(L - R) <= error) { //判断误差是否在允许范围内,在范围内,舵机静止,角度不做调整
lr_servo.write(lr_angle); //输出舵机角度
}
/**********************上下调节程序**********************/
if (abs(U - D) > error && U >= D) { //判断误差是否在允许范围内,否者调整舵机
ud_angle--;//调小角度
if (ud_angle < 0) { //限制舵机转动角度
ud_angle = 0;
}
ud_servo.write(ud_angle); //输出舵机角度
delay(m_speed);
}
else if (abs(U - D) > error && U < D) { //判断误差是否在允许范围内,否者调整舵机
ud_angle++;//调大角度
if (ud_angle > 95) { //限制舵机转动角度
ud_angle = 95;
}
ud_servo.write(ud_angle); //输出舵机角度
delay(m_speed);
}
else if (abs(U - D) <= error) { //判断误差是否在允许范围内,在范围内,舵机静止,角度不做调整
lr_servo.write(lr_angle); //输出舵机角度
}
//串口显示光敏电阻阻值和舵机角度
Serial.print(" L ");
Serial.print(L);
Serial.print(" R ");
Serial.print(R);
Serial.print(" U ");
Serial.print(U);
Serial.print(" D ");
Serial.print(D);
Serial.print(" ud_angle ");
Serial.print(ud_angle);
Serial.print(" lr_angle ");
Serial.println(lr_angle);
delay(1000);//在测试时,串口数据接收过快,可以适当加延时调整
}
舵机使用SG90,用3D打印的openmv云台支架
后面我加了锂电池充电模块,电池储能,和5V升压板给板子供电。
成品图
测试视频,当时对着的是南边的窗户,有太阳光照。
制作 基于Arduino的太阳能板追光太阳跟随装置设计
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)