当前位置: 首页 > news >正文

不只是电压测量:用ADS1115和树莓派DIY一个高精度环境监测站(Python代码分享)

不只是电压测量:用ADS1115和树莓派DIY一个高精度环境监测站(Python代码分享)

树莓派作为创客手中的瑞士军刀,其GPIO扩展能力让各种传感器有了用武之地。但当你需要同时监测多个环境参数时,内置ADC的精度和通道数往往捉襟见肘。ADS1115这款16位ADC芯片,配合Python的简洁语法,可以轻松搭建专业级的多通道监测系统——从土壤湿度到光照强度,甚至电池电压都能一手掌控。

1. 硬件选型与电路设计

ADS1115是TI推出的16位精度、4通道ADC转换器,相比树莓派内置的10位ADC,分辨率提升了64倍。其I2C接口与树莓派完美兼容,工作电压2.0-5.5V的特性也使其能适应各种传感器场景。

典型接线方案

  • SDA → 树莓派GPIO2(物理引脚3)
  • SCL → 树莓派GPIO3(物理引脚5)
  • VDD → 3.3V电源
  • GND → 共地
  • A0-A3 → 传感器信号输入

注意:ADS1115的ALERT引脚需要接10kΩ上拉电阻,输入信号线建议串联499Ω电阻并并联4.7nF电容滤波

传感器选型参考表:

监测参数推荐传感器输出范围转换公式
土壤湿度FC-28电压型0-3V湿度% = (Vout/3)*100
光照强度BH17500-3.3VLux = Vout*1000/3.3
环境温度LM350-1.5V℃ = Vout*100
电池电压电阻分压电路0-5VVin = Vout*(R1+R2)/R2

2. Python驱动开发实战

抛弃复杂的寄存器操作,我们用smbus2库三行代码就能启动ADS1115:

import smbus2 bus = smbus2.SMBus(1) # 树莓派I2C总线编号 DEVICE_ADDRESS = 0x48 # ADS1115默认地址

四步完成数据采集

  1. 配置转换寄存器:
    config = 0x8583 # AIN0-GND, 4.096V量程, 128SPS bus.write_i2c_block_data(DEVICE_ADDRESS, 0x01, [(config>>8)&0xFF, config&0xFF])
  2. 触发单次转换:
    bus.write_byte_data(DEVICE_ADDRESS, 0x01, 0x85)
  3. 等待转换完成(约8ms):
    import time time.sleep(0.01)
  4. 读取转换结果:
    data = bus.read_i2c_block_data(DEVICE_ADDRESS, 0x00, 2) raw = (data[0] << 8) | data[1]

电压转换公式:

def raw_to_voltage(raw, gain=4.096): return (raw * gain) / 32767.0

3. 多传感器融合方案

利用ADS1115的4路差分输入,可以设计多种组合方案:

方案一:独立单端测量

CHANNEL_CONFIG = { 0: 0x8583, # AIN0 1: 0x9583, # AIN1 2: 0xA583, # AIN2 3: 0xB583 # AIN3 } def read_channel(ch): bus.write_i2c_block_data(DEVICE_ADDRESS, 0x01, [(CHANNEL_CONFIG[ch]>>8)&0xFF, CHANNEL_CONFIG[ch]&0xFF]) # ...后续读取操作相同

方案二:差分测量组合

  • AIN0-AIN1:土壤湿度差值监测
  • AIN2-AIN3:温度传感器桥接电路

提示:差分模式能有效抑制共模噪声,特别适合长导线传输场景

4. 数据可视化与持久化

采集到的数据可以通过Flask快速构建Web仪表盘:

from flask import Flask, render_template import sqlite3 app = Flask(__name__) @app.route('/') def dashboard(): conn = sqlite3.connect('sensor.db') data = conn.execute('SELECT * FROM readings ORDER BY time DESC LIMIT 10') return render_template('dashboard.html', readings=data)

定时采集脚本示例:

import schedule def job(): humidity = read_channel(0) light = read_channel(1) timestamp = datetime.now() conn = sqlite3.connect('sensor.db') conn.execute('INSERT INTO readings VALUES (?,?,?)', (timestamp, humidity, light)) conn.commit() schedule.every(5).minutes.do(job) while True: schedule.run_pending() time.sleep(1)

数据库表结构建议:

CREATE TABLE readings ( time TIMESTAMP PRIMARY KEY, humidity REAL, light_intensity REAL, temperature REAL, battery_voltage REAL );

5. 实战技巧与避坑指南

精度优化三要素

  1. 电源去耦:在VDD和GND之间并联10μF+0.1μF电容
  2. 信号滤波:输入通道串联电阻+电容组成低通滤波
  3. 软件校准:采集已知电压值计算比例系数

常见问题排查

  • I2C设备未发现:检查i2cdetect -y 1输出
  • 数据跳动大:尝试降低采样率或增加滤波电容
  • 负电压测量:使用AINx作为参考地构成伪差分输入

性能测试数据

采样率(SPS)实际耗时(ms)噪声水平(mV)
81250.05
1287.80.15
8601.20.8

对于需要长时间运行的项目,建议:

# 在脚本开头添加自启动逻辑 if not os.path.exists('/tmp/sensor_pid'): with open('/tmp/sensor_pid', 'w') as f: f.write(str(os.getpid())) else: print("Already running") exit()

这个项目最让我惊喜的是ADS1115的稳定性——连续运行两周,数据漂移不超过0.5%。特别是在清晨监测露水形成时,16位分辨率能清晰捕捉到湿度曲线的每一个微妙变化。

http://www.gsyq.cn/news/1486080.html

相关文章:

  • 荆州市2026年黄金回收白银回收铂金回收 5 家高性价比门店实地测评盘点 - 三大殿
  • 荆门市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • Hadoop 3.x 实战:手把手教你配置HDFS透明加密与KMS(附常见报错排查)
  • 天津高端全屋定制厂家选购指南:如何选对靠谱高端定制服务商 - 速递信息
  • 聊城市2026年黄金回收白银回收铂金回收 5 家高性价比门店实地测评盘点 - 三大殿
  • 前端开发必看:一招解决图片403防盗链问题,用HTML meta标签轻松搞定
  • 数据科学家必学的Docker容器化实战:从环境隔离到GPU训练部署
  • 无锡市三菱电机空调维修师傅电话|各区金牌师傅,靠谱选欧米到家 - 欧米到家
  • 聊城市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • 远程服务器无图形界面?手把手教你用命令行在CentOS上静默安装Matlab 2019b
  • 芜湖市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • 当“极速神话”遭遇现实:从 yt-dlp 事件看 Bun 的生态困境与技术边界
  • 茂名市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • 电池燃烧抛射试验机采购指南:德迈盛的八边形金属丝罩与全自动控制 - 品牌推荐大师
  • 眉山市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 三大殿
  • 河源市2026年本地黄金回收铂金白银回收哪家强?TOP5 正规门店榜单 +联系方式 - 结束就开始
  • 2026年国内GEO监测工具实战横评:谁才是AI搜索时代的品牌“真探“?
  • Thorium浏览器终极指南:如何通过编译优化让Chromium性能提升3倍 [特殊字符]
  • 5分钟掌握LosslessCut:零编码损耗的视频剪辑终极指南
  • 3分钟永久保存QQ空间记忆:GetQzonehistory开源备份工具完全指南
  • 电源纹波噪声测量:避开三大误区,掌握精准测量方法
  • 从《懒散少年的寓言》到现实:为什么今天的开发者更需要持续学习(附个人知识管理工具推荐)
  • 2026嘉兴免砸砖漏水维修全攻略|卫生间/阳台/厨房/屋顶根治方法+避坑指南|苏易修缮 - 苏易修缮
  • 从一次‘网络故障排查’入手:手把手教你用eNSP调试VLAN隔离与互通问题
  • 避坑指南:Spring Cloud微服务整合Seata时,达梦DM8数据库的兼容性配置实战
  • 温州市方氏建材:瑞安专业的室内外拆除公司 - LYL仔仔
  • USB 枚举失败?别只怪线缆,看看这 3 个电阻与上拉
  • 过冲:拥塞控制的呼吸与盲行
  • AzurLaneAutoScript:碧蓝航线全功能自动化脚本的终极解决方案
  • H3C交换机NETCONF功能开启与排错指南:从SSH配置到端口830连通性测试