En este proyecto simularemos con 4 leds del aviso de las temperaturas. Hemos utilizado un potenciómetro para establecer la temperatura para que nos vaya a dar unos intervalos fijos. Pero igualmente se podría utilizar una NTC para un sistema para controlar que la temperatura no descienda un punto muy bajo. Con el NTC se activaran las 4 salidas del arduino y ira activando cada salidas cada 2 grados.
MATERIALES
- Arduino
- Resistencias
- NTC
- Potenciometro
- Protoboard
- Leds
- Cables
PROTOBOARD
CODIGO
/*
Tutorial # 0005
Arduino Academy - Sensor NTC
Conectamos una
NTC a una entrada
analógica para
controlar cinco salidas
en función de la
temperatrura.
Además
utilizaremos un ponteciómetro para
controlar la
temperatura a partir de la cual
se activarán las
salidas
Este proyecto es
de dominio público.
*/
//Añadimos la librería
math.h
#include
<math.h>
//Pines para los LED
int pinLed1 = 8;
int pinLed2 = 9;
int pinLed3 = 10;
int pinLed4 = 11;
int pinLed5 = 12;
//Pines para las
entradas analógicas
int analogPin1 = 0;
int analogPin2 = 1;
//Escala de Avisos
int escala = 2;
//Variable para la
temperatura de disparo
double tempMin = 0.0;
//Datos para las
ecuaciones
float Vin = 5.0; // [V] Tensión alimentación
del divisor
float Rfija = 1000; // [ohm] Resistencia fija del
divisor
float R25 = 2800;
// [ohm] Valor de
NTC a 25ºC
float Beta = 3900.0; // [K] Parámetro Beta de
NTC
float T0 = 293.15; // [K] Temperatura de
referencia en Kelvin
float Vout = 0.0; // [V] Variable para
almacenar Vout
float Rntc = 0.0; // [ohm] Variable para NTC en
ohmnios
float TempK = 0.0; // [K] Temperatura
salida en Kelvin
float TempC = 0.0; // [ºC] Temperatura salida
en Celsius
void setup() {
//Comenzamos
la comunicación puerto serie
Serial.begin(9600);
//Declaramos
pines de salida
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinLed5, OUTPUT);
//Y los
pines de entrada
pinMode(analogPin1, INPUT);
pinMode(analogPin2, INPUT);
}
void loop()
{
//Primero
leemos el pootenciómetro
tempMin = analogRead(analogPin2);
//Lo
mapeamos a valores de -100 a 800
tempMin = map (tempMin, 0, 1023, -100, 800);
//Y lo
dividimos entre 10 para darle un decimal
tempMin = tempMin/10;
//Y
lanzamos el ajuste establecido via serie
Serial.println("-----------------------------------------------");
Serial.println();
Serial.print("AJUSTE
DE TEMPERATURA MINIMA A ");
Serial.print(tempMin);
Serial.println("
GRADOS CELSIUS");
Serial.println();
Serial.println("-----------------------------------------------");
//Y ahora
calculamos la Temperatura
//Primero
la Vout del divisor
Vout=(Vin/1024)*(analogRead(analogPin1));
//Ahora la
resistencia de la NTC
Rntc=(Vout*Rfija)/(Vin-Vout);
//Y por
último la temperatura en Kelvin
TempK = Beta/(log(Rntc/R25)+(Beta/T0));
//Y ahora
la pasamos a celsius
TempC = TempK-273.15;
//Y lo
mostramos por puerto serie
Serial.println();
Serial.print("LA
TEMPERATURA DE LA NTC ES DE ");
Serial.print(TempC);
Serial.println("
GRADOS CELSIUS");
Serial.println();
//Ahora
las comparaciones para las salidas
if(TempC < tempMin)
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, LOW);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if (((TempC <= (tempMin + escala)) & (TempC > tempMin)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, LOW);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if (((TempC<=(tempMin+(escala*2)))&(TempC>tempMin+escala)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, LOW);
digitalWrite(pinLed5, LOW);
}
else if ((TempC<=(tempMin+(escala*3)))&(TempC>tempMin+(escala*2)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, LOW);
}
else if (TempC > (tempMin + (escala*4)))
{
digitalWrite(pinLed1, HIGH);
digitalWrite(pinLed2, HIGH);
digitalWrite(pinLed3, HIGH);
digitalWrite(pinLed4, HIGH);
digitalWrite(pinLed5, HIGH);
}
//Un
pequeño delay para no volver loco al puerto serie
delay(500);
HECHA POR:
NESTOR GARCIA SALVATIERRA
JOSE MANUEL CALLEJA GÓMEZ
No hay comentarios:
Publicar un comentario