ESP32连接光敏传感器,自动控制led灯的光敏开关

本文介绍了使用ESP32与光敏传感器实现自动控制LED灯的电路设计,通过调整光敏模块的阈值,当光照强度低于设定值时LED灯亮,反之则关闭。代码部分展示了如何通过GPIO和串口进行数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计简介

该设计使用esp32连接光敏传感器,根据自己设定的光度阈值来自动控制led灯的亮灭。当光强低于阈值时led灯打开。当光强高于阈值时led灯关闭。

硬件电路连接

引脚部分可以自行定义^,^ 

光敏传感器阈值也可以根据自己所需环境自行调节光敏模块上的调节旋钮,达到自己所需即可。

光敏传感器简介 

        光敏电阻是用硫化隔或硒化隔等半导体材料制成的电阻器,其工作原理是基于内光电效应。随着光照强度的升高,电阻值迅速降低,由于光照产生的载流子都参与导电,在外加电场的作用下作漂移运动,电子奔向电源的正极,空穴奔向电源的负极,从而使光敏电阻器的阻值迅速下降。其在无光照时,几乎呈高阻状态,暗电阻很大。

1、光敏电阻模块对环境光线敏感,一般用来检测周围环境的光线的亮度,触发单片机或继电器模块等;
2、模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平;
3、DO输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境的光线亮度改变;
4、DO输出端可以直接驱动本店继电器模块,由此可以组成一个光控开关
5、小板模拟量输出Ao可以和AD模块相连,通过AD转换,可以获得环境光强更准的数值。

代码实现部分 

#define LED1   5        //定义led引脚
#define LED2   18       //定义led引脚
#define Guang  15       //定义光敏传感器引脚

void setup() {
  Serial.begin(115200);//串口初始化
  Serial.println();
  pinMode(Guang, INPUT);//定义GPIO口为输入模式
  pinMode(LED1, OUTPUT);//定义GPIO口为输出模式
  pinMode(LED2, OUTPUT);//定义GPIO口为输出模式

}

void loop() {
  Serial.println(digitalRead(Guang));//串口打印GPIO口返回值
  if(digitalRead(Guang)==0)//判断返回值
  {
   digitalWrite(LED1, LOW);
   digitalWrite(LED2, LOW);
  }
  else
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
  }
}

欢迎大家积极发表评论,如有什么错误,请大家积极指正。

光敏电阻是一种可以根据环境光线强度变化其阻值的电子元件,通常用于检测光照度。而ESP32是一款高性能、低功耗的微控制器芯片,支持Wi-Fi和蓝牙功能,并拥有丰富的GPIO接口资源。 利用光敏电阻可以实现对LED光亮度的智能调节,在白天强光环境下降低甚至关闭照明;夜晚弱光条件下自动点亮并调整到合适的亮度水平。以下是基于ESP32平台使用光敏电阻控制LED亮度的基本原理及步骤: ### 硬件连接 - **电源供电**:给ESP32板提供稳定的电压输入; - **传感器接入**:将光敏电阻一端接VCC(+5V),另一端串联一个固定电阻后接地(GND),同时从两者的公共节点引出信号线接到ADC模拟量采集口如GPIO34等; - **驱动电路设计**: LED正极通过适当大小限流电阻连至PWM输出脚比如GPIO18上,负极直接回到地线上形成回路; ### 软件编程思路 编写Arduino IDE程序读取来自光电管分压后的电平数值转换成0~1023之间整数表示相对照度等级进而映射为占空比百分比范围内的具体值作为pwm参数设置依据最终改变发光二极管的实际发光强度。 ```cpp #define sensorPin 34 // 光敏电阻所对应的AD采样通道编号 #define ledPin 18 // PWM 输出脚位设定 void setup() { pinMode(sensorPin, INPUT); pinMode(ledPin, OUTPUT); } void loop(){ int val = analogRead(sensorPin); // 获取当前光照度测量结果 float dutyCycle = map(val , 0, 4096, 0, 255); // 将测得的数据转化为适合PWM使用的区间内 if(dutyCycle > 255) { // 对异常情况进行处理避免超出允许的最大限度造成硬件损坏 dutyCycle = 255; } else if (dutyCycle < 0){ dutyCycle = 0 ; } ledcSetup(0, 5000, 8); // 初始化定时器配置频率以及分辨率选项 ledcWrite(0,dutyCycle); // 向指定通道发送相应的高低电脉冲宽度指令从而使外设设备按照预期模式工作起来 } ``` 上述代码段展示了如何初始化系统并在主循环体内不断更新LED的状态来响应周围环境的变化情况。需要注意的是实际应用过程中还需要考虑诸如滤波算法去除噪声干扰等问题以提高系统的鲁棒性和精度表现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值