Báo cáo thực hiện trên pic16f877a bao gồm phần thiết kế phần cứng và phần mềm. Được thực hiện trên proteus và MPLAB(ngôn ngữ C).Nếu bạn đang làm đồ án thì đây là bộ tại liệu được tác giả chắc lọc những kiến thức cực kỳ bổ ích.Phần báo cáo có giải thích chi tiết + Code C + schematic.
*ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA ĐIỆN TỬ VIỄN THÔNG BÁO CÁO ĐỒ ÁN THỰC HÀNH VI ĐIỀU KHIỂN ĐỀ TÀI: THIẾT BỊ CẢNH BÁO CHÁY - RÒ RỈ KHÍ GAS Thành viên: Giáo viên: Lê Trung Khanh Mục lục: Tài liệu tham khảo GIỚI THIỆU CHUNG: Ngày nay, với phát triển vượt bậc khoa học kỹ thuật, thiết bị điện tử ứng dụng nhiều lĩnh vực thực tế để phục vụ nhu cầu: chăm sóc sức khỏe, bảo vệ tinh mạng tài sản cho người Với phát triển xã hội, đời sống người cải thiện Nhu cầu sử dụng bếp gas hay sản phẩm dùng gas làm nhiên liệu ngày tăng cao Điều đặt vấn đề cần quan tâm an toàn sử dụng gas Khi người tiếp xúc trực tiếp với khí gas vượt nồng độ cho phép dễ bị ngộ độc khí gas, kèm theo nguy cháy nổ Dựa vào kiến thức học tìm hiểu, chúng em mong muốn tạo sản phẩm cảnh báo xử lý bước đầu phát có khí gas rị rỉ hay nhiệt độ tăng lên đột ngột Với ý tưởng chúng em mong muốn góp phần bảo vệ cho gia đinh, tập thể hay cơng ty có sử dụng khí Gas an toàn Sản phẩm chúng em sử dụng vi điều khiển PIC16F877A kết hợp với cảm biến nhiệt độ (LM35), cảm biến khí gas (MQ2) số linh kiện khác CHƯƠNG I: TÌM HIỂU LINH KIỆN 1.1 PIC 16F877A 1.1.1 Giới thiệu PIC16F877A vi điều khiển phổ biến ngành công nghiệp điện tử vi mạch Vi điều khiển thuận tiện sử dụng, việc mã hóa lập trình cho vi điều khiển đơn giản, dễ dàng Một lợi ích ghi-xóa nhiều liệu sử dụng cơng nghệ nhớ FLASH Nó có tổng số 40 chân có 33 pins VO(In/Out - Ngõ vào/Ngõ ra) PIC16F877A sử dụng nhiều dự án vi điều khiển PIC PIC16F877A có nhiều ứng dụng mạch điện tử kỹ thuật số PIC16F877A ứng dụng phần lớn thiết bị điện tử Nó sử dụng cảm biến từ xa, thiết bị an ninh an tồn, tự động hóa thiết bị nhà cơng nghiệp Nó đặc trưng EEPROM lưu trữ số thơng tin vĩnh viễn mã máy phát tần số nhận số liệu liên quan khác Vi điều khiển có mức thấp xử lý dễ dàng Hình 1: Hình ảnh PIC 16F877A 1.1.2 Một vài thơng số PIC16F877A PIC16F877A có 256 byte nhớ liệu EEPROM (ElectricallyErasableProgrammable-Read-Only-Memory), lập trình tự, ICD, so sánh, kênh analog-to-digital 10-bit, chức capture / so sánh / PWM, cổng nối tiếp đồng cấu giao tiếp nối tiếp ngoại vi 3-wire (SPI) bus mạch Inter-Integrated Circuit (12C) thu nhận đồng không đồng (USART) 1.1.3 Sơ đồ chân chức PIC16F877A Hình 2: Sơ đồ chân PIC16F877A PIN 2,3: RA0 / ANO, RAl/ ANT: PORTA Xuất nhập số, kênh vào tương tự 0, PIN 4: RA24 AN2 / Vref- / CVref: PORTA Xuất nhập số, kênh vào tương tự Hoặc điện áp tham chiếu âm tương tự PIN 5: RA3 AN31 Vref +: PORTAXuất nhập số, kênh vào tương tự Hoặc hoạt động điện áp tham chiếu dương tương tự PIN 6: RA0 / TOCKI: PORTAXuất nhập số/ ngõ vào xung clock bên cho | Timer 0/ ngõ so sánh PIN 7: RA5 / 5S / ẢNH / COUT2: xuất nhập số/ kênh vào tương tự 4/ PORTA ngõ vào chọn lựa SP1 phụ ngõ so sánh PIN 8, 9, 10: RE0 / RD/AN5, REl/WR/ AN6, RE2 / CS / A7: PORTE xuất nhập số đọc, ghi, chọn port song song ngõ vào tương tự PIN 11 32, 12 31: VDD, VSS: chân nguồn PIC PIN 13, 14: OSC1 CLKIN, OSC2 CLKOUT: Đây đầu vào/ra dao động thạch anh pin đầu vào/ra xung clock PIN 15, 16: RC0 / T10CO / TICKI, RC1/T10SI/ CCP2: PORTC cổng đầu vào, số 1, / Đầu vào, dao động Timerl / Ngõ vào xung clock Timer 1, ngõ vào Capture 2, ngõ so sánh 2, ngõ PWM2 PIN 17: RC2 CCP: PORTC xuất nhập số ngõ vào Capture ,ngõ so sánh 1, ngõ PWM1 PIN 18: RC3 / SCK SCL: PORTC xuất nhập số/ ngõ vào xung clock nối tiếp đồng bộ, ngõ chế độ SPI./ ngõ vào xung clock nối tiếp đồng bộ, ngõ chế độ I2C PIN 23: RC4 / SDI/ SDA: PORTC xuất nhập số/ liệu vào SPI/ xuất nhập liệu 12C PIN 24: RC5 / SD0: PORTC xuất nhập số, liệu vào SPI PIN 25: RC6 / TX/ CK: PORTC xuất nhập số truyền bất đồng USART/ xung đồng USART PIN 26: RC7/ RX/ DT: PORTC xuất nhập số nhận bất đồng USART PIN 19,20,21,22,27,28,29,30: PORTD xuất nhập số Khi bus vi xử lý giao tiếp, hoạt động cổng song song slave PIN 33-40: PORT B: PORTB Trong RB0 sử dụng pin ngắt bên ngồi RB6 RB7 sử dụng mạch gỡ lỗi mạch 1.1.4 Đặc điểm PIC16F877A Đây vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 | bits Mỗi lệnh thực thi chu kì xung clock Tốc độ hoạt động tối đa cho phép 20 MHz với chu kì lệnh 200ns Bộ nhớ chương trình 8Kx14 bit, nhớ liệu 368x8 byte RAM nhớ liệu EEPROM với dung lượng o Các đặc tính ngoại vi: • Timer0: đếm bit với chia tần số bit • Timerl: đếm 16 bit với chia tần số, thực chức đếm dựa vào xung • • • • • clock ngoại vi vi điều khiển hoạt động chế độ sleep Timer2: đếm bit với chia tần số, postcaler Hai Capture/so sánh/PWM Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI I2C Chuẩn giao tiếp nối tiếp USART với bit địa Cổng giao tiếp song song PSP (Parallel Slave Port) với chân điều khiển RD, WR 1.1.5 Sơ đồ khối vi điều khiển PIC16F877A Hình 3: Sơ đồ khối PIC16F877A o Gồm khối: • Khối ALU – Arithmetic Logic Unit • Khối nhớ chứa chương trinh – Flash Program Memory • Khối nhớ chứa liệu EEPROM – Data EEPROM • Khối nhớ file ghi RAM – RAM file Register • Khối giải mã lệnh điều khiển – Instruction Decode and Control • Khối ghi đặc biêt • Khối giao tiếp nối tiếp • Khối chuyển đổi tín hiệu tương tự sang số - ADC • Khối cổng nhập xuất 1.2 Cảm biến nhiệt độ LM35 1.2.1 Giới thiệu Cảm biến nhiệt độ LM35 cảm biến nhiệt mạch tích hợp xác cao (analog) Điện áp đầu tỉ lệ tuyến tính với nhiệt độ Celsius (Celsius) LM35 có lợi cảm biến nhiệt độ tuyến tính định cỡ Kelvin, người dùng không bắt buộc phải trừ lượng lớn điện áp cố định từ đầu để thu giá trị nhiệt độ thuận lợi Nhiệt độ xác định cách đo điện áp ngõ cảm biến LM35 Với kích thước nhỏ, chi phí thấp độ tin cậy, LM35 ứng dụng rộng rãi kỹ thuật Hình 4: Hình ảnh cảm biến nhiệt độ LM35 1.2.2 Đặc điểm • Hiệu chỉnh theo nhiệt độ Celsius(°C) • Độ phân giải điện áp đầu 10mV/°C • Đảm bảo độ xác khoảng 0,5°C khoảng 25°C • Được đánh giá cao nhiệt độ -55°C đến 150°C • Nguồn cấp từ 4V đến 30V • Dịng tiêu thụ 60A • Độ chinh xác thực tế: 1/4°C nhiệt độ phòng và3/4°C khoảng -55°C tới 150°C 1.3 Cảm biến khí gas MQ-2 1.3.1 Giới thiệu MQ2 cảm biến khí gas Nó cấu tạo từ chất bán dẫn SnO2 Chất có độ nhạy cảm thấp với khơng khí Nhưng mơi trường có chất ngây cháy, độ dẫn thay đổi Chính nhờ đặc điểm người ta thêm vào mạch đơn gian để biến đổi từ độ nhạy sang điện áp Khi môi trường điện áp đầu cảm biến thấp, giá trị điện áp đầu tăng nồng độ khí gây cháy xung quang MQ2 cao MQ2 hoạt động tốt mơi trường khí hóa lỏng LPG, H2, chất khí gây cháy khác Nó sử dụng rộng rãi công nghiệp dân dụng mạch đơn giản chi phí thấp Hình 5: Cảm biến khí Gas MQ-2 o • • • • • Thông số kỹ thuật: Nguồn hoạt động: 4,5V-5V Loại liệu Analog Phạm vi phát rộng Tốc độ phản hồi nhanh độ nhạy cao Ổn định sử dụng thời gian dài 1.4 Một số linh kiện khác o o o o o o o o LCD dùng để hiển thị thông tin Thạch anh dùng để tạo tần số dao động cho vi điều khiển Tụ hóa Điện trở Biến trở dùng để điều chỉnh độ sang LCD Module Relay dùng để kích hoạt thiết bị xử lý bước đầu: máy bơm, quạt Còi Đèn báo CHƯƠNG 2: THIẾT KẾ MẠCH 2.1 Sơ đồ khối Khối nguồn: cấp nguồn cho khối hoạt động Khối cảm biến: gồm cảm biến nhiệt độ LM35 cảm biến khí gas MQ-2 Khối điều khiển: vi điều khiển PIC16 F877A Khối hiển thị: LCD Khối xử lý: gồm quạt máy bơm Khối cảnh báo: gồm đèn còi o o o o o o 2.1 Nguyên lý hoạt động o o • • • o • • Khối điều khiển nhận tín hiệu từ khối cảm biến, phân tích xử lý tinh hiệu nhận thấy bất thường gửi tinh hiệu đến khối hiển thị, khối cảnh báo vào khối xử lý Khi nhận tín hiệu từ cảm biến nhiệt, nhận thấy nhiệt độ vượt nhiệt đồ cho phép vi điều khiển gửi tin hiệu để: Khối hiển thị: hiển thị nhiệt độ Khối cảnh báo: còi kêu đèn báo chớp Khối xử lý: kích hoạt máy bơm để phun nước giảm nhiệt độ Khi nhận tín hiệu có khí gas vượt mức cho phép vi điều khiển gửi tín hiệu để: Khối cảnh báo: cịi kêu đèn báo chớp Khối xử lý: kích hoạt quạt để phân tán khí gas tranh tích tụ tạo nguy cháy nổ 10 2.3 Mạch mơ Hình 6: Mạch mơ Hình 7: Mạch sau mạch in PCB 11 2.4 Mạch thực tế Hình 8: Mặt trước mạch Hình 9: Mặt sau mạch 12 2.5 Phần chương trình đưa vào vi điều khiển 2.5.1 Phần trọng tâm • Chân RC0 kết nối với cảm biến khí Gas • Chân RB0 nối với Relay kích hoạt quạt • Khi khơng có khí gas RC0=1→RB0=0 quạt khơng hoạt động • Khi có khí gas RC0=0 kích hoạt RB0=1→ quạt hoạt động • Chân RB2 nối với Relay kích hoạt máy bơm • Khi nhiệt độ vượt q 45°C RB2=1→máy bơm hoạt động • Cịn nhiệt độ 45°C RB2=0→máy bơm khơng hoạt động 2.5.2 Tồn chương trình // CONFIG #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled) #pragma config CPD = OFF protection off) // Data EEPROM Memory Code Protection bit (Data EEPROM code #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include #include #include // [ Definitiotns ] #define _XTAL_FREQ 4000000 #define LCD_EN_Delay 500 #define LCD_DATA_PORT_D TRISD #define LCD_RS_D TRISD2 #define LCD_EN_D TRISD1 #define RS RD2 #define EN RD1 13 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7 // -[ Globals ] uint16_t AN0RES=0; float Temperature, Voltage; char* line1 = " Temperature Is "; char* TempSTR[16]; // -[ Functions Prototypes ] -void ADC_Init(); uint16_t ADC_Read(uint8_t); void LCD_Init(); void LCD_Clear(); void LCD_CMD(char); void LCD_DATA(char); void LCD_Set_Cursor(char, char); void LCD_Write_Char(char); void LCD_Write_String(char*); // -[ Main Routine] void main(void) { LCD_Init(); LCD_Clear(); ADC_Init(); TRISC0 = 1; TRISB0 = 0; TRISB2 = 0; while(1) { if(RC0 == ) { RB0 = 0;} else{ RB0 = 1;} 14 if( Temperature > 45 ) { RB2 = 1;} else { RB2 = 0;} // Read The ADC AN0RES = ADC_Read(0); // Read Analog Channel // Calculate The Temperature Voltage = AN0RES * 0.0048828; Temperature = Voltage / 0.01; // Convert The Temperature From Float To String sprintf(TempSTR, " %.3fc", Temperature); // Print Out The Temperature LCD_Set_Cursor(1,1); LCD_Write_String(line1); LCD_Set_Cursor(2,1); LCD_Write_String(TempSTR);} } // [ ADC Routines ] void ADC_Init() { ADCON0 = 0x41; // Turn ADC ON, Select AN0 Channel, ADC Clock = Fosc/8 ADCON1 = 0x80; // All Channels Are Analog, Result is "Right-Justified" // ADC Clock = Fosc/8 } uint16_t ADC_Read(uint8_t ANC) { if(ANC7) // Check Channel Number Validity { return 0;} ADCON0 &= 0x11000101; // Clear The Channel Selection Bits ADCON0 |= ANC>4; //Lower 8-bits y = Temp & 0x0F; //Upper 8-bits LCD_CMD(z); //Set Row LCD_CMD(y); //Set Column } } void LCD_Init() { // IO Pin Configurations LCD_DATA_PORT_D = 0x00; LCD_RS_D = 0; LCD_EN_D = 0; // The Procedure As Described in Datasheet LCD_DATA(0x00); delay_us(LCD_EN_Delay); LCD_CMD(0x03); delay_ms(5); LCD_CMD(0x03); delay_ms(11); LCD_CMD(0x03); LCD_CMD(0x02); //Clears the RAM and initializes the LCD 17 LCD_CMD(0x02); //Clears the RAM and initializes the LCD LCD_CMD(0x08); //Select Row LCD_CMD(0x00); //Clear Row Display LCD_CMD(0x0C); //Select Row LCD_CMD(0x00); //Clear Row Display LCD_CMD(0x06); } void LCD_Write_Char(char data) { char Lower_Nibble,Upper_Nibble; Lower_Nibble = data&0x0F; Upper_Nibble = data&0xF0; RS = 1; LCD_DATA(Upper_Nibble>>4); EN = 1; delay_us(LCD_EN_Delay); EN = 0; delay_us(LCD_EN_Delay); LCD_DATA(Lower_Nibble); EN = 1; delay_us(LCD_EN_Delay); EN = 0; delay_us(LCD_EN_Delay); } void LCD_Write_String(char *a) { int i; for(i=0;a[i]!='\0';i++) LCD_Write_Char(a[i]); } Tài liệu tham khảo Datasheet PIC16F887A Designing Embedded Systems with PIC Microcontrollers – Principles 18 3.1 Phân công công việc Phần mạch in (pcb) Phần chương trình (code ) Nguyễn Văn Thắng (19200483) Trần Ngọc Tài (19200466) 3.2 Quá trình thực : Lên ý tưởng (chọn sản phẩm mang tính ứng dụng cao) Mua linh kiện thiết bị cần thiết Thực phần mềm • • • • • Tìm hiểu cách lấy tính hiệu analog (cách code đọc cảm biến ADC) digital (đọc tính hiệu số) Tìm hiểu giao tiếp hình LCD (16x2) với PIC16F877A cách nối chân Tìm hiểu cách xuất tính hiệu qua chân IO Tìm hiểu ngun lí hoạt động cịi báo Tìm hiểu ngun lí hoạt động RELAY để nhận tính hiệu xuất từ vi điều khiển Thực phần cứng : • Vẽ sơ đồ nguyên lý cho mạch cần thực (ALTIUM) • Thực mạch test Board • Thực mạch in PCB:Vẽ PCB,in mạch,hàn linh kiện… • Kiểm tra kết mạch in • Licence Altium: 19 3.3 Đánh giá cá nhân thành viên nhóm mức độ hồn thành cơng việc giao Đánh giá đóng góp thành viên mức độ hoàn thành đồ án 20