参考:
嘉立创EDA标准版 light-sensor
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的电压
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Ω),情况可能不好,因为如果氛围灯比较暗,可能就不行了
解决办法:
改用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
多个光敏电阻,连接多个IO口的ADC
可以在每个光敏接便宜的单片机,不过成本较高 0.4~0.8元,也需要额外开发程序
ADC芯片成本1.5元左右,最多能扩展6~8个ADC引脚,其实和单独连另一个单片机的方式差不多
使用模拟开关多路复用芯片。成本 0.4元左右,如CD4051BM
地址控制IO数量:3
占用ADC引脚:1
综上,仅需4个引脚就能扩展8个ADC
如果要扩展 16 个ADC,需要外接移位寄存器,如74HC595A (富满)0.4元,占用3个IO口SCK、RCK、SER,30MHZ,约9个时钟周期完成一次串行数据传输。每次传输大约耗费 1/30Mhz * 9 = 0.3 us
电压:2节1.25V = 2.5V
电流:1.96ma
电阻:单条电线4.6Ω
灯串大约有30个LED灯,全部以并联的方式连接。
灯串上没有接限流电阻,单条线仅4.6Ω,由伏安特性可知,LED是非线性元件,增加一点点电压会造成电流大幅度增加,当电压超过2V,如果没有加限流电阻,电流瞬间会达到几百毫安甚至几安,容易使灯串烧毁。
上图是从立创商城的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忽略不计
数字万用表测量:
档位调整到hFE,确定万用表是NPN还是PNP,插入到数字万用表对应的孔位中,有数值显示说明电极对应。
我的三极管s9011,圆弧面是背面,平面是正面,从左到右分别是EBC。
PS:网上的引脚图不正确。
平视图为三极管平面,从左到右接:正极、门极、负极
工作时管压降1.7V
注意:led管压降为0.7V,而三极管导通时管压降有1.7V,串联到开关上意味着有2.4V的工作电压,如果电池串联电压低于2.4V,它们的PN结处于完全截止的状态,led是无法工作的。电源必须要大于截止电压才能工作。
实测2.6V时,灯串处于完全截止状态,看不到任何亮光。
价格:0.7元 7路控制,平均每路 0.1 元
每路电流 500mA
74HC595是一款专用的led驱动芯片
可以接单路50mA以内的负载,对于灯串绰绰有余
占用IO口较少
缺点是需要开发驱动程序,PWM调光更加麻烦
综上,如果驱动通路较少,可以选用三极管