Na aula do motor que esquenta, a conta para na temperatura: quanto o enrolamento subiu acima do ar em volta. Quem responde isso na prática é um sensor preso na carcaça. Só que o sensor não fala em graus. Ele devolve um número, e o número sozinho não diz nada.
O caminho de todo sensor: temperatura → tensão → Arduino → número. O Arduino não enxerga volts: ele transforma a tensão num número de 0 a 1023, onde 0 é 0 V e 1023 é 5 V.
0 é 0 V · 1023 é 5 V
A peça por fora
Antes da conta, saber o que é cada perna evita a maior parte dos sustos.
A regra de três
O LM35 é o “feijãozinho” preto de três pernas. A cada 1 °C, ele solta 10 milivolts (0,01 V). A 30 °C, solta 0,30 V.
Passo 1, de número pra volts (5 V está pra 1023 assim como V está pra leitura):
Passo 2, de volts pra graus (0,01 V vale 1 °C: dividir por 0,01 é multiplicar por 100):
O Arduino leu 62:
T = 0,303 × 100 = 30,3 °C
Confere: 30,3 °C × 0,01 V = 0,303 V ✓
A mesma conta, dentro do Arduino
Tudo que está acima cabe em três linhas. O analogRead é quem devolve o número de 0 a 1023:
const int PINO = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int leitura = analogRead(PINO); // 0 a 1023
float volts = leitura * 5.0 / 1023.0; // passo 1
float graus = volts * 100.0; // passo 2: 10 mV por grau
Serial.print(leitura); Serial.print(" ");
Serial.print(volts, 3); Serial.print(" V ");
Serial.println(graus, 1);
delay(500);
}
Repare que as duas linhas da conta são exatamente os dois passos da regra de três. Não tem biblioteca, não tem mágica.
Não precisa ter o LM35 para ver isso funcionando. Na bancada de Arduino do site esse mesmo código está compilado e roda num Uno emulado: você gira um botão de temperatura, ele injeta no A0 a tensão que o LM35 soltaria, e o monitor serial imprime a leitura, os volts e os graus. O LED do pino 13 faz de alarme acima de 60 °C.
O que é de mentira ali é só o sensor. O código é o mesmo, compilado de verdade.
Com esse código, o LM35 não consegue distinguir meio grau.
O Arduino divide os 5 V em 1024 degraus: cada degrau vale 5 ÷ 1024 = 4,88 mV. Como o LM35 dá 10 mV por grau, um degrau do conversor vale 0,49 °C. A leitura pula de meio em meio grau, e nada que você escreva no código muda isso. O jeito de melhorar é trocar a referência: analogReference(INTERNAL) usa 1,1 V em vez de 5 V, cada degrau vira 1,07 mV, e a resolução cai para 0,11 °C. Em troca, o máximo que dá para medir passa a ser 110 °C.
Bancada · mexe na leitura do Arduino
arrasta e vê a conta inteira se refazendo, com o degrau do conversor à mostra
A continha de hoje à noite · o LM35 leu 60
A conta 60 × 5 × 100 ÷ 1023 parece grande, mas são três continhas pequenas.
60 × 5 = 360
360 é 60 × 6, somei uma vez a mais. 60 × 5 é cinco vezes o 60: 60 + 60 + 60 + 60 + 60 = 300. Mais rápido: tira o zero, 6 × 5 = 30, devolve o zero: 300. Truque: fala “cinco vezes o sessenta” e conta nos dedos.
300 × 100 = 300 mil
O 100 tem dois zeros, então põe só dois zeros no fim: 300 → 30.000 (trinta mil). Confere: 300 × 10 = 3.000, e ×10 de novo = 30.000.
Dividi por 3.
Dividir por 1000 é riscar três zeros, não dividir por 3: 30.000 vira 30. Como 1023 é um pouco maior que 1000, o resultado fica um pouco menor que 30.
E o exemplo anterior, leitura 51: 51 × 5 = 250 + 5 = 255, ×100 = 25.500, ÷1023 ≈ 24,9 °C ✓
A regrinha dos zeros
÷10, ÷100, ÷1000 tira 1, 2 ou 3 zeros do fim
- LM35 leu 40: qual a temperatura?
- O LM35 está marcando 100 °C. Que número o Arduino está lendo?
- A leitura pulou de 62 para 63. Quantos graus isso mudou?
Primeiro tenta, depois confere.
ver as respostas
1. 40 × 5 = 200 → ×100 = 20.000 → ÷1023 ≈ 19,6 °C · 2. 100 °C são 1,00 V, e 1,00 V é 1023 ÷ 5 = 205 (o número volta pelo caminho contrário) · 3. Um degrau do conversor: 4,88 mV, que no LM35 valem 0,49 °C. É o menor passo que ele enxerga.
O Arduino devolve um número de 0 a 1023, não volts. No LM35 o caminho são dois passos: número vira volts pela regra de três, volts viram graus multiplicando por 100. E nenhuma conta no código faz o sensor enxergar menos que meio grau, porque o limite está no conversor, não na fórmula.