0°

光控灯

传感器是一种检测装置,能感受并采集到被测量的信息,在当下物联网、智能家居中占据重要地位。一切智能化、自动化设备、各种云计算大数据分析中最基础的就是数据,数据从何而来,绝大多数都来自传感器。其中光敏电阻可算是最简单的传感器之一了。

简介

本篇介绍光敏电阻,通过模拟输入采集环境光强来控制LED灯亮度,做一个无需人为干预的自动控制设备。

传感器是一种检测装置,能感受并采集到被测量的信息,在当下物联网、智能家居中占据重要地位。一切智能化、自动化设备、各种云计算大数据分析中最基础的就是数据,数据从何而来,绝大多数都来自传感器。其中光敏电阻可算是最简单的传感器之一了。

步骤一 材料准备

硬件准备:

  • Arduino Uno R3开发板
  • USB数据线
  • 面包板
  • 1个LED灯
  • 1个220Ω限流电阻
  • 1个光敏电阻
  • 1个1K普通电阻

软件准备:

  • Arduino IDE

步骤二 原理说明

光敏电阻是一种电阻值随照射光强度增加而下降的电阻,基于其内部光电效应,光照越强电阻值越小,光照越弱,电阻值越大。

光控灯

步骤三 电路搭建

光控灯

直插LED灯正极连接限流电阻,电阻另一端连接开发板第10引脚,LED灯负极接开发板GND。光敏电阻一端接GND,电阻一端接5V,光敏电阻和普通电阻相接,然后接入A0引脚。

光控灯

步骤四 编写程序

光控灯
/*
   通过光敏电阻检测环境光,进而控制LED灯亮度
   https://static.qutaojiao.com
*/

int ledPin = 10;

int sensorValue = 0; //保存读到的传感器模拟值
int ledValue = 0;  //保存LED灯占空比

void setup()
{
  pinMode(ledPin, OUTPUT);     //数字口要选择带~号的具有pwm功能的输出口
}

void loop()
{
  sensorValue = analogRead(A0);     //读取A0模拟口的数值
  ledValue = map(sensorValue, 400, 800, 0, 200); //将400到800之间的数据映射成0到200之间的数据
  analogWrite(ledPin, ledValue);   //PWM控制LED灯亮度
  delay(100);
}

通过analogRead()读取光敏电阻与普通电阻串联分压后的电压数据,使用map()函数做重新映射,然后使用analogWrite()函数改变LED灯的亮度。

根据串联分压,光敏电阻上的电压值为R1/(R1+R2) * 5V

通过测试发现遮挡和不遮挡的情况下,模拟输入的范围大概在400~800之间,所以map()函数里面区间为[400,800],由于电源波动或外界干扰等原因,输出的数据可能也会受到一定的影响,你得到的区间可能有变化,需要多次调整测试来达到理想效果。

连接开发板,设置好对应端口号和开发板类型,进行程序下载。

步骤五 验证结果

遮挡光敏电阻,LED灯变亮,无遮挡下,LED灯亮度变暗。

光控灯
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
动态
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论