Modbus激光测距模块接入HA,实现油罐液位检测。
公司里面有两个重油罐,里面的油料需要加温到90度左右,并且带有轻微的腐蚀性。工作过程中需要时不时检查油料液位,这个工作挺繁琐的。于是就想着怎么搞个免接触的液位传感器。翻了大量的资料发现有ESPHome挂vlx5311的能检测到4米范围,弄了一个刚开始还挺正常的直到有一天注油的时候把传感器淹了。看来这个方案还是有点问题,必须把传感器提高到离开油罐的位置才是安全的,由于检测孔直径只有10厘米左右的,检测角度小必须采用检测角度小的传感器,所以超声波那些就排除了。后来在淘宝上逛的时候看到激光测距模块检测角度只有1.4度,6m检测距离光斑扩散直径才5厘米左右,这个太合适了!在海鲜市场淘了两个modbus协议的激光测距模块,再淘了个modbus rtu转tcp的网关,就这样硬件就搞定了。下面贴出congfig.yaml的配置modbus:
- name: "temper"
type: tcp
host: 192.168.0.121
port: 8899
sensors:
- name: dist1
slave: 23
address: 1
input_type: holding
scan_interval: 10
unit_of_measurement: "mm"
- name: dist2
slave: 22
address: 1
input_type: holding
scan_interval: 30
unit_of_measurement: "mm"
其中slave是两个激光测距仪modbus的地址。这两个数值是传感器到油罐液面的距离,还要想办法转化为油罐里面剩余数量。两个油罐是卧式平头圆柱罐,查了网上怎么计算体积的公式然后再做了两个template传感器。这种传感器在HA的配置页面里的“设备与服务”选项下可以添加,选择“配置”里的“”设备与服务“再选择“辅助元素”里面的“添加辅助元素”按钮,在里面就有“Template”选项选择这个后跳出“Template a sensor”就可以添加了,其中最重要的是状态模版的内容,顺便贴出如下:
1:油罐里面油料液位高度xg_hight
{% if (1.5 - states('sensor.dist1')|float /1000)<0 %}
{{ 0 }}
{% else %}
{{ (1.5 - states('sensor.dist1')|float /1000) }}
{% endif %}
这个数据中的1.5是指传感器到罐底距离多少米,这个要根据实际量量一下再进行修改。
2:油罐里面油料体积
{{ 7.95*(asin(states('sensor.xg_hight')|float -1)+(states('sensor.xg_hight')|float -1)**2*sqrt(1-(states('sensor.xg_hight')|float -1)**2)+1.5708) | float | round(2) }}
其中7.95是油罐长度,xg_hight是第一个template传感器。油罐半径是1米,这个计算公式是卧式油罐计算公式根据半径1米简化得到的,如果半径不同则需进行相应的调整。
这样就能根据激光测距传感器测的距离直接得到油罐里面油料的液位高度及体积的数据了。
上面连个template传感器只是一个油罐的数据,另外油罐进行相应的操作也就有了数据了。
很棒,解决实际问题 看前边的时候正想说激光测距,往后看可看到了。
给大佬点赞。 感谢分享,请问是哪一款激光测距传感器?麻烦给个链接或者关键词 本帖最后由 iceman7803 于 2024-4-15 20:42 编辑
iamhyde 发表于 2024-4-14 15:09
感谢分享,请问是哪一款激光测距传感器?麻烦给个链接或者关键词
关键词:瑞兴。记得看modbus协议的。modbus rtu转tcp关键词:汉枫。其实modbus智能仪表还是有很多的,而且接入HA也是非常方便。我就在工厂里面利用modbus智能仪表把沥青罐的温度检测,锅炉报警控制,空压机控制等接入到HA,因为是工业仪表,稳定性极好。全年运行都没问题!老家里也是用的modubs把院子大门,院子花草浇水这些都接入到HA的!另外还给朋友工厂做了一个32台注塑机每天注塑数据统计,也是全年运行不停,非常稳定!看看有没有兴趣的,我再开贴说下。
插眼,学习一波 iceman7803 发表于 2024-4-15 20:31
关键词:瑞兴。记得看modbus协议的。modbus rtu转tcp关键词:汉枫。其实modbus智能仪表还是有很多的,而且 ...
你好,你HA用是最版本吗?可以分享下多些代码吗,我也打算把家里面东西通过485接入HA。谢谢:handshake
页:
[1]