SlideShare a Scribd company logo
1 of 23
Download to read offline
Jakab Zsolt 2015 Page 1
Instalatie de masura si inregistrare a temperaturii si a
umiditatii din hala de productie in diferite puncte
2015
Jakab Zsolt
Cuprins:
1 Tema de proiect ………………………………………………………………………………………… 2
2 Proiectare ,costuri, realizare fizica …………………………………………………………….. 3
3 Anexe …………………………………………………………………………………………………………. 9
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
2
1.Tema de proiect
Se cere crearea unui sistem care poate masura si stoca valorile temperaturii
si umiditatii din diferite puncte ale halei.
Propun folosirea unei Placi de dezvoltare Arduino UNO conectata la un
calculator si a unor senzori de temperatura si umiditate, interconectate precum in
desenul de ma jos:
Fig.1 Schema bloc propusa
2 Proiectare , realizare fizica
Pentru masura se vor folosi senzori de tipul DHT22 , cu caracteristicile
principale redate in tabelul de jos.
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
3
Marimile determinate de senzori se transmit digilal placii Arduino UNO
printr-un protocol special de comunicare cu un singur fir de date.
Canalul de transmisie a datelor dintre senzori si placa de dezvoltare este
realzat cu cablul YSLCY-JZ 3X1,5
Parametrii lineici ai cablului :
- R=0.06 ohm/m
- L=0.021 mH/m
- C=0.26 nF/m.
Din cauza parametrilor transversali si a lungimilor canalului de transmisii de
date se produce atenuarea si deformarea semnalului transmis.
Se impune limitarea lungimii acestuia la max 130m pentru nivelele TTL de 5V .
Datorita lungimilor diferite dintre senzori si placa de dezvoltare se va folosi
montajul P1 de mai jos, care permite reglaj de adaptare de impedanta.
Fig.3 Placa P1 de conectica si sursa de alimentare
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
4
Pentru a asigura stocarea datelor dupa o pauza de curent este nevoie de
repornirea automata a calculatorului. La nivel hardware acestlucru se face prin
montajul P2.
Placa P2 , sursa UPS , restart PC
Placa de achizitii de date Arduino comunica cu calculatorul prin protocol
RS232 master-slave. Se impune adaptarea nivelelor de tensiune pentru aceasta
conexiune cu montajul P3 deoarece portul PC foloseste semal diferential de 15V si
placa ARDUINO foloseste semnale de 5V.
Placa P3, interfata RS232 – TTL Arduino
Proiectarea si executia unor parti a sistemului a inceput in data de 15.07.2015 in
limita costurilor uzuale calculate in fabrica.
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
5
Fig 4. Proiectare, desenare, gaurire, vopsire trasee pe cablaj imprimat
Fig. 5 Corodarea placii in clorura ferica si plantarea pieselor
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
6
Ansamblul de montaje construite au fost introduse in carcasa calculatorului
achizitionat pentru a reduce spatiul si inclusiv costurile
Fig. 5 integrarea constructiva a montajelor in masina de calcul
Interfata grafica cu sistemului e creat prin programul LabWindowsCVI si
arata ca in figurile 6 si 7.
Prima fereastra contine butonul “interval” care permite selectarea periodicitatii
stocarii datelor pe memoria calculatorului. Deoarece variatia temperaturii si
implicit a umiditatii este un process lent se considera suficienta memorarea
valorilor citite in intervale de 10/15 minute.
Afisajele grafice si numerice au o rata de reinoire a valorilor temperaturii si
umiditatii de 1 secunda. Pe afisajele grafice curbele de culoare rosie reprezinta
variatia temperaturii si cele albastre reprezinta variatia umiditatii.
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
7
Fig. 6 interfata grafica
Butonul “OPEN FILE” deschide o fereastra de dialog care permite selectarea
fisierului cu citirile corespunzatoare senzorului droit.
Fig. 7 selectarea fisierului cu citirile corespunzatoare senzorului dorit
Numele fisierelor sunt :
- DATADHT1 pentru senzorul DHT22(1) plasat in zona MA2
- DATADHT2 pentru senzorul DHT22(2) plasat in zona PRATI2
- DATADHT3 pentru senzorul DHT22(3) plasat in zona ETI
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
8
Apoi dupa selectarea fisierului de date , o alta fereastra se deschide automat (fig.8)
in care se afiseaza grafic valorile inregistrate pe calculator din cadrul fisierului
selectat.
Fig. 8 interpretor grafic al datelor
Prin miscarea cursorului din butoanele “+” si “-‘” se afiseaza in mod explicit
sub partea de jos a graficului paramtrii care caracterizeaza acel punct dat.
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
9
ANEXE
1 Program principal
#include <ansi_c.h>
#include <formatio.h>
#include <utility.h>
#include <cvirte.h> /* Needed if linking in external compiler;
harmless otherwise */
#include <userint.h>
#include "datalog.h"
#include <rs232.h>
static int p1 ,p2;
int com=1,interval=1,btg=0;
int cntwf=0,period=0,PlotFileHandle=0,ph,pt;
int xindex,xindexmax;
char
Rx[250],T[9],D[11],DHT1[110],DHT2[110],DHT3[110],file[260],filetoopen[
260];
char Get_NR(char ch);
void GetTimeDate(void);void WriteToFile(void);
void ComCallback(int portNumber, int eventMask, void *callbackdata) ;
float GetFloat(char w1,char w2,char w3,char w4,char c);
//====================================================================
=================================================================
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in
external compiler; harmless otherwise */
return -1; /* out of memory */
if ((p1 = LoadPanel (0, "datalog.uir", P1)) < 0)
return -1;
DisplayPanel (p1);
OpenComConfig(com,0,9600,0,8,1,56,56);
InstallComCallback (com,LWRS_RECEIVE, 56, 0, ComCallback, 0);
SetCtrlVal(P1,P1_T," ");SetCtrlVal(P1,P1_D," ");
RunUserInterface ();
return 0;
}
//====================================================================
==================================================================
int CVICALLBACK out (int panel, int event, void *callbackData,int
eventData1, int eventData2)
{
switch (event) {case EVENT_CLOSE:QuitUserInterface (0);break;}
return 0;
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
10
}
//====================================================================
==================================================================
void ComCallback(int portNumber, int eventMask, void *callbackdata)
{
int i=0;
if (eventMask == LWRS_RECEIVE)
{
SuspendTimerCallbacks();
GetTimeDate();
for(i=0;i<100;i++){DHT1[i]=DHT2[i]=DHT3[i]=0;}for(i=0;i<250;i++){Rx[i]
=0;}
i=ComRdTerm(com,Rx,220,0);
if(i>70)
{
for(i=0;i<72;i++){DHT1[i]=Rx[i];DHT2[i]=Rx[i+74];DHT3[i]=Rx[i+148];}
strcat(DHT1," DATE:
");strcat(DHT1,D);strcat(DHT1," TIME:
");strcat(DHT1,T);//strcat(DHT1,"n");
strcat(DHT2," DATE:
");strcat(DHT2,D);strcat(DHT2," TIME:
");strcat(DHT2,T);//strcat(DHT1,"n");
strcat(DHT3," DATE:
");strcat(DHT3,D);strcat(DHT3," TIME:
");strcat(DHT3,T);//strcat(DHT1,"n");
}
FlushInQ (com);
ResumeTimerCallbacks();
}
}
//====================================================================
==================================================================OK
int CVICALLBACK tick (int panel, int control, int event,void
*callbackData, int eventData1, int eventData2)
{
float xdata1[2],xdata2[2],xdata3[2];;
if (event==EVENT_TIMER_TICK) {
btg=~btg;
SetCtrlVal(P1,P1_LED,btg);
GetTimeDate();
xdata1[0]=GetFloat(DHT1[11],DHT1[12],DHT1[14],DHT1[15],3);SetCtrlVal(P
1,P1_MA2H,xdata1[0]);
xdata1[1]=GetFloat(DHT1[33],DHT1[34],DHT1[36],DHT1[37],3);SetCtrlVal(P
1,P1_MA2T,xdata1[1]);
PlotStripChart
(P1,P1_G1,xdata1,2,0,0,VAL_FLOAT);
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
11
xdata2[0]=GetFloat(DHT2[11],DHT2[12],DHT2[14],DHT2[15],3);SetCtrlVal(P
1,P1_PRATI2H,xdata2[0]);
xdata2[1]=GetFloat(DHT2[33],DHT2[34],DHT2[36],DHT2[37],3);SetCtrlVal(P
1,P1_PRATI2T,xdata2[1]);
PlotStripChart
(P1,P1_G2,xdata2,2,0,0,VAL_FLOAT);
xdata3[0]=GetFloat(DHT3[11],DHT3[12],DHT3[14],DHT3[15],3);SetCtrlVal(P
1,P1_ETIH,xdata3[0]);
xdata3[1]=GetFloat(DHT3[33],DHT3[34],DHT3[36],DHT3[37],3);SetCtrlVal(P
1,P1_ETIT,xdata3[1]);
PlotStripChart
(P1,P1_G3,xdata3,2,0,0,VAL_FLOAT);
period= interval*60;
if(cntwf<period)cntwf++;
if(cntwf==period){WriteToFile();
cntwf=0;}
}
return 0;
}
//====================================================================
============================================================
//====================================================================
========================== OK
char Get_NR(char ch)
{
switch (ch)
{
case '0':return 0;break; case '1':return 1;break;
case '2':return 2;break;
case '3':return 3;break; case '4':return 4;break;
case '5':return 5;break;
case '6':return 6;break; case '7':return 7;break;
case '8':return 8;break;
case '9':return 9;break;
}
return 0;
}
//=============================================== GetTime&DATE
===============================================// OK
void GetTimeDate(void)
//
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
12
{
//
char H[3],M[3],S[3],De[3],Mo[3],Ye[5];
//
int h[1],m[1],s[1],de[1],mo[1],ye[1];
//
GetSystemTime(h,m,s);GetSystemDate(mo,de,ye);
//
Fmt(H,"%d",h[0]);
//
Fmt(M,"%d",m[0]);
//
Fmt(S,"%d",s[0]);
//
Fmt(Mo,"%d",mo[0]);
//
Fmt(De,"%d",de[0]);
//
Fmt(Ye,"%d",ye[0]);
//
//
if(h[0]<10){H[1]=H[0];H[0]='0';}
//
if(m[0]<10){M[1]=M[0];M[0]='0';}
//
if(s[0]<10){S[1]=S[0];S[0]='0';}
//
if(de[0]<10){De[1]=De[0];De[0]='0';}
//
if(mo[0]<10){Mo[1]=Mo[0];Mo[0]='0';}
//
//
T[0]=H[0];T[1]=H[1];T[2]=':';
//
T[3]=M[0];T[4]=M[1];T[5]=':';
//
T[6]=S[0];T[7]=S[1];T[8]=0;
//
//
D[0]=De[0];D[1]=De[1];D[2]='-';
//
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
13
D[3]=Mo[0];D[4]=Mo[1];D[5]='-';
//
D[6]=Ye[0];D[7]=Ye[1];D[8]=Ye[2];D[9]=Ye[3];D[10]=0;
//
DeleteTextBoxLine(P1,P1_D,0); DeleteTextBoxLine(P1,P1_T,0);
//
if(T[0]==0)SetCtrlVal(P1,P1_T," ");else SetCtrlVal(P1,P1_T,T);
//
if(D[0]==0)SetCtrlVal(P1,P1_D," ");else SetCtrlVal(P1,P1_D,D);
//
}
//
//====================================================================
========================================//
//====================================================================
========================================//
void WriteToFile(void)
{
int i=0;
i=OpenFile("DATADHT1.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII);
WriteLine (i,DHT1,-1);
CloseFile (i);
i=OpenFile("DATADHT2.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII);
WriteLine (i,DHT2,-1);
CloseFile (i);
i=OpenFile("DATADHT3.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII);
WriteLine (i,DHT3,-1);
CloseFile (i);
}
//====================================================================
=================================================
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++
int CVICALLBACK OpenFileToPlot (int panel, int control, int event,void
*callbackData, int eventData1, int eventData2)
{
int n=0,i=0,cnt=0,*xdata;
char lineBuffer[150];
float *T,*H,D[2];
switch (event) {
case EVENT_LEFT_CLICK:
FileSelectPopup ("", ".txt",
".txt;.zsolt", "select data", 2, 0, 0, 1, 1, file);
strcpy(filetoopen,file);
PlotFileHandle=OpenFile(file,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_ASCII);
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
14
while(n!=-2){
n=ReadLine(PlotFileHandle,lineBuffer,75);cnt++;} CloseFile
(PlotFileHandle);
T=malloc(cnt*sizeof(float));
H=malloc(cnt*sizeof(float)); xdata=malloc(cnt*sizeof(int));
PlotFileHandle=OpenFile(file,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_ASCII);
p2 = LoadPanel (0, "datalog.uir",
P2) ;
DisplayPanel (p2);
for(i=0;i<cnt;i++)
{
ReadLine(PlotFileHandle,lineBuffer,75);
T[i]=GetFloat(lineBuffer[33],lineBuffer[34],lineBuffer[36],lineBuffer[
37],3);
H[i]=GetFloat(lineBuffer[11],lineBuffer[12],lineBuffer[14],lineBuffer[
15],3);
xdata[i]=i;
}
CloseFile (PlotFileHandle);
if(pt!=0)DeleteGraphPlot (P2,P2_G4,pt,
1);
if(ph!=0)DeleteGraphPlot (P2,P2_G4,ph,
1);
pt=PlotXY
(P2,P2_G4,xdata,T,i,VAL_INTEGER,VAL_FLOAT,VAL_FAT_LINE,VAL_SIMPLE_DOT,
VAL_SOLID,1,VAL_RED);
// SetCtrlAttribute (P2,P2_G4,
ATTR_ACTIVE_YAXIS,2);
ph=PlotXY
(P2,P2_G4,xdata,H,i,VAL_INTEGER,VAL_FLOAT,VAL_FAT_LINE,VAL_SIMPLE_DOT,
VAL_SOLID,1,VAL_BLUE);
// SetCtrlAttribute (P2,P2_G4,
ATTR_ACTIVE_YAXIS,1);
SetGraphCursorIndex (P2,P2_G4,1,ph,i/2);
SetGraphCursorIndex (P2,P2_G4,2,pt,i/2);
xindexmax=i;
SetCtrlVal(P2,P2_TB,"moove
cursor");
break;
}
return 0;
}
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
15
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++
//============================================= GetFloat ()
==================================================// OK
float GetFloat(char w1,char w2,char w3,char w4,char c)
//
{
//
float value=0.00;
//
char z=0,u=0,d=0,s=0,d2=0;
//
if(c==2)
//
{
//
z=Get_NR(w1);
//
u=Get_NR(w2);
//
value=z*10+u;
//
}
//
if(c==3)
//
{
//
z=Get_NR(w1);
//
u=Get_NR(w2);
//
d=Get_NR(w3);
//
d2=Get_NR(w4);
//
value=z*10+u+d*0.1+d2*0.01;
//
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
16
}
//
if(c==4)
//
{
//
s=Get_NR(w1);
//
z=Get_NR(w2);
//
u=Get_NR(w3);
//
d=Get_NR(w4);
//
value=s*100+z*10+u+d*0.1;
//
}
//
return value;
//
}
//
//====================================================================
=============================================
int CVICALLBACK out2 (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event) {
case EVENT_CLOSE: if(p2!=0)DiscardPanel(p2);
pt=0;ph=0;xindex= 0;xindexmax=0;
break;
}
return 0;
}
//

int CVICALLBACK Up (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char linebuffer[250];
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
17
int yindex,n;
int cnt;
switch (event) {
case EVENT_COMMIT:
if(xindex<xindexmax-1)
{
xindex=xindex+1;
SetGraphCursorIndex
(P2,P2_G4,1,ph,xindex);
SetGraphCursorIndex (P2,P2_G4,2,pt,xindex);
}
PlotFileHandle=OpenFile(filetoopen,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_AS
CII);
n=0; while(n<xindex){
ReadLine(PlotFileHandle,linebuffer,150);n++;}
SetCtrlVal(P2,P2_TB,linebuffer);
CloseFile (PlotFileHandle);
break;
}
return 0;
}
//--------------------------------------------------------------------
-------------------------------------------------
int CVICALLBACK Down (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
char linebuffer[250];
int yindex,n;
int cnt;
switch (event) {
case EVENT_COMMIT:
if(xindex>0)
{
xindex=xindex-1;
SetGraphCursorIndex
(P2,P2_G4,1,ph,xindex);
SetGraphCursorIndex (P2,P2_G4,2,pt,xindex);
}
PlotFileHandle=OpenFile(filetoopen,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_AS
CII);
n=0; while(n<xindex){
ReadLine(PlotFileHandle,linebuffer,150);n++;}
SetCtrlVal(P2,P2_TB,linebuffer);
CloseFile (PlotFileHandle);
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
18
break;
}
return 0;
}
//====================================================================
===============================================
int CVICALLBACK set_inteval (int panel, int control, int event,void
*callbackData, int eventData1, int eventData2)
{
switch (event) {
case EVENT_COMMIT:
GetCtrlVal(P1,P1_interval,&interval);
break;
}
return 0;
}
//====================================================================
===============================================
int CVICALLBACK movecursor (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
int x,y;
float c;
switch (event) {
case EVENT_LEFT_CLICK: /*
GetRelativeMouseState(P2,P2_G4,&x,&y,0,0,0);
c=(int)xindexmax/x;
x=x*c;
if(x>0 && x<xindexmax)
{
SetGraphCursorIndex
(P2,P2_G4,1,ph,x);
SetGraphCursorIndex (P2,P2_G4,2,pt,x);
}
*/
break;
}
return 0;
}
2. Placa de achizitii
#include "DHT.h"
#define DHT1PIN 2
#define DHT2PIN 3
#define DHT3PIN 4
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
19
#define power 5
#define PCon 6
static float h1 = 0.00, h2=0.00, h3=0.00;
static float t1 = 0.00, t2=0.00, t3=0.00;
static float f1 = 0.00, f2=0.00, f3=0.00;
static float hi1 =0.00, hi2=0.00, hi3=0.00;
float h11 = 0.00, h21=0.00, h31=0.00;
float t11 = 0.00, t21=0.00, t31=0.00;
float f11 = 0.00, f21=0.00, f31=0.00;
float hi11 =0.00, hi21=0.00, hi31=0.00;
float h12 = 0.00, h22=0.00, h32=0.00;
float t12 = 0.00, t22=0.00, t32=0.00;
float f12 = 0.00, f22=0.00, f32=0.00;
float hi12 =0.00, hi22=0.00, hi32=0.00;
float h13 = 0.00, h23=0.00, h33=0.00;
float t13 = 0.00, t23=0.00, t33=0.00;
float f13 = 0.00, f23=0.00, f33=0.00;
float hi13 =0.00, hi23=0.00, hi33=0.00;
char inbyte=0, powerstatus=0,cnt=0;
#define DHT1TYPE DHT22
#define DHT2TYPE DHT22
#define DHT3TYPE DHT22
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
void setup()
{Serial.begin(9600);dht1.begin();dht2.begin();dht3.begin();pinMode(PCon,
OUTPUT);pinMode(power, INPUT);}
void loop() {
delay(1000);
cnt=0;
do{
delay(100);
h11 = dht1.readHumidity();
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
20
t11 = dht1.readTemperature();
f11 = dht1.readTemperature(true);
hi11 = dht1.computeHeatIndex(f11, h11);
h21 = dht2.readHumidity();
t21 = dht2.readTemperature();
f21 = dht2.readTemperature(true);
hi21 = dht2.computeHeatIndex(f21, h21);
h31 = dht3.readHumidity();
t31 = dht3.readTemperature();
f31 = dht3.readTemperature(true);
hi31 = dht3.computeHeatIndex(f31, h31);
cnt++;
}while (isnan(h11) || isnan(t11) || isnan(f11) || isnan(hi11) || isnan(h21) ||
isnan(t21)||isnan(f21) ||isnan(hi21) ||isnan(h31) ||isnan(t31)||
isnan(f31)||isnan(hi31)||cnt<10 );
if (isnan(h11) || isnan(t11) || isnan(f11) || isnan(hi11) || isnan(h21) ||
isnan(t21)||isnan(f21) ||isnan(hi21) ||isnan(h31) ||isnan(t31)||
isnan(f31)||isnan(hi31)) {Serial.println("Failed to read from DHT1 sensor!"); }
else
{
cnt=0;
do{
delay(100);
h12 = dht1.readHumidity();
t12 = dht1.readTemperature();
f12 = dht1.readTemperature(true);
hi12 = dht1.computeHeatIndex(f12, h12);
h22 = dht2.readHumidity();
t22 = dht2.readTemperature();
f22 = dht2.readTemperature(true);
hi22 = dht2.computeHeatIndex(f22, h22);
h32 = dht3.readHumidity();
t32 = dht3.readTemperature();
f32 = dht3.readTemperature(true);
hi32 = dht3.computeHeatIndex(f32, h32);
cnt++;
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
21
}while (isnan(h12) || isnan(t12) || isnan(f12) || isnan(hi12) || isnan(h22) ||
isnan(t22)||isnan(f22) ||isnan(hi22) ||isnan(h32) ||isnan(t32)||
isnan(f32)||isnan(hi32)||cnt<10);
if (isnan(h12) || isnan(t12) || isnan(f12) || isnan(hi12) || isnan(h22) ||
isnan(t22)||isnan(f22) ||isnan(hi22) ||isnan(h32) ||isnan(t32)||
isnan(f32)||isnan(hi32)) {Serial.println("Failed to read from DHT1 sensor!"); }
else
{
cnt=0;
do{
delay(100);
h13 = dht1.readHumidity();
t13 = dht1.readTemperature();
f13 = dht1.readTemperature(true);
hi13 = dht1.computeHeatIndex(f13, h13);
h23 = dht2.readHumidity();
t23 = dht2.readTemperature();
f23 = dht2.readTemperature(true);
hi23 = dht2.computeHeatIndex(f23, h23);
h33 = dht3.readHumidity();
t33 = dht3.readTemperature();
f33 = dht3.readTemperature(true);
hi33 = dht3.computeHeatIndex(f33, h33);
cnt++;
}while (isnan(h13) || isnan(t13) || isnan(f13) || isnan(hi13) || isnan(h23) ||
isnan(t23)||isnan(f23) ||isnan(hi23) ||isnan(h33) ||isnan(t33)||
isnan(f33)||isnan(hi33)||cnt<10);
if (isnan(h13) || isnan(t13) || isnan(f13) || isnan(hi13) || isnan(h23) ||
isnan(t23)||isnan(f23) ||isnan(hi23) ||isnan(h33) ||isnan(t33)||
isnan(f33)||isnan(hi33)) {Serial.println("Failed to read from DHT1 sensor!"); }
else
{
h1 = (h11+h12+h13)/3, h2=(h21+h21+h23)/3, h3=(h31+h32+h33)/3;
t1 = (t11+t12+t13)/3, t2=(t21+t22+t23)/3, t3=(t31+t32+t33)/3;
f1 = (f11+f12+f13)/3, f2=(f21+f22+f23)/3, f3=(f31+f32+f33)/3;
hi1 =(hi11+hi12+hi13)/3, hi2=(hi21+hi22+hi23)/3, hi3=(hi31+hi32+hi33)/3;
if(h1>10)Serial.print("Humidity1: ");
else Serial.print("Humidity1: ");
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
22
Serial.print(h1);
Serial.print(" %t");
if(t1>10)Serial.print("Temperature1: ");
else Serial.print("Temperature1: ");
Serial.print(t1);
if (f1>10)Serial.print(" *C ");
else Serial.print(" *C ");
Serial.print(f1);
Serial.print(" *Ft");
if(hi1>10)Serial.print("Heat index1: ");
else Serial.print("Heat index1: ");
Serial.print(hi1);
Serial.println(" *F");
if(h2>10)Serial.print("Humidity2: ");
else Serial.print("Humidity2: ");
Serial.print(h2);
Serial.print(" %t");
if(t2>10)Serial.print("Temperature2: ");
else Serial.print("Temperature2: ");
Serial.print(t2);
if (f2>10)Serial.print(" *C ");
else Serial.print(" *C ");
Serial.print(f2);
Serial.print(" *Ft");
if(hi2>10)Serial.print("Heat index2: ");
else Serial.print("Heat index2: ");
Serial.print(hi2);
Serial.println(" *F");
if(h3>10)Serial.print("Humidity3: ");
else Serial.print("Humidity3: ");
Serial.print(h3);
Serial.print(" %t");
if(t3>10)Serial.print("Temperature3: ");
else Serial.print("Temperature3: ");
Serial.print(t3);
if (f3>10)Serial.print(" *C ");
else Serial.print(" *C ");
Serial.print(f3);
Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte
23
Serial.print(" *Ft");
if(hi3>10)Serial.print("Heat index3: ");
else Serial.print("Heat index3: ");
Serial.print(hi3);
Serial.println(" *F");
}
}
}
if(digitalRead(power)==0 && powerstatus==0)powerstatus=1;
if(digitalRead(power)==1 && powerstatus==1)
{
delay(5000);
if(digitalRead(power)==1)
{
powerstatus=0;
digitalWrite(PCon,1);
delay(1000);
digitalWrite(PCon,0);
}
}
}

More Related Content

Viewers also liked

E Learning In India
E Learning In IndiaE Learning In India
E Learning In Indiaguestf421ad
 
Portafolio - Administración de Talento Humano
Portafolio - Administración de Talento HumanoPortafolio - Administración de Talento Humano
Portafolio - Administración de Talento HumanoReyesTE
 
Manual de serviço xlx350 r cilindro
Manual de serviço xlx350 r cilindroManual de serviço xlx350 r cilindro
Manual de serviço xlx350 r cilindroThiago Huari
 
AN OPPORTUNITY FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre
AN OPPORTUNITY  FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre AN OPPORTUNITY  FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre
AN OPPORTUNITY FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre Lifecare Centre
 
Manual de serviço xlx350 r motor
Manual de serviço xlx350 r motorManual de serviço xlx350 r motor
Manual de serviço xlx350 r motorThiago Huari
 
MillennialPowerPoint.ppt_1
MillennialPowerPoint.ppt_1MillennialPowerPoint.ppt_1
MillennialPowerPoint.ppt_1Jim Gatens
 

Viewers also liked (9)

Task 6
Task 6Task 6
Task 6
 
Tipos de sitios web
Tipos de sitios webTipos de sitios web
Tipos de sitios web
 
Powerpoint game
Powerpoint gamePowerpoint game
Powerpoint game
 
E Learning In India
E Learning In IndiaE Learning In India
E Learning In India
 
Portafolio - Administración de Talento Humano
Portafolio - Administración de Talento HumanoPortafolio - Administración de Talento Humano
Portafolio - Administración de Talento Humano
 
Manual de serviço xlx350 r cilindro
Manual de serviço xlx350 r cilindroManual de serviço xlx350 r cilindro
Manual de serviço xlx350 r cilindro
 
AN OPPORTUNITY FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre
AN OPPORTUNITY  FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre AN OPPORTUNITY  FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre
AN OPPORTUNITY FOR HPV VACCINATION , Dr. Sharda Jain Lifecare Centre
 
Manual de serviço xlx350 r motor
Manual de serviço xlx350 r motorManual de serviço xlx350 r motor
Manual de serviço xlx350 r motor
 
MillennialPowerPoint.ppt_1
MillennialPowerPoint.ppt_1MillennialPowerPoint.ppt_1
MillennialPowerPoint.ppt_1
 

More from Jakab Zsolt

Wind generator monitoring and control system_Jakab Zsolt
Wind generator monitoring and control system_Jakab ZsoltWind generator monitoring and control system_Jakab Zsolt
Wind generator monitoring and control system_Jakab ZsoltJakab Zsolt
 
BINARY CLOCKSpecs
BINARY CLOCKSpecsBINARY CLOCKSpecs
BINARY CLOCKSpecsJakab Zsolt
 
Modified JDM programer
Modified JDM programerModified JDM programer
Modified JDM programerJakab Zsolt
 
Modified JDM programer
Modified JDM programerModified JDM programer
Modified JDM programerJakab Zsolt
 
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)Jakab Zsolt
 
incarcare baterii de Elevatoare zona sortare
incarcare baterii de Elevatoare zona sortareincarcare baterii de Elevatoare zona sortare
incarcare baterii de Elevatoare zona sortareJakab Zsolt
 
Regulator automat de nivel la statia de epurare
Regulator automat de nivel la statia de epurareRegulator automat de nivel la statia de epurare
Regulator automat de nivel la statia de epurareJakab Zsolt
 
TABLOU ALIMENTARE ST. EPURARE
TABLOU ALIMENTARE ST. EPURARETABLOU ALIMENTARE ST. EPURARE
TABLOU ALIMENTARE ST. EPURAREJakab Zsolt
 

More from Jakab Zsolt (9)

Wind generator monitoring and control system_Jakab Zsolt
Wind generator monitoring and control system_Jakab ZsoltWind generator monitoring and control system_Jakab Zsolt
Wind generator monitoring and control system_Jakab Zsolt
 
Diseqc
DiseqcDiseqc
Diseqc
 
BINARY CLOCKSpecs
BINARY CLOCKSpecsBINARY CLOCKSpecs
BINARY CLOCKSpecs
 
Modified JDM programer
Modified JDM programerModified JDM programer
Modified JDM programer
 
Modified JDM programer
Modified JDM programerModified JDM programer
Modified JDM programer
 
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)
WIND GENERATOR MONITORING AND CONTROL SYSTEM (1)
 
incarcare baterii de Elevatoare zona sortare
incarcare baterii de Elevatoare zona sortareincarcare baterii de Elevatoare zona sortare
incarcare baterii de Elevatoare zona sortare
 
Regulator automat de nivel la statia de epurare
Regulator automat de nivel la statia de epurareRegulator automat de nivel la statia de epurare
Regulator automat de nivel la statia de epurare
 
TABLOU ALIMENTARE ST. EPURARE
TABLOU ALIMENTARE ST. EPURARETABLOU ALIMENTARE ST. EPURARE
TABLOU ALIMENTARE ST. EPURARE
 

datalogger

  • 1. Jakab Zsolt 2015 Page 1 Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 2015 Jakab Zsolt Cuprins: 1 Tema de proiect ………………………………………………………………………………………… 2 2 Proiectare ,costuri, realizare fizica …………………………………………………………….. 3 3 Anexe …………………………………………………………………………………………………………. 9
  • 2. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 2 1.Tema de proiect Se cere crearea unui sistem care poate masura si stoca valorile temperaturii si umiditatii din diferite puncte ale halei. Propun folosirea unei Placi de dezvoltare Arduino UNO conectata la un calculator si a unor senzori de temperatura si umiditate, interconectate precum in desenul de ma jos: Fig.1 Schema bloc propusa 2 Proiectare , realizare fizica Pentru masura se vor folosi senzori de tipul DHT22 , cu caracteristicile principale redate in tabelul de jos.
  • 3. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 3 Marimile determinate de senzori se transmit digilal placii Arduino UNO printr-un protocol special de comunicare cu un singur fir de date. Canalul de transmisie a datelor dintre senzori si placa de dezvoltare este realzat cu cablul YSLCY-JZ 3X1,5 Parametrii lineici ai cablului : - R=0.06 ohm/m - L=0.021 mH/m - C=0.26 nF/m. Din cauza parametrilor transversali si a lungimilor canalului de transmisii de date se produce atenuarea si deformarea semnalului transmis. Se impune limitarea lungimii acestuia la max 130m pentru nivelele TTL de 5V . Datorita lungimilor diferite dintre senzori si placa de dezvoltare se va folosi montajul P1 de mai jos, care permite reglaj de adaptare de impedanta. Fig.3 Placa P1 de conectica si sursa de alimentare
  • 4. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 4 Pentru a asigura stocarea datelor dupa o pauza de curent este nevoie de repornirea automata a calculatorului. La nivel hardware acestlucru se face prin montajul P2. Placa P2 , sursa UPS , restart PC Placa de achizitii de date Arduino comunica cu calculatorul prin protocol RS232 master-slave. Se impune adaptarea nivelelor de tensiune pentru aceasta conexiune cu montajul P3 deoarece portul PC foloseste semal diferential de 15V si placa ARDUINO foloseste semnale de 5V. Placa P3, interfata RS232 – TTL Arduino Proiectarea si executia unor parti a sistemului a inceput in data de 15.07.2015 in limita costurilor uzuale calculate in fabrica.
  • 5. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 5 Fig 4. Proiectare, desenare, gaurire, vopsire trasee pe cablaj imprimat Fig. 5 Corodarea placii in clorura ferica si plantarea pieselor
  • 6. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 6 Ansamblul de montaje construite au fost introduse in carcasa calculatorului achizitionat pentru a reduce spatiul si inclusiv costurile Fig. 5 integrarea constructiva a montajelor in masina de calcul Interfata grafica cu sistemului e creat prin programul LabWindowsCVI si arata ca in figurile 6 si 7. Prima fereastra contine butonul “interval” care permite selectarea periodicitatii stocarii datelor pe memoria calculatorului. Deoarece variatia temperaturii si implicit a umiditatii este un process lent se considera suficienta memorarea valorilor citite in intervale de 10/15 minute. Afisajele grafice si numerice au o rata de reinoire a valorilor temperaturii si umiditatii de 1 secunda. Pe afisajele grafice curbele de culoare rosie reprezinta variatia temperaturii si cele albastre reprezinta variatia umiditatii.
  • 7. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 7 Fig. 6 interfata grafica Butonul “OPEN FILE” deschide o fereastra de dialog care permite selectarea fisierului cu citirile corespunzatoare senzorului droit. Fig. 7 selectarea fisierului cu citirile corespunzatoare senzorului dorit Numele fisierelor sunt : - DATADHT1 pentru senzorul DHT22(1) plasat in zona MA2 - DATADHT2 pentru senzorul DHT22(2) plasat in zona PRATI2 - DATADHT3 pentru senzorul DHT22(3) plasat in zona ETI
  • 8. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 8 Apoi dupa selectarea fisierului de date , o alta fereastra se deschide automat (fig.8) in care se afiseaza grafic valorile inregistrate pe calculator din cadrul fisierului selectat. Fig. 8 interpretor grafic al datelor Prin miscarea cursorului din butoanele “+” si “-‘” se afiseaza in mod explicit sub partea de jos a graficului paramtrii care caracterizeaza acel punct dat.
  • 9. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 9 ANEXE 1 Program principal #include <ansi_c.h> #include <formatio.h> #include <utility.h> #include <cvirte.h> /* Needed if linking in external compiler; harmless otherwise */ #include <userint.h> #include "datalog.h" #include <rs232.h> static int p1 ,p2; int com=1,interval=1,btg=0; int cntwf=0,period=0,PlotFileHandle=0,ph,pt; int xindex,xindexmax; char Rx[250],T[9],D[11],DHT1[110],DHT2[110],DHT3[110],file[260],filetoopen[ 260]; char Get_NR(char ch); void GetTimeDate(void);void WriteToFile(void); void ComCallback(int portNumber, int eventMask, void *callbackdata) ; float GetFloat(char w1,char w2,char w3,char w4,char c); //==================================================================== ================================================================= int main (int argc, char *argv[]) { if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */ return -1; /* out of memory */ if ((p1 = LoadPanel (0, "datalog.uir", P1)) < 0) return -1; DisplayPanel (p1); OpenComConfig(com,0,9600,0,8,1,56,56); InstallComCallback (com,LWRS_RECEIVE, 56, 0, ComCallback, 0); SetCtrlVal(P1,P1_T," ");SetCtrlVal(P1,P1_D," "); RunUserInterface (); return 0; } //==================================================================== ================================================================== int CVICALLBACK out (int panel, int event, void *callbackData,int eventData1, int eventData2) { switch (event) {case EVENT_CLOSE:QuitUserInterface (0);break;} return 0;
  • 10. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 10 } //==================================================================== ================================================================== void ComCallback(int portNumber, int eventMask, void *callbackdata) { int i=0; if (eventMask == LWRS_RECEIVE) { SuspendTimerCallbacks(); GetTimeDate(); for(i=0;i<100;i++){DHT1[i]=DHT2[i]=DHT3[i]=0;}for(i=0;i<250;i++){Rx[i] =0;} i=ComRdTerm(com,Rx,220,0); if(i>70) { for(i=0;i<72;i++){DHT1[i]=Rx[i];DHT2[i]=Rx[i+74];DHT3[i]=Rx[i+148];} strcat(DHT1," DATE: ");strcat(DHT1,D);strcat(DHT1," TIME: ");strcat(DHT1,T);//strcat(DHT1,"n"); strcat(DHT2," DATE: ");strcat(DHT2,D);strcat(DHT2," TIME: ");strcat(DHT2,T);//strcat(DHT1,"n"); strcat(DHT3," DATE: ");strcat(DHT3,D);strcat(DHT3," TIME: ");strcat(DHT3,T);//strcat(DHT1,"n"); } FlushInQ (com); ResumeTimerCallbacks(); } } //==================================================================== ==================================================================OK int CVICALLBACK tick (int panel, int control, int event,void *callbackData, int eventData1, int eventData2) { float xdata1[2],xdata2[2],xdata3[2];; if (event==EVENT_TIMER_TICK) { btg=~btg; SetCtrlVal(P1,P1_LED,btg); GetTimeDate(); xdata1[0]=GetFloat(DHT1[11],DHT1[12],DHT1[14],DHT1[15],3);SetCtrlVal(P 1,P1_MA2H,xdata1[0]); xdata1[1]=GetFloat(DHT1[33],DHT1[34],DHT1[36],DHT1[37],3);SetCtrlVal(P 1,P1_MA2T,xdata1[1]); PlotStripChart (P1,P1_G1,xdata1,2,0,0,VAL_FLOAT);
  • 11. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 11 xdata2[0]=GetFloat(DHT2[11],DHT2[12],DHT2[14],DHT2[15],3);SetCtrlVal(P 1,P1_PRATI2H,xdata2[0]); xdata2[1]=GetFloat(DHT2[33],DHT2[34],DHT2[36],DHT2[37],3);SetCtrlVal(P 1,P1_PRATI2T,xdata2[1]); PlotStripChart (P1,P1_G2,xdata2,2,0,0,VAL_FLOAT); xdata3[0]=GetFloat(DHT3[11],DHT3[12],DHT3[14],DHT3[15],3);SetCtrlVal(P 1,P1_ETIH,xdata3[0]); xdata3[1]=GetFloat(DHT3[33],DHT3[34],DHT3[36],DHT3[37],3);SetCtrlVal(P 1,P1_ETIT,xdata3[1]); PlotStripChart (P1,P1_G3,xdata3,2,0,0,VAL_FLOAT); period= interval*60; if(cntwf<period)cntwf++; if(cntwf==period){WriteToFile(); cntwf=0;} } return 0; } //==================================================================== ============================================================ //==================================================================== ========================== OK char Get_NR(char ch) { switch (ch) { case '0':return 0;break; case '1':return 1;break; case '2':return 2;break; case '3':return 3;break; case '4':return 4;break; case '5':return 5;break; case '6':return 6;break; case '7':return 7;break; case '8':return 8;break; case '9':return 9;break; } return 0; } //=============================================== GetTime&DATE ===============================================// OK void GetTimeDate(void) //
  • 12. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 12 { // char H[3],M[3],S[3],De[3],Mo[3],Ye[5]; // int h[1],m[1],s[1],de[1],mo[1],ye[1]; // GetSystemTime(h,m,s);GetSystemDate(mo,de,ye); // Fmt(H,"%d",h[0]); // Fmt(M,"%d",m[0]); // Fmt(S,"%d",s[0]); // Fmt(Mo,"%d",mo[0]); // Fmt(De,"%d",de[0]); // Fmt(Ye,"%d",ye[0]); // // if(h[0]<10){H[1]=H[0];H[0]='0';} // if(m[0]<10){M[1]=M[0];M[0]='0';} // if(s[0]<10){S[1]=S[0];S[0]='0';} // if(de[0]<10){De[1]=De[0];De[0]='0';} // if(mo[0]<10){Mo[1]=Mo[0];Mo[0]='0';} // // T[0]=H[0];T[1]=H[1];T[2]=':'; // T[3]=M[0];T[4]=M[1];T[5]=':'; // T[6]=S[0];T[7]=S[1];T[8]=0; // // D[0]=De[0];D[1]=De[1];D[2]='-'; //
  • 13. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 13 D[3]=Mo[0];D[4]=Mo[1];D[5]='-'; // D[6]=Ye[0];D[7]=Ye[1];D[8]=Ye[2];D[9]=Ye[3];D[10]=0; // DeleteTextBoxLine(P1,P1_D,0); DeleteTextBoxLine(P1,P1_T,0); // if(T[0]==0)SetCtrlVal(P1,P1_T," ");else SetCtrlVal(P1,P1_T,T); // if(D[0]==0)SetCtrlVal(P1,P1_D," ");else SetCtrlVal(P1,P1_D,D); // } // //==================================================================== ========================================// //==================================================================== ========================================// void WriteToFile(void) { int i=0; i=OpenFile("DATADHT1.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII); WriteLine (i,DHT1,-1); CloseFile (i); i=OpenFile("DATADHT2.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII); WriteLine (i,DHT2,-1); CloseFile (i); i=OpenFile("DATADHT3.txt",VAL_READ_WRITE,VAL_APPEND,VAL_ASCII); WriteLine (i,DHT3,-1); CloseFile (i); } //==================================================================== ================================================= //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++ int CVICALLBACK OpenFileToPlot (int panel, int control, int event,void *callbackData, int eventData1, int eventData2) { int n=0,i=0,cnt=0,*xdata; char lineBuffer[150]; float *T,*H,D[2]; switch (event) { case EVENT_LEFT_CLICK: FileSelectPopup ("", ".txt", ".txt;.zsolt", "select data", 2, 0, 0, 1, 1, file); strcpy(filetoopen,file); PlotFileHandle=OpenFile(file,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_ASCII);
  • 14. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 14 while(n!=-2){ n=ReadLine(PlotFileHandle,lineBuffer,75);cnt++;} CloseFile (PlotFileHandle); T=malloc(cnt*sizeof(float)); H=malloc(cnt*sizeof(float)); xdata=malloc(cnt*sizeof(int)); PlotFileHandle=OpenFile(file,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_ASCII); p2 = LoadPanel (0, "datalog.uir", P2) ; DisplayPanel (p2); for(i=0;i<cnt;i++) { ReadLine(PlotFileHandle,lineBuffer,75); T[i]=GetFloat(lineBuffer[33],lineBuffer[34],lineBuffer[36],lineBuffer[ 37],3); H[i]=GetFloat(lineBuffer[11],lineBuffer[12],lineBuffer[14],lineBuffer[ 15],3); xdata[i]=i; } CloseFile (PlotFileHandle); if(pt!=0)DeleteGraphPlot (P2,P2_G4,pt, 1); if(ph!=0)DeleteGraphPlot (P2,P2_G4,ph, 1); pt=PlotXY (P2,P2_G4,xdata,T,i,VAL_INTEGER,VAL_FLOAT,VAL_FAT_LINE,VAL_SIMPLE_DOT, VAL_SOLID,1,VAL_RED); // SetCtrlAttribute (P2,P2_G4, ATTR_ACTIVE_YAXIS,2); ph=PlotXY (P2,P2_G4,xdata,H,i,VAL_INTEGER,VAL_FLOAT,VAL_FAT_LINE,VAL_SIMPLE_DOT, VAL_SOLID,1,VAL_BLUE); // SetCtrlAttribute (P2,P2_G4, ATTR_ACTIVE_YAXIS,1); SetGraphCursorIndex (P2,P2_G4,1,ph,i/2); SetGraphCursorIndex (P2,P2_G4,2,pt,i/2); xindexmax=i; SetCtrlVal(P2,P2_TB,"moove cursor"); break; } return 0; }
  • 15. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 15 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++ //============================================= GetFloat () ==================================================// OK float GetFloat(char w1,char w2,char w3,char w4,char c) // { // float value=0.00; // char z=0,u=0,d=0,s=0,d2=0; // if(c==2) // { // z=Get_NR(w1); // u=Get_NR(w2); // value=z*10+u; // } // if(c==3) // { // z=Get_NR(w1); // u=Get_NR(w2); // d=Get_NR(w3); // d2=Get_NR(w4); // value=z*10+u+d*0.1+d2*0.01; //
  • 16. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 16 } // if(c==4) // { // s=Get_NR(w1); // z=Get_NR(w2); // u=Get_NR(w3); // d=Get_NR(w4); // value=s*100+z*10+u+d*0.1; // } // return value; // } // //==================================================================== ============================================= int CVICALLBACK out2 (int panel, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_CLOSE: if(p2!=0)DiscardPanel(p2); pt=0;ph=0;xindex= 0;xindexmax=0; break; } return 0; } // int CVICALLBACK Up (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { char linebuffer[250];
  • 17. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 17 int yindex,n; int cnt; switch (event) { case EVENT_COMMIT: if(xindex<xindexmax-1) { xindex=xindex+1; SetGraphCursorIndex (P2,P2_G4,1,ph,xindex); SetGraphCursorIndex (P2,P2_G4,2,pt,xindex); } PlotFileHandle=OpenFile(filetoopen,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_AS CII); n=0; while(n<xindex){ ReadLine(PlotFileHandle,linebuffer,150);n++;} SetCtrlVal(P2,P2_TB,linebuffer); CloseFile (PlotFileHandle); break; } return 0; } //-------------------------------------------------------------------- ------------------------------------------------- int CVICALLBACK Down (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { char linebuffer[250]; int yindex,n; int cnt; switch (event) { case EVENT_COMMIT: if(xindex>0) { xindex=xindex-1; SetGraphCursorIndex (P2,P2_G4,1,ph,xindex); SetGraphCursorIndex (P2,P2_G4,2,pt,xindex); } PlotFileHandle=OpenFile(filetoopen,VAL_READ_ONLY,VAL_OPEN_AS_IS,VAL_AS CII); n=0; while(n<xindex){ ReadLine(PlotFileHandle,linebuffer,150);n++;} SetCtrlVal(P2,P2_TB,linebuffer); CloseFile (PlotFileHandle);
  • 18. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 18 break; } return 0; } //==================================================================== =============================================== int CVICALLBACK set_inteval (int panel, int control, int event,void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: GetCtrlVal(P1,P1_interval,&interval); break; } return 0; } //==================================================================== =============================================== int CVICALLBACK movecursor (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { int x,y; float c; switch (event) { case EVENT_LEFT_CLICK: /* GetRelativeMouseState(P2,P2_G4,&x,&y,0,0,0); c=(int)xindexmax/x; x=x*c; if(x>0 && x<xindexmax) { SetGraphCursorIndex (P2,P2_G4,1,ph,x); SetGraphCursorIndex (P2,P2_G4,2,pt,x); } */ break; } return 0; } 2. Placa de achizitii #include "DHT.h" #define DHT1PIN 2 #define DHT2PIN 3 #define DHT3PIN 4
  • 19. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 19 #define power 5 #define PCon 6 static float h1 = 0.00, h2=0.00, h3=0.00; static float t1 = 0.00, t2=0.00, t3=0.00; static float f1 = 0.00, f2=0.00, f3=0.00; static float hi1 =0.00, hi2=0.00, hi3=0.00; float h11 = 0.00, h21=0.00, h31=0.00; float t11 = 0.00, t21=0.00, t31=0.00; float f11 = 0.00, f21=0.00, f31=0.00; float hi11 =0.00, hi21=0.00, hi31=0.00; float h12 = 0.00, h22=0.00, h32=0.00; float t12 = 0.00, t22=0.00, t32=0.00; float f12 = 0.00, f22=0.00, f32=0.00; float hi12 =0.00, hi22=0.00, hi32=0.00; float h13 = 0.00, h23=0.00, h33=0.00; float t13 = 0.00, t23=0.00, t33=0.00; float f13 = 0.00, f23=0.00, f33=0.00; float hi13 =0.00, hi23=0.00, hi33=0.00; char inbyte=0, powerstatus=0,cnt=0; #define DHT1TYPE DHT22 #define DHT2TYPE DHT22 #define DHT3TYPE DHT22 DHT dht1(DHT1PIN, DHT1TYPE); DHT dht2(DHT2PIN, DHT2TYPE); DHT dht3(DHT3PIN, DHT3TYPE); void setup() {Serial.begin(9600);dht1.begin();dht2.begin();dht3.begin();pinMode(PCon, OUTPUT);pinMode(power, INPUT);} void loop() { delay(1000); cnt=0; do{ delay(100); h11 = dht1.readHumidity();
  • 20. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 20 t11 = dht1.readTemperature(); f11 = dht1.readTemperature(true); hi11 = dht1.computeHeatIndex(f11, h11); h21 = dht2.readHumidity(); t21 = dht2.readTemperature(); f21 = dht2.readTemperature(true); hi21 = dht2.computeHeatIndex(f21, h21); h31 = dht3.readHumidity(); t31 = dht3.readTemperature(); f31 = dht3.readTemperature(true); hi31 = dht3.computeHeatIndex(f31, h31); cnt++; }while (isnan(h11) || isnan(t11) || isnan(f11) || isnan(hi11) || isnan(h21) || isnan(t21)||isnan(f21) ||isnan(hi21) ||isnan(h31) ||isnan(t31)|| isnan(f31)||isnan(hi31)||cnt<10 ); if (isnan(h11) || isnan(t11) || isnan(f11) || isnan(hi11) || isnan(h21) || isnan(t21)||isnan(f21) ||isnan(hi21) ||isnan(h31) ||isnan(t31)|| isnan(f31)||isnan(hi31)) {Serial.println("Failed to read from DHT1 sensor!"); } else { cnt=0; do{ delay(100); h12 = dht1.readHumidity(); t12 = dht1.readTemperature(); f12 = dht1.readTemperature(true); hi12 = dht1.computeHeatIndex(f12, h12); h22 = dht2.readHumidity(); t22 = dht2.readTemperature(); f22 = dht2.readTemperature(true); hi22 = dht2.computeHeatIndex(f22, h22); h32 = dht3.readHumidity(); t32 = dht3.readTemperature(); f32 = dht3.readTemperature(true); hi32 = dht3.computeHeatIndex(f32, h32); cnt++;
  • 21. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 21 }while (isnan(h12) || isnan(t12) || isnan(f12) || isnan(hi12) || isnan(h22) || isnan(t22)||isnan(f22) ||isnan(hi22) ||isnan(h32) ||isnan(t32)|| isnan(f32)||isnan(hi32)||cnt<10); if (isnan(h12) || isnan(t12) || isnan(f12) || isnan(hi12) || isnan(h22) || isnan(t22)||isnan(f22) ||isnan(hi22) ||isnan(h32) ||isnan(t32)|| isnan(f32)||isnan(hi32)) {Serial.println("Failed to read from DHT1 sensor!"); } else { cnt=0; do{ delay(100); h13 = dht1.readHumidity(); t13 = dht1.readTemperature(); f13 = dht1.readTemperature(true); hi13 = dht1.computeHeatIndex(f13, h13); h23 = dht2.readHumidity(); t23 = dht2.readTemperature(); f23 = dht2.readTemperature(true); hi23 = dht2.computeHeatIndex(f23, h23); h33 = dht3.readHumidity(); t33 = dht3.readTemperature(); f33 = dht3.readTemperature(true); hi33 = dht3.computeHeatIndex(f33, h33); cnt++; }while (isnan(h13) || isnan(t13) || isnan(f13) || isnan(hi13) || isnan(h23) || isnan(t23)||isnan(f23) ||isnan(hi23) ||isnan(h33) ||isnan(t33)|| isnan(f33)||isnan(hi33)||cnt<10); if (isnan(h13) || isnan(t13) || isnan(f13) || isnan(hi13) || isnan(h23) || isnan(t23)||isnan(f23) ||isnan(hi23) ||isnan(h33) ||isnan(t33)|| isnan(f33)||isnan(hi33)) {Serial.println("Failed to read from DHT1 sensor!"); } else { h1 = (h11+h12+h13)/3, h2=(h21+h21+h23)/3, h3=(h31+h32+h33)/3; t1 = (t11+t12+t13)/3, t2=(t21+t22+t23)/3, t3=(t31+t32+t33)/3; f1 = (f11+f12+f13)/3, f2=(f21+f22+f23)/3, f3=(f31+f32+f33)/3; hi1 =(hi11+hi12+hi13)/3, hi2=(hi21+hi22+hi23)/3, hi3=(hi31+hi32+hi33)/3; if(h1>10)Serial.print("Humidity1: "); else Serial.print("Humidity1: ");
  • 22. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 22 Serial.print(h1); Serial.print(" %t"); if(t1>10)Serial.print("Temperature1: "); else Serial.print("Temperature1: "); Serial.print(t1); if (f1>10)Serial.print(" *C "); else Serial.print(" *C "); Serial.print(f1); Serial.print(" *Ft"); if(hi1>10)Serial.print("Heat index1: "); else Serial.print("Heat index1: "); Serial.print(hi1); Serial.println(" *F"); if(h2>10)Serial.print("Humidity2: "); else Serial.print("Humidity2: "); Serial.print(h2); Serial.print(" %t"); if(t2>10)Serial.print("Temperature2: "); else Serial.print("Temperature2: "); Serial.print(t2); if (f2>10)Serial.print(" *C "); else Serial.print(" *C "); Serial.print(f2); Serial.print(" *Ft"); if(hi2>10)Serial.print("Heat index2: "); else Serial.print("Heat index2: "); Serial.print(hi2); Serial.println(" *F"); if(h3>10)Serial.print("Humidity3: "); else Serial.print("Humidity3: "); Serial.print(h3); Serial.print(" %t"); if(t3>10)Serial.print("Temperature3: "); else Serial.print("Temperature3: "); Serial.print(t3); if (f3>10)Serial.print(" *C "); else Serial.print(" *C "); Serial.print(f3);
  • 23. Instalatie de masura si inregistrare a temperaturii si a umiditatii din hala de productie in diferite puncte 23 Serial.print(" *Ft"); if(hi3>10)Serial.print("Heat index3: "); else Serial.print("Heat index3: "); Serial.print(hi3); Serial.println(" *F"); } } } if(digitalRead(power)==0 && powerstatus==0)powerstatus=1; if(digitalRead(power)==1 && powerstatus==1) { delay(5000); if(digitalRead(power)==1) { powerstatus=0; digitalWrite(PCon,1); delay(1000); digitalWrite(PCon,0); } } }