sábado, 29 de marzo de 2014

Proyecto ARdutronica Sensor temperatura NTC

SENTOR DE TEMPERATURA DE NTC

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