『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2292|回复: 13

[硬件DIY] 自制超声波水池液位(esphpme HC-SR04)

[复制链接]

3

主题

91

帖子

1036

积分

金牌会员

Rank: 6Rank: 6

积分
1036
金钱
945
HASS币
0
发表于 2022-12-6 18:50:03 | 显示全部楼层 |阅读模式
本帖最后由 245621375 于 2022-12-6 18:54 编辑

自制了  超声波水塔 传感器   
假如 水塔  高  3M
怎么让ESPhome计算出来  显示到HA  

esphome 显示的米数 乘以4  就是实际测试的 数值
附上 esphome代码
希望大佬赐教
sensor:
  - platform: ultrasonic
    trigger_pin: GPIO3
    echo_pin:  GPIO1
    name: "Ultrasonic Sensor"
    update_interval: 5s
    filters:
      - multiply: 4












QQ截图20221206184912.png
回复

使用道具 举报

3

主题

91

帖子

1036

积分

金牌会员

Rank: 6Rank: 6

积分
1036
金钱
945
HASS币
0
 楼主| 发表于 2022-12-6 20:02:40 | 显示全部楼层
本帖最后由 245621375 于 2022-12-6 20:08 编辑

HA 是不是写更简单
sensor:
  - platform: template
    sensors:
      pv_current_change:
        unit_of_measurement: m
        device_class: current
        friendly_name: '水池水位'
        value_template: >
          {% set state = states('sensor.ultrasonic_distance') %}{{ (3-states('sensor.ultrasonic_distance')|int )| round(2)}}
回复

使用道具 举报

3

主题

91

帖子

1036

积分

金牌会员

Rank: 6Rank: 6

积分
1036
金钱
945
HASS币
0
 楼主| 发表于 2022-12-6 20:22:42 | 显示全部楼层
已经搞定

sensor:
  - platform: ultrasonic
    trigger_pin: GPIO3
    echo_pin:  GPIO1
    name: "Ultrasonic Sensor"
    update_interval: 5s
    filters:
      - multiply: 4
      - lambda: return 3 - x;   

评分

参与人数 1金钱 +5 收起 理由
dscao + 5 感谢楼主分享!

查看全部评分

回复

使用道具 举报

0

主题

562

帖子

2185

积分

金牌会员

Rank: 6Rank: 6

积分
2185
金钱
1623
HASS币
0
发表于 2022-12-7 08:39:18 | 显示全部楼层
厉害了,还能这样。是测的水面吗
回复

使用道具 举报

39

主题

2050

帖子

7701

积分

元老级技术达人

积分
7701
金钱
5636
HASS币
110
发表于 2022-12-7 08:49:07 | 显示全部楼层
说实话昨天我看你的帖子没理解你的需求
直到看到了你搞定的代码

其实你多翻翻论坛,如果看到我发的帖子,自制饮水机补水方案里的esphome代码,应该能找到这样的写法
回复

使用道具 举报

37

主题

396

帖子

4104

积分

元老级技术达人

积分
4104
金钱
3653
HASS币
250
发表于 2022-12-7 08:58:40 | 显示全部楼层
本帖最后由 trz0332 于 2022-12-7 09:04 编辑

千万不要用这种方案,你用的这种方案我4年前就用了,HC-SR04有一个大问题,不防水,用不了多久,电路板就被水蒸气腐蚀了。我后来还用过防水的超声波传感器,淘宝50块钱一个,解决了腐蚀问题,但是新问题出现了,夏天的时候水蒸气在传感器上凝结成了小水珠,导致数据会不准确,用了1年,也被我淘汰了,现在我的方案就是用投入式的液位传感器,虽然贵点,但是真的是太稳了,用了1年,数据和质量都是杠杠的。
我用的是485的投入式液位传感器。搭配一个ttl专485模块。屏幕用的是2004加了温湿度和气压在里面
1670374874562.png

#设备选型esp32,lcd2004,bme280,l298n,12V继电器,一个自复按钮开关
#
#
#

<<: !include config.yaml
substitutions:
  device_name: pump
  date_update_interval: 20s

esphome:
  name: $device_name
  platform: esp32
  board: esp32doit-devkit-v1

web_server:  #开启we功能
  port: 80

globals:
   - id: _water_pre
     type: float
     restore_value: no
     initial_value: '50.0'
   - id: auto_flag    #设置全局变量,用于设置手自动
     type: int
     restore_value: yes
     initial_value: '0'
font:   #字题文件
  - file: "simfang.ttf"
    id: my_font
    size: 20
time:  #时间设置
- platform: sntp
  id: my_time

logger:  #是否开启日志
  #level: NONE
i2c:  #设置I2C的gpio
  sda: 21
  scl: 22
  scan: True



display:  #液晶屏设置
  - platform: lcd_pcf8574  #
    dimensions: 20x4  #使用lcd2004液晶屏
    update_interval: 1s  #刷新设置
    address: 0x27  #i2c地址
    lambda: |-   #第一行显示时间,第二行显示水位,第三行显示温度和适度,第四行显示气压
      it.strftime(0,0,"%Y-%m-%d %H:%M:%S", id(my_time).now());   
      it.printf(0,2,"T:%.1fC  RH:%.1f%%", id(s10001).state, id(s10002).state);
      it.printf(0,3,"pre:%.2fhPa", id(s10003).state);
      it.printf(0,1,"WH:%.2fcm", id(water_cm).state);

uart:
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 9600
  id: mod_uart
modbus:
  send_wait_time: 200ms
  uart_id: mod_uart
  id: mod_bus

modbus_controller:
  - id: sdm
    address: 1
    modbus_id: mod_bus
    command_throttle: 100ms
    setup_priority: -10
    update_interval: 10s
sensor:
  - platform: modbus_controller
    modbus_controller_id: sdm
    name: "${device_name}_water_cm"
    address: 4
    register_type: "holding"
    value_type: S_WORD 
    accuracy_decimals: 1
    unit_of_measurement: 'cm'
    filters:
      - multiply: 0.1
    id: water_cm



  - platform: template
    #internal: true
    unit_of_measurement: '%'
    name: "${device_name}_water_pre"
    id: "water_pre"
    lambda: |-
      return id(water_cm).state*100/(id(_full_set).state);
#    on_value_range:
#      - above: !lambda |- 
#                  return id(_hight_set).state;
#        then: 
#          - switch.turn_off: dehumidifier1
#      - below: !lambda |- 
#                  return id(_low_set).state;
#        then:
#          - switch.turn_off: dehumidifier1
    filters:
      - lambda: |-               
            if (x>id(_hight_set).state and id(auto_flag) ){
              id(dehumidifier1).turn_off();
            }else if (x<  id(_low_set).state    and    id(auto_flag)     ){
              id(dehumidifier1).turn_on();  
            }
            return x  ;
    update_interval: 5s




  - platform: bme280  #bme280设置
    temperature:  #温度名
      name: "${device_name} Temperature"
      id: s10001
      oversampling: 16x
      filters:
        - or:
          - heartbeat: $date_update_interval
          - delta: 1
    humidity:  #湿度名
      name: "${device_name} Humidity"
      id: s10002
      filters:
        - or:
          - heartbeat: $date_update_interval
          - delta: 5
    pressure:  #气压名
      name: "${device_name} Pressure"
      id: s10003
      filters:
        - or:
          - heartbeat: $date_update_interval
          - delta: 20
    address: 0x76
    update_interval: 180s  #数据刷新时间





binary_sensor:
  - platform: gpio  #添加一个按钮GPIO2
    pin:
      number: GPIO2   
      mode: INPUT_PULLUP
    name: '${device_name} BUTTON'
    id: s10004
    on_multi_click:  
    - timing:   #短按开启屏幕背光灯
        - ON for at most 1s
        - OFF for at least 0.5s
      then:
        - switch.toggle: s_led
    - timing:  #长按开启水泵
        - ON for 1s to 5s
        - OFF for at least 0.5s
      then:
        - switch.toggle: dehumidifier1

switch:
  - platform: gpio  #添加水泵开关,gpio14
    pin: 14
    name: "${device_name} pumpswitch"
    id: dehumidifier1
    restore_mode: RESTORE_DEFAULT_OFF

  - platform: gpio  #添加屏幕背光灯开关gpio23
    pin: 23
    name: "${device_name} s_led"
    id: s_led

  - platform: restart
    name: "${device_name}_Restart"  

  - platform: template    #模板开关-------手自动
    name: "${device_name}_auto"
    id: "${device_name}_auto"
    lambda: |-
        return id(auto_flag);
    turn_on_action: 
      then:
        - lambda: |-
            id(auto_flag) = 1;
    turn_off_action:
      then:
        - lambda: |-
            id(auto_flag) = 0;


number:
  - platform: template
    name: "${device_name}_full_set"
    id: "_full_set"
    optimistic: true
    min_value: 50
    max_value: 100
    initial_value: 75
    restore_value: true
    step: 1  


  - platform: template
    name: "${device_name}_low_set"
    id: "_low_set"
    optimistic: true
    min_value: 1
    max_value: 30
    initial_value: 10
    restore_value: true
    step: 1  


  - platform: template
    name: "${device_name}_hight_set"
    id: "_hight_set"
    optimistic: true
    min_value: 70
    max_value: 100
    restore_value: true
    initial_value: 90
    step: 1  


评分

参与人数 2金钱 +13 收起 理由
dscao + 10 感谢楼主分享!
cmsj + 3 我来瀚思就为看你!

查看全部评分

回复

使用道具 举报

1

主题

9

帖子

68

积分

注册会员

Rank: 2

积分
68
金钱
59
HASS币
0
发表于 2022-12-7 09:10:29 | 显示全部楼层
trz0332 发表于 2022-12-7 08:58
千万不要用这种方案,你用的这种方案我4年前就用了,HC-SR04有一个大问题,不防水,用不了多久,电路板就被 ...

请问用的什么型号传感器
回复

使用道具 举报

1

主题

9

帖子

68

积分

注册会员

Rank: 2

积分
68
金钱
59
HASS币
0
发表于 2022-12-7 09:12:13 | 显示全部楼层
trz0332 发表于 2022-12-7 08:58
千万不要用这种方案,你用的这种方案我4年前就用了,HC-SR04有一个大问题,不防水,用不了多久,电路板就被 ...

我用超声波的也遇到过这个问题,后来改用的TOF激光的,在水面加了个浮标,总还是有点不方便
回复

使用道具 举报

37

主题

396

帖子

4104

积分

元老级技术达人

积分
4104
金钱
3653
HASS币
250
发表于 2022-12-7 11:07:18 | 显示全部楼层
fm996 发表于 2022-12-7 09:10
请问用的什么型号传感器

淘宝上搜的污水  液位传感器  240块钱一个, 企业微信截图_1670382389682.png
回复

使用道具 举报

7

主题

114

帖子

1022

积分

论坛DIY达人

积分
1022
金钱
898
HASS币
60
发表于 2022-12-7 18:14:58 | 显示全部楼层
可以搞个非接触式的液位传感器,只是要显示高度的话可能要多加几组自己定义一下。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 10:17 , Processed in 0.103049 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表