会移动的向日葵基于Arduino的小型太阳能收集装置.docx
《会移动的向日葵基于Arduino的小型太阳能收集装置.docx》由会员分享,可在线阅读,更多相关《会移动的向日葵基于Arduino的小型太阳能收集装置.docx(19页珍藏版)》请在冰豆网上搜索。
会移动的向日葵基于Arduino的小型太阳能收集装置
会移动的“向日葵”——基于Arduino的小型太阳能收集装置
导读:
前言:
现代社会越来越讲究资源的节约,随着煤、石油、天然气这些不可再生能源越来越稀缺,在不久的将来,绿色能源势必会成为主流能源。
所谓绿色能源,也就是可再生能源,包括风能、太阳能、水能、生物能等。
其中太阳能更是越来越得到人们的青睐,在人们的生活工作..
前言:
现代社会越来越讲究资源的节约,随着煤、石油、天然气这些不可再生能源越来越稀缺,在不久的将来,绿色能源势必会成为主流能源。
所谓绿色能源,也就是可再生能源,包括风能、太阳能、水能、生物能等。
其中太阳能更是越来越得到人们的青睐,在人们的生活工作中起着广泛的作用,太阳能发电就是其中最普遍的一种应用。
一般的太阳能收集装置都是固定在一个方向的,不能充分采集太阳能。
笔者制作了一款名为“向日葵”的太阳能收集装置,它的最大特点就是装有转动装置,4个在太阳能板周围的光传感器随时检测周围环境光的亮度,经过代码处理,加上底下舵机的旋转,就能让太阳电池能板始终对着光最强的方向。
放到太阳光下的效果,就是它始终会对着太阳的方向,这样就能保证最大限度地收集太阳能。
笔者的太阳能收集装置基于Arduino制作,所用的元件都与Arduino兼容。
Arduino是一个开放源代码的硬件项目,最大的优势就是具有良好的开放性和扩展性。
用户在它的官网上可以随时免费下载电路图、源码和软件开发环境等,依据官方提供的PCB和SCH电路图,简化Arduino模组,来完成独立运作的微处理控制;也可以很方便地与传感器、各式各样的电子元件(红外线、超音波、热敏电阻、光敏电阻、伺服电机等)连接。
Arduino所用的编程语言类似C语言,但是结构更简单,更简洁易懂,对于机器人爱好者和电子知识尚欠缺的人群而言更容易上手。
笔者使用DFRobot的Romeo控制器对小车平台做直接的电机控制。
首先准备好制作“向日葵”的材料,这里用到了4个光线传感器、2个舵机及固定支架、1块扩展板、1块控制板、1块多功能固定板、1部Rover5小车(将向日葵固定在小车上,方便全方位监测)、1块太阳能板,最后别忘了电源(7~12V)。
详细信息如表1所示。
① ②
③ ④
⑤ ⑥
⑦ ⑧
表1 所需器件参考信息
元件名称
功能
所需数目(个)
参考价格(元)
DFR0026环保模拟环境光线传感器
基于环保型光敏二极管的光线传感器,可以用来对环境光线的强度进行检测
4
10×4
2自由度DF15MG舵机云台
含两个舵机和1个支架,用于多自由度机械臂、监控云台、双足机器人、多足机器人等
1
259
多孔原型钣金板
多功能固定板,用于传感器、电机等固定
1
59
Xbee传感器扩展板V5
一个传感器扩展板,能使大部分传感器轻松地和Arduino控制板连接
1
75
DFRduinoRomeo328控制器
基于Arduino的实用控制器,该控制器集成了电机驱动、键盘、IO扩展板、无线数串等接口,可方便地控制2个直流电机
1
300
太阳能电池板
用于收集太阳能
1
50
路虎5履带小车
用于安装舵机,以进行全方位检测
1
188
1.2V充电电池
小车和Romeo控制器的电源
6
路虎(Rover)5履带小车
路虎5履带小车与一般履带小车相比不同的地方是,可以根据路面情况的需要,调节前后轮的高度。
为了提高履带小车的越野性能及美观度,笔者将前后轮支架调节到了与地面形成15°左右夹角的位置。
由于Romeo的工作电压在7~12v,并且履带小车的工作电压与Romeo控制器相近,所以使用了6节1.2V的充电电池作为电机和Romeo控制器的电源,当然,选用7.4V的锂电池也会是一种比较合适的选择。
制作过程
准备好了上述材料就可以将这些元器件拼起来了,制作步骤如下。
1.将4个环境光线传感器呈“十”字形固定在多功能固定板的4个边上,这样做的目的是方便检测四周光线,尤其是在制作追光机器人时更体现了它的优势。
2.将2个舵机固定在一起。
这2个舵机分别控制横向和纵向的旋转,这里所用的舵机的旋转角度是从0°到180°的。
考虑到横向舵机在做太阳能收集器时不需要180°旋转,所以只要设定一定的偏角即可。
而纵向舵机因为要寻找光源,所以需要360°旋转,为此我将它安装在小车上,通过控制小车的运动来使舵机能全方位搜索光源。
3.将多功能板与舵机固定在一起。
4.将舵机与小车固定在一起。
5.将Xbee传感器扩展板插在DFRduinoRomeo328控制板上。
6.将DFRduinoRomeo328控制板固定到车上,然后将传感器和舵机的接口导线插到控制板的IO口上。
注:
光传感器读取的是模拟信号,所以要将它们连接到扩展板的Analog口,0~5口可任意选择。
而舵机是数字输出,要连接到PWM输出端,板子上有注明。
写代码的时候要注意。
7.最后只要将一块太阳能电池板固定在多功能板上就可以了,这样一个小型的向日葵式的太阳能收集装置就做好了。
设计原理及效果
4个光传感器的作用是寻找测试环境的最亮点,也就是太阳所在的位置。
经过测试,笔者所用的光传感器在光源变亮时,其值会相应减小。
所以只要找到这4个传感器所采集到的信号值的最小均值,那么也就找到光源最亮点的所在位置了。
再通过舵机的旋转加上电机控制,就可以扫描到周围光线的最亮点了。
将它拿到室外,每隔10分钟,“向日葵”会做一次检测,找到太阳所在位置进行定位并开始采集太阳能。
如果加装将太阳能电池板采集到的电能输出到其他设备的功能,就会让“向日葵”变成很有实用价值的会移动的自动充电器。
示意图如下:
太阳能收集装置参考代码
#include //一些库函数
#include
#include
ServoDF15MG1;
ServoDF15MG2;
intvala,valb,valc,vald,sum,mindata;
intaverage[25],pos2=0,i=1,no;
voidready()
{
DF15MG2.write(0);
}
voidsetup()
{
DF15MG1.attach(3);
DF15MG2.attach(11);
DF15MG1.write(70);
DF15MG2.write(0);
delay(1000);
for(inti=0;i<180;i++)
StartUpcode();
calmaxlight();
}
voidloop()
{
}
voidStartUpcode()
{
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);
}
voidcalmaxlight()
{
mindata=average[1];
for(inti=2;i<19;i++)
{
if(mindata>average[i])
{
mindata=average[i]; //找到最小值及其最小值的编号
no=i;
}
}
DF15MG2.write(no*10); //舵机转到光源所在方向
}
“向日葵”的另一应用——追光机器人
在正常的室内环境光下,用手电筒打一束光,产生光源并移动,这时“向日葵”就会跟着你的手电筒转。
其原理类似上述的太阳能收集器,最大的区别在于此处不再做4个传感器的均值,而是将横竖方向的光传感器两两求差。
当一端的感应数值小于另一端时,就会向这一端偏转。
我们不必放上太阳能电池板,可以随个人喜好在板上固定任何东西,比如插朵花、放个娃娃上去等,这样就能使机器人看起来更加生动了。
追光机器人参考代码
#include //一些函数库
#include
#include
ServoDF15MG1;
ServoDF15MG2;
MetroreceMetro=Metro(20);
MetroproceMetro=Metro(30);
MetrotransMetro=Metro(40);
intsumab,sumcd,pos1=90,pos2=90; //定义变量
intvala,valb,valc,vald;
voidready()
{
DF15MG1.write(90); //设定舵机的初始位置为90°
DF15MG2.write(90);
}
voidsetup()
{
DF15MG1.attach(3);
DF15MG2.attach(11);
}
voidloop()
{
if(receMetro.check()==1) //控制数据采集、处理、输出时间
{
receMetro.interval(10);
receivedata();
}
if(proceMetro.check()==1)
{
proceMetro.interval(15);
processdata();
}
if(transMetro.check()==1)
{
transMetro.interval(20);
transmitdata();
}
}
voidreceivedata()
{
vala=analogRead(0); //设定光传感器模拟数据读取端口
valb=analogRead
(1);
valc=analogRead
(2);
vald=analogRead(3);
}
voidprocessdata()
{
sumab=vala-valb; //横竖光传感器读入数值求差
sumcd=valc-vald;
if(sumab<-10) //a、b传感器求差,要根据环境光的不同设定相应的值
{
pos1=pos1+1;
pos1=constrain(pos1,60,140); //舵机1的角度设定在60°到140°
}
elseif(sumab>10)
{
pos1=pos1-1;
pos1=constrain(pos1,60,140);
}
if(sumcd<-20) //c、d传感器求差,要根据环境光的不同设定相应的值
{
pos2=pos2+1;
pos2=constrain(pos2,0,180); //舵机1的角度设定在0°到180°
}
elseif(sumcd>20)
{
pos2=pos2-1;
pos2=constrain(pos2,0,180);
}
}
voidtransmitdata()
{
DF15MG1.write(pos1); //舵机旋转角度输出
DF15MG2.write(pos2);
}
关键词:
移动 向日葵 基于 Arduino 小型 太阳能 收集 装置