Temperatura ambiente

Verão pra mim é a pior estação do ano, mas enfim, tem quem goste. Há tempos eu comprei um conjunto de componentes eletrônicos e veio nele um sensor térmico. Da hora a vida...

O LM35

É um transistor com 3 pernas. A do meio envia um sinal analógico informando a temperatura.
O LM35 em sua intimidade

Olhando pra ele com a parte achatada voltada pra cima, a primeira perna recebe a voltagem (entre 2,7v e 5,5v); a do meio, como dito, envia o sinal analógico que vamos decodificar na temperatura e a última perna é o terra.

O circuito

É bem simplão. A perna 1 recebe a voltagem (pino de 5v) e a perna 3 vai pro terra. A perna do meio vai para o pino analógico que você quiser.

E só.

O código

O pino analógico pode receber valores que variam entre 0 e 1023, e será um desses números que o LM35 vai enviar pelo pino A0 (eu escolhi o A0). Primeiro vamos ao código sem qualquer tratamento da informação:

int pin = A0;
int refresh = 500;

//Checa o valor no pino

float temp() {
  return (analogRead(pin));
}

void setup() {
  //Ativa o monitor serial

  Serial.begin(9600);
}

void loop() {
  Serial.print("Temperatura: ");
  Serial.println(temp());
  delay(refresh);
}


A cada meio segundo um valor será apresentado no serial monitor. Sem tratamento ficou assim:

Calorzão, hein? Tá certo isso?

Meio nada a ver porque a temperatura não é 57º C nem de longe. Isso ocorre porque o valor enviado pelo LM35 e lido pelo pino A0 só pode variar entre 0 e 1023, então é preciso estabelecer uma fórmula pra converter isso aí em celsius. Fica assim:

(5 / ((2^10) - 1) * 100

Ok... esse 2^10 é a base que vamos usar. Veja que o resultado dá 1023, exatamente a gama de valores que vamos ler (de 0 até 1023 são 1024 posições, mas não rola um 5/0, né?). Já o 5 é a tensão de referência (o máximo, ou seja, o 1023, são 5v).

O código então ficou assim:

int pin = A0;
int refresh = 500;
float toCelsius = 0.48875855327468230694037145650049;

float temp() {
  return (analogRead(pin) * toCelsius);
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.print("Temperatura:\t");
  Serial.println(temp());
  delay(refresh);
}


Agora ficou assim:

Ainda tá meio quente, mas tá valendo...

Note que no segundo código eu use "\t" depois da string "Temperatura:". A ideia aqui é dar uma tabulação, só isso.

Comentários

Postagens mais visitadas deste blog

Tá na hora de piscar LEDs de maneira melhorada

LEDs on/off com PHP, Python e RPi

PagSeguro e PHP - Usando a tela do PagSeguro (checkout redirect)