13.- Sensors(I): Monitorització Temperatura del NTC
Ja havien vist com estimar la temperatura d'un NTC amb el mètode de de Stein-Hart Hart i havien vist un programa que calculava la temperatura en ºC i en ºK, anem a veure com monitoritzar la temperatura de forma gràfica amb Processing.
L'esquema del muntatge a fer amb la targeta Arduino és el mateix que havien vist en la secció 7.2 i 7.3 d'Arduino.
El programa que anem a utilitzar és ara aquest:
// Copyright (C) 2010 MODAT7
// Modificat el 15-04-2013 per Carles Ferrando
// License: GNU GPL ( http://www.gnu.org/licenses/gpl.html )
// En aquest programa llegirem el valor d'un NTC i estimarem el seu valor en graus centígrads
// amb el mètode de Steinhart–Hart per després mostrar els valors de la TºC i TºK de forma
// gràfica utilitzant Processing
//
//importem les llibreries de comunicació per port serie
//i la firmata d'arduino per arduino
import processing.serial.*;
import cc.arduino.*;
//Clase arduino que representa la targeta Arduino
Arduino arduino;
//Definició de coeficients i constants
float Ventrada=5.0; // [V] Tensió d'entrada al divisor de tensió
float Rauxiliar=10000; // [ohm] Resistència secundaria al divisor de tensió.
float R0=10000; // [ohm] Valor de NTC nominal a 25ºC
float T0=298.15; // [K] (25ºC) Valor en ºK de 25ºC
float beta=3891; // [K] Paràmetre B
float Rinfinit=0.0214906446; // [ohm] Paràmetre Rinfinit
//Definició de variables
float Veixida=0.0; // [V] Tensió donada pel divisor de tensió
float RNTC=0.0; // [ohm] Resistència del NTC
float TempK=0.0;// [K] Temperatura d'eixida en Kelvin
float TempC=0.0;// [ºC] Temperatura d'eixida en Celsius
int pinNTC = 3; // selecciona el pin d'entrada per al sensor de calor
int LecturaNTC=0 ;// El valor analògic llegit pel sensor al pin NTC
float y=0; //coordenada y de la temperatura ºC
float x=0;//coordenada x de la temperatura ºC
float z=0; //coordenada y de la temperatura en ºK
float y0=0;// valor inicial de T(C) en coordenades gràfiques
float x0=0;// valor inicial de x0 en coordenades gràfiques
float z0=0; //valor inicial de T(K) en coordenades gràfiques
// Configuració de paràmetres i ports d'entrada i eixida
void setup() {
size(500, 500);//Mida pantalla
background(255);//Pantalla blanca
//L'objecte arduino cal crear-lo en primer lloc abans de llegir altre cap port
arduino = new Arduino(this, Arduino.list()[0], 57600);
//una vegada creat ja puc llegir altres ports (pins)
arduino.pinMode(LecturaNTC, Arduino.INPUT);
}
//Programa principal al bucle
void draw()
{
x0=x;//valor de x inicial o anterior al punt actual
y0=y;//valor de y inicial o anterior al punt actual
z0=z;//valor de z inicial o anterior al punt actual
int LecturaNTC = arduino.analogRead(pinNTC); //llegeix valors analògics des del sensor posat al port
Veixida=Ventrada*((LecturaNTC)/1024.0); //Càlcul del valor de voltatge del NTC ara
RNTC=(Rauxiliar*Veixida/(Ventrada-Veixida)); //Càlcul del valor la Resistència del NTC ara
TempK=(beta/log(RNTC/Rinfinit)); //Càlcul de la temperatura estimada de SteinHart-Hart en Kelvins
TempC=TempK-273.15; //Càlcul de la temperatura estimada en Centígrads
println ("T (C)=" + TempC ); //Imprimeix al terminal T en C
println ("T (K)=" + TempK ); //Imprimeix al terminal T en K
delay(500);//aturem el programa 500 ms i després fem una lectura
x=x+1;//coordenada x relativa
y =100-TempC; //coordenada y, canviem l'origen de y al fer interpolaciló lineal
z =200-(TempK-373);//coordenada y, canviem l'origen de y al fer interpolació lineal
if (x>=500){//controlem si estem al final de la gràfica
x=0; //en arribar el temps al final de la gràfica tornem x=0
background(255); // Netegem la pantalla pintant el fons de blanc
}
//Gràfica en Centigrads
strokeWeight(3);//Gruix 3 pixels
stroke(255,0,0);//color roig
line(0,50,500,50);//línia de 50 C
stroke(0,0,255);//color blau
line(0,100,500,100);//línia de 0 C
textSize(15); // //Mida lletra
fill(255,0,0);//color roig lletra
text("50 ºC", 0, 48); //Retol 50ºC
fill(0,0,255);//color blau lletra
text("0 ºC", 0, 115); //Retol 0 ºC
fill(148,197,240);//color blau clar
text("Temperatura ambient en ºC",150,48);
stroke(148,197,240);//color blau clar
if (x>2){//fins que no hi ha dos punts no tenim recta que representar
line(x0,y0,x,y);//Línia de temp actual ºC
}
//Gràfica en Kelvins
stroke(255,0,0);//color roig
line(0,200,500,200);//línia de 373 K
stroke(0,0,255);//color blau
line(0,300,500,300);//línia de 273 K
textSize(15); // //Mida lletra
fill(255,0,0);//color roig lletra
text("373 ºK", 0, 195); //Retol 373 ºK
fill(0,0,255);//color blau lletra
text("273 ºK", 0, 315); //Retol 273 ºK
fill(148,197,240);//color blau clar
text("Temperatura ambient en ºK",150,188);
stroke(84,71,175);//color lila
if (x>2){//fins que no hi ha dos punts no tenim recta que representar
line(x0,z0,x,z);//Línia de temp actual ºK
}
}
|
La gràfica que veuràs és aquesta:
En aquesta gràfica veus un escaló produït per l'engegada d'un assecador de cabells.
Cal aclarir el canvi d'origen per la coordenada «y» tant per la temperatura en ºC com en ºK doncs si no fem aquest canvi la gràfica de processing té l'origen al cantó superior esquerre i el volem a la vora esquerra però al costat de la ratlla blava que marca la temperatura de 0 ºC i 273 ºK respectivament.
Els canvis fets han estat aquests:
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0