市面上常见的传感器模块,其输出大体可分为模拟、数字、特定协议输出(例如 RS485、RS232、SPI、CAN、单总线等)。其中,前两种的读取最为简单通用,而使用特定协议的传感器读取方法要参考传感器相应的文档。
本教程以四针脚的光线传感器为例,介绍模拟和数字输出的传感器的读取方法。只有这款四针脚的光线传感器,才可以同时兼具模拟输出(AO 引脚)和数字输出(DO 引脚)。而其他三针脚的传感器,有的仅支持模拟输出,有的仅支持数字输出。
光线传感器对环境光线检测:
AO 脚输出模拟信号,信号量越大表示光线越少。
DO 脚输出数字信号,光线超过一个阈值时输出低电平,反之则输出高电平。这个阈值可以通过转动传感器上的可调电阻来设定。
硬件连接
传感器模块的 VCC 脚接树莓派 Pico 的 3V3。
传感器模块的 GND 脚接树莓派 Pico 的 GND。
传感器模块的 AO 脚接树莓派 Pico 的 GP28。
传感器模块的 DO 脚接树莓派 Pico 的 GP27。
编程
为了便于理解,我们下面的代码中,将读取到的数值进行一个变化。以便让光线越强时显示出来的数值更大(最小值为 0,最大值为 65535),当光线达到阈值时显示 1 而不是 0。
import machine import utime sensor_analog = machine.ADC(28) sensor_digital = machine.Pin(27, machine.Pin.IN) while True: print('Analog value: %d, Digital value: %d.' % (65535 - sensor_analog.read_u16(), 1 - sensor_digital.value())) utime.sleep(0.5)
运行之后,Shell 中每隔 0.5 秒会打印出一行从传感器读取到并转换之后的数据。数值随着环境光线的变化随之变化。
对于其他类似设计的传感器,例如声音传感器、振动传感器、火焰传感器、土壤湿度传感器、水位传感器、雨水传感器等,接线和读取方法以此类推即可。
发表评论