实验现象:
Arduino双轴寻光训练
实验原理:
(光强比较法)利用光敏电阻在光照时的阻值发生变化的原理,将四个光敏电阻模块至于上下左右四个方向,如果有光垂直照射四个光敏电阻,四个光敏电阻收到的光照强度相同,所以它们的阻值完全相等,此时舵机不转动,当光照射上下的其中一个光敏电阻时,光敏电阻的阻值减小,驱动上方舵机上下转动,同理左右方向的光敏电阻也是一样,它会驱动下方的舵机左右转动。
所用材料:
Arduino UNO开发板一块
UNO R3 V5扩展板一块
四个光敏电阻模块
两个舵机和支架组合而成的如下图
专用的数据线;
杜邦线若干;
电源(我用的是充电宝);
废纸板;
制作步骤:
先把用废纸板制作一个平台把光敏电阻模块粘在上面,如下图所示:
之后把他粘在舵机支架上,
接线:
可以根据程序进行接线
代码:
#include <Servo.h> //载入Servo库
#define InA A0 //定义读取A光敏电阻的模拟口
#define InB A1 //定义读取B光敏电阻的模拟口
#define InC A2 //定义读取C光敏电阻的模拟口
#define InD A3 //定义读取D光敏电阻的模拟口
int valA,valB; //用于存储两个光敏电阻的数值
int valC,valD; //用于存储两个光敏电阻的数值
int angle1 = 90; //设置初始角度
int range1 = 100; //设置范围
int angle2 = 90; //设置初始角度
int range2 = 100; //设置范围
Servo myServo1;
Servo myServo2;
void setup() {
myServo1.attach(4); //定义舵机接口
myServo1.write(angle1); //初始化舵机角度为90度
myServo2.attach(6); //定义舵机接口
myServo2.write(angle2); //初始化舵机角度为90度
Serial.begin(9600); //设置串口波特率
}
void loop() {
valA = analogRead(InA); //读取A光敏电阻数据
valB = analogRead(InB); //读取B光敏电阻数据
valC = analogRead(InC); //读取C光敏电阻数据
valD = analogRead(InD); //读取D光敏电阻数据
if(valA-valB > range1){
angle1 = angle1 + 20; //角度+1
angle1 = constrain(angle1,0,180); //约束输出
myServo1.write(angle1); //执行角度
}
else if(valA - valB < -range1){
angle1 = angle1 - 20;
angle1 = constrain(angle1,0,180);
myServo1.write(angle1);
}
if(valC-valD > range2){
angle2 = angle2 + 20; //角度+1
angle2 = constrain(angle2,0,180); //约束输出
myServo2.write(angle2); //执行角度
}
else if(valC - valD < -range2){
angle2 = angle2 - 20;
angle2 = constrain(angle2,0,180);
myServo2.write(angle2);
}
Serial.print("A=");
Serial.print(valA);
Serial.print("||B=");
Serial.println(valB);
Serial.print("Angle1=");
Serial.println(angle1);
Serial.print("C=");
Serial.print(valC);
Serial.print("||D=");
Serial.println(valD);
Serial.print("Angle2=");
Serial.println(angle2);
delay(100); //延时
}