请选择 进入手机版 | 继续访问电脑版

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

 找回密码
 立即注册
查看: 263|回复: 2

[硬件DIY] ESPHOME-自制鱼缸冷水机温控器

[复制链接]

17

主题

224

帖子

1763

积分

论坛DIY达人

积分
1763
金钱
1534
HASS币
20
发表于 5 天前 | 显示全部楼层 |阅读模式
本帖最后由 polisher 于 2024-6-10 18:14 编辑

一、背景
养了2缸小鱼,夏季燥热必须得冷水机伺候,为了接入HA特意对温控器进行了重新设计,没什么技术含量,算是供友友们复刻方便特发此贴。温控器可带20A的负载,代码稍作调整,即可实现冷热控制。该温控器备用了很多IO口,可增加水位检测、TDS检测等功能,如友友有兴趣,我再贴上相关电路和代码。
二、成品
4075cd522aa24fe9d2400e83efb907b.jpg
三、原理图
2.jpg

显示屏

显示屏

1. 元件的选用和电路的设计主要根据手里的现有材料,友友们可自行按实际情况调整;
2. 该电路板适用于12V输入,可装入STC-1000、STC-100、STC-200、STC-8080、STC-9100等温控器中,可自行根据尺寸选择;
3. 数码管采用了FJ5422BH,非常适合温度显示,但由于码段属于非标,不能直接用ESPHome的数码管驱动组件,特对代码做了适配,请通过外部组件方式调用,请在此处下载附件 tm1637-6c.zip (5.77 KB, 下载次数: 1)
3. 工程项目分享嘉立创,方便友友们白嫖(点击这里
4. 不妥之处,望各位友友不吝赐教。
四、主要物料
序号名称型号描述参考单价(元)
1
数码管FJ5422BH4位0.5英寸 超高红 共阳 带温度符号数
2
2
轻触开关6*6*5mm
0.25
3
数码管驱动TM1637SOP-20
1.56
4
继电器 HF152F/012-1HST12V,20A
3.5
5
螺钉式接线端子DB125-2.54-9P直插,间距2.54mm,1x9P
5
6
螺钉式接线端子KF300-5.0-2P直插,间距5mm,1x2P
0.54
7
WiFi模块ESP32-C3-MINI-1焊接有些难度
10.8
8
降压模块(LDO)12V-5V查看链接
2.1
9
降压模块(DCDC)5V-3.3V查看链接
0.47
10
温度传感器DS18B20防水型也可以用NTC热敏电阻,代码自行调整
2.46
11
温控器STC-1000这货外壳5元(阿里),整机11.5元(淘宝)
五、部分ESPHome代码(论坛的代码添加不会用。很好奇,论坛管理员大佬为什么不优化一下这个功能) ESPhome代码.txt (4.62 KB, 下载次数: 2)
captive_portal:
external_components:
  - source: mycomponents  
substitutions:
  device_name: Wkq
  RELAY_COOL: GPIO5 #制冷器继电器
  RELAY_FAN: GPIO4 #风扇继电器
  DS18B20_WATER: GPIO2 #水温温度传感器
  DS18B20_COOL: GPIO3 #制冷器散热片温度传感器
  BACKUP_IO_1: GPIO10 #备用IO口(WL)
  BACKUP_IO_2: GPIO0 #备用IO口
  BACKUP_IO_4: GPIO1 #备用IO口
  S_DA: GPIO18 #数码管控制SDA
  S_CL: GPIO19 #数码管控制SCL
globals:
   # 运行状态   
   - id: workstate 
     type: bool
     restore_value: no
     initial_value: "false"  
   # 设置状态   
   - id: setupstate 
     type: bool
     restore_value: no
     initial_value: "false"      
switch: 
  - platform: gpio   
    pin: $RELAY_COOL
    name: "${device_name} cool"
    id: relay_cool  
  - platform: gpio   
    pin: $RELAY_FAN
    name: "${device_name} fan"
    id: relay_fan

binary_sensor:
  - platform: tm1637-6c
    internal: True
    id: key0
    name: key power
    tm1637_6c_id: tm1637_display
    key: 8
    on_click:
      - if:
          condition:
            - lambda: 'return id(workstate) ;'
          then:   
            - climate.control:
                id: water_thermostat
                mode: "OFF"
          else: 
             - climate.control:
                id: water_thermostat
                mode: "COOL"                 
  - platform: tm1637-6c
    internal: True
    id: key1
    name: key setup
    tm1637_6c_id: tm1637_display
    key: 9
    on_click: 
      - if:
          condition:
            - lambda: 'return id(setupstate) ;'
          then:   
            - lambda: id(setupstate)=false;
          else: 
            - lambda: id(setupstate)=true;
        
  - platform: tm1637-6c
    internal: True  
    id: key2
    name: key up
    tm1637_6c_id: tm1637_display
    key: 10
    on_click:
      - if:
          condition:
            - lambda: 'return id(setupstate) ;'
          then:         
            - lambda: id(water_thermostat).target_temperature=id(water_thermostat).target_temperature+0.1;
  - platform: tm1637-6c
    internal: True  
    id: key3
    name: key down
    tm1637_6c_id: tm1637_display
    key: 11    
    on_click:
      - if:
          condition:
            - lambda: 'return id(setupstate) ;'
          then:         
            - lambda: id(water_thermostat).target_temperature=id(water_thermostat).target_temperature-0.1;
display:
    platform: tm1637-6c
    id: tm1637_display
    clk_pin: $S_CL
    dio_pin:  $S_DA
    length: 4
    inverted: false
    # F运行;|设置
    update_interval: 500ms
    lambda: |-
      static int i = 0;
      i++;
      if (id(setupstate)){
        //如果为设置状态,则数码管闪烁。
        if ((i % 2) == 0)
          it.printf("|%2.1f", id(water_thermostat).target_temperature);
        else
          it.print("|");   
      }else{
        char ch = '|';
        //如果制冷器继电器打开,数码管cool处显示制冷运行标识
        if (id(relay_cool).state)
          if (id(water_temperature).state<0)
            ch = '+';
          else
            ch = '#';
        //如果风扇继电器打开,数码管heat处显示风扇运行标识
        if (id(relay_fan).state) 
          if (id(water_temperature).state<0)
            ch = '/';
          else        
            ch = '$';
        //如果制冷器继电器与风扇继电器都打开,则数码管显示制冷与风扇运行标识
        if (id(relay_fan).state && id(relay_cool).state)
          if (id(water_temperature).state<0)
            ch = '<';
          else        
            ch = '&';  
        it.printf(0,"%c",ch);  //1位数码管显示信息(运行标识、正负符号、℃)
        it.printf(1,"%2.1f", abs(id(water_temperature).state)); //2、3、4位数码管显示当前温度值

      }

sensor:
  - platform: dallas
    index: 0
    id: water_temperature
    dallas_id: hub1
    name: "${device_name} Water Temperature"
 
dallas:
  - pin: $DS18B20_WATER
    update_interval: 1s
    id: hub1          
climate:
  - platform: thermostat
    name: "${device_name} Water Thermostat" 
    id: water_thermostat
    entity_category: config
    cool_deadband: 1
    cool_overrun: 0
    sensor: water_temperature
    on_boot_restore_from: memory    
    min_cooling_off_time: 0s
    min_cooling_run_time: 0s
    min_idle_time: 0s
    cool_action:
      - switch.turn_on: relay_cool
      - lambda:  id(workstate)=true;
    idle_action:
      - switch.turn_off: relay_cool   
      - lambda:  id(workstate)=false; 

评分

参与人数 4金钱 +35 收起 理由
pengguilian + 5 大神666!
hhh. + 10 感谢楼主分享!
kaka0992 + 10 感谢楼主分享!
flyice + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

16

主题

232

帖子

1606

积分

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1374
HASS币
0
发表于 5 天前 | 显示全部楼层
最喜欢这种坛友了,无私奉献
回复

使用道具 举报

0

主题

45

帖子

1038

积分

金牌会员

Rank: 6Rank: 6

积分
1038
金钱
993
HASS币
0
发表于 4 天前 | 显示全部楼层
第一次听说鱼怕热
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-6-15 13:14 , Processed in 0.068372 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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