Arduino nano+光敏电阻5516的光源追踪实验

一、简介

        现实中的太阳能板都是固定的,这对光源的利用有限,可不可以做出一个可以时刻追随光源的呢?假如我们在太阳能板的上下左右各放一个光敏电阻,然后比较光敏电阻的数值,来实现光源的追踪(本文只针对光源部分进行研究)。

二、材料

        Arduino nano ×1、5516光敏电阻×4 、10KΩ电阻×4、面包板、杜邦线若干。(2KΩ电阻×4、发光二极管,不必须项,此处只是做显示用)

光敏电阻介绍

        工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。用于制造光敏电阻的材料主要是金属的硫化物、硒化物和碲化物等半导体。通常采用涂敷、喷涂、烧结等方法在绝缘衬底上制作很薄的光敏电阻体及梳状欧姆电极,接出引线,封装在具有透光镜的密封壳体内,以免受潮影响其灵敏度。入射光消失后,由光子激发产生的电子 空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。

        光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器。主要用于光的测量、光的控制、和光电转换。光敏电阻器都制成薄片结构,以便能够吸收更多的光能。该类电阻器的特点是入射光越强,电阻值就越小,入射光越弱,电阻值就越大。

         建议在同种光源下测试光敏电阻的模拟数值,选出数值近似的四个,便于后于程序编写。

//测试单个光敏电阻模拟数值
#include <Arduino.h>

void setup() 
{
  Serial.begin(115200);
  pinMode(A0, INPUT);  
  
}

void loop() 
{
  int F1 = analogRead(A0);

  Serial.println("++++++");
  Serial.println(F1);
  delay(2000);

}

三、接线部分

引脚对应nano pin
105V
12A7
14A6
16A5
18A4
20A3
22A2
24A1
26A0

四、程序部分

#include <Arduino.h>

int error = 3;   //设置容错范围     

void setup() {

  Serial.begin(115200);

  pinMode(A0, INPUT);  

  pinMode(A1, INPUT);

  pinMode(A6, INPUT);

  pinMode(A7, INPUT);



  pinMode(A2, OUTPUT);

  pinMode(A3, OUTPUT);

  pinMode(A4, OUTPUT);

  pinMode(A5, OUTPUT);

  delay(200);          

}  



void loop() {

//读取模拟值0-1023

  int F5 = analogRead(A0);

  int F6 = analogRead(A1);

  int F7 = analogRead(A6);

  int F8 = analogRead(A7);
//0-1023转换为0-255

  int F1 = map(F5,0,1023,0,255);

  int F2 = map(F6,0,1023,0,255);

  int F3 = map(F7,0,1023,0,255);

  int F4 = map(F8,0,1023,0,255);

  Serial.println("++++++++++++");

  Serial.println(F5);

  Serial.println(F6);

  Serial.println(F7);

  Serial.println(F8);

  int diff1= abs(F1 - F2);  

  int diff2= abs(F2 - F3);

  int diff3= abs(F3 - F4);

  int diff4= abs(F4 - F1);

  //把灯关闭(没有加发光二极管可以忽略这四个写底及后面出现的写高)

  digitalWrite(A2,  LOW);

  digitalWrite(A3,  LOW);

  digitalWrite(A4,  LOW);

  digitalWrite(A5,  LOW);



  if((diff1 <= error) && (diff2 <= error) && (diff3 <= error) && (diff4 <= error))

  {

      Serial.println("DO NOthing");

      delay(2000);

   }

  else

  {    

    if(F2-F1>3||F4-F1>5){

      Serial.println("TURN UP");

      digitalWrite(A2,  HIGH);

      delay(3000);

    }  

    if(F1-F2>3||F3-F2>3){

      Serial.println("TURN LEFT");

      digitalWrite(A3,  HIGH);

      delay(3000);

       }

    if(F2-F3>3||F4-F3>3){

      Serial.println("TURN DOWN");

      digitalWrite(A4,  HIGH);

      delay(3000);

     }

    if(F1- F4>3||F3-F4>3){

      Serial.println("TURN RIGHT");

      digitalWrite(A5,  HIGH);

      delay(3000);

        }

  }

五、附

1、程序中用到了map函数把读到的模拟量0-1023转换成0-255,这样可以弥补四个光敏电阻的数值浮动。

2、模拟量的读取:VCC \frac{R1}{R1+R2}=U        \frac{U}{VCC}1023=Analog

VCC电源5V
R1光敏电阻阻值
R210KΩ电阻
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值