Descrición
Para poder medir a temperatura e realizar algunha acción en función do seu valor necesitamos un sensor capaz de medila.
Termistores
O problema de utilizar termistores é a calibración e a precisión, que non é moi boa, pois a resistencia dos termistores non varía de forma lineal coa temperatura.
Chips
Nesta práctica imos ver dúas opcións: LM35 e TMP36.
- Sensor de temperatura LM35: Rango: 0V → 0ºC e 1.5V→150ºC
- Sensor de temperatura TMP36: Rango: 0V → -50ºC, 0,5V→ 0ºC e 1.75V → 125ºC
O LM35 é útil para medir temperaturas positivas, pois necesitaría tensións negativas para medir temperaturas por debaixo dos 0ºC e o Arduíno non pode ofrecelas. Se queremos medir temperaturas por debaixo dos 0ºC mellor utiliza o TMP36.
Para a seguinte práctica utiliza o que teñas dispoñible tendo en conta os rangos de medición.
Montaxe
Debemos conectar os pins dos extremos á alimentación e o pin central a unha entrada analóxica, tal e como aparece no seguinte esquema. A conexión é igual para os dous sensores LM35 e TMP36.
![]() |
![]() |
Programas
Nestes exemplos imos ver a temperatura redondeada coma un número enteiro, polo que usaremos o tipo de variable int (int mV, int T, etc.) Se quixéramos mostrar o valor decimal deberiamos utilizar o tipo de variable float (float T).
1. LM35
A lectura do sensor conectado a unha entrada analóxica vai desde 0 ata 1024. Isto correspóndese a uns valores de voltaxe de entre 0 e 5000 mV. Para calcular a voltaxe do sensor podemos utilizar a función map:
mV = map(valor,0,1023,0,5000);
Outra opción é utilizar a fórmula: mV= valor*5000/1023
Cada 10 mV corresponde a 1ºC de temperatura, polo que para calcular a temperatura en graos centígrados facemos a conversión: temperatura (ºC) = mV/10
/* sensor de temperatura LM35 */ // Variables int sensorPin= A0; // O sensor está conectado no pin analóxico A0 int valor; // Lectura realizada na entrada A0 int mV; // milivoltios lidos no sensor int T; // Temperatura en ºC (nº enteiro). // Configuración void setup(){ Serial.begin(9600); // Iniciamos a comunicación serie while(!Serial); // Agarda ata que conecte } // Programa void loop(){ valor = analogRead(sensorPin); // asignamos a lectura á variable "valor" (entre 0 e 1024) mV = map(valor,0,1023,0,5000); // Calculamos a voltaxe T = mV / 10; // Calculamos a temperatura en ºC Serial.print(mV); // Imprimimos na consola Serial.print(" mV"); Serial.print(" -- "); Serial.print(T); Serial.println(" C"); delay(1000); }
2. TMP36
O TMP36 permítenos medir co Arduíno temperaturas negativas, xa que cando nos dá un valor de OV a temperatura é de -50ºC.
Para calcular a temperatura facemos o mesmo que no caso do sensor LM35, pero restando ao final 50ºC:
T= (valor/1023)*500 – 50
/* sensor de temperatura TMP36 */ int sensorPin= A0; // O sensor está conectado no pin analóxico A0 int valor; // Lectura realizada na entrada A0 int mV; // milivoltios lidos no sensor int T; // Temperatura en ºC, en decimal. void setup(){ Serial.begin(9600); // Iniciamos a comunicación serie while(!Serial); // Agarda ata que conecte } void loop(){ valor = analogRead(sensorPin); // asignamos a lectura á variable "valor" (entre 0 e 1024) mV = map(valor,0,1023,0,5000); // Calculamos a voltaxe T = (mV/10) -50; // Calculamos a temperatura en ºC Serial.print(mV); // Imprimimos na consola Serial.print(" mV"); Serial.print(" -- "); Serial.print(T); Serial.println(" C"); delay(1000); }
3. LED
Cada vez que a temperatura supere un determinado valor (por exemplo 25ºC) debe acenderse un LED. Por debaixo dese valor o LED apagarase. Utilizarei un sensor LM35. Se fas esta práctica cun TMP36 lémbrate de modificar a fórmula.
/* LED activado por sensor de temperatura LM35 */ int sensorPin= A0; // O sensor está conectado no pin analóxico A0 int led=13; // LED conectado no pin 13 int valor; // Lectura realizada na entrada A0 int mV; // milivoltios lidos no sensor int T; // Temperatura en ºC, en decimal. int umbral=24; // Temperatura á que queremos acender o LED void setup(){ Serial.begin(9600); // Iniciamos a comunicación serie while(!Serial); // Agarda ata que conecte pinMode(led,OUTPUT); } void loop(){ valor = analogRead(sensorPin); // asignamos a lectura á variable "valor" (entre 0 e 1024) int mV = map(valor,0,1023,0,5000); // Calculamos a voltaxe T = mV / 10; // Calculamos a temperatura en ºC Serial.print(T); // Imprimimos na consola Serial.println(" C"); if(T>umbral){ // Se a temperatura supera o umbral acende o LED digitalWrite(led, HIGH); } else{ digitalWrite(led, LOW); } delay(1000); }
Propostas
- Valores decimais: Nos programas anteriores móstranse a voltaxe e a temperatura cuns valores enteiros. Modifícaos para que se mostre o valor decimal.
- Convertedor de unidades. Fai que na consola serie se mostre unha táboa coa temperatura en ºC, ºK, e ºF.
- Ventilador: Cada vez que a temperatura supere un determinado valor (Por exemplo 25ºC) debe acenderse un ventilador. Podes utilizar un pequeno ventilador dun ordenador vello ou un motor de corrente continua conectado como se ve nesta sección.
- Termómetro de leds. Conecta 6 LEDs coas súas resistencias (2 verde, 2 amarelos e 2 vermellos) e fai que a medida que aumente a temperatura se vaian acendendo máis leds, desde os verdes ata os vermellos. Engade un zumbador que soe se a temperatura alcanza un máximo determinado.
- Termómetro na LCD: Utiliza unha pantalla LCD para mostrar cada certo tempo a temperatura medida polo sensor. fai que se mostre unha media das medidas realizadas no intervalo.
- Termostato: Mediante un potenciómetro deberá axustarse a temperatura límite que desexamos, e que se mostrará na pantalla (a consola ou unha LCD). Por debaixo desa temperatura deberá conectarse unha resistencia eléctrica (separa o circuíto de control do de potencia mediante un relé). Ao chegar á temperatura de referencia deberá desconectarse.