Tải bản đầy đủ - 0 (trang)
Phụ lục 3: Chương trình điều khiển cảm biến nhiệt độ và ẩm độ SHT75

Phụ lục 3: Chương trình điều khiển cảm biến nhiệt độ và ẩm độ SHT75

Tải bản đầy đủ - 0trang

// Return : none

//

//

//

//

//

// ***** To measure and caluculate SHT75 temp & real RH *****

//

//

// Function : sht_rd (temp, truehumid)

//

// Return : temperature & true humidity in float values

//

//

//

///////////////////////////////////////////////////////////////////////////////



//



#define sht_data_pin PIN_D0

#define sht_clk_pin PIN_D1

//***** Function to alert SHT75 *****

void comstart (void)

{

output_float(sht_data_pin); //data high

output_bit(sht_clk_pin, 0); //clk low

delay_us(1);

output_bit(sht_clk_pin, 1); //clk high

delay_us(1);

output_bit(sht_data_pin, 0); //data low

delay_us(1);

output_bit(sht_clk_pin, 0); //clk low

delay_us(2);

output_bit(sht_clk_pin, 1); //clk high

delay_us(1);

output_float(sht_data_pin); //data high

delay_us(1);

output_bit(sht_clk_pin, 0); //clk low

}

//***** Function to write data to SHT75 *****

int1 comwrite (int8 iobyte)

{

int8 i, mask = 0x80;

int1 ack;

//Shift out command

delay_us(4);

for(i=0; i<8; i++)

{

output_bit(sht_clk_pin, 0);

//clk low

if((iobyte & mask) > 0) output_float(sht_data_pin); //data high if MSB high

else output_bit(sht_data_pin, 0);

//data low if MSB low

delay_us(1);

output_bit(sht_clk_pin, 1);

//clk high

67



delay_us(1);

mask = mask >> 1;

//shift to next bit

}

//Shift in ack

output_bit(sht_clk_pin, 0); //clk low

delay_us(1);

ack = input(sht_data_pin); //get ack bit

output_bit(sht_clk_pin, 1); //clk high

delay_us(1);

output_bit(sht_clk_pin, 0); //clk low

return(ack);

}

//***** Function to read data from SHT75 *****

int16 comread (void)

{

int8 i;

int16 iobyte = 0;

const int16 mask0 = 0x0000;

const int16 mask1 = 0x0001;

//shift in MSB data

for(i=0; i<8; i++)

{

iobyte = iobyte << 1;

output_bit(sht_clk_pin, 1);

//clk high

delay_us(1);

if (input(sht_data_pin)) iobyte |= mask1; //shift in data bit

else iobyte |= mask0;

output_bit(sht_clk_pin, 0);

//clk low

delay_us(1);

}

//send ack 0 bit

output_bit(sht_data_pin, 0); //data low

delay_us(1);

output_bit(sht_clk_pin, 1); //clk high

delay_us(2);

output_bit(sht_clk_pin, 0); //clk low

delay_us(1);

output_float(sht_data_pin); //data high

//shift in LSB data

for(i=0; i<8; i++)

{

iobyte = iobyte << 1;

output_bit(sht_clk_pin, 1);

//clk high

delay_us(1);

68



if (input(sht_data_pin)) iobyte |= mask1; //shift in data bit

else iobyte |= mask0;

output_bit(sht_clk_pin, 0);

//clk low

delay_us(1);

}

//send ack 1 bit

output_float(sht_data_pin); //data high

delay_us(1);

output_bit(sht_clk_pin, 1); //clk high

delay_us(2);

output_bit(sht_clk_pin, 0); //clk low

return(iobyte);

}

//***** Function to wait for SHT75 reading *****

void comwait (void)

{

int16 sht_delay;

output_float(sht_data_pin);

//data high

output_bit(sht_clk_pin, 0);

//clk low

delay_us(1);

for(sht_delay=0; sht_delay<30000; sht_delay++) // wait for max 300ms

{

if (!input(sht_data_pin)) break;

//if sht_data_pin low, SHT75 ready

delay_us(10);

}

}

//***** Function to reset SHT75 communication *****

void comreset (void)

{

int8 i;

output_float(sht_data_pin); //data high

output_bit(sht_clk_pin, 0); //clk low

delay_us(2);

for(i=0; i<9; i++)

{

output_bit(sht_clk_pin, 1); //toggle clk 9 times

delay_us(2);

output_bit(sht_clk_pin, 0);

delay_us(2);

}

comstart();

}

//***** Function to soft reset SHT75 *****

void sht_soft_reset (void)

69



{

comreset();

//SHT75 communication reset

comwrite(0x1e);

//send SHT75 reset command

delay_ms(15);

//pause 15 ms

}

//***** Function to measure SHT75 temperature *****

int16 measuretemp()

{

int1 ack;

int16 iobyte;

comstart();

//alert SHT75

ack = comwrite(0x03); //send measure temp command and read ack status

if(ack == 1) return;

comwait();

//wait for SHT75 measurement to complete

iobyte = comread(); //read SHT75 temp data

return(iobyte);

}

//***** Function to measure SHT75 RH *****

int16 measurehumid (void)

{

int1 ack;

int16 iobyte;

comstart();

//alert SHT75

ack = comwrite(0x05); //send measure RH command and read ack status

if(ack == 1) return;

comwait();

//wait for SHT75 measurement to complete

iobyte = comread(); //read SHT75 temp data

return(iobyte);

}

//***** Function to calculate SHT75 temp & RH *****

void calculate_data (int16 temp, int16 humid, float & tc, float & rhlin, float & rhtrue)

{

float rh;

//calculate temperature reading

tc = ((float) temp * 0.01) - 40.0;

//calculate Real RH reading

rh = (float) humid;

rhlin = (rh * 0.0405) - (rh * rh * 0.0000028) - 4.0;

//calculate True RH reading

rhtrue = ((tc - 25.0) * (0.01 + (0.00008 * rh))) + rhlin;

}

//***** Function to measure & calculate SHT75 temp & RH *****

void sht_rd (float & temp, float & truehumid)

{

int16 restemp, reshumid;

70



float realhumid;

restemp = 0; truehumid = 0;

restemp = measuretemp(); //measure temp

reshumid = measurehumid(); //measure RH

calculate_data (restemp, reshumid, temp, realhumid, truehumid); //calculate temp &

RH

}

//***** Function to initialise SHT75 on power-up *****

void sht_init (void)

{

comreset(); //reset SHT75

delay_ms(20); //delay for power-up

}

Phụ lục 4: Chương trình điều khiển PLCS7_200

;Chương trình chính

TITLE = PROGRAM COMMENTS

Network 1 // Network title

LD SM0.1

MOVB 16#09, SMB30

MOVB 2, VB200

MOVB 'B', VB201

MOVB 'A', VB202

ATCH INT_0, 8 : INT_O // INTERRUPT ROUNTINE COMMENTS

ENI

XMT VB200, 0

MOVD &VB300, VD1000

S Q0.4, 1

Network 2

LDW<= VW110, VW920

CALL Tang nhiet : SBR0 // SUBROUTINE COMMENTS

Network 3

LDW>= VW110, VW930

CALL Ha nhiet : SBR1 // SUBROUTINE COMMENTS

Network 4

LDW<= VW130, VW934

CALL Tang am : SBR2 // SUBROUTINE COMMENTS

Network 5

LDW>= VW110, VW938

CALL Ha am : SBR3 // SUBROUTINE COMMENTS

; Tăng nhiệt

TITLE = SUBRROUTINE COMMENTS

Network 1 = network title

LDW>= VW110, 920

R T37, 1

R T38, 1

71



R T39, 1

Network 2

LD SM0.0

TON T37, 50

Network 3

LD T37

R

Q0.1,1

Network 4

LD SM0.0

TON T38, 100

Network 5

LD T38

R

Q0.2,1

Network 6

LD SM0.0

TON T39, 150

Network 7

LD T39

R Q0.0,1

; Hạ nhiệt

TITLE = SUBROUTINE COMMENTS

Network 1 = network title

LDW<= VW110, 930

R T40, 1

R T42, 1

R T42, 1

Network 2

LD SM0.0

TON T40, 50

Network 3

LD T40

= Q0.0

Network 4

LD SM0.0

TON T41, 100

Network 5

LD T41

= Q0.2

Network 6

LD SM0.0

TON T42, 150

Network 7

LD T42

= Q0.1

;Tăng ẩm

72



TITLE = SUBROUTINE COMMENTS

Network 1 = network title

LDW>= VW130, 934

R T43, 1

R T44, 1

R T45, 1

R T46, 1

Network 2

LD SM0.0

TON T43, 50

Network 3

LD T43

R Q0.0, 1

Network 4

LD SM0.0

TON T44, 100

Network 5

LD T44

R Q0.3, 1

Network 6

LD SM0.0

TON T45, 150

Network 7

LD T45

= Q0.1

Network 8

LD SM0.0

TON T46, 200

LD T46

= Q0.2

; Hạ ẩm

TITLE = SUBROUTINE COMMENTS

Network 1 = network title

LDW<= VW130, 938

R T47, 1

R T48, 1

R T49, 1

R T50, 1

Network 2

LD SM0.0

TON T47, 50

Network 3

LD T47

R Q0.2, 1

Network 4

73



LD SM0.0

TON T48, 100

Network 5

LD T48

= Q0.3

Network 6

LD SM0.0

TON T49, 150

Network 7

LD T49

= Q0.1

Network 8

LD SM0.0

TON T50, 200

Network 9

LD T50

= Q0.0

; Interrupt

TITLE = INTERRUPT ROUTINE COMMENTS

Network 1 = network title

LD SM0.0

LPS

AB = SMB2, 'T'

MOVD &VB300, VD1000

LRD

AB= SMB2, 'H'

MOVD &VB500, VD1000

LRD

MOVB SMB2, *VD1000

LRD

INCD VD1000

LRD

MOVB VB302, VB305

AENO

ITD VW304, VD400

AENO

DTR VD400, VD400

AENO

*R 0.01, VD400

AENO

-R 40.0, VD400

AENO

TRUNC VD400, VD100

AENO

DTI VD100, VW110

74



LRD

MOVB VB502, VB505

AENO

ITD VW504, VD600

AENO

DTR VD600, VD600

AENO

MOVD VD600, VD606

AENO

*R VD606, VD606

AENO

*R 2.8E-006, VD606

AENO

MOVR 0.0405, VD702

AENO

*R VD600, VD702

AENO

*R -1.0, VD606

AENO

+R VD702, VD606

AENO

-R 4.0, VD606

LRD

MOVR VD400, VD708

AENO

-R 25.0, VD708

AENO

MOVR VD600, VD804

AENO

*R 8E-005, VD804

AENO

+R 0.01, VD804

AENO

*R VD708, VD804

AENO

MOVR VD606, VD900

AENO

+R VD804, VD900

AENO

TRUNC VD900, VD120

AENO

DTI VD120, VW130

LPP



75



Phụ lục 5: Kết quả khảo nghiệm

Bảng phụ lục 5.1: Kết quả khảo nghiệm ngày 12/4/2011

Bảng PL 5.1.1: Kết quả về ẩm độ

Thời gian

9h30

9h45

10h00

10h15

10h30

10h45

11h00

11h15

11h30

11h45

12h00

12h15

12h30

12h45



Tầng Giữa



Buồng Định Ơn

Tầng Đáy



Tầng Trên



TB



TB



TB



TB



83

83

79

86

85

74

91

86,5

85

73,5

87,5

82,5

80

89,5



85,5

84,5

79,75

85

77

84,5

75

71

74,5

80,25

82,25

83,25

76,75

74,25



77,5

79,5

79,5

80

84,5

75,5

73,5

72

81

71,5

75,5

74,5

78,5

69



85

80

91

86

83,5

82,5

74,5

84

77

89,5

87

85

85

85



Mơi truong



Buồng TG



TB

78

68,5

69

68

70

67,5

65,5

67,5

67,5

76

68,5

72,5

65

60,5



Bảng PL 5.1.2: Kết quả về nhiệt độ



76



Mơi trường



Buồng TG



tTB

9h30



Thời gian



Buồng Định Ơn

Tầng Giữa



tầng Đáy



Tầng Trên



tTB



tTB



tTB



tTB



27,5



24



24,25



24,5



25,5



9h45



28,25



23



23,625



23,25



24,5



10h00



28,5



23



21,75



22,75



23,5



10h15



29



24



22,625



23



23,5



10h30



29,5



21



21,25



20



21



10h45



30



24,5



23,875



24



25,25



11h00



30,25



21



20,75



20,25



21



11h15



30,5



20,25



21



21



22,5



11h30



31



21



21,625



21



22



11h45



30



21



20,625



21



22,5



12h00



30,25



18,75



19,625



20



19,75



12h15

12h30

12h45



30,5

31,5

32,5



21,25

16,5

15



18,625

16

15,5



19,5

15

14,75



18

17

17



77



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Phụ lục 3: Chương trình điều khiển cảm biến nhiệt độ và ẩm độ SHT75

Tải bản đầy đủ ngay(0 tr)

×