公司里面有两个重油罐,里面的油料需要加温到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传感器只是一个油罐的数据,另外油罐进行相应的操作也就有了数据了。