Czujnik NTC 10K w ESPHome

Czy ktoś ma doświadczenie w temacie czujników temperatury NTC. W projekcie wykorzystałem czujnik temperatury NTC 10 oraz opornik 10K. Na tyle ile potrafię z pomocą gogle napisałem kod i obecnie pokazuje mi 32,6 C gdzie faktycznie temperatura jest 20,5 C zmierzone czujnikiem SHT31 a więc sporo zawyża. Jak to ugryźć. Czy dać inny Rezystor czy w kodzie powinny być inne dane.

  - platform: ntc
    sensor: resistance_sensor
    name:  NTC Temperature
    calibration:
     b_constant: 3950
     reference_temperature: 25°C
     reference_resistance: 9.9kOhm  

  -  platform:  resistance
     id:  resistance_sensor
     sensor:  source_sensor
     configuration:  DOWNSTREAM
     resistor:  9.830kOhm
     reference_voltage:  3.3V
     name:  Resistance Sensor
     
  -  platform:  adc
     id:  source_sensor
     name: ADC Value
     filters:
       -  offset:  -0.042
       -  multiply: 3.3
     pin:  A0
     update_interval:  30s

sht31
zdj ntc

Zerknij tu → NTC Sensor

1 Like

Aby pomiar był prawidłowy musisz dokładnie zmierzyć napięcie 3.3V i takie wpisać do konfiguracji.
Druga sprawa to musi bić ono bardzo dobrze stabilizowane. Kolejna sprawa to współczynnik temperaturowy b_constant - trzeba znać producenta i zdanych ustawić właściwe wartości. 3950 jest dla termistora “generic”.
Ewentualnie zrobić pomiary dla kilku temperatur i samemu wyznaczyć współczynnik.
Poza tym przyglądam się wynikom pomiarów pomiarów i wychodzi mi, że rezystor powinien być podłączony do 3.3v a termistor do GDN. Przy takim połączeniu jak na załączonym przez Ciebie schemacie wyniki są nie logiczne jakie by nie były parametry wpisane w konfiguracji.

a masz może wiedzę co to oznacza:

filters:
       -  offset:  -0.042
       -  multiply: 3.3

Przeczytaj jeszcze raz, bo coś dopisałem (zamień 3.3v z gnd).
Nie znam esphome.

Właśnie google pokazuje dwa różne rozwiązania. To które jest prawidłowe

Z wyników które otrzymujesz wynika, że ver.2
Weź termistor w palce i gdy zacznie spadać mierzona temperatura tzn. że mam rację.

Masz rację na ADC ma iść spomiędzy rezystora o znanej wartości i NTC o zmiennej, ponieważ wraz ze zmianą rezystancji zmienia się również napięcie.

a wiesz może co to oznacza poniższy wpis: głównie to zastanawia mnie to offset
filters:

  • offset: -0.042
  • multiply: 3.3

Tak bywa gdy próbuje się coś skopiować bez zrozumienia tematu :wink:
Tu są opisane filtry

Tak w ogóle to w jakich zakresach temperatur się obracasz, że wybrałeś taką gó…ną metodę?

Jak robili mi wylewki to instalator umieścił w posadzce kilka czujników ntc10. Instalatora przepadł ( jego wynalazki również ) szkoda mi nie wykorzystać tych czujników. Skoro już są to pomyślałem, że podepnę się do nich.

Rozsądnie :+1: praktycznie nie ma się co zepsuć i betonu nie trzeba będzie kuć.

Jak długie są przewody do tego “zabetonowanego” czujnika? Podobno długość przewodów ma wpływ na pomiar.

Jedne są 3 metrowe inne 5 metrów maxymalnie. Od jakiegoś czasu uczę się esphome i z waszą pomocą dużo się już nauczyłem.
Na chwilę obecną wygląda to tak jak na zdjęciu. No i Faktycznie napięcie również ma duże znaczenie aby go wpisać prawidłowo. Zmierzona wartość to 3.18V i tak wpisałem w kodzie w ESPhome. Musze to teraz potestować jak temp w pokoju ulegnie zmianie. Na razie mam to na stoliku dla testów.

Czyli czujnik najpierw trzeba skalibrować?

Pomiar odbywa się poprzez pomiar napięcia na dzielniku. Aby prawidłowo przeliczyć mierzone napięcie najpierw na rezyztancję NTC potrzebujemy znać w miarę precyzyjnie wartość napięcia na dzielniku oraz rezystancję opornika wzorcowego R. To jest funkcja liniowa więc obliczenia są proste.

Następnie obliczoną rezystancję NTC należy przełożyć na temperaturę wg. jego charakterystyki. T(R).
Najprościej mówiąc bez podawania formuły, która opisuje krzywą. Do tego potrzbna jest znajomość wsp. b_constant

Tu można zobaczyć jak różnią się NTC10 dla różnych producentów. Jeśli nie wiesz co masz to musisz “kalibrować”

Jeśli instalator nie był kompletnym partaczem, to czujniki powinien umieścić w rurce/peszlu. Ja na Twoim miejscu zastanowił bym się nad wymianą (jeśli są w rurce) na coś cyfrowego, chociażby DS18B20.
Co do wejść pomiarowych ADC musisz wiedzieć, że wewnątrz ESP jest kolejny dzielnik napięcia. Sam pomiar jest w miarę dokładny w pewnym zakresie napięć. Przy granicznych wartościach dzielnika, traci on dokładność. Są również znaczące różnice pomiędzy wejściem analogowym dla ESP8266 a ESP32.

I to jest sedno sprawy. Chciałem właśnie użyć DS18B20 do pomiaru temperatury “pod izolacją” (trudno dostępne miejsce, wymagany przewód 5m) ale obawiam się możliwej awarii takiego czujnika i problemu z jego ewentualną wymianą. @RobinI30 zauważył, że w przypadku czujnika NTC nie ma się co zepsuć. Minusem rozwiazania jest jeden czujnik - jeden ESP.

Na upartego można użyć zewnętrzny przetwornik.
ADS1115 Sensor — ESPHome

1 Like

Bo ja wiem czy na upartego? Po prostu można. Zwykle zewnętrzne przetworniki analog → cyfra mają sporo lepsze parametry niż to co znajdziemy na pokładzie ESP82xx (1 wejście analog) czy ESP32 (sporo więcej z 2 multipleksowanymi ADC).

ADS1115 ma 16-bitowe przetworniki i 4 wejścia asymetryczne (pomiar względem masy) albo 2 różnicowe, ale wsparcie jest też dla innych konwerterów (wszystkie pozostałe to wejścia asymetryczne) np. “znanych i lubianych” MCP3204 = 4 wejścia 12bit albo MCP3208 = 8 wejść 12bit.; ADC128S102 ma 8 wejść 12-bitowych; a MCP3008 8 wejść 10-bitowych.

ESP32 ma sporo więcej wejść analogowych (de facto ma 2 przetworniki i multipleksery, więc np. w ESP32 devkit v1/2/3/4 można użyć do 15 GPIO w charakterze wejść analogowych)

To zależy od stosunku rezystancji przewodów do rezystancji termistora NTC w interesującym zakresie temperatur (zwykle jest to pomijalnie mała wartość).
biorąc pod uwagę, że wskazany model ma około 10kiloomów w temperaturze pokojowej, to rezystancja przewodów dla takich temperatur będzie pomijalnie mała nawet gdyby sięgała dziesiątek omów.

Oba, to zależy jak skonfigurujesz integrację
dla połączeń jak z lewego obrazka

sensor:
  - platform: resistance
    sensor: source_sensor
    configuration: UPSTREAM

a dla prawego

sensor:
  - platform: resistance
    sensor: source_sensor
    configuration: DOWNSTREAM

PS @ponczur używaj odwrotnych apostrofów (po 3 sztuki w linijce przed i po wklejonym kawałku jakiegokolwiek kodu, a szczególności YAMLa - zobacz jak zedytowałem posty na początku wątku)

PPS W YAMLu fundamentalne znaczenie mają wcięcia tekstu i ilość użytych spacji jest ważna (nawet jedna nadmiarowa lub brakująca spacja może rozwalić działanie kodu, wcięcia zasadniczo są wielokrotnością 2 spacji i nie używamy tabulatorów zamiast spacji !)