MSP430G2553 và Cảm biến nhiệt độ LM35 (Có code mẫu và sơ đồ chi tiết ) THIẾT KẾ VÀ ĐIỀU KHIỂN MÔ HÌNH HỆ THỐNG GIÁM SÁT VÀ CẢNH BÁO CHÁY NỔ TRONG NHÀ Và cảnh báo nếu vượt quá ngưỡng cho phép

22 2.4K 33
MSP430G2553 và Cảm biến nhiệt độ LM35 (Có code mẫu và sơ đồ chi tiết ) THIẾT KẾ VÀ ĐIỀU KHIỂN MÔ HÌNH HỆ THỐNG GIÁM SÁT VÀ CẢNH BÁO CHÁY NỔ TRONG NHÀ Và cảnh báo nếu vượt quá ngưỡng cho phép

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Sử dụng vi điều khiển MSP430G2553 và Cảm biến nhiệt độ LM35 (Có code mẫu và sơ đồ chi tiết ) ĐỂ THIẾT KẾ VÀ ĐIỀU KHIỂN MÔ HÌNH HỆ THỐNG GIÁM SÁT VÀ CẢNH BÁO CHÁY NỔ TRONG NHÀ Và cảnh báo nếu vượt quá ngưỡng cho phép

Mục Lục BÁO CÁO ĐỒ ÁN VI XỮ LÝ THIẾT KẾ VÀ ĐIỀU KHIỂN MƠ HÌNH HỆ THỐNG GIÁM SÁT VÀ CẢNH BÁO CHÁY NỔ TRONG NHÀ CBHD: Ths Trần Hữu Danh • NỘI DUNG BÁO CÁO MỤC TIÊU VÀ GIỚI HẠN ĐỀ TÀI CẦN ĐẠT ĐƯỢC Mục tiêu : Thiết kế điều khiển mơ hình đo nhiệt độ cảnh báo nhiệt độ cao Cảnh báo có khói, khí gas,… Giới hạn : - Mạch hiển thị nhiệt độ nhiệt độ đặt trước lcd Khi nhiệt độ vượt nhiệt độ đặt trước mạch cảnh báo led tắt mở - Mạch cảnh báo led tắt mở có khí gas, khói,… - khơng hiển thị nồng độ chất khí lên LCD 2 MƠ HÌNH HỆ THỐNG THÔNG QUA SƠ ĐỒ KHỐI Cảm biến LM35 MQ-2 Bộ xữ lý trung tâm MSP430 Hiển thị LCD Khối nút nhấn • • • • PHÂN TÍCH VÀ LỰA CHỌN LINH KIỆN Sử dụng ADC10 Để biến đổi ngã LM 35 hiển thị nhiệt độ đo lên LCD Sử dụng trực tiếp ngõ số MQ-2 vào msp Thực cảnh báo cách tắt mở led đơn Dùng nút nhấn để điều chỉnh nhiệt độ đặt trước Chọn linh kiện : • • • • • Vi điều khiển : msp430g2553 Cảm biến nhiệt độ LM 35 Cảm biến khí gas MQ-2 LCD 16x2 Các linh kiện khác • 3.1.Giới Thiệu MSP430G2553 MSP 430 dòng vi điều khiển có kiến trúc RISC 16 bit siêu tiết kiệm lượng, sử dụng nguồn điện áp từ 1.8 đến 3.6v • Sơ đồ chân MSP430G2553 • Sơ đồ khối chức MSP430G2553 • 3.2.Giới thiệu cảm biến nhiệt độ LM 35 Cảm biến cảm biến tích hợp mà điện áp tỷ lệ tuyến độ theo Celsius Điện 4V đến 30V LM35 nhiệt mạch xác cao đầu tính với nhiệt thang độ áp đầu vào từ Đặc điểm cảm biến LM35 • Độ phân giải điện áp đầu 10mV/oC • Độ xác cao 25 C 0.5 C • Trở kháng đầu thấp 0.1 cho 1mA tải • Dải nhiệt độ đo LM35 từ -55 C  150 C với mức điện áp khác + Nhiệt độ -55 C điện áp đầu -550mV + Nhiệt độ 25 C điện áp đầu 250mV + Nhiệt độ 150 C điện áp đầu 1500mV 3.3.Giới thiệu LCD 16x2 Ký hiệu chân lcd 16x2 LƯU ĐỒ CHƯƠNG TRÌNH DIỀU KHIỂN BẮT ĐẦU KHỞI TẠO LCD HIỂN THỊ THÔNG TIN ĐỀ TÀI HIỂN THỊ NHIỆT ĐỘ ĐO ĐƯỢC VÀ NHIỆT ĐỘ SET NẾU NHIỆT ĐỘ >NHIỆT ĐỘ SET, HOẶC CÓ KHĨI, KHÍ GAS,… Đ LED CẢNH BÁO TẮT MỞ S HIỆN THI RA LCD NHIỆT ĐỘ VÀ ĐỘ ẨM DO ĐƯƠC PHẦN CODE CỦA ĐỒ ÁN 5.1.THƯ VIỆN LCD #include "msp430.h" #define MCLK_F 16 typedef unsigned char uchar; union reg { unsigned char _byte; struct bit { unsigned char b0:1; //bit byte unsigned char b1:1; //bit byte unsigned char b2:1; //bit byte unsigned char b3:1; //bit byte unsigned char b4:1; //bit byte unsigned char b5:1; //bit byte unsigned char b6:1; //bit byte unsigned char b7:1; //bit byte } _bit; }; union reg* P3_dir=(union reg*)0x1a; union reg* P3_out=(union reg*)0x19; union reg* P3_sel=(union reg*)0x1b; union reg* P3_in=(union reg*)0x18; union reg* P3_ren=(union reg*)0x10; union reg* P2_dir=(union reg*)0x2a; union reg* P2_out=(union reg*)0x29; union reg* P2_sel=(union reg*)0x2e; union reg* P2_in=(union reg*)0x28; union reg* P2_ren=(union reg*)0x2f; union reg* P1_sel=(union reg*)0x26; union reg* P1_dir=(union reg*)0x22; union reg* P1_out=(union reg*)0x21; union reg* P1_in=(union reg*)0x20; union reg* P1_ren=(union reg*)0x27; /* Function Set definitions – LCD s? d?ng ch? d? bit*/ #define FOUR_BIT 0x2C /* 4-bit Interface */ #define LINES_5X7 0x38 /* 5x7 characters, multiple line */ /*note: EIGHT_BIT 0x3C == 8-bit Interface LINE_5X7 0x30 == 5x7 characters, single line LINE_5X10 0x34 == 5x10 characters */ /* Display ON/OFF Control definitions */ #define DON 0x0F /* Display on */ #define DOFF 0x0B /* Display off */ #define CURSOR_ON 0x0F /* Cursor on #define CURSOR_OFF 0x0D /* Cursor off */ */ #define BLINK_ON 0x0F /* Cursor Blink */ #define BLINK_OFF 0x0E /* Cursor No Blink */ /* Cursor or Display Shift definitions */ #define SHIFT_CUR_LEFT 0x04 /* Cursor shifts to the left */ /*note: SHIFT_CUR_RIGHT SHIFT_DISP_LEFT 0x05 == Cursor shifts to the right 0x06 == Display shifts to the left SHIFT_DISP_RIGHT 0x07 == Display shifts to the right */ #define LCD_RS P2_out -> _bit.b1 #define LCD_RS_DIR P2_dir -> _bit.b1 #define LCD_EN P2_out -> _bit.b3 #define LCD_EN_DIR P2_dir -> _bit.b3 #define LCD_DATA_4 P2_out -> _bit.b4 #define LCD_DATA_4_DIR P2_dir -> _bit.b4 #define LCD_DATA_5 P2_out -> _bit.b5 #define LCD_DATA_5_DIR P2_dir -> _bit.b5 #define LCD_DATA_6 P2_out -> _bit.b6 #define LCD_DATA_6_DIR P2_dir -> _bit.b6 #define LCD_DATA_7 P2_out -> _bit.b7 #define LCD_DATA_7_DIR P2_dir -> _bit.b7 void lcd_delay_us (unsigned long t) {int i; for (i = t; i>0; i ) delay_cycles(MCLK_F); } void lcd_delay_ms (unsigned long t) {int i; for (i = t; i>0; i ) delay_cycles(MCLK_F*50); } // Send a byte of data (rs == 1) or command (rs == 0) to LCD void lcd_put_byte(unsigned char rs, unsigned char data) { LCD_RS = 0; if(rs) LCD_RS = 1; lcd_delay_us(20); LCD_EN = 0; // send the high nibble if (data&BIT4) LCD_DATA_4 = 1; else LCD_DATA_4 = 0; if (data&BIT5) LCD_DATA_5 = 1; else LCD_DATA_5 = 0; if (data&BIT6) LCD_DATA_6 = 1; else LCD_DATA_6 = 0; if (data&BIT7) LCD_DATA_7 = 1; else LCD_DATA_7 = 0; lcd_delay_us(20); LCD_EN = 1; lcd_delay_us(20); LCD_EN = 0; // send the low nibble if (data&BIT0) LCD_DATA_4 = 1; 10 else LCD_DATA_4 = 0; if (data&BIT1) LCD_DATA_5 = 1; else LCD_DATA_5 = 0; if (data&BIT2) LCD_DATA_6 = 1; else LCD_DATA_6 = 0; if (data&BIT3) LCD_DATA_7 = 1; else LCD_DATA_7 = 0; lcd_delay_us(20); LCD_EN = 1; lcd_delay_us(20); LCD_EN = 0; } void lcd_init(void) {// Set all signal pins as output LCD_RS_DIR = 1; LCD_EN_DIR = 1; LCD_DATA_4_DIR = 1; LCD_DATA_5_DIR = 1; LCD_DATA_6_DIR = 1; LCD_DATA_7_DIR = 1; LCD_RS = 0; LCD_EN = 0; lcd_delay_ms(200); // delay for power on // reset LCD lcd_put_byte(0,0x30); lcd_delay_ms(50); lcd_put_byte(0,0x30); lcd_delay_ms(50); lcd_put_byte(0,0x32); lcd_delay_ms(200); // delay for LCD reset lcd_delay_ms(2); // wait for LCD lcd_put_byte(0,FOUR_BIT & LINES_5X7); // Set LCD type lcd_delay_ms(2); // wait for LCD 11 lcd_put_byte(0,DOFF&CURSOR_OFF&BLINK_OFF); // display off lcd_delay_ms(2); // wait for LCD lcd_put_byte(0,DON&CURSOR_OFF&BLINK_OFF); // display on lcd_delay_ms(2); // wait for LCD lcd_put_byte(0,0x01); // clear display and move cursor to home lcd_delay_ms(2); // wait for LCD lcd_put_byte(0,SHIFT_CUR_LEFT); // cursor shift mode lcd_delay_ms(2); // wait for LCD lcd_put_byte(0,0x01); // clear display and move cursor to home lcd_delay_ms(2); } // wait for LCD void lcd_clear(void) { lcd_put_byte(0,0x01); // display off lcd_delay_ms(2); } // wait for LCD void lcd_gotoxy(unsigned char row, unsigned char col) { unsigned char address; if(row!=0) address=0x40; else address=0; address += col; lcd_put_byte(0,0x80|address); lcd_delay_ms(2); } // wait for LCD void lcd_putc(char c) { switch(c){ case '\f': lcd_put_byte(0, 0x01); lcd_delay_ms(2); // wait for LCD break; case '\n': lcd_gotoxy(0, 0x01); break; default: 12 lcd_put_byte(1, c); lcd_delay_ms(2); // wait for LCD break; }} void lcd_puts(const char* s) { while(*s){ lcd_putc(*s++); } } void lcd_string(unsigned char *data) { char length=16; while(length > 0) // Write data to LCD up to null { lcd_putc(*data); // Write character to LCD data++; length ; }}// Increment buffer void lcd_2l_puts (const char* s1 , const char* s2) { lcd_gotoxy (0,0); lcd_puts (s1); lcd_gotoxy (0,1); lcd_puts (s2);} void lcd_put_num (unsigned long val, char dec, unsigned char neg) { char i, j, digit,k; long total; long temp; for (i = 0, total = val; total > 0;i++) // count number total /= 10; total = i; if (neg !=0 ) lcd_putc ('-'); if ((total - dec) 0) // ex: val = 55; dec = put 0.055 { for ( i = 0; i < (dec-total);i++) lcd_putc('0'); k = 0; } else k = total - dec; for (i=k; i< total; i++) { temp = 1; for (j=1;j nhietdoset) P1OUT|=BIT5; delay_cycles(500000); P1OUT &=~ BIT5; delay_cycles(500000); } void canhbao2() { if((P1IN & BIT2)==0) // neu có gas LED chop tat { P1OUT |=BIT7; delay_cycles(500000); P1OUT &=~BIT7; delay_cycles(500000); } else { P1OUT &=~ BIT7; } } // chuong trinh ngat AD10 #pragma vector=ADC10_VECTOR interrupt void ADC10_ISR (void) 18 { bic_SR_register_on_exit(CPUOFF); } // chuong trinh ngat cho port P1.3 va P1.4 #pragma vector=PORT1_VECTOR interrupt void Port_1(void) { {if ( P1IFG & BIT3) nhietdoset++; P1IFG &= ~BIT3;} // tang nhiet set {if (P1IFG & BIT4) {nhietdoset ;} P1IFG &= ~BIT4;} // giam nhiet set } Lắp mạch với ARDUINO: 19 Lập trình int sensorPin = A0;// chân analog kết nối tới cảm biến LM35 void setup() { Serial.begin(9600); //Khởi động Serial mức baudrate 9600 // Bạn không cần phải pinMode cho chân analog trước dùng } void loop() { //đọc giá trị từ cảm biến LM35 int reading = analogRead(sensorPin); 10 11 //tính giá trị hiệu điện (đơn vị Volt) từ giá trị cảm biến 12 float voltage = reading * 5.0 / 1024.0; 13 14 // giới thiệu, 10mV = độ C 15 // Vì biến voltage biến lưu hiệu điện (đơn vị Volt) 16 17 // ta việc nhân voltage cho 100 nhiệt độ! 18 19 float temp = voltage * 100.0; 20 21 Serial.println(temp); 22 /*Mẹo: Các bạn phaỉ khai báo phần thực cho toàn số thực nhé! 23 24 */ 20 delay(1000);//đợi giây cho lần đọc 25 26 } SƠ ĐỒ NGUYÊN LÝ MẠCH IN 21 TỔNG KẾT ĐỀ TÀI Mạch chạy không với yêu cầu Mạch chạy phần cảm biến khí gas MQ-2 Mạch hiển thị không nhiệt độ LM 35 TÀI LIỆU THAM KHẢO Giáo trình vi điều khiển msp430, tác giả TS Lương Vinh Quốc Danh Ths Trần Hữu Danh Nguồn internet : google, youtube, datasheet,… 22

Ngày đăng: 03/09/2019, 01:23

Từ khóa liên quan

Mục lục

  • 1. MỤC TIÊU VÀ GIỚI HẠN ĐỀ TÀI CẦN ĐẠT ĐƯỢC

  • 2. MÔ HÌNH HỆ THỐNG THÔNG QUA SƠ ĐỒ KHỐI

  • 3. PHÂN TÍCH VÀ LỰA CHỌN LINH KIỆN

    • 3.1.Giới Thiệu về MSP430G2553

    • 3.2.Giới thiệu về cảm biến nhiệt độ LM 35

    • 3.3.Giới thiệu về LCD 16x2

    • 4. LƯU ĐỒ CHƯƠNG TRÌNH DIỀU KHIỂN

    • 5. PHẦN CODE CỦA ĐỒ ÁN

      • 5.1.THƯ VIỆN LCD

      • 5.2.CODE CHƯƠNG TRÌNH CHÍNH :

        • LM35 là một cảm biến nhiệt độ analog

        • LM35 không cần phải canh chỉnh nhiệt độ khi sử dụng.

        • LM35 thay đổi nhiệt độ nhanh và chính xác.

        • Lắp mạch với ARDUINO:

        • Lập trình

        • 6. SƠ ĐỒ NGUYÊN LÝ

        • 7. MẠCH IN

        • 8. TỔNG KẾT ĐỀ TÀI

        • 9. TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

Tài liệu liên quan