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已清理")
几个必须注意的点:
- 校准参数一定要实际测量:
先把传感器放在空的容器里,运行代码看输出的raw_adc值,把这个值填到EMPTY_WATER_ADC;再把传感器放在满水位的容器里,读取raw_adc值填到FULL_WATER_ADC,这一步绝对不能省,不然百分比计算完全不准。 - 确认增益参数匹配:
ADS1115的gain参数对应不同的电压范围:1是±4.096V,2是±2.048V,4是±1.024V等。如果你的传感器输出电压超过你设置的增益范围,读数会被截断,导致异常。 - 先排查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可能不再维护了
- 检查树莓派的I2C是否开启:终端输入
内容的提问来源于stack exchange,提问作者Elfin forest
相关产品推荐
相关产品推荐

