- Trang bị thêm cho mô hình để có độ bền và tính thẩm mĩ cao hơn. - Điều khiển và giám sát hệ thống qua điện thoại.
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 76 5.2.2 Đề xuất phần mềm
- Nâng cấp phần mềm để hệ thống thông minh hơn. - Tìm hiểu thêm về điều khiển các thiết bị xoay chiều.
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 77
TÀI LIỆU THAM KHẢO
1. GS.Phạm Văn Ất “Kỹ thuật lập trình C cơ sở và nâng cao”, NXB Giao thông vận tải Hà Nội – 2006.
2. Lập trình và ghép nối máy tính.Nhà xuất bản khoa học kĩ thuật - 2003.
3. KS. Trần Văn Hùng “Kỹ thuật ứng dụng vi điều khiển”, Tài liệu lưu hành nội bộ Đại học Nha Trang.
4. Nguyễn Tấn Phước “Giáo trình Linh kiện điều khiển”,NXB Thành phố Hồ Chí Mính – 1988.
5. Các website tham khảo: + www.microchip.com. + www.PICvietnam.com.vn.
+ www.dientuvietnam.net + www.alldatasheet.com.
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 78
PHỤ LỤC Chương trình điều khiển
/**********************************************************/ This program was produced by the
CodeWizardAVR V1.24.6 Professional Automatic Program Generator
© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com Project : Version : Date : 4/1/2013 Author : F4CG Company : F4CG Comments:
Chip type : ATmega32 Program type : Application
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 79
Clock frequency : 12.000000 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 512
*****************************************************/ #include <mega32.h>
#include <delay.h> #include <stdlib.h> #include <math.h>
#define dk_quat PORTD.5 #define cb PINB.0
unsigned char k=45; #define CLK PORTA.1 #define DATA_W PORTA.0 #define DATA_R PINA.0 #define DATA_X DDRA.0 #define TEMP 0x03 #define HUMI 0x05 #define RESET 0x1E
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 80 float d1C = -40.1; // 14bit float d2C = 0.01; // 14bit float C1 = -4.0; // 12bit float C2 = 0.0405; // 12bit float C3 = -0.0000028; // 12bit float t1 = 0.01; // 12bit float t2 = 0.00008; // 12bit float tempt, humi;
float RH_linear, RH_true; char a;
int th,da,pw,t;
int i;
// Alphanumeric LCD Module functions #asm
.equ __lcd_port=0x15 ;PORTC #endasm
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 81
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void) {
// Place your code here delay_ms(i); dk_quat=0; delay_us(10); dk_quat=1; }
// Declare your global variables here
void khoitao(void) {
// Declare your local variables here
// Input/Output Ports initialization // Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 82
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 83
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;
DDRD=0x20;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x00;
TCNT0=0x00; OCR0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon.
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 84
// Noise Canceler: Off
// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 85
// Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;
TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: On
// INT0 Mode: Rising Edge // INT1: Off // INT2: Off GICR|=0x40; MCUCR=0x03; MCUCSR=0x00; GIFR=0x40;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 86
// Analog Comparator initialization // Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;
SFIOR=0x00;
// LCD module initialization lcd_init(16);
// Global enable interrupts #asm("sei")
}
/////////////////////////////////////////////////////////////////////////
void Hienthi_LCD(unsigned int so,unsigned char x,unsigned char y) {
unsigned int a,b,c,d,nguyen,du; nguyen = so/100;
du = so%100;
a=nguyen/10; // lay fan tram
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 87
c=du/10; // lay hang don vi d= du%10 ;
lcd_gotoxy(x,y); // ve vi tri x,y
lcd_putchar(a+48); // day ra hang tram, ma ascii lcd_putchar(b+48); // day ra hang chuc, ma ascii lcd_putsf(".");
lcd_putchar(c+48); // day ra hang don vi, ma ascii lcd_putchar(d+48); // day ra hang don vi, ma ascii }
///////////////////////////////////////////////////////////////////////// unsigned int SHT_Measure(char CMD)
{
// int i,j,k,l; char i,j,f,l; char m = 128;
unsigned int temp = 0; DATA_X = 1; //DDRA DATA_W = 1; //PORTA DDRA.1=1;
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 88
CLK = 0;
// Connection reset sequence for(i=0; i<10; i++) { CLK = 1;
delay_us(15); CLK = 0; delay_us(15); }
// initial transmistion pluses DATA_W = 1; delay_us(15); CLK = 1; delay_us(15); DATA_W = 0; delay_us(15); CLK = 0; delay_us(15); CLK = 1; delay_us(15);
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 89 DATA_W = 1; delay_us(15); CLK = 0; delay_us(15); //Transmit command. for(j=0; j<8; j++) { if(!(m & CMD)) DATA_W = 0; else DATA_W = 1; CLK = 1; delay_us(15); CLK = 0; delay_us(15); m >>= 1; }
//Check acknowledge pulse. return 0 if no pulse. DATA_X = 0;
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 90 CLK = 1; delay_us(15); if(DATA_R) return 0; CLK = 0; delay_us(15); while(!DATA_R); // wait until data is ready while(DATA_R); // get first byte MSB for(f=0;f<8;f++) { temp <<= 1; CLK = 1; delay_us(15); if(DATA_R) temp |= 1; CLK = 0; delay_us(15);
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 91 } // acknowledge pluse DATA_X = 1; DATA_W = 0; delay_us(15); CLK = 1; delay_us(15); CLK = 0; delay_us(15); DATA_X = 0; delay_us(15); // get second byte LS B for(l=0; l<8; l++) { temp <<= 1; CLK = 1; delay_us(15); if(DATA_R) temp |= 1;
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 92
CLK = 0; delay_us(15); }
// return value without CRC return temp;
}
/*****************************************************/ void Tinh_SHT10(void)
{
//read adc temperature value from SHT
tempt = SHT_Measure(TEMP); //calculate temperature in Celsius from value, //formula t = d1 + d2*SOt
tempt = d1C + (tempt * d2C)-2; th=tempt*100 ;
lcd_gotoxy(0,0);
lcd_putsf("Nhiet Do:"); Hienthi_LCD(th,10,0);
humi = SHT_Measure(HUMI); //read adc humidity value from SHT //formula RHlinear = C1 + C2*SOrh + C3*SOrh*SOrh %RH
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 93
//formula RHtrue = (Tc-25)*(t1+t2*SOrh)+RHlinear RH_true = (tempt-25)*(t1+(t2*humi))+ RH_linear; da= RH_true*100; lcd_gotoxy(0,1); lcd_putsf("DO Am :"); Hienthi_LCD(da,10,1); } ///////////////////////////////////////////////////////////////////////// void main(void) { khoitao(); while (1) { Tinh_SHT10(); if(cb==1) { if(tempt<26) { i=8;
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 94
}
if(( tempt>=26 )&&(tempt<28)) {
i=7; }
if(( tempt>=28 )&&(tempt<30)) {
i=6; }
if(( tempt>=30 )&&(tempt<31)) {
i=5; }
if(( tempt>=31 )&&(tempt<32)) {
i=4; }
if(( tempt>=32 )&&(tempt<33)) {
Đồ án chuyên ngành Công nghệ Cơ Điện Tử Trang 95
i=2; }
if(( tempt>=33 )&&(tempt<35)) { i=1; } if(tempt>=35) { i=0; } } if(cb==0) { i=9; } }; } /**********************************************************/