Arduino中文教程----认识光线传感器并制作光控LED

in #utopian-io7 years ago (edited)

What Will I Learn?

  • 认识Arduino 的光线传感器
  • 编写程序获取光线传感器的数值
  • 制作光控LED

GIF.gif

Requirements

  • Arduino UNO

    图片.png

  • Arduino IDE开发环境

    图片.png

  • Arduino 光线传感器

    图片.png

Difficulty

  • 基础

Tutorial Contents

一、认识Arduino 的光线传感器

这一款光线传感器通俗来讲其实就是一个光敏电阻焊接在pcb板上,加上连接一些必须的电阻,就形成了光线传感器。

光敏电阻又叫做光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料的特性是在特定的波长的光照射下,它的阻值减小。

光敏电阻的工作原理其实就是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。当有光线照射时,电阻内原本处于稳定状态的电子受到激发,成为自由电子。所以光线越强,产生的自由电子也就越多,电阻就会越小。经过测试,光敏电阻在黑暗中,电阻值大概有1~10M,在光照下,电阻值大概有几百到几千欧姆。

  • 光敏电阻:感应当前环境的不同光暗程度,决定电阻值的大小

    图片.png

  • 其余电阻:根据光敏电阻的光阻值与暗阻值选择适配阻值大小的电阻

  • 当外界越亮,光敏电阻的阻值就越小,光线传感器输出的值越小;当外界越暗,电阻阻值越大,光线传感器输出越大。

二、编写程序获取光线传感器的数值

  • 连接Arudino UNO与光线传感器

    如上图,光线传感器引脚有三个

    • GND :连接提供模块电源的负极
    • VCC : 连接提供模块电源的正极
    • D0 : 输入光线传感器根据当前环境的光暗程度输出的数值,此为模拟信号

    接线如下:

    Arduino UNO光线传感器
    GNDGND
    5VVCC
    A0D0

    由于不同的环境,光线程度都是不一样的,当使用光线传感器的时候,需要根据不同环境设定传感器的敏感值,使其适合当前的环境。

    光线传感器也正是由于这一功能,比光敏电阻的实用性更强。

    光敏电阻的阻值与敏感程度都是规定好了的,不同环境之下,同一个光敏电阻可能不完全适用。

    光线传感器设计上考虑到这个实际使用的情况,做出了实用性的改造。

    图片.png

  • 编写程序获取光线模块的模拟信号

    • 定义变量

      const int buttonPin = A0;
      int inputValue = 0;  
      
    • setup()初始化

      void setup() {
        pinMode(buttonPin, INPUT);
        Serial.begin(9600);
      }
      
      
    • loop()写入主体函数

      void loop() {
        inputValue = analogRead(buttonPin);
        Serial.println(inputValue);
      }
      
      
  • 连接Arduino UNO至电脑

    图片.png

  • 编译并上传程序至Arduino UNO

    图片.png

  • 测试效果

    测试的时候可以适当的间断用手掌遮住光敏电阻,如下图:

    • 当正常环境下:数值在30--50范围内
    • 当用手掌遮住光线的时候,数值在1000-1200范围内

    图片.png

三、制作光控LED

  • 基于步骤二,连接LED与Arduino UNO

    LEDArduino UNO
    短脚GND
    长脚D10

    图片.png

  • 基础步骤二的程序整合上LED程序

    需求分析

    • 当光线模块输出数值大于1000的时候,光线较暗,点亮LED
    • 当光线模块输出数值不在大于1000范围下,光线较强,熄灭LED

    定义变量

    const int buttonPin = A0; 
    const int LED = 10; 
    int inputValue = 0;  
    

    setup()初始化

    void setup() {
      pinMode(buttonPin, INPUT);
      pinMode(LED, OUTPUT);
      Serial.begin(9600);
    }
    

    loop()函数主体

    void loop() {
      inputValue = analogRead(buttonPin);
      Serial.println(inputValue);
      if(inputValue>100)
         digitalWrite(LED,HIGH);
       else  digitalWrite(LED,LOW);
    }
    

    整合全部程序:

    const int buttonPin = A0; 
    const int LED = 10; 
    int inputValue = 0;  
    
    void setup() {
      pinMode(buttonPin, INPUT);
      pinMode(LED, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop() {
      inputValue = analogRead(buttonPin);
      Serial.println(inputValue);
      if(inputValue>100)
         digitalWrite(LED,HIGH);
       else  digitalWrite(LED,LOW);
    }
    
    
  • 编译并上传程序测试效果

    GIF.gif

Curriculum



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

看不懂 我就点个赞

哈哈,多谢

Your contribution cannot be approved because it does not follow the Utopian Rules.