Procentowa wysokość słupa wody - układ otwarty na podstawie ciśnienia atmosferycznego - precyzyjny pomiar

Cześć, w końcu się udało.
Jak zmierzyć ile mam aktualnie deszczówki w zbiorniku?
potrzebne:

  1. Wemos d1 mini 2x

  2. BMP280 2szt

  3. Szklana fiolka + 1 rurka sylikonowa z obciążnikiem
    Robimy tak:

  4. Wemos nr1 + bmp280 odpalamy jako wzorzec do pomiarów - dane hpa

  5. Wemos nr2- drugi komplet składamy jak na zdjęciu


Wemos nr1
obraz

Wemos nr2 po zanurzeniu rurki w wodzie do dna
obraz

żeby mieć prawidłowe odczyty (ciśnienie atmosferyczne się zmienia), trzeba oprzeć pomiary o aktualne dane z wzorca, czyli odejmujemy ciśnienie wemosa nr1 od wemosa nr2 (zanurzony wężyk zwiększa ciśnienie), i tak zostaje mi 39,7hpa różnicy, a to z kolei trzeba przeliczyć na % - czyli:

ten -1 to dlatego że jest różnica pomiędzy pomiarami obu bmp280 przed zamontowaniem

  - platform: template #głebokość wody tara
    sensors:
      woda_glebokosc_garaz_tara:
        friendly_name: Woda głębokość 1 karcher tara
        unit_of_measurement: 'cm'
        value_template: "{{ (-1|float(0)| round(0) + states('sensor.czujnik_cisnienia_1_bmp280_pressure')|float(0)| round(2) - states('sensor.czujnik_cisnienia_0_bmp280_pressure')|float(0)| round(2)) | round(1) }}"
  - platform: template #głebokość wody #przeliczamy ciśnienie na %(39,7 hpa to full)
    sensors:
      woda_glebokosc_garaz: 
        friendly_name: Woda głębokość 1 karcher
        unit_of_measurement: "%"
        value_template: "{{(100*(states('sensor.woda_glebokosc_garaz_tara')) | float (0) / 39.7) | round (0) }}"

teraz karta

entities:
  - name: Woda karcher
    entity: sensor.woda_glebokosc_garaz
severity:
  - color: '#ff0000'
    from: '0'
    to: '25'
  - color: '#eaa61c'
    from: '26'
    to: '50'
  - color: '#00b158'
    from: '51'
    to: '75'
  - color: '#0ff00f'
    from: '76'
    to: '100'
direction: up
height: 250px
width: 60px
positions:
  indicator: inside
  icon: 'off'
style: |-
  .card-header {
    font-size: 18px;
  }
  bar-card-value, bar-card-name {
    font-size: 20px;
    transform-origin: 0 0;
    transform: rotate(270deg);
    text-shadow: 1px 1px #0008;
    white-space: nowrap;
  }
  bar-card-value {
    margin-right: auto;
    margin-left: 6px;
    margin-bottom: auto;
    margin-top: auto;
  }
  bar-card-name {
    margin-right: auto;
    margin-left: 0px;
    margin-bottom: -130px;
    margin-top: 130px;
    right: 20px;
  }
  bar-card-currentbar, bar-card-backgroundbar {
    border-radius: 12px;
    border: 1px solid ;
  }
stack: horizontal
type: custom:bar-card
animation:
  state: 'on'
  speed: '20'
min: '0'
max: '100'
columns: '0'

i na koniec mamy: :sunglasses:
obraz

największy problem stanowi zrobienie szczelnego układu, żeby ciśnienie nie uciekało z układu z sensorem. Ale w końcu się udało.

Finalnie, jak ciśnienie atmosferyczne będzie się zmieniać, to odczyt zawsze będzie stały, czyli fazy księżyca, czy efekt przypływów czy odpływów lub aktualna pogoda nie powinny zakłócać wyników.
Precyzyjnie :grin:

7 Likes

… widzę, że temat się rozwija.

Jeśli to jest Tasmota to w jaki sposób skalibrowałeś wskazanie BMP280- widzę różnice ok 20 hPa w stosunku do wskazań najbliższych stacji Airly.

no właśnie, to jest temat otwarty. Nie wiem jak to skalibrować, i pytanie jest czyje pomiary są właściwe, podejrzewam że moje, można by zrobić drugą encję, która korzysta z czujnika i podności (kalibruje ) o określoną wartość, ale narazie to ostawiłem.
Wszysykie czujniki mają praktycznie te same wskazania, ale znacząco się różnią od zewnętrznych

Testowałem czujnik W GUI Supla tam jest funkcja kalibracji po wprowadzeniu wysokości n.p.m. Ale nigdy nie zbliżyłem się do wartości z prognozy czu czujnika ciśnienia a mam w okoliy stację GIOŚ i Arliy.

Wysokość czujnika podawałem na podstawie aplikacji w iphone.

Wskazania umnie.
1024 Pogoda
1022 Airy
999 BMP280


image

Wzór na przeliczenie ciśnienia rzeczywistego na znormalizowane (na poziomie morza) jest np. tam

ale moim zdaniem w tym zastosowaniu nie ma to żadnego znaczenia - jeśli oba czujniki wskazywały przed budową tego manometru takie same ciśnienia, to nie ma potrzeby przeliczania i kalibracji z państwowymi stacjami meteorologicznymi.

1 Like

Proponuję wpisać jedną komendę Altitude i ustawić nią wysokość czujnika nad poziomem morza w metrach:

obraz

Uzyskasz dodatkową encję:

Lecz tak jak wspomniał @szopen, dla zastosowania w twoim przypadku to tylko informacyjnie.
@luki25 - zainspirowałeś mnie, gratuluję pomysłowości :+1:
BTW
Tasmota ma również komendy ustalające położenie geograficzne i strefę czasową. Są ważne przy ustawianiu reguł Tasmota z wykorzystaniem harmonogramów oraz położenia słońca (wewnętrzny zegar astronomiczny).
obraz

… z jakiego softu otrzymałeś wyniki PM 10 na czujniku ikea. Ja korzystam z Tasmota All sensor i tego nie ma.

Ja używa AIS-Tasmota z własną kompilacją bin.

Ale nie stoi nic na przeszkodzie abyś sobie obsługę PM1 i PM10 sam dodał w Tasmota. Wiersze do odkomentowania przed kompilacją (np na Gitpod):

Więcej o narzędziach kompilacji takich jak platforma Gitpod czy projekt Tasmocompiler:

Proponuję wpisać jedną komendę Altitude i ustawić nią wysokość czujnika nad poziomem morza w metrach:

dzięki za tą komendę, brakowało mi tego, gdyż nie używam stacji pogodowych do obserwacji ciśnienia w HA, tylko swoich czujników.
A mam pytanie, co ma wysokość n.p.m. do pomiarów czujnika skoro on faktycznie mierzy ciśnienie na tej wysokości, trochę tego nie rozumiem, jak on on działa?

Czujnik działa tak jak działał mierząc ciśnienie bezwzględne.Oprogramowanie działa jak kalkulator dla przeliczenia wartości do ciśnienia względnego, znając wysokość n.p.m, temperaturę i wilgotność. Przyjęło się posługiwać w prognozach wartościami względnymi, punktem odniesienia jest ciśnienie na poziomie morza.
Tu masz ładnie wytłumaczone:

https://stacje-pogody.pl/artykul_cisnienie_atmosferyczne_bezwzgledne_i_wzgledne_zredukowane_do_poziomu_morza_o_co_chodzi_z_tymi_cisnieniami,83.html

teraz rozumiem, czyli czujnik pokazuje prawidłowo, a my mamy wszędzie “dane nie prawidłowe”, bo te wyniki są redukowane do ciśnienia gdybyśmy mieszkali na poziomie morza

Jak duży wpływ ma ciśnienie atmosferycznye na błędy pomiaru przy takich konstrukcjach?

Nie bardzo rozumiem pytanie…
Na oba czujniki w konstrukcji @luki25 działa takie samo ciśnienia atmosferyczne. Rożnica wskazań wynika z nacisku słupa wody, wiec wpływ na wynik ma jedynie sprzęt, jego dokładność pomiatowa, szczelność układu czy elastyczność ścianek przewodów.

Panowie , mam dwa czujniki podpięte do Nodemcu,

  1. Czujnik ciśnienia V - przeliczony na bar
  2. Czujnik BMP180 w hPa.

Jak skorygować @luki25 twój czujnik - obecnie mam skalibrowane i wykazują mnie więcej to samo. (nie wiem jak zwiększyć dokładność z czujnika bar).

  - platform: template #głebokość wody tara
    sensors:
      woda_glebokosc_garaz_tara:
        friendly_name: Woda głębokość 1 karcher tara
        unit_of_measurement: 'cm'
        value_template: "{{ (1|float(0)| round(0) + states('sensor.tasmota_bmp280_pressure_2')|float(0)| round(2) - states('sensor.cisnienie_wody_hydrofornia2')|float(0)| round(2)) | round(1) }}"
  - platform: template #głebokość wody #przeliczamy ciśnienie na % (100 hpa to min)
    sensors:
      woda_glebokosc_garaz: 
        friendly_name: Woda głębokość 1 karcher
        unit_of_measurement: "%"
        value_template: "{{(100*(states('sensor.woda_glebokosc_garaz_tara')) | float (0) / 100) | round (0) }}

Sorki @luki25 użyłem w całości twój post :slight_smile: pozmieniam jak zacznie coś wskazywać sensownego.

Mój pomysł to czujnik na zewnątrz zbiornika BMP280 do pomiaru obecnego stanu + czujnik na danie zbiornika analogowy i z różnicy wskazań mierzyć tak jak Ty.

Żółty czujnik to BMP180
Pomarańczowy czujnik analogowy ciśnieniowy

@arkop
Przeczyściłem trochę literówki w twoim poście, więc sprawdź czy nie zmieniło to twoich intencji.
Możesz podrzucić jaki masz ten czujnik analogowy?
(niektóre służą do pomiaru ciśnienia względnego - sugeruje to swoją drogą rysunek - skoro doprowadzasz na “lewą” stronę takiego czujnika powietrze, to nie potrzebujesz do kalibracji ciśnienia atmosferycznego)

U dołu zbiornika będzie czujnik ciśnienia bez dostępu powietrza w tej rurze po prostu będą biegły kabel aby je odizolować od wody. Chciałem go zamontować u góry ale wyczytałem że będzie mniej dokładny przez ściśliwość powietrza w rurze.
https://shopee.pl/Yummya-DC5V-1-8NPT-czujnik-ciśnienia-przetwornika-ciśnienia-oleju-ze-stali-nierdzewnej-woda-powietrzna-i.536923718.14401548567
Jutro poskładam i wrzucę fotkę.

U góry pomiar ciśnienia otoczenia bmp180.

Problem mam z tym że bmp podaje w hPa a czujnik ciśnienia w barach.

Nie ma tego w opisie, ale moim zdaniem to czujnik ciśnienia względnego ( i jako taki nie wymaga “tarowania”, tak naprawdę nie musi to być dokładnie takie rozwiązanie, ale skoro sam tak zaplanowałeś to pewnie wiercenie zbiornika na dole nie wchodzi w grę), więc czujnik w całości musi się znaleźć wewnątrz rury (z powietrzem o ciśnieniu atmosferycznym - to jest właśnie wspomniana wcześniej “lewa” strona czujnika), a jedynie czynnik, którego ciśnienie chcesz mierzyć ma być doprowadzony do gwintowanego króćca.

W/g opisu z linka czujnik nie podaje ciśnienia w żadnej jednostce, ale jest to napięcie liniowe odniesione do FS (“full scale” - czyli maksymalne wskazanie dla danej wersji czujnika).
W przeliczeniu
0,5V @0FS
i
4,5V @1FS
(dla potwierdzenia liniowości jest napięcie dla połowy skali 2,5V @0,5FS, jakkolwiek błędy w opisie oferty są takie, że “aż żeby bolą”, to mimo wszystko można wyczytać to i owo “między wierszami”)

Przy czym kalibracja fabryczna dotyczy jednostki psi (funty na cal kwadratowy)
1 psi = 6894,757 Pa = 68,94757 hPa.

Korekta:
1.Zmieniłem i skalibrowałem czujnik ciśnienie na dole tj. wartość np. 101 daje mi 993,1 hPa
2. BMP 280 daje również 993,1 hPa
3. 2.8 m ( 2,7 mH2O wynosi 264,8 hPa)

Edytuje bo chyba działa , proszę o sprawdzenie kodu:

   - platform: template #Ciśnienie wody2 993 hPa = 101 analog range
    sensors:
      cisnienie_wody_hydrofornia2:
        friendly_name: Ciśnienie Wody hydrofornia2
        unit_of_measurement: "hPa"
        value_template: "{{(993*(states('sensor.tasmota_analog_a0_2')) | float (0) / 101) | round (2) }}"    
  - platform: template #głebokość wody tara
    sensors:
      woda_glebokosc_garaz_tara:
        friendly_name: Woda głębokość 1 karcher tara
        unit_of_measurement: 'cm'
        value_template: "{{ (-993|float(0)| round(0) + states('sensor.cisnienie_wody_hydrofornia2')|float(0)| round(2) - states('sensor.tasmota_bmp280_pressure_')|float(0)| round(2)) | round(1) }}"
  - platform: template #głebokość wody #przeliczamy ciśnienie na %(265 hpa to full)
    sensors:
      woda_glebokosc_garaz: 
        friendly_name: Woda głębokość 1 karcher
        unit_of_measurement: "%"
        value_template: "{{(100*(states('sensor.woda_glebokosc_garaz_tara')) | float (0) / 265) | round (0) }}"        

najprościej napełnij zbiornik do 100% i opróżnij, i sprawdź czy się zgadza wizualnie, jak tak to jesteś w domu :sunglasses:

Mały offtop - jakiej karty użyłeś do zrobienia tego wskaźnika poziomu?