// SPDX-License-Identifier: MIT // Sensor de temperatura LM35 com a referência interna de 1,1 V (Arduino Uno) // // O LM35 entrega 10 mV para cada grau Celsius. Com a referência padrão de 5 V, um degrau // do conversor vale quase meio grau. Trocando para a referência interna de 1,1 V, o mesmo // degrau passa a valer cerca de um décimo de grau: a mesma escada, espalhada sobre uma // faixa cerca de 4,5 vezes menor. O preço é o teto, porque 1,1 V correspondem a 110 °C // (e o LM35D, comum em kits, é especificado só até 100 °C; o LM35A vai a 150 °C). // // Ligação do LM35 (olhando a face chata, pernas para baixo): // esquerda -> 5V meio -> A0 direita -> GND // // ATENÇÃO: com a referência interna selecionada, não ligue tensão nenhuma no pino AREF. // A referência externa só pode ser ligada depois de chamar analogReference(EXTERNAL); // caso contrário ela entra em curto com a referência ativa no chip (o AVCC, por padrão) e pode danificar o chip. const int PINO_LM35 = A0; const float TENSAO_REFERENCIA = 1.1; // referência interna do ATmega328P const float DEGRAUS = 1024.0; const float VOLTS_POR_GRAU = 0.010; // 10 mV por grau Celsius const int AMOSTRAS = 8; // média simples: reduz o tremor da leitura const int INTERVALO_MS = 1000; void setup() { Serial.begin(9600); analogReference(INTERNAL); // no ATmega328P, INTERNAL vale 1,1 V analogRead(PINO_LM35); // a primeira leitura depois da troca pode sair errada: descarte Serial.println("temperatura em C"); } void loop() { long soma = 0; for (int i = 0; i < AMOSTRAS; i++) { soma += analogRead(PINO_LM35); delay(5); } float codigo = soma / (float)AMOSTRAS; // média das leituras, com casas decimais float temperatura = codigo * TENSAO_REFERENCIA / DEGRAUS / VOLTS_POR_GRAU; Serial.println(temperatura, 1); delay(INTERVALO_MS); } // Sem LM35 no kit? Use o trimpot no lugar dele e confira a conta: cada volta do cursor // percorre a mesma escada, e a leitura em graus é só a tensão dividida por 10 mV.