Něco pro akvaristy

www
Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Něco pro akvaristy

Příspěvek od Pete30 »

Dávkovací pumpa hnojiv.
Kdo provozuje rostlinné akvárium zajisté ví že stejně jako rostliny na zahrádce tak i ty akvarijní potřebují živiny
jako stavební kameny ke svému růstu.
K tomu účelu se zrodilo chytré dávkovací čerpadlo za zlomek ceny originálu, který je hloupý a pracuje na stejném principu.
Moje představa byla zakomponovat ho do Home Assistant, který to bude ovládat jak mu určíte a možnost i manuálního spuštění čerpadla v případě potřeb.
Podařilo se splnit všechny požadavky s možností dávkovat nezávisle dva roztoky.

Co jsem použil:
Krabičku https://www.hadex.cz/o220-krabicka-plas ... mi-panely/
Motor Shield L293D https://www.laskarduino.cz/doit-motor-s ... cu-lua-v3/
ESP8266 Lua NodeMcu V2 WIFI modul https://www.laskarduino.cz/iot-esp8266- ... l--tcp-ip/
Nízkoodběrové LED diody = 2x
Tlačítka = 2x
Odpory 4K7 = 2x
Peristaltické čerpadlo 12V = 2x https://www.laskarduino.cz/intllab-dp-3 ... padlo-12v/
Napájecí modul, step-down měnič 3A s LM2596 https://www.hadex.cz/m406-napajeci-modu ... -s-lm2596/
Napájecí zdroj 12V/5A (našel jsem ho doma)
Napájecí konektor DC do panelu
Pár mechanických drobností: distanční sloupky, šroubky a pár drátů
Vše nakoupeno v českém eshopu, pokud chcete čekat můžete objednat v Číně a pravděpodobně se cenově dostanete na polovinu.

Nebudu popisovat mechanickou montáž protože to záleží na každém kdo si to chce postavit, kam to umístí a jak to bude finálně vypadat.

A teď ta zábavnější část, když už je vše sestaveno.

Motor Shield L293D má dvě části:
řídící část kde je do patice na desce vložen ESP8266 Lua NodeMcu V2 WIFI modul
tato část je napájena 4,5 - 9V
druhá část je vlastní řízení motorů a je napájena 4,5 - 36V /600mA trvale na motor, nárazově 1,2A
při použití jednoho zdroje 12V byl instalován step-down měnič 3A s LM2596 kterým snížuji napětí pro nodemcu na 6V

Při dodávce čerpadel jsem zjistil že na štítku je 12V/5W a to zviklalo mou jistotu že to modul řízení dá :o a proto jsem provedl měření, které mě uklidnilo. Motor odebírá z 12V zdroje 180 mA.
Jen pro zajímavost: na výstupu z desky pro motor je snížené napětí na 10,5V, ale motorky makají v pohodě.

LED kontrolky zapnutí čerpadla jsou jen přes omezovací odpor paralerně ke každému motoru jedna.
Původní myšlenka byla že je budu řídit přes GPIO desky, ale tím bych se připravil do budoucna například o připojení zapouzdřeného Dallasu k měření teploty a něco dalšího(málo pinů)

Dvě tlačítka na zařízení jsou připojena na GPIO D5 a D6 a umožňují manuální dávkování.

K řízení motorků deska využíva piny D1 a D3 motor A, D2 a D4 motor B.
Nepotřebuji řídit směr a rychlost motoru proto jsem použil pouze D1 a D2 ke spuštění motorů.
V jednoduchosti je krása a zde je kód který jsem se snažil maximálně zjednodušit.
Vlastní motory:

Kód: Vybrat vše

output:  
  - platform: gpio
    pin: D1
    id: pwm_output_a
  - platform: gpio
    pin: D2
    id: pwm_output_b

switch:
  - platform: output
    name: "Hnojivo motor A"
    output: pwm_output_a
    id: sw_pump_a
  - platform: output
    name: "Hnojivo motor B"
    output: pwm_output_b
    id: sw_pump_b
Tlačítka:

Kód: Vybrat vše

binary_sensor:
  - platform: gpio
    pin:
      number: D6
      mode: INPUT_PULLUP
      inverted: True
    name: "Tlačítko pumpa A"
    on_state:
      then:
        - switch.toggle: sw_pump_a
  - platform: gpio
    pin:
      number: D5
      mode: INPUT_PULLUP
      inverted: True
    name: "Tlačítko pumpa B"
    on_state:
      then:
        - switch.toggle: sw_pump_b
Celý kód:

Kód: Vybrat vše

output:  
  - platform: gpio
    pin: D1
    id: pwm_output_a
  - platform: gpio
    pin: D2
    id: pwm_output_b

switch:
  - platform: output
    name: "Hnojivo motor A"
    output: pwm_output_a
    id: sw_pump_a
  - platform: output
    name: "Hnojivo motor B"
    output: pwm_output_b
    id: sw_pump_b
    
binary_sensor:
  - platform: gpio
    pin:
      number: D6
      mode: INPUT_PULLUP
      inverted: True
    name: "Tlačítko pumpa A"
    on_state:
      then:
        - switch.toggle: sw_pump_a
  - platform: gpio
    pin:
      number: D5
      mode: INPUT_PULLUP
      inverted: True
    name: "Tlačítko pumpa B"
    on_state:
      then:
        - switch.toggle: sw_pump_b
A teď vzhůru do HA a automatizace:
Pro dvě čerpadla vytvořte dva pomocníky číslo pojmenujte si je jak chcete a měrná jednotka ml, rozsah dávkování jak chcete(já dal 20 ml):

Kód: Vybrat vše

input_number.davkovani_a
input_number.davkovani_b
A teď se ponoříme do šablonování :o
Vytvořte šablonu kterou použijete v automatizaci a ta vám zajistí převod času na ml:

Kód: Vybrat vše

{{ states('input_number.davkovani_a') | round * 0.75 }}
samozřejmě pro druhé čerpadlo vytvoříte ještě jednu b
Jak vidíte v šabloně je číslo 0.75 a to zajišťuje správné dávkování v ml.
Pro kalibraci jsem použil číslo 1 = 10 vteřin je 10 ml teorie
Skutečnost: 10 vteřin = 13,5 ml proto jsem vzal 10s : 13,5 ml cca = 0,74 a použil hodnotu v šabloně 0,75 a výsledek dávkování 10s = 10 ml
to jen pro vysvětlení ;)
Potom vytvoříte automatizaci:

Kód: Vybrat vše

  alias: Ovládání pumpa A čas/ ml
  description: ''
  trigger:
  - platform: state
    entity_id: switch.hnojivo_motor_a
    to: 'on'
    for: '{{ states(''input_number.davkovani_a'') | round * 0.75 }}'
  condition:
  - condition: state
    entity_id: binary_sensor.tlacitko_pumpa_a
    state: 'off'
  action:
  - service: switch.turn_off
    target:
      entity_id:
      - switch.hnojivo_motor_a
  mode: single
Opět pro druhé čerpadlo vytvoříte ještě jednu.
Tato automatizace vám zajistí, aby čerpadlo nadávkovalo nastavené množství ml roztoku nastavené běžcem na kartě a vypnulo.
Podmínka v automatizaci je tlačítko na zařízení a zajišťuje pokud dávkujete manuálně, aby se čerpadlo nevypnulo na nastavené hodnotě, prostě to dávkuje dokud držíte tlačítko :o
karta čerpadel.png
Teď už jen zbývá vytvořit automatizaci čím to chcete spustit, například časem, úrovní osvětlení, to už je na každém jakou má představu, proto jí zde neuvádím (mám to řízené časem a testuji ;) ).
Časová náročnost na stavbu pokud máte vše potřebné je jedno klidné odpoledne a máte hotovo :roll:
Pár náhledů:
pohled na vnitřnosti
box zapojeni.jpg
Finální produkt:
box komplet.jpg
Ať vám to roste:
akva 350.jpg
Pokud nejsem přítomen tak jsem na rybách ;)

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Jen doplnění:
Pokud budete mít nějaké návrhy na vylepšení kódu ESP, automatizace a další, neváhejte a pište.
Prozatím mám čerpadlo v testu a mohu cokoliv vyzkoušet a otestovat než to nasadím do běžného provozu ;)
Pokud nejsem přítomen tak jsem na rybách ;)

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Trochu vylepšení pro dávkovací čerpadlo a ovládání přes nástěnný tablet.
Grafické běžce pro nastavení množství dávkování.
Grafické ukazatele odebraného množství roztoku.
Virtuální tlačítka ke spuštění jednorázového nadávkování.
V automatizaci je použito šablonování, které zajištuje odpočet roztoku a v případě změny množství dávkovaného roztoku upravuje odečítání.
Stupnice ukazují zbývající množství v zásobníku a při poklesu na určitou úroveň mění barvu a ikony.
Při poklesu pod určenou hranici HA oznamuje prostřednictvím TTS upozornění na nízkou hladinu roztoku ;)
ovladani davkovace2.png
Pokud nejsem přítomen tak jsem na rybách ;)

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Nebo můžete mít zásobníky roztoku vertikálně ;)
vertical zasobnik.png
Pokud nejsem přítomen tak jsem na rybách ;)

D.e.s.t.y
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 03. únor 2022, 15:46
Dal poděkování: 1 poděkování

Re: Něco pro akvaristy

Příspěvek od D.e.s.t.y »

Ahoj, libi se mi tvuj projekt a vlastne neco podobneho ale na ESP32 jsem mel jiz postaveneho. Se 3 pumpami a na jine desce.
Od tohoto sokolika
https://www.joy-reef.com/en/arduino-dos ... ssembling/

Jen jelikoz jsem novacek v HA tak mam problem s casti

A teď se ponoříme do šablonování :
Vytvořte šablonu kterou použijete v automatizaci a ta vám zajistí převod času na ml:

{{ states('input_number.davkovani_a') | round * 0.75 }}

i kdyby jsi me zabil absolutne netusim jak tohle vlozit do HA, prosim o pomoc dekuji
Pokud bys vytvoril lepsi postup neb video a pokud bys nabidl i tu grafiku co jsi postnul byl bych neskutecne vdecny.

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Není to tak složité jak to vypadá, když se podíváš výše na pasáž - celý kód a to nahraješ do esp.
Dále je tam poznámka vytvořte pomocníky číslo pro každou pumpu. Máš je k dispozici v HA graficky jen si nastavíš max limit dávkování v ml a pojmenuješ jak chceš a tím se ti vytvoří entita imput_number.xxxxxxxxx kterou použiješ v šabloně.
A máš tam i tu automatizaci kde vidíš že je tam vložena ta šablona. Možná mate to že je použito jako spouštěč kde to říká pokud je pumpa on proveď akci, ale sama o sobě se nespustí , proto ji spouštím v čase a k tomu používám kartu viewtopic.php?f=152&t=34&hilit=scheduler
Jak se kalibruje pumpa tam máš také vysvětleno.
Automatizace končí zavoláním služby

Kód: Vybrat vše

switch.turn_off
to vlastně zajistí že pumpa jede po stanovený čas(ml) a vypne.
Pokračoval jsem dál protože tam mám manuální dávkování, vložil jsem hned za spouštěč v automatizaci podmínku, tlačítko off a to mi zajistí že se pumpa nezastaví po čase, ale jede stále po dobu držení tlačítka, není splněna podmínka protože tlačítko je on.
Poslední mám vloženo jako druhou akci odečtení roztoku ze zásobníku, vytvořil jsem si ještě jeden imput_number.odecet_roztoku_1 a použil šablonu na odečet jako akci po nadávkování čerpadla

Kód: Vybrat vše

service: input_number.set_value
data:
  value: >-
    {{ states('input_number.odecet_roztoku_1') | int -
    states('input_number.davkovani_a') | int }}
target:
  entity_id: input_number.odecet_roztoku_1
Pro grafiku používám kartu Bar Card: https://github.com/custom-cards/bar-card
pro běžce kartu slider-entity-row : https://github.com/thomasloven/lovelace ... entity-row
a pro tlačítka button card: https://github.com/custom-cards/button-card
Ty karty jsou docela intuitivní, ale pokud nebudeš vědět napiš nebo pokud to není jasné , to dáme ;)
Celou grafiku mám umístěnu ve vertikálním zásobníku a ještě jsem tam přidal pod PMDD a NO3 dvě tlačítka na reset zásobníku když ho doplním, ale to je další automatizace a pokud budeš chtít ukáži ti jak.
Celou dobu co jsem to spustil funguje a dávkuje bez problému ani si toho nevšimnu jen když mě to upozorní že došel roztok :P
Pokud nejsem přítomen tak jsem na rybách ;)

D.e.s.t.y
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 03. únor 2022, 15:46
Dal poděkování: 1 poděkování

Re: Něco pro akvaristy

Příspěvek od D.e.s.t.y »

Diky moc pane, mate to u me.

D.e.s.t.y
Nováček na fóru
Nováček na fóru
Příspěvky: 5
Registrován: 03. únor 2022, 15:46
Dal poděkování: 1 poděkování

Re: Něco pro akvaristy

Příspěvek od D.e.s.t.y »

Stále tápu.
Po programátorské části to chápu, umím programovat v C, ale scriptovací část jde totálně mimo mě a nedokažu to pochopit :D , Třeba nechápu proč píše duplicitu v automatizaci. Ale začnu od začátku.

ESPhome - tohle mi funguje, včetne toho co je na obrázku, ale jen jako switch tzn., nedávkuje

Kód: Vybrat vše

output:  
  - platform: gpio
    pin: GPIO2
    id: pwm_output_a
  - platform: gpio
    pin: GPIO4
    id: pwm_output_b
  - platform: gpio
    pin: GPIO18
    id: pwm_output_c    

switch:
  - platform: output
    name: "Hnojivo motor A"
    output: pwm_output_a
    id: sw_pump_a
  - platform: output
    name: "Hnojivo motor B"
    output: pwm_output_b
    id: sw_pump_b
  - platform: output
    name: "Hnojivo motor C"
    output: pwm_output_c
    id: sw_pump_c    
Výstřižek.PNG
2. teď jsem udělal ty pomocniky, tu jsem vytvořil 3 a bez problému
Výstřižek2.PNG
3. následuje automatizace a tu je kamen urazu, háže mi to ve File editoru chybu
duplicated mapping key at line 19, column 3:
alias: Ovládání pumpa B čas/ ml
Teď mám udělat automatizaci a nakopírovat to i pro B a C
A tu je část kde nerozumím syntaxi, proč to nejede a proč to háže chybu. Proč ten alias nefunguje, nebo spíš já to nechápu. V programováni by tohle prošlo. A neni B a C tak nechápu proč píše Duplicitu. (C tam nemám když to nefunguje)
Vloženo do souboru automation.yaml.

Kód: Vybrat vše

  alias: Ovládání pumpa A čas/ ml
  description: ''
  trigger:
  - platform: state
    entity_id: switch.hnojivo_motor_a
    to: 'on'
    for: '{{ states(''input_number.davkovani_a'') | round * 0.75 }}'
  condition:
  - condition: state
    entity_id: binary_sensor.tlacitko_pumpa_a
    state: 'off'
  action:
  - service: switch.turn_off
    target:
      entity_id:
      - switch.hnojivo_motor_a
  mode: single

  alias: Ovládání pumpa B čas/ ml
  description: ''
  trigger:
  - platform: state
    entity_id: switch.hnojivo_motor_b
    to: 'on'
    for: '{{ states(''input_number.davkovani_b'') | round * 0.75 }}'
  condition:
  - condition: state
    entity_id: binary_sensor.tlacitko_pumpa_b
    state: 'off'
  action:
  - service: switch.turn_off
    target:
      entity_id:
      - switch.hnojivo_motor_b
  mode: single
  
No a tímto jsem vlastně skončil, protože pak píšeš hodit to šablony a to buď nevím nebo nefunguje.

Jo ještě něco v Záložce Automatizace se mi nějak objevilo toto :
Výstřižek3.PNG
Opět prosím o pomoc.

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Ten kód je v podstatě dobře jen bude problém v tom že to píšeš ve složce automation.yaml a tím ty dvě automatizace nemají každá své vlastní ID a on si myslí že je to jako jedna a vyhodí duplicitu. Tak jak je kód tak ho vezmi a otevři automatizace graficky a nacvakej to tam jako každou jednotlivou automatizaci pro každý motor zvlášť. Pokud nebudeš vědět piš ;)

Ten pokus smaž, automatizace takto vytvořená jak vidíš když nemá ID nejde ani upravit(přeškrtlá tužka na konci), nebo jde, ale zase přes customize a to je v tomto případě zbytečné a složité.

Malé nakopnutí :D
pumpa.png
Pokud nejsem přítomen tak jsem na rybách ;)

Uživatelský avatar
Pete30
Moderátor
Moderátor
Příspěvky: 3333
Registrován: 30. září 2020, 20:33
Dal poděkování: 172 poděkování
Dostal poděkování: 364 poděkování

Re: Něco pro akvaristy

Příspěvek od Pete30 »

Pokud budeš potřebovat pošlu v obrázkách další části automatizace ;)
Pokud nejsem přítomen tak jsem na rybách ;)

Odpovědět

Zpět na „ESPHome“