设计原理及效果
4个光传感器的作用是寻找测试环境的最亮点,也就是太阳所在的位置。经过测试,笔者所用的光传感器在光源变亮时,其值会相应减小。所以只要找到这4个传感器所采集到的信号值的最小均值,那么也就找到光源最亮点的所在位置了。再通过舵机的旋转加上电机控制,就可以扫描到周围光线的最亮点了。
将它拿到室外,每隔10分钟,“向日葵”会做一次检测,找到太阳所在位置进行定位并开始采集太阳能。如果加装将太阳能电池板采集到的电能输出到其他设备的功能,就会让“向日葵”变成很有实用价值的会移动的自动充电器。
示意图如下:
太阳能收集装置参考代码
#include
#include
#include
Servo DF15MG1;
Servo DF15MG2;
int vala,valb,valc,vald,sum,mindata;
int average[25],pos2=0,i=1,no;
void ready()
{
DF15MG2.write(0);
}
void setup()
{
DF15MG1.attach(3);
DF15MG2.attach(11);
DF15MG1.write(70);
DF15MG2.write(0);
delay(1000);
for(int i= 0; i < 180; i++)
StartUpcode();
calmaxlight();
}
void loop()
{
}
void StartUpcode()
{
DF15MG1.write(70);
vala=analogRead(0); //传感器数值读入
valb=analogRead(1);
valc=analogRead(2);
vald=analogRead(3);
pos2=pos2+1;
DF15MG2.write(pos2);
pos2=constrain(pos2,0,180);
if(pos2%10==0)
{
sum=vala+valb+valc+vald; //4个传感器求和
average[i]=sum/4; //求均值
mindata=average[1];
i++;
}
delay(10);
}
void calmaxlight()
{
mindata=average[1];
for(int i = 2; i< 19; i++)
{
if(mindata>average[i])
{
mindata=average[i]; //找到最小值及其最小值的编号
no = i;
}
}
DF15MG2.write(no*10); //舵机转到光源所在方向
}