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

 找回密码
 立即注册
查看: 4996|回复: 26

[硬件DIY] 智能喂鱼器植入HA

[复制链接]

18

主题

271

帖子

2224

积分

论坛DIY达人

积分
2224
金钱
1948
HASS币
20
发表于 2023-8-19 21:40:06 | 显示全部楼层 |阅读模式
本帖最后由 polisher 于 2024-1-21 19:25 编辑

应友友们的要求,ESPHOME代码附后,不妥之处望能指正,以便更好的完善。刷机方法见五楼
111.jpg
之前在某宝买的智能喂鱼器,用于孔雀鱼饲养还是挺管用。APP用的是“小美智能”,为了便于自动化,想想还是把这货集成到HA里面吧。
电路不复杂,ESP32-C3的芯片,通过LN8503控制电机正反转。微型行程开关判断托盘位置,红外发射管、接收管判断饲料是否缺少,外部1个手动按钮。IO口如下图,已成功刷入ESPHOME固件,初步测试功能均正常。
这玩意儿比较小众,有人需要再放代码吧。
222.jpg
333.jpg

设备界面
11.jpg
esphome:
  name: fish-feeder
  friendly_name: 智能喂鱼器
  comment: 选择自动喂食,根据设定的间隔时间自动喂食,喂食信息将显示距离下次喂食的时间;禁用自动喂食,喂食信息将显示距离上次喂食的时间。

esp32:
  board: esp32-c3-devkitm-1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "85WJ9FhrcX1PhoSMW/ARpg7oWLBjJ6ecZSOTKHf8M7k="

ota:
  password: "c7482694d7b07b649f1754af82cc73c9"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Fish-Feeder Fallback Hotspot"
    password: "kYnJzHqGgJ9H"

captive_portal:

globals:
   - id: auto_feeding #自动喂食
     type: bool
     restore_value: yes
     initial_value: "false"
   - id: feeding_interval #自动喂食间隔,小时
     type: int
     restore_value: yes
     initial_value: "8"     
   - id: last_feeding #上次喂食时间距离当前时间,分钟
     type: int
     restore_value: no
     initial_value: "0"     

substitutions:
  device_name: Fish Feeder
  Stroke_Switch: GPIO8 #行程开关
  Manual_button: GPIO9 #手动按钮
  Red_led: GPIO19 #红色指示灯
  Blue_led: GPIO18 #蓝色指示灯 
  Infrared_LED: GPIO2 #红外发射管
  Phototransistor: GPIO3 #红外接收管
  Forward: GPIO6 #出料盘前进
  Reversed: GPIO7 #出料盘后退

# 故障指示灯
status_led:
  pin: $Red_led

binary_sensor:
# 运行指示灯
  - platform: status
    id: binary_status
    internal: false 
    on_press:
      - switch.turn_on: blue_led
    on_release: 
      - switch.turn_off: blue_led  
  #行程开关
  - platform: gpio
    pin: 
      number: GPIO8
    internal: false
    id: stroke_switch  
    on_press:
      then:
        - delay: 800ms
        - switch.turn_off: ina_switch
        - lambda: id(last_feeding)=0;
        - if:
            condition: 
              lambda: 'return id(auto_feeding) ;'
            then:
              - lambda:
                  id(text_feeding_time).publish_state("下次还剩"+to_string((id(feeding_interval)*60-id(last_feeding))/60)+"时"+to_string((id(feeding_interval)*60-id(last_feeding))%60)+"分");     
            else:
              - lambda:                  
                  id(text_feeding_time).publish_state("上次已过"+to_string(id(last_feeding)/60)+"时"+to_string(id(last_feeding)%60)+"分");           
  # 手动按钮    
  - platform: gpio
    pin: GPIO9
    id: sw_buttion
    internal: false
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - switch.toggle: ina_switch  
  # 红外接收      
  - platform: gpio
    pin: $Phototransistor
    id: phototransistor     
    internal: false
# 缺料信息
text_sensor:
  - platform: template
    name: "Missing Feed"
    update_interval: never
    id: missing_feed
    entity_category: DIAGNOSTIC
# 喂食信息    
  - platform: template
    name: "Feeding time"
    icon: mdi:message
    update_interval: never
    id: text_feeding_time
    entity_category: DIAGNOSTIC
switch:
  
  # 蓝色指示灯  
  - platform: gpio
    pin: GPIO18    
    id: blue_led
    internal: false
  # 马达驱动器  
  - platform: gpio
    pin: GPIO7
    id: ina_switch        
    internal: false 
  # 红外发射管  
  - platform: gpio
    pin: $Infrared_LED    
    id: infrared_led
    internal: false      
  # 是否自动喂食
  - platform: template
    name: "Auto Feeding"
    icon: mdi:format-list-checks

    entity_category: config
    lambda: |-
        return id(auto_feeding);
    turn_on_action:
      - lambda: id(auto_feeding)=true;
    turn_off_action:
      - lambda: id(auto_feeding)=false;       

button:
  - platform: template
    name: "Feeding"
    id: btn_feeding
    on_press:
      - switch.turn_on: ina_switch
      - delay: 20s

select:
  - platform: template
    name: "Feeding Interval select"
    id: select_Feeding_Interval
    optimistic: true
    restore_value: True
    entity_category: config      
    options:
      - 1 小时
      - 2 小时
      - 4 小时
      - 6 小时
      - 8 小时
      - 12 小时
      - 24 小时
      - 48 小时      
    initial_option: 8 小时
    on_value:
      then:
        - lambda: |-
            switch(i)
            {
              case 0:
                id(feeding_interval)=1;
                break;
              case 1:
                id(feeding_interval)=2;
                break;   
              case 2:
                id(feeding_interval)=4;
                break;   
              case 3:
                id(feeding_interval)=6;
                break;   
              case 4:
                id(feeding_interval)=8;
                break;   
              case 5:
                id(feeding_interval)=12;
                break;
              case 6:
                id(feeding_interval)=24;             
                break;     
              case 7:
                id(feeding_interval)=48;             
                break;                                                                               
            }                 

interval:
  # 每10秒检测是否缺料
  - interval: 10min
    then:
     - switch.turn_on: infrared_led
     - delay: 100ms
     - if:
         condition: 
           lambda: 'return (id(phototransistor).state)  ;'
         then:
           - text_sensor.template.publish:
               id: missing_feed
               state: !lambda 'return "缺料";'
         else:
           - text_sensor.template.publish:
               id: missing_feed
               state: !lambda 'return "不缺料";'
     - switch.turn_off: infrared_led         
  # 每1分检测是否喂食
  - interval: 1min
    then:
     - if:
         condition: 
           lambda: 'return id(auto_feeding) ;'
         then:
           - if:
               condition:
                 lambda: 'return id(last_feeding)>=(id(feeding_interval)*60)  ;'
               then:
                 - switch.turn_on: ina_switch
           - lambda:
               id(text_feeding_time).publish_state("下次还剩"+to_string((id(feeding_interval)*60-id(last_feeding))/60)+"时"+to_string((id(feeding_interval)*60-id(last_feeding))%60)+"分");     
         else:
           - lambda:                  
               id(text_feeding_time).publish_state("上次已过"+to_string(id(last_feeding)/60)+"时"+to_string(id(last_feeding)%60)+"分");                
     - lambda: id(last_feeding)=id(last_feeding)+1;                          


评分

参与人数 3金钱 +20 收起 理由
qxdnzx + 5 感谢楼主分享!
NEAO + 5 感谢楼主分享!
sorrypqa + 10 大神666!

查看全部评分

回复

使用道具 举报

15

主题

417

帖子

2824

积分

金牌会员

Rank: 6Rank: 6

积分
2824
金钱
2407
HASS币
0
发表于 2023-8-20 00:55:41 | 显示全部楼层
這台自動餵魚器  看起來顏值很高
回复

使用道具 举报

9

主题

534

帖子

4544

积分

元老级技术达人

积分
4544
金钱
4000
HASS币
60
发表于 2023-8-20 09:53:57 | 显示全部楼层

qi

自带的是esp吗?期待代码
回复

使用道具 举报

0

主题

2

帖子

32

积分

新手上路

Rank: 1

积分
32
金钱
30
HASS币
0
发表于 2023-8-22 16:07:13 | 显示全部楼层
我用的就是这个,求代码
回复

使用道具 举报

18

主题

271

帖子

2224

积分

论坛DIY达人

积分
2224
金钱
1948
HASS币
20
 楼主| 发表于 2023-8-22 17:00:14 | 显示全部楼层
本帖最后由 polisher 于 2023-8-24 10:27 编辑

简单的刷机连线示意图,对于刷机的软件操作,本人没有能力描述清楚,建议参考论坛大神们的帖子或官方资料。

2.jpg
1.按图接好刷机连线
2.将USB转TTL模块插入电脑
3.确认喂食托盘在初始位置,按住喂食键插入喂食器电源即可进入下载模式
4.动动鼠标完成刷机。

回复

使用道具 举报

0

主题

23

帖子

434

积分

中级会员

Rank: 3Rank: 3

积分
434
金钱
411
HASS币
0
发表于 2023-8-23 23:51:22 | 显示全部楼层
可以出个刷机教程吗,同款喂食器
回复

使用道具 举报

1

主题

23

帖子

790

积分

高级会员

Rank: 4

积分
790
金钱
767
HASS币
10
发表于 2023-8-26 16:52:01 | 显示全部楼层
回复

使用道具 举报

52

主题

1350

帖子

5744

积分

论坛DIY达人

积分
5744
金钱
4394
HASS币
20
发表于 2023-8-31 21:28:34 | 显示全部楼层
楼主出品,必属精品!!
回复

使用道具 举报

8

主题

166

帖子

2166

积分

金牌会员

Rank: 6Rank: 6

积分
2166
金钱
2000
HASS币
0
发表于 2023-9-17 22:01:10 | 显示全部楼层
被这个喂食器吸引了,特意买了新的。以前几款喂食器虽然也加了esp模块刷esphome,但是颜值太不在线了。而且重要的是对于饲料的密封性太差了。有的甚至直接敞开的。
回复

使用道具 举报

0

主题

1

帖子

22

积分

新手上路

Rank: 1

积分
22
金钱
21
HASS币
0
发表于 2024-1-19 14:33:02 | 显示全部楼层
本帖最后由 pyfm 于 2024-1-19 14:37 编辑

status_led:
  pin: $Red_led

  - platform: gpio
    pin: GPIO19   
    id: red_led
    internal: false      

会报冲突:Pin 19 is used in multiple places.要删掉status_led才能保存




回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-29 08:07 , Processed in 0.244412 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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