Měření teploty termistorem a interni analogova reference

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
PCmaniac99
Příspěvky: 749
Registrován: 07 úno 2008, 01:00
Bydliště: Jablonec nad Nisou

Měření teploty termistorem a interni analogova reference

#1 Příspěvek 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

Uživatelský avatar
asdf
Příspěvky: 64
Registrován: 06 říj 2022, 02:00

#2 Příspěvek 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)

Uživatelský avatar
PCmaniac99
Příspěvky: 749
Registrován: 07 úno 2008, 01:00
Bydliště: Jablonec nad Nisou

#3 Příspěvek 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.

Uživatelský avatar
asdf
Příspěvky: 64
Registrován: 06 říj 2022, 02:00

#4 Příspěvek 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.

Uživatelský avatar
PCmaniac99
Příspěvky: 749
Registrován: 07 úno 2008, 01:00
Bydliště: Jablonec nad Nisou

#5 Příspěvek 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.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“