简单追光系统的猜想与简单实现

首先,我想象的追光器大概是这样的


简单追光系统的猜想与简单实现_第1张图片



哪边有光就往那边转..........应该是不难理解吧。献丑了。

因为缺钱缺工具,所以成品暂时还没有做出来。大概接了线,烧了程序,大概能使,就这样吧.....................


这是使用1个舵机,在一个水平方向做180度的运动,要是做成横竖两个方向的活动,实现的方法也是一样的,只不过这就共需要2个舵机,4个光敏电阻,加一些连接器件还有程序添加相同原理的代码就可以了。


然后看看具体的实现:


PS:本次涉及到了光敏电阻的使用,还有舵机的控制,具体实验可以参考之前的两篇实验。

Arduino通过串口控制舵机角度实验

Arduino使用光敏电阻实验



1接线部分:


简单追光系统的猜想与简单实现_第2张图片

想象成品上舵机是连接一块托板,然后连个光敏电阻之间有一块太阳能收集板。


2程序编写:

#include <Servo.h>  //载入Servo库

#define InA A5     //定义读取a光敏电阻的模拟口
#define InB A4     //定义读取b光敏电阻的模拟口

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光敏电阻数据

  //正极接光敏,越光数值越大
  
  //A大于B,A比B光 A-B为正数 舵机向A方向转
  if(valA-valB > range)
  {
    angle = angle + 1;               //角度+1
    angle = constrain(angle,0,180);  //约束输出
    myServo.write(angle);            //执行角度
  }
  
  //A小于B,B比A光 A-B为负数 舵机向B方向转
  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(500);  //延时

}





3上电烧程序看结果

简单追光系统的猜想与简单实现_第3张图片


A与B的值在变量range的范围之间,所以角度不会有变化,当两者数值超出范围就会做出相应的角度变化。





你可能感兴趣的:(arduino,太阳能,光敏电阻,9克舵机,追光)