Pomiar napięcia 0-20V import danych do HA

Cześć, szukam rozwiązania, które pozwalało by mi monitorować stan naładowania akumulatra w UPS. Czy jest jakieś urządzonko które odczytuje napięcie w zakresie 0-20V i potrafi importować te dane do HA?

Chyba takie cos by starczyło razem z plytką
https://allegro.pl/oferta/modul-pomiaru-napiecia-pradu-natezenia-ina219-i2c-9727136791?utm_feed=aa34192d-eee2-4419-9a9a-de66b9dfae24&utm_content=supercena&utm_source=google&utm_medium=cpc&utm_campaign=_ELKTRK_PLA_Komputery&ev_adgr=Inne&ev_campaign_id=1434728395&gclid=CjwKCAjwybyJBhBwEiwAvz4G760YjGeZNlXtCgcVK-mHfyIdpsvbECthawggHlupoel-ALF4OtC00BoCMgEQAvD_BwE

i ESPhome:

Edit
tu masz tez wykorzystując tylko plytke i adapter zasilania, chyba sam sobie takie zrobie :slight_smile:

Z ciekawości co dalej z tym zrobisz?
Ja mam zasilacz DC, z którego mogę wydobyć wszystkie informacje i chciałem jakoś go wpiąć pod NUT

Tak naprawdę, to nawet zewnętrzny układ ADC nie jest potrzebny, bo esp posiadają wejścia analogowe z przetwornikiem ADC i to zarówno ESP8266 (jedno) jak i ESP32 (kilka)

więc jedynie będzie potrzebny rezystorowy dzielnik napięcia (aby wykorzystać optymalnie dopuszczalny zakres sygnału wejściowego).

:exploding_head: mózg paruje, jak czytam takie linki, nie jestem takim dobrym elektronikiem, więc wolę filmiki jak ktoś łopatologicznie coś pokazuje :confused:. Części z Ali już zamówione.

Idea jest taka

oraz strony 17 i głównie 18 datasheet’u

Dzielnik rezystorowy to np. 9k1 w górnej gałęzi i 1k8 w dolnej (jeśli napięcie mierzone ma sięgać 20V a dysponujesz płytką z wejściem na poziomie 3,3V czyli zasilana takim napięciem, jeśli masz “goły” moduł to napięcie wejściowe to 1V a nie 3V3 jak w gotowych płytkach).

Cześć, finalnie…
takie projekty naprawdę cieszą, szczególnie jak składa się je od zera i działają

:sunglasses: :sunglasses:


obraz
obraz

1 polubienie

teraz mogę zrobić automatyzację, żeby mnie informowało jak UPS będzie padać lub też żeby włączyło ładowanie jeżeli to jest możliwe itd…

Na zdjęciu urządzenia na dole to napewno układ Wemos D1 mini a na górze co za układ?

Power Shield V1.1.0 płyta rozwojowa dla Wemos D1

To zawiera sam zasilaczyk dla D1 (lub klonów) czy coś jeszcze?
Na zdjęciu wiele nie widać, ale zdaje się zastosowałeś po prostu rezystorowy dzielnik napięcia podpięty do A0? (jakkolwiek fotka wygląda dziwnie, bo "góra"powinna być podpięta do mierzonego napięcia, “dół” do masy, a wyjście dzielnika - “środek” - do A0)

A NUT go obsługuje?

trzeba kupić:

a film to instrukcja krok po kroku jak to poskładać i zaprogramować

Czy ktoś zrobił pomiar napięcie akumulatora 12V z wykorzystaniem ESPHome na bazie ESP32 i wejścia ADC? Przeszukuję dokumentację, ale nie bardzo rozumiem jak finalny kod yaml powinien wyglądać?

Z dzielnika napięcia mam:

Vin = Vout 
12,2 = 2.18
4,53 = 0,814
3,3 = 0,593

Dzisiaj nie wiem, ale się dowiem :stuck_out_tongue:

Sprawdź jaką masz wersję ESP32 i kiedy wyprodukowaną
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#calibration-values

1 polubienie

Z tym może być problem:

Będę teoretyzował :wink:
Jesli pomiar działa i problem dotyczy samej kalibraci, to zrób dwa pomiay raw - dla 0V i dla znanej wartosci odczytanej z multimetru.
Na tej postawie wyznaczysz współczynnik korekcji.

W tym problem, że mam dziwne odczyty ni nie mogę sobie z tym poradzić.

Górny zakres pomiarowy ADC mam raczej w tym modelu ESP - 3,17V.
Czy taki zapis z kalibracją liniową ma sens?

sensor:
  - platform: adc
    id: bat
    pin: GPIO39
    name: "bateria"
    attenuation: 11dB
    filters:
    - calibrate_linear:
        # Map 0.0 (from sensor) to 0.0 (true value)
        - 0.0 -> 0.0
        - 0.593 -> 3.3
        - 0.814 -> 4.53
        - 1.39 -> 7.8
        - 2.18 -> 12.2
        - 2.28 -> 12.85
        - 2.67 -> 15.15
    update_interval: 5s

Wyniki i tak wychodzą inne od oczekiwanych.

Trochę słabe, bo odczyty nie są liniowe w rzeczywistości.

A dasz radę zrobić zdjęcie z kodem 2D?

Swoją drogą nieco dziwny ten dzielnik napięcia (nieliniowy?)

Sugeruję nie robić pomiaru dla 0V , bo właśnie w okolicy 0V charakterystyka ADC jest nieliniowa (przyjmijmy, że pomiar liniowy zaczyna się od 0,2V).

ESPHome generalnie ma możliwość wykorzystania kalibracji liniowej (nawet wielopunktowej jeśli mamy lekką nieliniowość, to można użyć więcej punktów kalibracyjnych)

Prawdopodobnie to wpływ szumów - w tej samej dokumentacji, którą linkowałem wyżej jest rozwiązanie - kondensator 100nF na wejściu + multisampling
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/adc.html#minimizing-noise
możesz użyć np. tych filtrów
https://esphome.io/components/sensor/index.html#median
lub
https://esphome.io/components/sensor/index.html#sliding-window-moving-average

Jakie wartości rezystorów ma dzielnik i na czym mierzysz to napięcie?

Panowie od początku, mam odczyty z dzielnika napięcia wykonane multimetrem i w/g nich próbuje zapisać kalibrację zarówno liniową jak i wykładniczą ale odczyty nie zgadzają się z tym co mam na multimetrze. Więc problem jest z prawidłową konfiguracją ESPHome. Dodam, że wcześniej, identyczny moduł współpracował z tym dzielnikiem pod Tasmota i nie było problemów z kalibracją i właściwymi odczytami.

Oto kod YAML:

sensor:
  - platform: adc
    id: bat
    pin: GPIO39
    name: "bateria"
    attenuation: 11dB
    filters:
    - calibrate_polynomial:
       degree: 2
       datapoints:
       # Map 0.0 (from sensor) to 0.0 (true value)
       - 0.0 -> 0.0
       - 0.593 -> 3.3
       - 0.814 -> 4.53
       - 1.39 -> 7.8
       - 2.18 -> 12.2
       - 2.28 -> 12.85
       - 2.67 -> 15.15
    update_interval: 5s

Oto wynik odpowiednio dla kolejno napięć z dzielnika: 0.593V ; 0.814V ; 2.28V

15:31:35][D][sensor:125]: 'bateria': Sending state 3.49213 V with 2 decimals of accuracy
[15:31:40][D][sensor:125]: 'bateria': Sending state 4.72022 V with 2 decimals of accuracy
[15:31:45][D][sensor:125]: 'bateria': Sending state 13.31863 V with 2 decimals of accuracy

Jak poprawić dokładność i odczyty przybliżyć do realnych mierzonych napięć?
Może zamiast kalibracji powinien być mnożnik multiply?

Gdzie robię błąd, bo dokumentacja ESPHome jest pokrętna i niejednoznaczna.