Stránka 1 z 1

Měření teploty termistorem a interni analogova reference

Napsal: 19 bře 2023, 10:52
od PCmaniac99
Ahoj, mám fungující měření teploty s arduino leonardo 32u4 - teplotu a vlhkost měřím pomocí BMP280 a posílám na oled displej - oboje na I2C. Celé to napájím z li-ion baterie z mobilu bez dalších součástek. Vše funguje cca od 3V což mi vyhovuje a nemusím nijak upravovat napětí z baterie. Protože na displej chci vypisovat i aktuální napětí baterie tak používám interní analogovou referenci 2,56V. Program funguje bez problémů.
Nyní jsem se rozhodl tuto sestavu rozšířit o 1 termistor ale netuším jak správně sestavit rovnici aby to měřilo správně. Napětí baterie se neustále mění tak že klasické zapojení jako odporový dělič nefunguje. Musím nějak využít interní referenci - resp. myslím že musím využít ten údaj o napětí který měřím. Steinhart-Hartovy koeficienty mi vyplivnul online kalkulátor podle naměřených hodnot mého termistoru a když níže napsaný kod pro termistor použiju samostatně tak funguje.
Pro naše účely jsem z kodu vypustil veci okolo bmp280 a oled displeje.

Kód: Vybrat vše

int ThermistorPin = 2;
int Vo;
float R1 = 10000;
float logR2, R2, T;
float c1 = 1.026181482e-03, c2 = 2.466825234e-04, c3 = 0.7350768485e-07;

void setup() {
 
  analogReference (INTERNAL);

void loop() {
  int batteryValue = analogRead (A0) ;
  float voltage = batteryValue * (5.15 / 1023.0);
 

  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
  T = T - 273.15;


EDIT: termistor je ntc 10k

Napsal: 19 bře 2023, 13:16
od asdf
Já bych to dělal takhle (pokud máš udělaný dělič s NTC a R1, přičemž měříš napětí na R1):

Kód: Vybrat vše

R2 = R1 * (1023.0 / (float)Vo * voltage - 1.0)


Čekal bych ale spíš, že máš dělič R1 a NTC, přičemž měříš napětí na NTC.
Pak bych to počítal takhle:

Kód: Vybrat vše

R2 = R1 / (1023.0 / (float)Vo * voltage - 1.0)

Napsal: 19 bře 2023, 18:37
od PCmaniac99
Dělič pro měření napětí baterie je 1:1 100kohm, dělič pro měření teploty je R1 10kohm mezi A2 a gnd, NTC mezi A2 a + baterie, tak že měřím napětí na NTC.

Napětí měřené na NTC logicky plave spolu s napětím baterie/napájení.

asdf - ani jedena z úprav tvého kodu nefunguje správně.
První vypisuje při 23°C teplotu -6°C - při zahřívání teplota stoupá ale nedostatečně. Pokud čidlo ohřeju o 10°C tak na displeji vidím -4°C
Druhý vypisuje při 23°C teplotu 66°C a při zahařátí klesá teplota dolů.

Je pravda že v obou případech se zdá že teplota je nezávislá na napájecím napětí což je to, co potřebuju.

Napsal: 19 bře 2023, 18:45
od asdf
Jestli máš NTC mezi + a A2, tak bych použil tohle (ještě mi tam chyběla ta reference):

Kód: Vybrat vše

R2 = R1 * (1023.0 / (float)Vo / 2.56 * voltage - 1.0)

A chtělo by to vypisovat i hodnotu voltage a R2.
voltage by mělo být asi 5, R2 asi 10000.

Napsal: 20 bře 2023, 06:58
od PCmaniac99
Děkuji, tohle už funguje tak jak má,

voltage závisí na napěti který je na A0 a to se odvíjí od aktuálního napětí baterie. 2,8V - 4,2V (při napájení z USB 5V)

R2 je při 14°C 16,1k, 21°C 11,7k, 25°C 10k, 60°C 2,6k

voltage i R2 mohu vypisovat napr na seriovou linku za účelem vývoje ale jinak je to zbytečné. na displeji je ted teplota 1, teplota 2, vlhkost, napětí baterie.