Omet navegació

14.1.- Recollida de dades en format PDF.

Si volem recollir dades en format PDF de la targeta Arduino i alçar-les en format PDF cal llegir la llibreria pdf amb l'ordre «import processing.pdf.*;».

Cal crear en la secció void setup el fitxer on anem a alçar les dades amb l'ordre « size(1000, 1000,PDF,"TempC.pdf");//Mida fitxer pdf».

Cal posar un condicional amb un if per aturar el programa quan es complisca la condició de temps (dia i hora) i llavors s'aturarà el programa amb l'ordre «exit();// el programa acaba d'escriure el PDF i atura el programa».

Opcionalment cal posar un altre condicional amb un if per comptar línies escrites i passar de pàgina amb les ordres

« PGraphicsPDF pdf=(PGraphicsPDF) g;//Escrivim »

«pdf.nextPage();// una pàgina nova»

A continuació tens un programa d'exemple amb la seua eixida en format pdf.

 

// Copyright (C) 2010 MODAT7
// Modificat el 25-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 de la data en 
// PDF utilitzant Processing
//
//importem les llibreries de comunicació per port serie
//la firmata d'arduino per arduino i la llibreria pdf
import processing.serial.*;
import cc.arduino.*;
import processing.pdf.*;
 
//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 x=0;//comptador de punts inicials.
int i=0; //variable per baixar al full PDF

// Configuració de paràmetres i ports d'entrada i eixida
void setup() {

  size(1000, 1000,PDF,"TempC.pdf");//Mida fitxer pdf
  
  background(255); //fulla blanca
  fill(0);//color lletra negre
  
  //escrivim les dades del títol a la capçalera de la pàgina
  text ("Temps",10,20);
  text (";",170 , 20);
  text("Temperatura ºC", 180, 20);
  //fila rètols
  text("DD", 10, 40);
  text("/",30, 40);
  text("MM", 35, 40);
  text("/",55, 40);
  text("YYYY", 60, 40);
  text("hh",105, 40);
  text(":",120, 40);
  text("mm", 125, 40);
  text(":",150, 40);
  text("ss",155, 40);
   text(";",170, 40);
  text("TºC", 180, 40);
 
  //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()
{ // Hui és 26 d'abril de 2013 i si és l'hora acordada
 if ( day()==26 && month()==04 && hour()==19 && minute()==05){
exit();// el programa acaba d'escriure el PDF i atura el programa
}
  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(1000);//aturem el programa 1000 ms i després fem una lectura
  x=x+1;//coordenada x relativa
  
  if (i==45){ //Si hem arribat al final de la pàgina
  PGraphicsPDF pdf=(PGraphicsPDF) g;//Escrivim 
  pdf.nextPage();// una pàgina nova
  i=0;// posem a cero el comptador de línies
   //i escrivim les dades del títol a dalt de la pàgina
  text ("Temps",10,20);
  text (";",170 , 20);
  text("Temperatura ºC", 180, 20);
  //fila rètols
  text("DD", 10, 40);
  text("/",30, 40);
  text("MM", 35, 40);
  text("/",55, 40);
  text("YYYY", 60, 40);
  text("hh",105, 40);
  text(":",120, 40);
  text("mm", 125, 40);
  text(":",150, 40);
  text("ss",155, 40);
   text(";",170, 40);
  text("TºC", 180, 40);
  } //final de pàgina
  
  // Escriu dades al PDF si no estem en final de pàgina
  fill(0);//color negre
  if (x>2){//fins que no hi ha dos punts no podem calcular un valor real
  
  //fila dades
  text(day(), 10, 60+i*20);
  text("/",25, 60+i*20);
  text(nf(month(),2), 30, 60+i*20);
  text("/",45, 60+i*20);
  text(year(), 50, 60+i*20);
  text(hour(),90, 60+i*20);
  text(":",105, 60+i*20);
  text(nf(minute(),2), 110, 60+i*20);
  text(":",125, 60+i*20);
  text(second(),130, 60+i*20);
   text(";",150, 60+i*20);
  text(TempC, 155, 60+i*20);
  i=i+1;// augmentem una fila
  }
  
}

Si executem aquest programa obtindrem a la carpeta de sketchbook del programa ( /home/usuari/sketchbook/TempCpdf ) un fitxer PDF que al qual hem anomenat «TempC.pdf» i que té aquest contingut.