MSP430G2553 Giao tiếp cảm biến nhiệt độ và độ ẩm DHT11 (Upload dữ liệu lên Thingspeak bằng module ESP8266 nếu cần) điều khiển mô hình giám sát nhiệt độ và độ ẩm hệ thống thông gió (CÓ CODE MẪU VÀ SƠ ĐỒ CHI TIẾT)
Trang 2PHỤ 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
4 LƯU ĐỒ CHƯƠNG TRÌNH DIỀU KHIỂN
5 SƠ ĐỒ NGUYÊN LÝ
6 MẠCH IN
7 TỔNG KẾT ĐỀ TÀI
Trang 3£ NỘI DUNG BÁO CÁO
1 MỤC TIÊU VÀ GIỚI HẠN ĐỀ TÀI CẦN ĐẠT ĐƯỢC
_Mục tiêu:Thiết kế và điều khiển được mô hình đo nhiệt độ và đô ẩm của hệ thống thông gió trong nhà kho và hiển thị kết quả đo được trên LCD
_Giới hạn :
_Chọn và sử dụng linh kiện hợp lý nhất, tránh lãng phí tài nguyên
_Thiết kế phải sử dụng được chức năng phần cứng tích hợp trong MSP430
hiện có để có thể tối ưu nhất định trong thiết kế phần cứng của hệ thống
_ Nhiệt độ và độ ẩm đọc được có thể có sai số không quá 5%
Trang 42 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
Phím điều khiễn tự đông
Trang 5 Ngõ vào:
Chân SCK kết nối với chân P1.1 của MSP430G2553
Chân DT kết nối với chân P1.2 của MSP430G2553
Ngõ ra: Dữ liệu
Chân P1.4 kết nối với D4 của LCD
Chân P1.5 kết nối với D5 của LCD
Chân P1.6 kết nối với D6 của LCD
Chân P1.7 kết nối với D7 của LCD
Vi điều khiển MSP430G2553 thực hiện điều khiển toàn bộ quá trình chuyển đổi từ tín hiệu lực đo được thành dữ liệu số thể hiện trung thực nhất và giao tiếp với các thiết bị khác để trao đổi thông tin
Trang 6 Thông số kỹ thuật và ưu điểm của msp430g2553
-Low Supply-Voltage Range: 1.8 V to 3.6 V
- Cấu trúc sử dụng nguồn thấp giúp kéo dài tuổi thọ của Pin (siêu tiết kiệm điện):
+Duy trì 0.1µA dòng nuôi RAM
+Chỉ 0.8µA real-time clock
+230 µA/ MIPS
-Bộ tương tự hiệu suất cao cho các phép đo chính xác
-Bộ giám sát điện áp nguồn
-16 bit RISC CPU cho phép được nhiều ứng dụng, thể hiện một phần ở kích thước Code lập trình
+Thanh ghi lớn nên loại trừ được trường hợp tắt nghẽn tập tin khi đang làm việc
+Thiết kế nhỏ gọn làm giảm lượng tiêu thụ điện và giảm giá thành
+Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++
-Có 7 chế độ định địa chỉ
-Khả năng ngắt theo véc tơ lớn
+ Trong lập trình cho bộ nhớ Flash cho phép thay đổi Code một cách linh hoạt, phạm vi rộng, bộ nhớ Flash còn có thể lưu lại như nhật ký của dữ liệu
-Tần số bên trong lên đến 16 MHz với bốn chế độ tần số được hiệu chỉnh
-Crystal 32 kHz
-Năm chế độ tiết kiệm năng lượng
Trang 7 DHT11
Hình ảnh
Thông tin cơ bản
Điện áp hoạt động: 3V - 5V (DC)
Dãi độ ẩm hoạt động: 20% - 90% RH, sai số ±5%RH
Dãi nhiệt độ hoạt động: 0°C ~ 50°C, sai số ±2°C
Khoảng cách truyển tối đa: 20m
DHT11 Là cảm biến rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1-wire (giao tiếp digital 1-wire truyền dữ liệu duy nhất) Cảm biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không cần phải qua bất kỳ tính toán nào.
Trang 8 Sơ đồ kết nối của DHT11:
Trang 9 Nguyên lý hoạt động:
Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:
o Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại
o Khi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu
và nhiệt độ đo được
Bước 1 gửi tín hiệu start
MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời gian >18ms Trong Code mình để 25ms Khi đó DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ và độ ẩm
+ MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào
+ Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp Nếu
>40us mà chân DATA ko được kéo xuống thấp nghĩa là ko giao tiếp đượcvới DHT11
+ Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us Bằng việc giám sát chân DATA, MCU có thể biết được có giaotiếp được với DHT11 ko Nếu tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT
Trang 10 Đọc giá trị trên DHT11
DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte Trong đó:
+ Byte 1: giá trị phần nguyên của độ ẩm (RH%)
+ Byte 2: giá trị phần thập phân của độ ẩm (RH%)
+ Byte 3: giá trị phần nguyên của nhiệt độ (TC)
+ Byte 4 : giá trị phần thập phân của nhiệt độ (TC)
+ Byte 5 : kiểm tra tổng
+ Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ
ẩm và nhiệt độ là chính xác, nếu sai thì kết quả đo không có nghĩa.+ Đọc dữ liệu:
Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1 về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và
Trang 1150us Nếu giá trị đo được là 0 thì ta đọc được bit 0, nếu giá trị đo được là 1 thì giá trị đo được là 1 Cứ như thế ta đọc các bit tiếp theo.
Trang 144.LƯU ĐỒ CHƯƠNG TRÌNH DIỀU KHIỂN
BẮT ĐẦU
ĐẶT VÀ ĐIỀU CHỈNH NGƯỠNG NHIỆT ĐỘ VÀ
ĐỘ ẨM CHO PHÉP
KHỞI TẠO LCDHIỂN THỊ THÔNG TIN ĐỀ TÀI
HIỂN THỊ NHIỆT ĐỘ VÀ ĐỘ ẦM MÀ CẢM BIẾN
DO ĐƯỢC
So sánh nhiệt đô
và độ ẩm đođươc> nhiệt độ và
độ ẩm set
Độ ẩm > độ ẩm setNhiệt độ> nhiệt độ set
Nhiệt độ độ ẩm<nhiệt độ độ ẩm set
Nhiệt độ,độ ẩm> nhiệt
độ ,độ ẩm set
Không báoLed chớp tắt
Trang 15Kết nối (SỬ DỤNG ARDUINO VÀ ESP8266)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
float temp = dht.readTemperature();
float humi = dht.readHumidity();
Trang 16//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
float temp = dht.readTemperature();
float humi = dht.readHumidity();
Trang 17Kết nối cảm biến DHT11 với mạch Arduino
18 Serial.print("Nhiet do: ");
19 Serial.println(t); //Xuất nhiệt độ
20 Serial.print("Do am: ");
21 Serial.println(h); //Xuất độ ẩm
22
23 Serial.println(); //Xuống hàng
24 delay(1000); //Đợi 1 giây
32 const int DHTPIN = 2;
33 const int DHTTYPE = DHT11;
Trang 19union 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;
Trang 20union 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;
#define MCLK_F 1 // frequency of Master Clock in MHz
/* Function Set definitions */
#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:
Trang 21SHIFT_CUR_RIGHT 0x05 == Cursor shifts to the right
SHIFT_DISP_LEFT 0x06 == Display shifts to the left
SHIFT_DISP_RIGHT 0x07 == Display shifts to the right */
#define LCD_RS P1_out -> _bit.b0
#define LCD_RS_DIR P1_dir -> _bit.b0
#define LCD_EN P1_out -> _bit.b1
#define LCD_EN_DIR P1_dir -> _bit.b1
// This driver just help you to "write" LCD, not to read LCD "status".// So that, you must pull your pin LCD_RW to GND (0V)
#define LCD_DATA_4 P1_out -> _bit.b2
#define LCD_DATA_4_DIR P1_dir -> _bit.b2
#define LCD_DATA_5 P1_out -> _bit.b3
#define LCD_DATA_5_DIR P1_dir -> _bit.b3
#define LCD_DATA_6 P1_out -> _bit.b4
#define LCD_DATA_6_DIR P1_dir -> _bit.b4
#define LCD_DATA_7 P1_out -> _bit.b5
#define LCD_DATA_7_DIR P1_dir -> _bit.b5
void lcd_delay_us (unsigned long t)
Trang 24lcd_delay_ms(2); // wait for LCD
lcd_put_byte(0,FOUR_BIT & LINES_5X7); // Set LCD type
lcd_delay_ms(2); // wait for LCD
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
Trang 26lcd_putc(*data); // Write character to LCD
data++; // Increment buffer
Trang 28#define DHT_IN P2_in -> _bit.b0
#define DHT_OUT P2_out -> _bit.b0
#define DHT_DIR P2_dir -> _bit.b0
unsigned char nhietdo, doam;
unsigned char dht_get(unsigned char *tem, unsigned char *humi)
{
Trang 31unsigned long doamset=90;void gioi_thieu()
{
lcd_gotoxy(0,0);
lcd_puts(" DO AN VI XU LY"); lcd_gotoxy(0,1);
lcd_puts("nong nghiep smart"); delay_cycles(3000000); lcd_clear();
lcd_gotoxy(0,0);
lcd_puts("Nguyen Duy Ngoc"); lcd_gotoxy(0,1);
lcd_puts("MSSV: B1509816"); delay_cycles(3000000); lcd_clear();
}
void main( void )
{
Trang 32// Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD;
P2IE |=(BIT4 + BIT5 +BIT6 +BIT7);
P2IES |=(BIT4 + BIT5 +BIT6 +BIT7);
P2IFG &= ~(BIT4 + BIT5 +BIT6 +BIT7);
interrupt void Port_2(void)
{if(P2IFG & BIT4)
Trang 33if(P2IFG & BIT5)
if(P2IFG & BIT6)
Trang 35{
P2OUT=BIT3;
delay_cycles(50000);}// Coi else
{ P2OUT&=~(BIT1+BIT2+BIT3);}}
5.
Trang 364 6 D D 5
IN
IN
N1 N2 N3 N4
N1
N2 N3
N4
TEST/SBWTCK 17
XOUT/P2.7
18 XIN/P2.6/TA0.119
RST/NMI/SBWTDIO 16
P1.7/CAOUT/UCB0SIMO/UCB0SDA/A7/CA7/TDO/TDI
15 P1.6/TA0.1/UCB0SOMI/UCB0SCL/A6/CA6/TDI/TCLK14
P2.5/TA1.2
13 P2.4/TA1.212
P1.2/TA0.1/UCA0TXD/UCA0SIMO/A2/CA2
4 P1.1/TA0.0/UCA0RXD/UCA0SOMI/A1/CA1
3 P1.0/TA0CLK/ACLK/A0/CA02
P1.3/ADC10CLK/CAOUT/VREF-/VEREF-/A3/CA3 5
P1.4/SMCLK/UCB0STE/UCA0CLK/VREF+/VEREF+/A4/CA4/TCK 6
P2.1/TA1.1
9 P2.0/TA1.08
P1.5/TA0.0/UCB0CLK/UCA0STE/A5/CA5/TMS 7
P2.2/TA1.1 10 P2.3/TA1.0 11U1
IN
GND 1
U2LM1117MP-2,5
C21nF
R1220
D1LED-YELLOW
1 2J4
CONN-SIL2
C31nF
D2LED-YELLOW
1 2J7
DONG CO
1 2 3J8
CONN-SIL3
R310k
1 2J9
CONN-SIL2
1 2J10
CONN-SIL2
1 2J11
2J12
CONN-SIL2
R410k
R510kR6
10k
R710k
R8
vol
LOA10k
Trang 386.MẠCH IN
Trang 397.TỔNG KẾT ĐỀ TÀI
Ưu điểm
Thiết kế và điều khiển được mạch đo nhiệt độ độ ẩm hiển thi ra lcd
Mạch chay chính xác không xãy ra lổi
Nhược điểm
thiết kế còn đơn giản chưa có tính ứng dụng cao
Thiết kế chưa ngắn ngọn vẫn còn rườm rà
ứng dụng
-có thể ứng dụng vào mạch giám sát và điều chỉnh nhiệt độ từ xa trong hệ thống nông nghiệp thông minh ( bao gồm trong các khâu trồng và bảo quản nông sản)-do thiết kế nhỏ gọn sẽ tiết kiệm chi phí vật liệu chế tạo và lắp đăt
-có thể tự động ngắt khi tkhông cần hoạt động giúp tiết kiệm năng lương và có thời hạn hoạt động lâu dài hơn