会移动的向日葵基于Arduino的小型太阳能收集装置Word文档下载推荐.docx
《会移动的向日葵基于Arduino的小型太阳能收集装置Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《会移动的向日葵基于Arduino的小型太阳能收集装置Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
②
③
④
⑤
⑥
⑦
⑧
表1
所需器件参考信息
元件名称
功能
所需数目(个)
参考价格(元)
DFR0026环保模拟环境光线传感器
基于环保型光敏二极管的光线传感器,可以用来对环境光线的强度进行检测
4
10×
2自由度DF15MG舵机云台
含两个舵机和1个支架,用于多自由度机械臂、监控云台、双足机器人、多足机器人等
1
259
多孔原型钣金板
多功能固定板,用于传感器、电机等固定
59
Xbee传感器扩展板V5
一个传感器扩展板,能使大部分传感器轻松地和Arduino控制板连接
75
DFRduinoRomeo328控制器
基于Arduino的实用控制器,该控制器集成了电机驱动、键盘、IO扩展板、无线数串等接口,可方便地控制2个直流电机
300
太阳能电池板
用于收集太阳能
50
路虎5履带小车
用于安装舵机,以进行全方位检测
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<
math.h>
//一些库函数
Servo.h>
Metro.h>
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);
delay(1000);
for(inti=0;
i<
180;
i++)
StartUpcode();
calmaxlight();
voidloop()
{
voidStartUpcode()
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()
for(inti=2;
i<
19;
i++)
if(mindata>
average[i])
mindata=average[i];
//找到最小值及其最小值的编号
no=i;
}
DF15MG2.write(no*10);
//舵机转到光源所在方向
“向日葵”的另一应用——追光机器人
在正常的室内环境光下,用手电筒打一束光,产生光源并移动,这时“向日葵”就会跟着你的手电筒转。
其原理类似上述的太阳能收集器,最大的区别在于此处不再做4个传感器的均值,而是将横竖方向的光传感器两两求差。
当一端的感应数值小于另一端时,就会向这一端偏转。
我们不必放上太阳能电池板,可以随个人喜好在板上固定任何东西,比如插朵花、放个娃娃上去等,这样就能使机器人看起来更加生动了。
追光机器人参考代码
//一些函数库
MetroreceMetro=Metro(20);
MetroproceMetro=Metro(30);
MetrotransMetro=Metro(40);
intsumab,sumcd,pos1=90,pos2=90;
//定义变量
intvala,valb,valc,vald;
DF15MG1.write(90);
//设定舵机的初始位置为90°
DF15MG2.write(90);
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()
//设定光传感器模拟数据读取端口
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;
if(sumcd<
-20)
//c、d传感器求差,要根据环境光的不同设定相应的值
//舵机1的角度设定在0°
elseif(sumcd>
20)
pos2=pos2-1;
voidtransmitdata()
DF15MG1.write(pos1);
//舵机旋转角度输出
}
关键词:
移动
向日葵
基于
Arduino
小型
太阳能
收集
装置