news 2026/5/30 19:57:30

基于ESP8266与ADS1115的智能灌溉压力监测系统DIY指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ESP8266与ADS1115的智能灌溉压力监测系统DIY指南

1. 项目概述:从灌溉故障到智能预警的DIY之路

去年夏天,我给自家花园装了一套自动灌溉系统,并接入了Home-Assistant,想着从此就能高枕无忧,做个“甩手掌柜”。没想到,现实很快给了我几个下马威。系统总在凌晨5点浇水,好几次我起床后发现,要么草坪一片干旱,要么某个角落成了“水塘”。问题出在哪?是泵坏了,还是管子漏了?等我发现时,损失已经造成,尤其是外出度假时,更是鞭长莫及。

经过一番排查,我锁定了三个“罪魁祸首”:一是水泵的漏水保护功能过于敏感,一根软管轻微渗漏就会导致整个泵站停机;二是水泵的前置过滤器容易被杂质堵塞,导致水泵无法正常吸水或建立水压;三是灌溉主管路上的叠片过滤器也会堵塞,直接造成喷头水压不足。这些故障的共同点,都是系统水压的异常变化。如果能实时、精确地监测关键点的压力,就能在问题刚冒头时发出警报,甚至自动触发应对措施。

恰巧,我用的Rain Bird叠片过滤器预留了两个G1/4”内螺纹的压力传感器接口,这简直是天赐良机。我的思路很简单:在过滤器进水口出水口各安装一个压力传感器。通过对比这两个点的压力值,就能精准定位故障源。如果进水口压力不足,问题很可能出在水泵或前置过滤器;如果进水口压力正常而出水口压力骤降,那基本就是叠片过滤器堵了。基于这个判断,我就能通过Home-Assistant发送手机推送,或者在特定条件下自动执行“反冲洗”等操作来尝试清除故障。

这个方案的核心硬件并不复杂:一个负责联网和逻辑控制的ESP8266微控制器(我手头正好有块D1 Mini),一个能将传感器模拟信号高精度数字化的ADS1115模数转换器,以及两个量程合适的压力传感器。软件层面,我选择了ESPHome框架,它能让我用YAML配置文件快速定义设备功能,并无缝集成到Home-Assistant中。整个项目从构思、原型测试到最终封装上墙,集中在一个周末搞定,下文我将拆解每一个步骤,分享其中的设计思路、实操细节以及我踩过的那些坑。

2. 核心硬件选型与电路设计解析

一套可靠的监测系统,硬件是基石。选型不仅要考虑性能参数,更要兼顾实际安装环境、供电和信号处理的便利性。我的选型过程就是一系列权衡与妥协的结果。

2.1 压力传感器:量程、接口与信号特性

我的灌溉泵标称最大压力约为4.5巴(Bar)。为留有余量,我选择了量程为0-10巴的传感器。市面上常见的有电压输出型和电流输出型(如4-20mA)。电流型抗干扰能力强,适合远距离传输,但需要额外的电源和接收电路。对于我的短距离(几米内)柜内安装,0.5-4.5V电压输出型更为简单直接,其输出与压力呈线性关系。

传感器型号是WNK83MA,螺纹规格为G1/4”外螺纹,这与过滤器接口匹配。它需要5V供电,输出信号在0巴(表压,即大气压)时为0.5V,在10巴时为4.5V。这意味着在4.5巴的工作点,输出电压大约在2.3V左右。这个电压范围是后续选择ADC(模数转换器)的重要依据。

注意:购买时务必确认传感器的压力类型(表压、绝压或密封压)。灌溉系统监测通常使用表压传感器,其零压参考点为当地大气压。还要注意介质兼容性,确保传感器接触水的部件(通常是不锈钢膜片)能耐受灌溉用水可能含有的氯离子和杂质。

2.2 模数转换器(ADC):为何必须外置?

ESP8266的D1 Mini开发板本身有一个10位精度的ADC引脚(A0),但只能接一个传感器。虽然有些ESP32型号有多个ADC通道,但其中一个通道(ADC2)在Wi-Fi工作时无法使用,这对于需要持续联网上报数据的物联网设备来说是致命缺陷。因此,使用一个多通道、高精度的外部ADC是必然选择。

我选择了ADS1115。理由如下:

  1. 高精度:16位分辨率,远高于ESP8266内置的10位ADC。对于压力监测,更高的精度意味着能分辨更微小的压力变化,提前发现堵塞趋势。
  2. 多通道:提供4个差分或单端输入通道,我只需要2个,未来扩展余地大。
  3. I2C接口:仅需两根信号线(SDA, SCL)即可通信,节省微控制器IO口。
  4. 可编程增益放大器(PGA):增益可调(最高至16倍),能适配不同幅度的输入信号,充分利用ADC的量程,提高测量精度。

这里有一个关键的设计细节:电平匹配问题。ADS1115的输入电压绝对不能超过其供电电压(VDD)+0.3V。我的传感器用5V供电,最大输出4.5V。如果ADS1115也用5V供电,那么4.5V输入是安全的。但我为了简化电路,想直接用ESP8266的3.3V为ADS1115供电,这样两者的I2C通信就无需电平转换。此时,ADS1115的VDD=3.3V,其最大允许输入电压为3.6V。而我的传感器在5巴时输出约2.25V,在10巴时才达到4.5V。考虑到我的泵实际最大压力仅4.5巴,且有安全余量,传感器输出预计不会超过2.5V,低于3.6V的限制。因此,让ADS1115工作在3.3V,直接连接5V供电的传感器输出,在这个具体应用场景下是可行的风险权衡。如果你的系统压力可能更高,则必须采用5V为ADS1115供电,并在其I2C线上增加电平转换电路。

2.3 微控制器与电源:稳定是王道

ESP8266(D1 Mini)是物联网项目的“万金油”,功耗低、Wi-Fi稳定、生态丰富。选择它毫无悬念。电源方面,我翻出一个闲置的迷你220V AC转5V DC、600mA的电源模块。ESP8266和ADS1115功耗都很低,两个压力传感器也属于静态功耗很小的器件,600mA的容量绰绰有余。我将此5V电源直接供给两个压力传感器,同时通过D1 Mini板载的3.3V稳压器,为ESP8266和ADS1115提供3.3V电源。这种供电方案避免了多个电源引入的共地噪声问题。

2.4 电路连接与PCB布局

在洞洞板上搭建最终电路时,我遵循了以下原则:

  1. 电源去耦:在ESP8266和ADS1115的电源引脚附近,都放置了0.1uF的陶瓷电容,用于滤除高频噪声。
  2. I2C上拉电阻:D1 Mini板载了I2C总线的上拉电阻,通常无需外接。但如果总线较长或设备较多,可以额外在SDA和SCL线上各加一个4.7kΩ上拉电阻到3.3V,以确保信号质量。
  3. ADS1115地址设置:ADS1115的ADDR引脚决定了其I2C地址。我将它接地(GND),将地址固定为0x48。如果需要连接多个ADS1115,可以通过将此引脚接至VDD或SDA等来改变地址。
  4. 传感器线缆保护:连接压力传感器的三芯线(5V、GND、信号)我穿入了直径20mm的波纹管,并在进入控制箱处使用防水格兰头,防止鼠咬和机械损伤。

最终的接线非常简单:

  • ADS1115:VDD接3.3V,GND接GND,SDA接D2(GPIO4),SCL接D1(GPIO5)。A0、A1分别接两个压力传感器的信号线(黄线)。
  • 压力传感器:红线接5V电源正极,黑线接5V电源负极(同时也是系统的GND参考点),黄线(信号)接ADS1115的A0或A1。
  • 电源:5V电源正极接传感器红线和D1 Mini的5V引脚,负极接所有GND。

3. 软件配置:ESPHome从入门到精通

ESPHome的强大之处在于,你几乎不用写传统的C++代码,通过声明式的YAML配置文件就能定义设备的所有功能。下面是我的核心配置文件详解。

3.1 基础设备与日志配置

esphome: name: irrigation-pressure friendly_name: Irrigation-Pressure esp8266: board: esp01_1m platform_version: 2.7.4 # 建议指定一个稳定版本 # 启用日志,调试时可设为DEBUG,稳定后设为WARN或ERROR以减少网络流量 logger: level: WARN baud_rate: 0 # 禁用串口日志,仅通过网络输出 # 状态指示灯,利用板载LED,正常运行时低电平点亮 status_led: pin: number: GPIO2 inverted: true

friendly_name这个设置很重要,它会在Home-Assistant中显示为一个友好的设备名。platform_version锁定ESP8266核心版本,可以避免因自动更新带来的意外兼容性问题。

3.2 I2C总线与ADS1115传感器定义

i2c: sda: GPIO4 scl: GPIO5 scan: false # 初始调试时可设为true以确认设备地址,正常后设为false sensor: - platform: ads1115 address: 0x48 gain: 4.096 # 增益设置,对应量程为±4.096V update_interval: 1s # 采样间隔,1秒对于压力监测足够 # 通道0:过滤器进水口压力 multiplexer: A0_GND # 测量A0引脚对GND的电压(单端输入) id: pressure_inlet_raw name: "Inlet Pressure Raw" unit_of_measurement: "V" accuracy_decimals: 4 filters: - median: # 中值滤波,取5次采样的中间值,有效抑制尖峰噪声 window_size: 5 send_every: 2 - lambda: 'return x * 1000.0;' # 将伏特转换为毫伏,方便后续计算 # 通道1:过滤器出水口压力 multiplexer: A1_GND id: pressure_outlet_raw name: "Outlet Pressure Raw" unit_of_measurement: "V" accuracy_decimals: 4 filters: - median: window_size: 5 send_every: 2 - lambda: 'return x * 1000.0;'

这里有几个关键点:

  1. 增益(Gain):设置为4.096,意味着ADC将±4.096V的输入范围映射到其全部的16位输出。我的信号最大约2.5V,在此量程下能获得最佳分辨率。
  2. 滤波(Filters)median中值滤波器是处理传感器读数跳动的利器。它取最近N次采样(窗口大小)的中位数作为输出,能有效滤除偶发的、幅度大的干扰脉冲,比简单的移动平均滤波效果更好。send_every: 2表示每2次更新才向Home-Assistant发送一次数据,减少网络流量。
  3. Lambda转换:在滤波后立即将电压值乘以1000,单位从V变为mV。这样做是因为后续的线性插值校准在mV级别进行时,系数更直观,且能避免YAML配置文件处理过小浮点数时可能出现的精度问题。

3.3 压力值计算、校准与差分传感器

原始电压值需要转换为有意义的压力值(巴),并计算进出口压差。

sensor: # 进水口压力校准与计算 - platform: template name: "Inlet Pressure" id: pressure_inlet unit_of_measurement: "bar" icon: "mdi:water-pump" device_class: "pressure" state_class: "measurement" accuracy_decimals: 2 update_interval: 2s # 继承上游传感器的更新节奏 lambda: |- float mv = id(pressure_inlet_raw).state; // 获取以mV为单位的原始值 // 线性插值校准:y = k*x + b // 通过实测数据点计算得出,示例数据如下: // 0.5 bar -> 642 mV, 5.0 bar -> 2534 mV float pressure = (mv - 642.0) / (2534.0 - 642.0) * (5.0 - 0.5) + 0.5; return pressure; filters: - delta: 0.01 # 仅当压力变化超过0.01 bar时才更新状态,减少不必要的数据传输 # 出水口压力校准与计算(公式同理,但校准系数可能因传感器个体差异而不同) - platform: template name: "Outlet Pressure" id: pressure_outlet unit_of_measurement: "bar" icon: "mdi:sprinkler" device_class: "pressure" state_class: "measurement" accuracy_decimals: 2 update_interval: 2s lambda: |- float mv = id(pressure_outlet_raw).state; // 假设另一个传感器的校准点:0.5 bar -> 635 mV, 5.0 bar -> 2520 mV float pressure = (mv - 635.0) / (2520.0 - 635.0) * (5.0 - 0.5) + 0.5; return pressure; filters: - delta: 0.01 # 计算压差:这是一个非常重要的诊断指标 - platform: template name: "Pressure Difference" id: pressure_diff unit_of_measurement: "bar" icon: "mdi:delta" accuracy_decimals: 3 lambda: |- return id(pressure_inlet).state - id(pressure_outlet).state; filters: - delta: 0.005 # 压差变化敏感度更高 - throttle_average: 10s # 对压差进行10秒平均,使其更稳定

校准是精度保障的核心。我采用的方法是:

  1. 在系统运行时,同时记录传感器输出电压(mV)和一个可信的参考压力表读数(Bar)。
  2. 至少取两个点(例如系统静止时的低压点和泵全开时的高压点),记录多组数据。
  3. 在Excel或任何绘图工具中,以电压为X轴,压力为Y轴,绘制散点图并添加线性趋势线。
  4. 获取趋势线的公式y = k*x + b,其中的斜率k和截距b就是校准系数。
  5. 将系数代入上述Lambda表达式中。calibrate_linear指令本质上就是执行这个线性方程计算。

实操心得:校准最好在系统水温与环境温度接近时进行,因为传感器输出可能有轻微的温度漂移。压差传感器throttle_average(节流平均)滤波非常有用,因为单次采样的微小波动在求差后可能会被放大,进行短期平均能获得更平滑、更有代表性的压差值。

3.4 OLED显示屏的集成(可选但推荐)

添加一个小型OLED显示屏(我用的0.96寸SSD1306)能让你在现场无需打开手机APP就能快速查看状态,调试时尤其方便。

font: - file: "gfonts://Roboto" id: roboto_small size: 12 display: - platform: ssd1306_i2c model: "SSD1306 64x48" address: 0x3C update_interval: 1s lambda: |- // 第一行:进水压力 it.printf(0, 0, id(roboto_small), "In:%.2f", id(pressure_inlet).state); // 第二行:出水压力 it.printf(0, 16, id(roboto_small), "Ot:%.2f", id(pressure_outlet).state); // 第三行:压差,用箭头图标指示方向 float diff = id(pressure_diff).state; if (diff > 0.01) { // 进水压力大于出水压力 it.triangle(0, 35, 5, 42, 10, 35); // 向下箭头,表示压力下降 } else if (diff < -0.01) { // 理论上不应出现,但保留逻辑 it.triangle(0, 42, 5, 35, 10, 42); // 向上箭头 } it.printf(15, 33, id(roboto_small), "D:%.2f", fabsf(diff)); // 显示压差绝对值

由于ESP8266和ADS1115已占用I2C总线,OLED屏可以直接并联上去,只需确保其I2C地址(通常是0x3C)不冲突即可。这段Lambda脚本让屏幕实时显示三个关键数据,并通过一个简单的箭头图形直观显示压差方向。

4. 机械安装与现场施工要点

电路和代码搞定只算成功了一半,把设备可靠地安装到潮湿、震动的现场环境,是另一个挑战。

4.1 传感器与过滤器的连接

Rain Bird过滤器的压力接口是G1/4”内螺纹,而传感器是外螺纹。我需要一个“双内螺纹”的90度弯头(G1/4” female to female elbow)作为转接,这样传感器才能水平朝向侧面安装,避免线缆朝下易积水和承重。

密封是重中之重。塑料或金属螺纹连接,必须使用聚四氟乙烯生料带(Teflon Tape)。缠绕时注意方向:面向螺纹,顺时针缠绕(即顺着螺纹拧紧的方向)。通常缠绕4-5圈即可,切勿过多,否则拧入时多余的生料带可能被挤入管道内部造成堵塞。绝对不要用麻丝或液态生料,它们在塑料螺纹上效果不好,且麻丝遇水膨胀可能胀裂塑料件。

4.2 打孔与安装

  1. 安全第一:关闭水源,释放管路压力。拧开过滤器罐体,取出滤芯。这一步至关重要,防止钻孔时的塑料碎屑掉入下游管路。
  2. 定位与钻孔:在过滤器进出水口附近的平整壳体上,标记两个安装孔位。使用6mm钻头缓慢钻孔。钻孔后,务必用更大一号的钻头或专用工具去除孔边的毛刺,防止刮伤传感器线缆。
  3. 清洁:用清水彻底冲洗过滤器壳体内部,确保无任何碎屑残留。
  4. 组装:按顺序组装:先将弯头缠好生料带,拧入过滤器壳体;再将传感器缠好生料带,拧入弯头。使用扳手适度拧紧,切忌用力过猛导致塑料螺纹滑牙。

4.3 控制箱与走线

我设计并3D打印了一个小型防水盒。内部用M2螺丝将洞洞板固定。电源模块、D1 Mini、ADS1115和OLED屏都集成在洞洞板上。传感器线缆通过防水格兰头引入箱内。箱体背面开有散热孔,但位置需确保雨水不会直接溅入。

踩坑记录:最初我将控制箱安装在阳光直射的墙壁上。夏季高温导致箱内温度超过50℃,ESP8266偶尔出现无线连接不稳定的情况。后来我将箱子移到了背阴处,并在箱体顶部加了一个小型遮阳罩,问题彻底解决。户外电子设备,散热和防晒必须考虑。

5. 系统集成、自动化与故障诊断

设备上线后,真正的价值在于与智能家居平台的联动和基于数据的自动化。

5.1 接入Home-Assistant

在ESPHome中编译固件并通过OTA(无线)更新到设备后,在Home-Assistant的“集成”页面添加ESPHome设备,输入设备的主机名或IP地址即可。所有在ESPHome中定义的传感器(压力、压差)和状态灯实体都会自动出现。

5.2 创建监控仪表盘

在Home-Assistant的Lovelace仪表盘中,可以创建直观的监控界面:

type: vertical-stack cards: - type: gauge entity: sensor.inlet_pressure name: 进水压力 min: 0 max: 6 severity: green: 3 yellow: 2 red: 0 - type: gauge entity: sensor.outlet_pressure name: 出水压力 min: 0 max: 6 - type: sensor entity: sensor.pressure_difference name: 滤网压差 graph: line detail: 1 - type: history-graph entities: - sensor.inlet_pressure - sensor.outlet_pressure hours_to_show: 24

压力表盘可以设置颜色预警(如低于2巴变黄,低于1巴变红),历史曲线图能帮助你分析压力随时间的变化模式,比如发现夜间压力缓慢下降可能预示着微小泄漏。

5.3 构建自动化与预警规则

这才是系统的“大脑”。我设置了如下几条核心自动化规则:

  1. 低进水压力报警(预示水泵或前置过滤器故障):

    alias: "报警:灌溉系统进水压力过低" trigger: platform: numeric_state entity_id: sensor.inlet_pressure below: 1.5 # 根据你的水泵正常最低压力设定 for: minutes: 2 # 持续2分钟低压才报警,避免短暂波动误报 action: - service: notify.mobile_app_my_phone data: title: "🚨 灌溉系统警报" message: "进水压力持续低于1.5巴,请检查水泵或前置过滤器!"
  2. 高滤网压差报警(预示叠片过滤器堵塞):

    alias: "报警:过滤器压差过高需清洗" trigger: platform: numeric_state entity_id: sensor.pressure_difference above: 0.5 # 清洁滤网的压差通常小于0.2巴,0.5巴已严重堵塞 for: minutes: 5 action: - service: notify.mobile_app_my_phone data: title: "⚠️ 过滤器堵塞警告" message: "过滤器前后压差已达{{ states('sensor.pressure_difference') }}巴,建议立即反冲洗或清洗滤网。"
  3. 自动反冲洗尝试(在报警后自动执行):

    alias: "自动尝试反冲洗过滤器" trigger: platform: numeric_state entity_id: sensor.pressure_difference above: 0.5 for: minutes: 2 condition: # 增加条件,避免夜间扰民或无效操作 - condition: time after: "08:00:00" before: "20:00:00" - condition: state entity_id: switch.garden_water_supply state: 'on' action: - service: switch.turn_off target: entity_id: switch.garden_water_supply - delay: minutes: 1 # 停水1分钟,让滤网杂质沉降 - service: switch.turn_on target: entity_id: switch.garden_water_supply # 反冲洗后,等待一段时间再次检查压差 - delay: minutes: 3 - choose: - conditions: - condition: numeric_state entity_id: sensor.pressure_difference below: 0.2 sequence: - service: notify.mobile_app_my_phone data: message: "自动反冲洗成功,压差已恢复正常。" default: - service: notify.mobile_app_my_phone data: message: "自动反冲洗后压差仍高,请手动清洗滤网!"

5.4 常见问题排查实录

即使设计再完善,实际运行中也可能遇到问题。以下是我遇到和可能遇到的故障及排查方法:

现象可能原因排查步骤
Home-Assistant中无设备或实体丢失1. ESP设备未联网。
2. ESPHome配置中api加密密钥不匹配。
3. 防火墙/网络阻止了通信。
1. 检查设备指示灯,在ESPHome日志中查看连接状态。
2. 核对HA集成添加时的密钥与ESPHome配置api下的encryption字段。
3. 尝试在路由器后台查看设备是否获取到IP,并尝试在局域网内用浏览器访问http://设备名.local
压力读数恒为0或异常固定值1. 传感器供电异常(非5V)。
2. 信号线接触不良或断开。
3. ADS1115 I2C地址错误或未连接。
4. ESPHome配置中multiplexer设置错误。
1. 用万用表测量传感器红黑线间电压,确保为稳定的5V。
2. 测量传感器黄线(信号)对GND电压,用手按压传感器膜片,看电压是否变化(0.5-4.5V范围)。
3. 在ESPHome配置中开启i2c: scan: true,查看日志确认检测到的I2C地址。
4. 确认multiplexer设置为正确的通道,如A0_GND
压力读数跳动剧烈(噪声大)1. 电源噪声。
2. 传感器信号线未使用屏蔽线或走线靠近干扰源。
3. 软件滤波参数不足。
1. 确保电源模块质量,在ESP8266和ADS1115的电源引脚附近增加10uF电解电容并联0.1uF陶瓷电容。
2. 将传感器信号线改用屏蔽线,屏蔽层单端接地(接控制箱内的GND)。
3. 增强软件滤波:增大median滤波的window_size,或增加throttle_average的平均时间。
压力读数与机械表偏差大且不线性1. 传感器校准系数错误。
2. 传感器量程选择不当(过载或未充分利用)。
3. ADS1115增益设置不当。
1. 重新执行校准流程,获取多组数据点(至少3个,覆盖常用范围)。
2. 确认系统最大压力在传感器量程的50%-80%之间为佳。
3. 根据传感器最大输出电压,调整ADS1115的gain值,使信号尽可能接近但不超过ADC量程。
Wi-Fi频繁断开重连1. 信号强度弱。
2. 设备供电不足或电压不稳。
3. 环境温度过高。
1. 检查ESP的Wi-Fi RSSI值(在日志或HA传感器中可查看),考虑增加Wi-Fi中继器。
2. 使用万用表监测设备运行时5V和3.3V电压是否稳定,尤其在水泵启动瞬间。
3. 改善控制箱散热,避免阳光直射。

这个项目运行数月以来,成功预警了两次前置过滤器堵塞和一次因接头松动导致的微小泄漏。它从一个被动响应的灌溉系统,变成了一个具备初步“感知”和“预警”能力的智能系统。整个构建过程最深的体会是,物联网项目成功的关键在于对物理世界的深刻理解(如水压特性、机械安装)与数字世界的灵活工具(如ESPHome、Home-Assistant自动化)的结合。从明确问题(压力异常)到定义解决方案(差分监测),再到选型、实现和集成,每一步的理性推敲和务实妥协,最终汇聚成了一个稳定可靠、真正解决问题的作品。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 19:54:31

设备树驱动修改

根据您提供的原始设备树、修改后设备树、修改前的GPIO状态和修改后的GPIO状态&#xff0c;我通过对比分析&#xff0c;总结出以下引脚配置的变化。这些变化反映了您基于BCU原理图对设备树进行的调整。一、设备树修改概览主要修改集中在以下几个部分&#xff1a;新增/启用了 CAN…

作者头像 李华
网站建设 2026/5/30 19:52:48

百度网盘提取码3秒获取:一键解锁加密资源的终极指南

百度网盘提取码3秒获取&#xff1a;一键解锁加密资源的终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而烦恼吗&#xff1f;每次遇到需要提取码的分享链接&#xff0c;都要花费大量时间在各种…

作者头像 李华
网站建设 2026/5/30 19:52:46

基于Slayer Exciter的迷你固态特斯拉线圈:从电路原理到调谐实战

1. 项目概述&#xff1a;从零打造一个掌上“闪电发生器” 如果你对高压放电产生的绚丽电弧着迷&#xff0c;但又对传统特斯拉线圈庞大的体积和复杂的驱动电路望而却步&#xff0c;那么这个项目可能就是为你准备的。今天要分享的&#xff0c;是一个基于 Slayer Exciter 拓扑的…

作者头像 李华
网站建设 2026/5/30 19:48:33

SchNet实战:用Python和PyTorch快速搭建你的第一个分子能量预测模型

SchNet实战&#xff1a;用Python和PyTorch快速搭建你的第一个分子能量预测模型分子能量预测是计算化学和材料科学中的核心问题之一。传统的第一性原理计算方法虽然精度高&#xff0c;但计算成本巨大&#xff0c;难以应用于大规模分子体系。SchNet作为图神经网络在分子建模领域的…

作者头像 李华
网站建设 2026/5/30 19:47:02

BBDown:5分钟学会用命令行下载B站视频的完整指南

BBDown&#xff1a;5分钟学会用命令行下载B站视频的完整指南 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 你是否曾经想要保存B站上的精彩视频内容却苦于没有合适的工具&#xff1f;…

作者头像 李华