What Will I Learn?
- 认识Arduino 的光线传感器
- 编写程序获取光线传感器的数值
- 制作光控LED
Requirements
Arduino UNO
Arduino IDE开发环境
Arduino 光线传感器
Difficulty
基础
Tutorial Contents
一、认识Arduino 的光线传感器
这一款光线传感器通俗来讲其实就是一个光敏电阻焊接在pcb板上,加上连接一些必须的电阻,就形成了光线传感器。
光敏电阻又叫做光导管,常用的制作材料为硫化镉,另外还有硒、硫化铝、硫化铅和硫化铋等材料。这些制作材料的特性是在特定的波长的光照射下,它的阻值减小。
光敏电阻的工作原理其实就是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。当有光线照射时,电阻内原本处于稳定状态的电子受到激发,成为自由电子。所以光线越强,产生的自由电子也就越多,电阻就会越小。经过测试,光敏电阻在黑暗中,电阻值大概有1~10M,在光照下,电阻值大概有几百到几千欧姆。
光敏电阻:感应当前环境的不同光暗程度,决定电阻值的大小
其余电阻:根据光敏电阻的光阻值与暗阻值选择适配阻值大小的电阻
当外界越亮,光敏电阻的阻值就越小,光线传感器输出的值越小;当外界越暗,电阻阻值越大,光线传感器输出越大。
二、编写程序获取光线传感器的数值
连接Arudino UNO与光线传感器
如上图,光线传感器引脚有三个
- GND :连接提供模块电源的负极
- VCC : 连接提供模块电源的正极
- D0 : 输入光线传感器根据当前环境的光暗程度输出的数值,此为模拟信号
接线如下:
Arduino UNO 光线传感器 GND GND 5V VCC A0 D0 由于不同的环境,光线程度都是不一样的,当使用光线传感器的时候,需要根据不同环境设定传感器的敏感值,使其适合当前的环境。
光线传感器也正是由于这一功能,比光敏电阻的实用性更强。
光敏电阻的阻值与敏感程度都是规定好了的,不同环境之下,同一个光敏电阻可能不完全适用。
光线传感器设计上考虑到这个实际使用的情况,做出了实用性的改造。
编写程序获取光线模块的模拟信号
定义变量
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至电脑
编译并上传程序至Arduino UNO
测试效果
测试的时候可以适当的间断用手掌遮住光敏电阻,如下图:
- 当正常环境下:数值在30--50范围内
- 当用手掌遮住光线的时候,数值在1000-1200范围内
三、制作光控LED
基于步骤二,连接LED与Arduino UNO
LED Arduino UNO 短脚 GND 长脚 D10 基础步骤二的程序整合上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); }
编译并上传程序测试效果
Curriculum
- Arduino中文教程---认识Arduino的串口并编写程序操作串口
- Arduino中文教程---认识HC-SR501模块并制作人体感应LED
- Arduino中文教程---认识模拟输入并制作声控电灯
- Arduino中文教程---DIY一个按钮电灯
- Arduino中文教程---初识Arduino并点亮第一个LED
Posted on Utopian.io - Rewarding Open Source Contributors
看不懂 我就点个赞
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
哈哈,多谢
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Your contribution cannot be approved because it does not follow the Utopian Rules.
You can contact us on Discord.
[utopian-moderator]
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit