本帖最后由 topdog 于 2022-1-30 07:11 编辑
我参加了OpenJumper的开盲盒活动,获得了LM35温度传感器模块、光线传感器模块和声音强度传感器模块。这三个模块体现了OpenJumper产品的特点:设计巧妙,制作精良,物超所值。
我用源地工作室YD-RP2040树莓派核心RP2开发板结合Micropython编程研究了一下,现将心得体会向各位爱好者和先进汇报如下:
这三个模块编程都会使用到ADC,即模拟到数字转换功能。RP2040标准ADC范围为0-3.3V。
RP2040共有5个ADC通道,其中4个是基于12位SAR的ADC: GP26、GP27、GP28和GP29,或者称为ADC0、ADC1、ADC2、ADC3的输入信号可分别与GP26、GP27、GP28、GP29对应起来(连接在Pico板上,GP29连接VSYS,下图未标明GP编号)。第五通道连接内置温度传感器,可用于测量温度。
为什么ADC0、ADC1、ADC2都是12位分辨率的ADC通道,但是用MicroPython编程RP2040时,我们却得到了16位的分辨率呢?实际上,在MicroPython ADC库汇编中,工程师们已经将12位的分辨率缩放为16位的分辨率,这就是为什么我们将接收到的最大ADC值设为65535(即2^16)而不是4096(即2^12)的原因。此刻,我们已经将测量模块的输出引脚连接到了GPIO26即ADC0,通过使用ADC0通道,将在0V和3.3V之间转换ADC的测量值,为了得到电压值,我们还需要乘以转换系数(3.3 / 65536)得到ADC的电压值(V)。
程序如下: [pre]from machine import ADC, Pin
import time
adc = ADC(26)
conversion_factor = 3.3 / 65536
while True:
temp_voltage_raw = adc.read_u16()
print("voltage raw: ", temp_voltage_raw)
time.sleep(1)
print("convert_voltage: ",temp_voltage_raw * conversion_factor)
time.sleep(1)[/pre]
光线传感器模块,“+”接3.3v,“-”接gnd,OUT 接GP26管脚。光线传感器模块板载LM358运算放大器和一枚103电阻(103是10K的电阻。电阻阻值的标注,前两位数字为有效数字,第三位为指数,表示10的X次方。103,即10乘以10的三次方,10K。)根据此信息推断LM358运算放大器的放大倍率为10倍。实验结果如下图:
LM35温度传感器模块电压与摄氏度的比例关系温升是:温度每变化1摄氏度 (C)电压变化10mv,即0.01V。接线和上述实验相同。
程序如下:
[pre]from machine import ADC, Pin
import time
adc = ADC(26)
conversion_factor = 3.3 / 65536
while True:
temp_voltage_raw = adc.read_u16()
convert_voltage = temp_voltage_raw * conversion_factor
tempC = convert_voltage / 0.01
print("tempC: " ,tempC )
time.sleep(2)
tempF = tempC * 9 / 5 + 32
print("tempF: ", tempF)
time.sleep(2)[/pre]
声音强度传感器模块与光线传感器模块使用基本相同,这里就不再重复叙述,不当之处,请多多指正。
|