树莓派资料
显示屏资料
系统下载
树莓派Pico
首页 动态 发帖 版块 我的
 退出
游客  
等级:
金币:
经验值:

树莓派Pico使用水位传感器water sensor读取ADC值Python代码

  69 
 0
 2
趣    

一:传感器介绍

 这是一款简单易用,性价比高的水位/液滴传感器,它通过暴露的5条平行导线来测量其水滴/水量的多少从而判断水位,它自带水量到模拟量的转换,输出的是模拟量信号,可以直接被单片机采集读取,从而达到水位读取效果。理论上,此传感器将输出0-1024之间的模拟信号,但随着PCB上的走线长度的增加,可以发现范围在480至〜710之间。传感器的输出电压为0-4.2 V

产品信息详细参数
工作电压3~5V
工作电流<20mA ,低功耗特性,节能且不易发热
测量深度4cm
工作湿度10% - 90% 无凝结 ,适应一定湿度环境
输出信号AD模拟量信号
工作温度10℃ - 30℃ ,在此温度区间内稳定工作
检测面积40mm x 16mm 
产品尺寸62mm x 20mm x 8mm 
产品重量约3.5g 
输出特性水位未浸入时输出值为 0 ,随着浸入深度增加,模拟引脚输出值增大,完全浸入时输出值最大约 670 



水位传感器原理图

模拟量输出值对应参考值(近似值)

480 = 0毫米

530 = 5毫米

615 = 10毫米

660 = 15毫米

680 = 20毫米

690 = 25毫米

700 = 30毫米

705 = 35毫米

710 = 40毫米

传感器分辨率随着水位的增加而降低。使用前需要先校准深度,可以先将传感器插入水中,直到是您认为的最小深度。在观察ADC中的值进行修改成最低位置。

二:硬件接线

树莓派pico水位传感器
3.3+正极
GND-负极
GP26S模拟量信号输出



接线图

Image

三:Python代码

from machine import ADC, Pin
import time

# 配置ADC引脚
adc = ADC(26)  # GP26连接到传感器

# 校准参数(根据实际传感器特性调整)
VOLTAGE_MIN = 0.0       # 对应0%水位的电压
VOLTAGE_MAX = 1.75      # 对应100%水位的电压
WATER_DEPTH_MIN = 0     # 最小水位深度(cm)
WATER_DEPTH_MAX = 5     # 最大水位深度(cm)  <-- 修改为4cm
ADC_REF = 3.3           # ADC参考电压
ADC_RESOLUTION = 65535  # 16位ADC

# 可选:配置LED指示灯
led_low = Pin(16, Pin.OUT)  # 低水位LED
led_high = Pin(17, Pin.OUT) # 高水位LED

def map_value(value, in_min, in_max, out_min, out_max):
    """将一个范围的值映射到另一个范围"""
    return (value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

def read_water_level():
    """读取并计算水位深度"""
    # 读取ADC值并转换为电压
    adc_value = adc.read_u16()
    voltage = adc_value * (ADC_REF / ADC_RESOLUTION)
    
    # 限制电压在有效范围内
    voltage = max(min(voltage, VOLTAGE_MAX), VOLTAGE_MIN)
    
    # 将电压映射到水位深度
    depth = map_value(voltage, VOLTAGE_MIN, VOLTAGE_MAX, 
                     WATER_DEPTH_MIN, WATER_DEPTH_MAX)
    
    return depth, voltage, adc_value

def main():
    try:
        print("水位监测系统已启动...")
        while True:
            # 读取水位数据
            depth, voltage, adc_value = read_water_level()
            
            # 控制LED指示灯
            if depth < WATER_DEPTH_MAX * 0.2:  # 水位低于20%
                led_low.on()
                led_high.off()
            elif depth > WATER_DEPTH_MAX * 0.8:  # 水位高于80%
                led_low.off()
                led_high.on()
            else:
                led_low.off()
                led_high.off()
            
            # 打印结果
            print(f"ADC值: {adc_value}, 电压: {voltage:.3f}V, 水位: {depth:.1f}cm")
            
            # 延时
            time.sleep(1)
            
    except KeyboardInterrupt:
        print("程序已停止")
        # 关闭所有LED
        led_low.off()
        led_high.off()

if __name__ == "__main__":
    main()    


运行结果:

Image



标签:
作者签名:    楼主  2025-05-25 22:50:59
回复列表
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权
您的IP: 18.97.14.82 , 2025-06-19 14:56:15
Powered by RASPI _VERSION
© 2017-2025 树莓派极客版权