追光机器人——基于Arduino的小型太阳能收集装置

2013-08-29 10:18 来源:电源网 作者:铃铛

“向日葵”的另一应用——追光机器人

在正常的室内环境光下,用手电筒打一束光,产生光源并移动,这时“向日葵”就会跟着你的手电筒转。

其原理类似上述的太阳能收集器,最大的区别在于此处不再做4个传感器的均值,而是将横竖方向的光传感器两两求差。当一端的感应数值小于另一端时,就会向这一端偏转。我们不必放上太阳能电池板,可以随个人喜好在板上固定任何东西,比如插朵花、放个娃娃上去等,这样就能使机器人看起来更加生动了。

追光机器人参考代码

#include //一些函数库

#include

#include

Servo DF15MG1;

Servo DF15MG2;

Metro receMetro=Metro(20);

Metro proceMetro=Metro(30);

Metro transMetro=Metro(40);

int sumab,sumcd,pos1=90,pos2=90; //定义变量

int vala,valb,valc,vald;

void ready()

{

DF15MG1.write(90); //设定舵机的初始位置为90°

DF15MG2.write(90);

}

void setup()

{

DF15MG1.attach(3);

DF15MG2.attach(11);

}

void loop()

{

if(receMetro.check()==1) //控制数据采集、处理、输出时间

{

receMetro.interval(10);

receivedata();

}

if(proceMetro.check()==1)

{

proceMetro.interval(15);

processdata();

}

if(transMetro.check()==1)

{

transMetro.interval(20);

transmitdata();

}

}

void receivedata()

{

vala=analogRead(0); //设定光传感器模拟数据读取端口

valb=analogRead(1);

valc=analogRead(2);

vald=analogRead(3);

}

void processdata()

{

sumab=vala-valb; //横竖光传感器读入数值求差

sumcd=valc-vald;

if(sumab<-10) //a、b传感器求差,要根据环境光的不同设定相应的值

{

pos1=pos1+1;

pos1=constrain(pos1,60,140); //舵机1的角度设定在60°到140°

}

else if(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°

}

else if(sumcd>20)

{

pos2=pos2-1;

pos2=constrain(pos2,0,180);

}

}

void transmitdata()

{

DF15MG1.write(pos1); //舵机旋转角度输出

DF15MG2.write(pos2);

}

< 1 2 3 
Arduino 太阳能

相关阅读

暂无数据

一周热门