Arduino双轴光敏寻光实验

实验现象:

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);  //延时

}

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@A.D.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>