实验现象:
Arduino追光实验
实验原理:
(光强比较法)利用光敏电阻在光照时阻值发生变化的原理,将两个完全相同的光敏电阻分别放置于一块太阳能电池板东西方向。如果太阳光垂直照射太阳能电池板时,两个光敏电阻接收到的光照强度相同,所以它们的阻值完全相等,此时舵机或电机不转动;当太阳光方向与太阳能电池板垂直方向有夹角时,接收光强多的光敏电阻的阻值减小,驱动舵机或电机转动,直至两个光敏电阻上的光照强度相同。
制作步骤:
1、所用材料
Arduino UNO开发板一块;
光敏电阻两个;
200k电阻两个;
G90舵机一个;
小面包板一块;
杜邦线若干;
废纸盒/纸板若干;
电源(这里我用的是充电宝直接给开发板供电)
Arduino USB专用数据线;
2、所用工具/软件
热熔胶枪;
剪刀;
电焊笔;
剥线钳;
Arduino编程软件;
3、支架的制作和连接
用公对公或公对母杜邦线把公或母的一端剪得到一端为公的线,同样的方法的到四根这样的线,把另一端用电焊笔与光敏电阻焊在一起,得到两个焊好连接线的光敏电阻之后把它用热熔胶枪粘在太阳能电池板两侧。
如图
用废纸板制作的框架与舵机和太阳能板可以用热熔胶枪粘接
4、接线
实物图
电路接线图(画图软件fritzing)
太阳能电池板可以自己用热熔胶枪粘
5、程序
#include <Servo.h> //载入Servo库
#define InA A2 //定义读取1光敏电阻的模拟口
#define InB A1 //定义读取2光敏电阻的模拟口
int valA,valB; //用于存储两个光敏电阻的数值
int angle = 90; //设置初始角度
int range = 100; //设置范围
Servo myServo;
void setup() {
myServo.attach(9); //定义舵机接口
myServo.write(angle); //初始化舵机角度为90度
Serial.begin(9600); //设置串口波特率
}
void loop() {
valA = analogRead(InA); //读取A光敏电阻数据
valB = analogRead(InB); //读取B光敏电阻数据
if(valA-valB > range)
{
angle = angle + 1; //角度+1
angle = constrain(angle,0,180); //约束输出
myServo.write(angle); //执行角度
}
else if(valA - valB < -range)
{
angle = angle - 1;
angle = constrain(angle,0,180);
myServo.write(angle);
}
Serial.print("A=");
Serial.print(valA);
Serial.print("||B=");
Serial.println(valB);
Serial.print("Angle=");
Serial.println(angle);
delay(100); //延时
}
扩展应用
太阳能寻光电机