Practica 5 Arduino

martes, 19 de junio de 2012

Necesitamos:5 leds,5 resitencias de 10K,un regulador,un sensor de temperatura,una resistencia de 220 ohmios,la protoboard y arduino.conectamos como siempre las resistencias de 10k en serie con los leds y las resistencias a los pins.Los led irian conectados al sensor y a una de las salidas del regulador(la otra salida a negativo) y la entrada del regulador conectada a un pin.El sensor iria conectado por donde vienen los leds un cable hacia un pin, y la otra pestañaa la resistencia de 220 ohmios,pero antes de llegar a la resistencia saldria un cable hacia un pin.La resistencia se conectaria a otro pin.



Este es el 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);
}

0 comentarios:

Publicar un comentario