You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python传感器转换后无法显示连续数据:水位百分比无输出问题

解决ADS1115水位百分比无输出的问题

嘿,我看你这段代码是想用ADS1115读取水位数据并转成连续百分比显示,但校准后完全没数值输出对吧?咱们一步步来排查问题,把代码修复好。

首先,先看看你原代码里的几个核心问题:

  • 完全没有百分比转换逻辑:你只读取了ADC的原始值,但没把它转换成百分比的计算步骤
  • 缺少校准基准值:要算百分比,必须先知道空水位和满水位对应的ADC原始值,这俩是转换的核心
  • 没有输出语句:就算你计算出了百分比,没print的话也看不到结果
  • 增益参数的使用可能需要确认:read_adc的第二个参数是增益,得和你的传感器输出范围匹配

修复后的完整代码

我给你调整了代码,加上了校准、百分比计算和输出,还做了边界处理提升稳定性:

import RPi.GPIO as GPIO 
import time 
import Adafruit_ADS1x15 
import datetime 

# ---------------------- 关键校准参数!必须实际测量填写 ----------------------
EMPTY_WATER_ADC = 1200   # 把传感器放在空水位时,读取到的ADC原始值
FULL_WATER_ADC = 28500   # 把传感器放在满水位时,读取到的ADC原始值
# -------------------------------------------------------------------------

GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM) 
adc = Adafruit_ADS1x15.ADS1115() 

try:
    while True:
        # 读取ADC原始值,gain=2对应±2.048V,确保和你的传感器输出范围匹配
        raw_adc = adc.read_adc(0, gain=2)  
        
        # 计算水位百分比,处理边界值避免出现负数或超过100%的情况
        if raw_adc <= EMPTY_WATER_ADC:
            water_percent = 0.0
        elif raw_adc >= FULL_WATER_ADC:
            water_percent = 100.0
        else:
            # 线性转换为百分比
            water_percent = ((raw_adc - EMPTY_WATER_ADC) / (FULL_WATER_ADC - EMPTY_WATER_ADC)) * 100
        
        # 格式化输出,带时间戳和原始值方便调试
        current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"[{current_time}] 水位百分比: {water_percent:.2f}% | 原始ADC值: {raw_adc}")
        
        # 控制输出频率,每秒一次,避免刷屏
        time.sleep(1)

except KeyboardInterrupt:
    # 捕获Ctrl+C中断,清理GPIO引脚
    GPIO.cleanup()
    print("程序已退出,GPIO已清理")

几个必须注意的点:

  1. 校准参数一定要实际测量:
    先把传感器放在空的容器里,运行代码看输出的raw_adc值,把这个值填到EMPTY_WATER_ADC;再把传感器放在满水位的容器里,读取raw_adc值填到FULL_WATER_ADC,这一步绝对不能省,不然百分比计算完全不准。
  2. 确认增益参数匹配:
    ADS1115的gain参数对应不同的电压范围:1是±4.096V,2是±2.048V,4是±1.024V等。如果你的传感器输出电压超过你设置的增益范围,读数会被截断,导致异常。
  3. 先排查ADC是否能正常读数:
    如果还是没输出,先把代码简化成只读取并打印raw_adc值,要是连原始值都没有,那大概率是硬件问题:
    • 检查树莓派的I2C是否开启:终端输入raspi-config,找到Interfacing Options -> I2C确认开启
    • 检查接线:ADS1115的VCC接3.3V/5V(看模块说明),GND接树莓派GND,SDA接GPIO2,SCL接GPIO3,传感器输出接A0通道
    • 确认库安装正确:如果是Python3,推荐用新版CircuitPython库,安装命令是pip3 install adafruit-circuitpython-ads1x15,旧的Adafruit_ADS1x15可能不再维护了

内容的提问来源于stack exchange,提问作者Elfin forest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:13:51