light-sensor-doc.md 5.1 KB

硬件

开发板

参考:

https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/hw-reference/esp32/get-started-devkitc.html

img

esp32 引脚图

img

img

电路图

嘉立创EDA标准版 light-sensor

ADC

MicroPython 参考:http://docs.micropython.org/en/latest/esp32/quickref.html#adc-analog-to-digital-conversion

基准电压

ADC的基准电压是1.8V,因此接3.3V分压光敏电阻,很难达到1.8V以下

光敏分压始终在2~3.3V,参考MicroPython文档,可以将atten关键字设置增益,让它能读取超过1.8V的电压

image-20220720224520754

    adc = ADC(Pin(34),atten=ADC.ATTN_11DB)        # create an ADC object acting on a pin

    while True:
        val = adc.read_u16()  # read a raw analog value in the range 0-65535
        print('val16:', val)
        time.sleep(1)

不过遗憾的是,在夜间开灯的情况下,分压仍有1.82V,val = 65536(8.5kΩ),意味着光线稍暗可能就一直检测不到了

开了台灯直射,0.7V ,val = 47307(1.9KΩ),情况可能不好,因为如果氛围灯比较暗,可能就不行了

解决办法:

  1. 更换亮电阻为 5K以下的光敏电阻
  2. 把电压改为1.8V,这样一来光敏电阻分压最高也只能达到1.8V
  3. 把分压电阻改为20K以上,10/(10+20) * 3.3 = 1.09

改用2~5K的光敏电阻

5506 光敏电阻

https://detail.tmall.com/item.htm?id=536099588726&spm=a1z09.2.0.0.64fa2e8dKXGjcQ&_u=kucunghf639

5/(5+20) * 3.3 = 0.66V

方案评估

ADC电路

直连ADC引脚

单个光敏电阻时,直接连接ADC

多个光敏电阻,连接多个IO口的ADC

单片机IIC协议ADC

可以在每个光敏接便宜的单片机,不过成本较高 0.4~0.8元,也需要额外开发程序

ADC芯片扩展IO口

ADC芯片成本1.5元左右,最多能扩展6~8个ADC引脚,其实和单独连另一个单片机的方式差不多

ADC分时复用(推荐)

4 IO扩展8通道

使用模拟开关多路复用芯片。成本 0.4元左右,如CD4051BM

地址控制IO数量:3

占用ADC引脚:1

综上,仅需4个引脚就能扩展8个ADC

4 IO 扩展16+通道

如果要扩展 16 个ADC,需要外接移位寄存器,如74HC595A (富满)0.4元,占用3个IO口SCK、RCK、SER,30MHZ,约9个时钟周期完成一次串行数据传输。每次传输大约耗费 1/30Mhz * 9 = 0.3 us

led及驱动

彩灯灯串

电压:2节1.25V = 2.5V

电流:1.96ma

电阻:单条电线4.6Ω

灯串大约有30个LED灯,全部以并联的方式连接。

灯串上没有接限流电阻,单条线仅4.6Ω,由伏安特性可知,LED是非线性元件,增加一点点电压会造成电流大幅度增加,当电压超过2V,如果没有加限流电阻,电流瞬间会达到几百毫安甚至几安,容易使灯串烧毁。

image-20220709033416930

上图是从立创商城的led 0603 数据手册截取而来,大多led灯典型电压都是 1.8~2.4V,不知道这个灯串为什么可以连接高达3V,甚至5V还能保持正常。猜测可能是LED款式不一样。

通电 5V,15MA

4.5,9.9

4V,6.5MA

三极管

esp上电默认低电平,应选择NPN

三极管自带管压降,需使用高于 3.3 + 0.7V 的电源,因为LED正常亮度需要 3.3V左右

电流 200mA 以内

价格:比较实惠,0.03元一个,限流电阻0.004忽略不计

S9011三极管

数字万用表测量:

档位调整到hFE,确定万用表是NPN还是PNP,插入到数字万用表对应的孔位中,有数值显示说明电极对应。

我的三极管s9011,圆弧面是背面,平面是正面,从左到右分别是EBC。

PS:网上的引脚图不正确。

平视图为三极管平面,从左到右接:正极、门极、负极

工作时管压降1.7V

注意:led管压降为0.7V,而三极管导通时管压降有1.7V,串联到开关上意味着有2.4V的工作电压,如果电池串联电压低于2.4V,它们的PN结处于完全截止的状态,led是无法工作的。电源必须要大于截止电压才能工作

实测2.6V时,灯串处于完全截止状态,看不到任何亮光。

ULN2003

价格:0.7元 7路控制,平均每路 0.1 元

每路电流 500mA

74HC595

74HC595是一款专用的led驱动芯片

可以接单路50mA以内的负载,对于灯串绰绰有余

占用IO口较少

缺点是需要开发驱动程序,PWM调光更加麻烦

综上,如果驱动通路较少,可以选用三极管