极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 43500|回复: 8

DIY Arduino自动追光器

[复制链接]
发表于 2019-12-20 19:40:50 | 显示全部楼层 |阅读模式
DIY Arduino自动追光器
材料:
Arduino UNO
两个舵机
四个光敏电阻
四个小电阻
代码:
//追光系统
#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 = 45;    //设置初始角度
int range2 = 100;   //设置范围
Servo myServo1;
Servo myServo2;

void setup() {
  myServo1.attach(2);      //定义舵机接口
  myServo1.write(angle1);   //初始化舵机角度为90度
  myServo2.attach(3);      //定义舵机接口
  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光敏电阻数据
  //正极接光敏,越光数值越大 A大于B,A比B光 A-B为正数 舵机向A方向转
  if(valA-valB > range1){
    angle1 = angle1 + 20;               //角度+1
    angle1 = constrain(angle1,0,180);  //约束输出
    myServo1.write(angle1);            //执行角度
  }
  //A小于B,B比A光 A-B为负数 舵机向B方向转
  else if(valA - valB < -range1){
    angle1 = angle1 - 20;
    angle1 = constrain(angle1,0,180);
    myServo1.write(angle1);   
  }

  //C大于B,C比D光C-D为正数 舵机向C方向转
  if(valC-valD > range2){
    angle2 = angle2 + 20;               //角度+1
    angle2 = constrain(angle2,0,180);  //约束输出
    myServo2.write(angle2);            //执行角度
  }
  //C小于D,D比A光C-D为负数 舵机向D方向转
  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(500);  //延时

}
视频:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2019-12-31 16:42:48 | 显示全部楼层
十分感谢楼主分享,过来学习一下。其中几个判断句中,格式是否应为:if((valA-valB)>range1)?以下几处类同;在C与D的第一次比较中,注释语句应为C大于D;另外视频文件无法播放,能否重新处理一下?再次深表感谢。
回复 支持 反对

使用道具 举报

发表于 2020-2-16 19:23:38 | 显示全部楼层
视频文件无法播放,能否重新处理一下.
回复 支持 反对

使用道具 举报

发表于 2020-2-16 19:45:55 | 显示全部楼层
教程详细,可以学到
回复 支持 反对

使用道具 举报

发表于 2020-4-2 12:47:06 来自手机 | 显示全部楼层
有没有电路图
回复 支持 反对

使用道具 举报

发表于 2020-4-6 21:30:34 | 显示全部楼层

有没有电路图
回复 支持 反对

使用道具 举报

发表于 2020-8-21 15:02:43 | 显示全部楼层
跪求电路图
回复 支持 反对

使用道具 举报

发表于 2020-8-21 21:41:10 | 显示全部楼层
碌碌无为 发表于 2019-12-31 16:42
十分感谢楼主分享,过来学习一下。其中几个判断句中,格式是否应为:if((valA-valB)>range1)?以下几处类同 ...

大佬  能不能发一下电路图  谢谢
回复 支持 反对

使用道具 举报

发表于 2020-8-25 19:11:38 | 显示全部楼层
向楼主学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-23 22:20 , Processed in 0.042737 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表