Na aula 1, o LM35 entregava tensão pronta e a conta eram dois passos. Só que o LM35 custa mais caro, vai até 100 °C e não gosta de água. Quando você abre um chuveiro, uma geladeira, uma estufa ou um ar-condicionado, o que está lá dentro é quase sempre um NTC: uma pontinha de metal com dois fios. E ele não mede nada sozinho.
O NTC muda de resistência com o calor: esquentou, a resistência cai. A 25 °C vale 10.000 Ω, por isso “10k”. O Arduino não mede resistência, só tensão. Então a gente monta um divisor de tensão.
A peça por fora
O divisor de tensão
Passo 1, a resistência do NTC. A tensão em A0 é a parte dos 5 V que “fica” no NTC:
Passo 2, de resistência pra temperatura, com a equação Beta (β = 3950, número do fabricante):
T em kelvin (°C + 273,15) · T₀ = 298,15 K (25 °C) · R₀ = 10.000 Ω
O Arduino leu 400:
| 1 | resistência · 10000 × 400 ÷ (1023 − 400) = 4.000.000 ÷ 623 | 6.420,5 Ω |
| 2 | razão · 6420,5 ÷ 10000 | 0,64205 |
| 3 | logaritmo · ln(0,64205) | −0,44308 |
| 4 | divide por β · −0,44308 ÷ 3950 | −0,00011217 |
| 5 | 1/T₀ · 1 ÷ 298,15 | 0,0033540 |
| 6 | soma · 0,0033540 − 0,00011217 | 0,0032418 |
| 7 | inverte · 1 ÷ 0,0032418 | 308,47 K |
| 8 | pra °C · 308,47 − 273,15 | 35,3 °C |
Confere pela lógica: a resistência caiu de 10.000 pra 6.420 Ω. Resistência menor, mais quente que 25 °C ✓
Bancada · os oito passos, em qualquer leitura
arrasta e a tabela inteira se refaz · repara que perto das pontas a conta fica sem jeito
A mesma conta, dentro do Arduino
O log() do Arduino é o logaritmo natural, o mesmo ln da equação. A linha de guarda no começo existe porque leitura 0 ou 1023 faria a conta dividir por zero:
const int PINO = A0;
const float R = 10000.0; // o resistor fixo
const float R0 = 10000.0; // o NTC a 25 graus
const float T0 = 298.15; // 25 graus em kelvin
const float BETA = 3950.0; // do fabricante
void setup() {
Serial.begin(9600);
}
void loop() {
int leitura = analogRead(PINO);
if (leitura < 5 || leitura > 1018) { // fio solto ou curto
Serial.println("leitura fora da faixa");
delay(500);
return;
}
float rntc = R * leitura / (1023.0 - leitura); // passo 1
float kelvin = 1.0 / (1.0 / T0 + log(rntc / R0) / BETA);
float graus = kelvin - 273.15; // passo 2
Serial.print(leitura); Serial.print(" ");
Serial.print(rntc, 0); Serial.print(" ohm ");
Serial.println(graus, 1);
delay(500);
}
Com o mesmo código e o mesmo NTC, dois circuitos dão temperaturas diferentes.
A conta inteira depende de três números do seu circuito: o resistor fixo (que na prática nunca é 10.000 Ω redondos, é 10k com 1% ou 5% de tolerância), o β do fabricante daquele NTC, e os 5 V da alimentação, que num Arduino ligado por USB costumam ser 4,7 ou 4,8 V. O jeito de fechar com a realidade é medir o resistor com o multímetro e pôr o valor medido no código, em vez de 10000 redondo.
- NTC leu 512: qual a resistência? E a temperatura? (pensa antes: 512 é quase a metade de 1023)
- NTC leu 300: faz a tabela de 8 passos. Dá mais ou menos que 35 °C?
- Sem fazer conta: a leitura subiu de 400 para 600. Esquentou ou esfriou?
Primeiro tenta, depois confere.
ver as respostas
1. R = 10000 × 512 ÷ 511 ≈ 10.020 Ω, quase igual ao resistor fixo → T ≈ 25 °C (o ponto de referência) · 2. R = 10000 × 300 ÷ 723 ≈ 4.149 Ω → resistência menor, então mais quente: T ≈ 46,2 °C · 3. Leitura maior quer dizer mais tensão sobrando no NTC, ou seja resistência maior, ou seja esfriou. Confere na bancada: 600 dá 14.184 Ω e 17,3 °C.O NTC só muda de resistência, então ele precisa do divisor para virar tensão. Primeiro se descobre a resistência pela leitura, e só então a equação Beta leva de resistência até kelvin. Confere sempre pela lógica: resistência menor quer dizer mais quente. E a conta é tão boa quanto os três números do seu circuito: o resistor fixo, o β e a alimentação.