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

in utopian-io •  7 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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

看不懂 我就点个赞

哈哈,多谢

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