Vodomer ESP32 DeepSleep Solar - Návod

www
Odpovědět
Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Vodomer ESP32 DeepSleep Solar - Návod

Příspěvek od tiimsvk »

Ahojte dnes som dokončil meranie spotreby vody pomocou esp32
Je to už moja tretia verzia ako sa postupne učím novým a novým veciam tak sa tu s nimi podelím.

AKTUALIZÁCIA SW AJ HW
VERZIA 4
nakoľko nám prišla zima tak moj merač vodomeru po 1,5týždni tmy :D skapal takže som pristúpil k úpravám k čo najnižšej spotrebe dostal som sa pri tejto konfigurácií na 15,5mA pri standby režime.
Ak nebude ani toto riešenie priechodné budem musieť prejsť na zigbee modul a opustiť wifi moduly

ZMENY 11.2022:
hardware
- zámena modulu tcrt5000 za modul tcrt500 FC123 (nižšia spotreba oproti klasickému nastaviteľnému modulu s lm393 o 1mA) teraz spotreba modulu v standby 14,5mA
- zmena napájania a konverzie voltov na LDO Holtek H7833
- pridanie kondezátorov na stabilitu 100uF vstup od batérie 480uF výstup do ESP32
- zámena modrej led za červenu nižšia spotreba
- pripojenie vyrovnávajúceho 104 kondenzátoru pre reset a odporu 104 do VCC pre stabilitu pripojenia

software
- kratšia doba spustenia pred uspaním na polovicu, dlhšia doba v spánku oproti 2hodinám na 2dni.

ČO DOKÁŽE:
- Meranie spotreby vody v aktuálnom čase, celková spotreba,
- Hlasenie online stavu
- Pripojenie cez mqtt
- Sila signálu
- 100% pohon na batérií, zobrazenie stavu batérie (aktualizácia adc pinu iba raz za zapnutie pomocou mofsetou)
- Solárne nabíjanie
- Reset tlačidlo
- Deep Sleep a zobudenie na wakeup pin s priratanim 1l ako spotreba

ČO POTREBUJEME:
Základ:
- esp32 (ja som použil konkretne čistý modul esp32 s externým portom pre anténu, ktorý som nakoniec aj tak nepoužil),
- TCRT5000 (meranie vzdialenosti bude služiť ako pulse meter prichytený na vodomery)

Doplnkové:
- Batérie (2x18650)
- solárny panel 18V 5W
- nabíjací modul DD23CRTA (alebo akýkoľvek ktorý máte po ruke, najjednoduchšie je TP4056+5V solárny panel)
- ochranný modul pre batérie ak je potrebné 1S 1A
- step down na 3.3V (ja som mal po ruke led driver pre esp01s tak z neho som aj vychádzal)

- Spotrebne:
- 1xNPN 2N7000 (alebo, ktorýkoľvek iný podobný) pre adc switch
- 1xPNP mofset IRF5305 (alebo, ktorýkoľvek iný podobný) pre adc switch
- 1x 100k resistor pre adc switch
- 680k a 330k resistory a 0.1uf kondenzator pre citanie adc stavu baterie
- 1x 1k resistor pre reset tlačidlo
- prototypovacia dosky obojstranné
- prototypovacia doska pre esp32 čip
- gpio konektory.
- farebna kabelaz awg28 + dlhšie káble k solar panelu a k vodomeru podľa umiestnenia.
- držiak baterií 18650
- led - status

PRIPOJENIE:
Väčšinu senzorov som odkukal z internetu. Tak ak máte problem so zapojením podľa môjho návodu stači zadať do gooogle :).
TCRT5000:
3vdc, gnd, a digitalny pin, na module je potrebne po umiestnení na vodomere nastaviť vdzalenosť aby správne vzopínal digitálny pin
obrazok nižšie pre spravne umiestnenie na vodomery

ADC pre stav batérie s usporou (bez uspory stači divider z resistorov)
adc low consumption circuit.jpg
Samozrejme tlacidla, bateriu vypinace a dalšie veci nejdem rozpisovať.

FOTO:
UMIESTNENIE VODOMER.jpg
298587495_558378275738031_8463047410547851008_n.jpg
20220926_134102.jpg
20220926_134118.jpg
YAML KOD:

Kód: Vybrat vše

#-------------------------------------------
# SUBTITUTIONS - basic definitions and description of the device
#-------------------------------------------
substitutions:
  friendly_name: ESP-Vodomer
  device_name: ESP-Vodomer-V3
  created_by: "StudioTiiM 2021-2022"
  device_description: "Water meter whit pulse modul TCRT5000 FC-123 and battery power whit solar charging"

#-------------------------------------------
# Define pins
#-------------------------------------------
  pulse_pin: GPIO25 #pulse and wakeup pin
  battery_pin: GPIO32 #ADC VN pin
  switch_pin: GPIO22 #adc switch whit mofset 2n70050 and irf530
  status_led_pin: GPIO23 #RED led connected

#-------------------------------------------
# ESP - main settings
#-------------------------------------------
esp32:
  board: esp32dev
logger:

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

esphome:
  name: esp-vodomer-v2
  on_boot:
    - priority: -400
      then:
        - switch.turn_on: switch_adc #adc battery status reading when boot up
        - binary_sensor.template.publish:
            id: status_online
            state: on
  on_shutdown:
    priority: -500.0
    then:
      - logger.log: 
          format: "go to offline"
          level: warn
      - binary_sensor.template.publish:
          id: status_online
          state: off
        
#-------------------------------------------
# STATUS LED
# Red led resistor 56R
#-------------------------------------------
status_led:
  pin: "$status_led_pin"
  
#-------------------------------------------
# MQTT
#-------------------------------------------
mqtt:
  broker: '192.168.31.212'
  username: !secret mqtt_username
  password: !secret mqtt_password
  discovery: true
#  discovery_retain: false
  birth_message:
    topic: $device_name/status_on
    payload: online
  will_message:
    topic: $device_name/status_off
    payload: offline

#-------------------------------------------
# DEEP SLEEP
#-------------------------------------------
deep_sleep:
  run_duration: 30s
  sleep_duration: 48h # set sleep long time - every time you wake up, you add one liter of consumption
  wakeup_pin : "$pulse_pin" # pulse pin TCRT5000
  wakeup_pin_mode: INVERT_WAKEUP # low trigger wakeup (sensor in idle state = high on pin)
  id: deep_sleep_component

#-------------------------------------------
# TIME COMPONENT
#-------------------------------------------
time:
  - platform: sntp
    id: esptime
    timezone: "Europe/Bratislava"

#-------------------------------------------
# BINARY SENSORS - online status
#-------------------------------------------
binary_sensor:
  - platform: template
    name: "${friendly_name} Status"
    id: status_online

#-------------------------------------------
# SENSORS
#-------------------------------------------
sensor:
#-------------------------------------------
# Wifi signal component
#-------------------------------------------
  - platform: wifi_signal
    name: "${friendly_name} Signal"
    id: "signal"
    update_interval: 60s
    
#-------------------------------------------
# Battery sensor - ADC whit divider units %
# 2x battery 18650 3.7V, 3000mAh
# divider resistor 330k and 680k whit 0.1uF
# 4.3V battery max voltage out
# Solar panel 18V 20W mono 215x155mm
#-------------------------------------------
  - platform: adc
    pin: "$battery_pin"
    name: "${friendly_name} Battery"
    accuracy_decimals: 0
    unit_of_measurement: "%"
    update_interval: never
    filters:
      - calibrate_linear:
          - 2.19 -> 0 # 1.46x multiply
          - 2.78 -> 100
#          - 0 -> 0
#          - 2.35 -> 3.44
#      - filter_out: 0.0
      # No value lower than 0
      - lambda: 'return max((float)0.0, x);'
      # No value greater than 100
      - lambda: 'return min((float)100.0, x);'
    attenuation: 11db
    icon: mdi:battery
    id: batlevel
    device_class: battery
    entity_category: diagnostic

#-------------------------------------------
# Water consumption sensor - Pulse meter - TCRT5000 FC-123 modul
#-------------------------------------------
  - platform: pulse_meter
    pin:
      number: "$pulse_pin"
    name: "${friendly_name} Consumption"
    unit_of_measurement: "liter/min"
    internal_filter: 1000ms
    timeout: 60s
    icon: "mdi:water"
    id: water_pulse
    filters:
      - multiply: 0.0166666667 # 1liter / 60second
      - filter_out: nan
    on_value:
    # automation sleep control when state
      then:
        - if:
            condition:
              lambda: "return (id(water_pulse).state > 0.0);"
            then:
              - deep_sleep.prevent: deep_sleep_component
              - logger.log: 
                  format: "PREVENT DEEPSLEEP"
                  level: warn
            else:
              - logger.log: 
                  format: "ALLOW DEEPSLEEP"
                  level: warn
              - deep_sleep.allow: deep_sleep_component

    total:
      id: totalwater
      unit_of_measurement: "l"
      on_value:
      # send state to number component
        then:
          - number.increment: vodomer_temp
      internal: True

#-------------------------------------------
# Final Water consumption sensor - Template after boot read number component
#-------------------------------------------
  - platform: template
    id: water_temp_total
    name: "${friendly_name} Water Total"
    icon: "mdi:water"
    unit_of_measurement: "l"
    accuracy_decimals: 0

#-------------------------------------------
# NUMBERS
# after boot send first state pulse meter is 0 this number sensor send to template sensor: water_temp_total first value 1liter -this OK wakeup pin 
#-------------------------------------------
number:
  - platform: template
    name: "${friendly_name} Water_Temp"
    id: vodomer_temp
    optimistic: true
    min_value: 0
    max_value: 1500
    step: 1
    internal: True
    on_value:
      - then:
          - sensor.template.publish:
              id: water_temp_total
              state: !lambda 'return id(vodomer_temp).state;'
          - component.update: water_temp_total

#-------------------------------------------
# SWITCHES
#-------------------------------------------
switch:
#-------------------------------------------
# Switch - Adc battery status reading
# Wiring whit mofset 2n70050 and irf530
#-------------------------------------------
  - platform: gpio
    name: "${friendly_name} Switch"
    restore_mode: ALWAYS_OFF
    pin:
      number: "$switch_pin"
    id: switch_adc
    on_turn_on:
      - then:
          - delay: 1s
          - component.update: batlevel
          - delay: 1s
          - switch.turn_off: switch_adc
Naposledy upravil(a) tiimsvk dne 28. prosinec 2022, 22:33, celkem upraveno 4 x.

mamonick
Dárce - Donátor
Dárce - Donátor
Příspěvky: 187
Registrován: 20. září 2021, 13:47
Bydliště: Třebechovice p. O.
Dal poděkování: 23 poděkování
Dostal poděkování: 22 poděkování

Re: Vodomer ESP32 DeepSleep Solar - Návod

Příspěvek od mamonick »

FAkt dobrý... a já kupoval sensor na vodoměr za víc jak 1000 Kc. No nic, ale už mi to spokojeně min. 1,5 roku.

Uživatelský avatar
tiimsvk
Dárce - Donátor
Dárce - Donátor
Příspěvky: 801
Registrován: 06. květen 2021, 07:03
Dal poděkování: 72 poděkování
Dostal poděkování: 65 poděkování

Re: Vodomer ESP32 DeepSleep Solar - Návod

Příspěvek od tiimsvk »

Ja uz fungujem s tým vyse roka len som nemal verziu s wakeup ale esp8266 s deepsleep a 20sec zapinanim ale ten nezaznamenaval potom vsetko🙂.
Tak snad to niekomu pomoze este pred kupou draheho senzoru, ktorý podla mna funguje na rovnakom principe 🤣

blizzy
Dárce - Donátor
Dárce - Donátor
Příspěvky: 79
Registrován: 07. únor 2023, 09:22
Dal poděkování: 6 poděkování
Dostal poděkování: 1 poděkování

Re: Vodomer ESP32 DeepSleep Solar - Návod

Příspěvek od blizzy »

STLko by nebylo - koukal jsem po netu, ale nemohu ho najít - díky předem

Odpovědět

Zpět na „ESPHome“