Báo Cáo Môn Học Đồ Án Hệ Thống Số Đề Tài Hệ Thống Giám Sát, Cảnh Báo Nhiệt Độ, Độ Ẩm, Cường Độ Gió Thông Báo Qua Sms.pdf

80 10 0
Báo Cáo Môn Học Đồ Án Hệ Thống Số Đề Tài Hệ Thống Giám Sát, Cảnh Báo Nhiệt Độ, Độ Ẩm, Cường Độ Gió Thông Báo Qua Sms.pdf

Đ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

1 HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA ĐIỆN TỬ 1 BÁO CÁO MÔN HỌC ĐỒ ÁN HỆ THỐNG SỐ ĐỀ TÀI HỆ THỐNG GIÁM SÁT, CẢNH BÁO NHIỆT ĐỘ, ĐỘ ẨM, CƯỜNG ĐỘ GIÓ THÔNG BÁO QUA SMS Giảng viên hướng dẫn Nguyễ[.]

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA ĐIỆN TỬ - BÁO CÁO MÔN HỌC ĐỒ ÁN HỆ THỐNG SỐ ĐỀ TÀI: HỆ THỐNG GIÁM SÁT, CẢNH BÁO NHIỆT ĐỘ, ĐỘ ẨM, CƯỜNG ĐỘ GIĨ THƠNG BÁO QUA SMS Giảng viên hướng dẫn: Nguyễn Văn Thành Nhóm : Sinh viên thực hiện: Dương Quang Hà - B17DCDT059 Nguyễn Văn Long - B17DCDT115 Cù Minh Vương - B17DCDT217 Hà Nội – 2021 Lời cảm ơn Nhóm chúng em xin gửi lời cảm ơn sâu sắc chân thành tới thầy Nguyễn Văn Thành tận tình giúp đỡ, bảo, hướng dẫn nhóm thực suốt trình thực đề tài Trong thời gian làm việc với thầy, nhóm chúng em khơng ngừng tiếp thu thêm nhiều kiến thức bổ ích mà học tinh thần làm việc, thái độ nghiên cứu môn học nghiêm túc, hiệu thầy điều cần thiết cho nhóm trình học tập cơng tác cho chúng em sau Kính chúc thầy sức khoẻ, hạnh phúc thành cơng đường nghiệp giảng dạy! Chân thành cảm ơn đến bạn nhóm ln đồng hành, giúp đỡ để nhóm thực đề tài thành công! Mục Lục Chương Tổng quan 1.1 Đặt vấn đề 1.2 Mục tiêu đề tài 1.3 Nội dung nghiên cứu Chương Cơ sở lý thuyết 2.1 Giới thiệu linh kiện 2.1.1 Tổng quan vi xử lý ARM 2.1.2 Tổng quan Kit ARM STM32F103C8T6 2.1.3 Tổng quan cảm biến nhiệt độ độ ẩm DHT11 2.1.4 Tổng quan Encoder 13 2.1.5 Tổng quan Module SIM800L 14 2.1.6 Tổng quan LCD 16x2 17 2.1.7 Tổng quan Module I2C 23 2.1.8 Tổng quan Module hạ áp LM2596 24 2.2 Giới thiệu trình biên dịch KeilC CubeMX 25 2.2.1 Lý lựa chọn 25 2.2.2 Tổng quan CubeMX 26 2.2.3 Tổng quan KeilC 28 2.2.4 Tổng quan ST-Link 32 2.3 Giới thiệu chuẩn giao tiếp I2C 35 2.3.1 Tổng quan chuẩn giao tiếp I2C 35 2.3.2 Cách thức hoạt động 37 2.4 Giới thiệu chuẩn giao tiếp UART 42 2.4.1 Tổng quan chuẩn giao tiếp UART 42 2.4.2 Cách thức hoạt động 43 2.5 Giới thiệu chức RTC STM32F103C8T6 48 2.6 Giới thiệu mode TIM_ENCODER STM32F103C8T6 49 Chương Tính tốn thiết kế 51 3.1 Tổng quát đề tài 51 3.2 Thiết kế hệ thống 51 3.2.1 Thiết kế sơ đồ khối hệ thống 51 3.2.2 Tính toán thiết kế 52 3.2.3 Sơ đồ nguyên lý 56 Chương Thi công hệ thống 57 4.1 Giới thiệu 57 4.2 Thi công hệ thống 57 4.2.1 Thiết kế PCB 57 4.2.2 Làm mạch in 52 4.2.3 Thi cơng mơ hình 61 4.3 Lập trình hệ thống 62 4.3.1 Lưu đồ chương trình 62 4.3.2 Lưu đồ tính vận tốc 63 4.3.3 Lưu đồ chương trình hiển thị LCD 64 Chương Kết quả, Nhận xét, Đánh giá 65 5.1 Kết đạt 65 5.2 Kết thực nghiệm 66 5.3 Nhận xét Đánh giá 66 Chương Kết luận hướng phát triển 69 6.1 Kết luận 69 6.2 Hướng phát triển 69 Tài liệu tham khảo 70 Phụ lục 71 Chương 1: Tổng quát 1.1 Đặt vấn đề Cuộc sống ngày phát triển nhanh chóng đại hơn, cơng nghệ ngày phát minh phát triển để đưa vào phục vụ sống ngày người Nhằm mang lại tiện nghi, an toàn cho người sử dụng Trong khơng thể khơng kể đến dự án, nghiên cứu lĩnh vực điều khiển giám sát thông minh với tiên tiến vượt trội Điều khiển giám sát thông minh, tích hợp hệ thống hệ thống điều khiển giám sát nhiệt độ, độ ẩm, cường độ gió, … thành hệ thống Mỗi chức điều khiển giám sát thơng minh có khả tự vận hành điều khiển người dùng, thông qua tin nhắn cung cấp nhiều chế độ sử dụng Người dùng truy cập từ xa để kiểm tra báo tắt hệ thống cần thiết, tự động gửi theo thời gian cài đặt sẵn Vì điều khiển giám sát thông minh đề tài công nghệ ứng dụng áp dụng nhiều dự án Khơng hạn chế với tính nêu trên, ngày có nhiều nghiên cứu đề xuất phát triển hệ thống điều khiển giám sát để bám kịp theo phát triển cơng nghệ, tối ưu hóa hiệu sử dụng giá hợp lý Việc cung cấp thông số qua SMS cho phép người dùng dễ dàng kiểm soát nhận biết cảnh báo cách kịp thời Do đó, chúng em định thực đề tài: “ HỆ THỐNG GIÁM SÁT NHIỆT ĐỘ, ĐỘ ẨM, CƯỜNG ĐỘ GIĨ QUA SMS” Đề tài ứng dụng cơng nghệ SMS phổ biến nhiều thiết bị để điều khiển giám sát Với đề tài sử dụng thiết bị hạ thấp giá thành sản phẩm 1.2 Mục tiêu đề tài Đồ án nhóm nghiên cứu, khảo sát thực với mục đích áp dụng kiến thức học trường giúp cho nhu cầu điều khiển giám sát trở nên tiện lợi Vì nhóm thiết kế “HỆ THỐNG GIÁM SÁT NHIỆT ĐỘ, ĐỘ ẨM, CƯỜNG ĐỘ GIÓ QUA SMS” với mong muốn đem kỹ thuật cơng nghệ để làm đơn giản hóa việc giám sát, giám sát dù nơi đâu Thiết bị tích hợp module sim 800L, encoder, nhiệt độ độ ẩm DHT11 Thiết bị giám sát trực tiếp qua hình LCD giám sát từ xa qua qua điện thoại nhờ tin nhắn SMS 1.3 Nội dung nghiên cứu Nội dung 1: Tìm hiểu module sim 800L truyền liệu qua SMS Nội dung 2: Tìm hiểu Encoder, tính tốn thiết kế mơ hình đo tốc độ gió Nội dung 3: Tìm hiểu module DHT11 đo nhiệt độ độ ẩm, Nội dung 4: Tìm hiểu I2C LCD16x2 chức thời gian thực RTC Nội dung 5: Thiết kế, thi công thử nghiệm phần cứng Nội dung 6: Đánh giá kết viết báo cáo Chương 2: Cơ sở lý thuyết 2.1 Giới thiệu linh kiện 2.1.1 Tổng quan vi xử lí ARM ARM ( viết cách điệu arm, trước từ viết tắt Advanced RISC Machine, ban đầu Acorn RISC Machine) họ kiến trúc dạng RISC cho vi xử lý máy tính, cấu hình cho môi trường khác Arm Holdings phát triển kiến trúc cấp phép cho cơng ty khác, nơi mà thiết kế sản phẩm riêng họ để thực kiến trúc bao gồm SoC module hệ thống (SoM) kết hợp với thành phần khác nhớ, giao diện, radio Họ thiết kế lõi thực tập lệnh cấp phép cho thiết kế cho công ty đối tác để thiết kế sản phẩm riêng họ dựa lõi 2.1.2 Tổng quan Kit ARM STM32F103C8T6 * Giới thiệu Hình 2.1: STM32F103C8T6 STM32 dòng chip phổ biến ST với nhiều họ thông dụng F0,F1,F2,F3,F4… Stm32f103 thuộc họ F1 với lõi ARM COTEX M3 STM32F103 vi điều khiển 32 bit, tốc độ tối đa 72Mhz Giá thành rẻ so với loại vi điều khiển có chức tương tự Mạch nạp cơng cụ lập trình đa dạng dễ sử dụng Phần mềm lập trình: có nhiều trình biên dịch cho STM32 IAR Embedded Workbench, Keil C… Hình 2.2: Cấu tạo STM32F103C8T6 *Sơ lược Board:  cổng Mini USB dùng để cấp nguồn, nạp debug  MCU bao gồm MCU nạp MCU dùng để lập trình  Có chân Output riêng cho chân mạch nạp MCU1  Có chân Output đầy đủ cho chân MCU2  Chân cấp nguồn ngồi riêng cho MCU2 khơng sử dụng nguồn từ USB  Thạch anh 32,768khz dùng cho RTC Backup  Chân nạp dùng cho chế độ nạp boot loader  Nút Reset led hiển thị chân PB9, led báo nguồn cho MCU2 2.1.3 Tổng quan cảm biến nhiệt độ độ ẩm DHT11 * Giới thiệu sơ lược module - Cảm biến độ ẩm nhiệt độ DHT11 cảm biến thơng dụng chi phí rẻ dễ lấy liệu thông qua giao tiếp wire ( giao tiếp digital dây truyền liệu nhất) Bộ tiền xử lý tín hiệu tích hợp cảm biến giúp bạn có liệu xác mà khơng phải qua tính tốn * Thông số kỹ thuật - Điện áp hoạt động: 3.3V đến 5V (DC)  Dải nhiệt độ đo: 0°C ~ 50°C, sai số ± 2°C  Dải độ ẩm đo: 20% - 90% RH, sai số ± 5% RH  Tần số lấy mẫu: 1Hz, nghĩa giây DHT11 lấy mẫu lần  Chuẩn giao tiếp: TTL, – Wire  Dòng tối đa: 2.5mA  Kích thước: 28 x 12 x 10 mm * Chức chân DHT 11  Chân VCC: cực dương  Chân GND: cực âm  Chân DATA: chân tín hiệu * Ngun lý hoạt động - Để giao tiếp với DHT11 theo chuẩn chân vi xử lý thực theo bước:  Gửi tín hiệu muốn đo (Start) tới DHT11, sau DHT11 xác nhận lại  Khi giao tiếp với DHT11, cảm biến gửi lại byte liệu nhiệt độ đo Bước 1: gửi tín hiệu Start Hình 2.3: Cách thức hoạt động - Cách thức hoạt động  MCU thiết lập chân DATA Output, kéo chân DATA xuống khoảng thời gian > 18ms Khi DHT11 hiểu MCU muốn đo giá trị nhiệt độ độ ẩm  MCU đưa chân DATA lên 1, sau thiết lập lại chân đầu vào  Sau khoảng thời gian 20 - 40 µs, DHT11 kéo chân DATA xuống thấp Nếu > 40 µs mà chân DATA khơng kéo xuống thấp nghĩa không giao tiếp với DHT11  Chân DATA mức thấp 80 µs sau DHT11 kéo lên cao 80 µs Bằng việc giám sát chân DATA, MCU biết có giao tiếp với DHT11 khơng Nếu tín hiệu đo DHT11 lên cao, hồn thiện q trình giao tiếp MCU với DHT11 Bước 2: Đọc giá trị DHT11 - DHT11 trả giá trị nhiệt độ độ ẩm dạng Byte Trong đó:  Byte 1: giá trị phần nguyên độ ẩm (RH%) 10 5.2 Kết thực nghiệm Hình 5.2: Thực thi hệ thống Hình 5.3: Thực thi hệ thống 66 Hình 5.4: Thực thi hệ thống Hình 5.5: Thực thi hệ thống cảnh báo 67 *Đánh giá Chỉ tiêu Giám sát cảm biến (1 tiếng) LCD SMS Encoder Hoạt động ổn Hoạt động ổn Hoạt động ổn định, định định hoạt động gió nhỏ Gửi tin nhắn đến điện Thành công thoại(10 lần) Đánh giá Đạt Đạt Đạt Bảng 5.1 Số liệu thực nghiệm 5.3 Nhận xét Đánh giá - Nhìn chung, mơ hình hoạt động tương đối ổn định, làm việc liên tục, đạt 100% yêu cầu đề ban đầu Nguồn cung cấp 12V trở xuống an toàn cho người sử dụng - Sản phầm hoạt động phụ thuộc vào mạng điện thoại Vùng phủ sóng mạnh thiết bị hoạt động tốt - Tuy nhiên, hạn chế kiến thức thời gian, nguồn tham khảo chủ yếu thông qua mạng Internet nên đề tài cịn có nhiều sai sót số hạn chế:  Hoạt động chưa tốt vùng có sóng điện thoại yếu  Tính thẩm mỹ độ xác chưa cao  Chưa có chức điều khiển qua sms 68 Chương 6: Kết luận hướng phát triển 6.1 Kết luận - Hệ thống đáp ứng tính năng, nội dung mục tiêu sau:  Giao tiếp truyền liệu thành công STM32F103C8T6 với module DHT11, SIM800L, LCD encoder  Hiển thị nhiệt độ, độ ẩm, cường độ gió LCD điện thoại thông qua tin nhắn  Cảnh báo cịi có cố - Sản phẩm chưa thể thương mại hóa sử dụng hộ gia đình - Các hạn chế chưa thể thương mại hóa là:  Sản phẩm cịn thơ, thiếu tính thẩm mỹ  Độ xác cảm biến, module chưa cao  Sản phẩm gửi liệu qua tin nhắn  Chưa thể gửi liệu lên web để xem xét liệu ngày, tháng để đưa so sánh 6.2 Hướng phát triển - Hệ thống thêm số cảm biến khác cảm biến ánh sáng, cảm biến mưa, Và có mở rộng nhiều hướng khác gửi liệu lên Web để theo dõi điều khiển qua giao diện Hoặc phát triển điều khiển trực tiếp qua SMS 69 Tài liệu tham khảo [1] [Online] Available: http://thutemplate2115.blogspot.com/2015/08/d.html [2] [Online] Available: https://tapit.vn/real-time-clock-rtc-tren-stm32f103c8t6/ [3] [Online] Available: https://dientuviet.com/kien-thuc-co-ban-ve-giao-tiep-uart/ [4] [Online] Available: http://dammedientu.vn/gioi-thieu-chuan-giao-tiep-i2c/ [5] [Online] Available: https://deepbluembedded.com/stm32-timer-encoder-mode-stm32rotary-encoder-interfacing/ [6] [Online] Available: https://controllerstech.com/i2c-lcd-in-stm32/ [7] [Online] Available: http://laptrinharmst.blogspot.com/2018/05/bai-14-encoder-voistm32f103.html 70 Phụ Lục * Code STM32 cho vi điều khiển #include "main.h" uint8_t date=0; #include "hadht11.h" uint8_t month=0; #include "string.h" uint8_t year=0; #include uint8_t lastsecond=0; #include "sim800l.h" uint8_t lastminute=0; #include "i2c-lcd.h" float Temperature, Humidity; I2C_HandleTypeDef hi2c1; float speed=0; volatile short encoder_count_pre =0; RTC_HandleTypeDef hrtc; volatile short encoder_count_now=0; TIM_HandleTypeDef htim1; char mobile[]="0981019685"; TIM_HandleTypeDef htim2; char mess[]=""; UART_HandleTypeDef huart1; int main(void) UART_HandleTypeDef huart3; { HAL_Init(); void SystemClock_Config(void); SystemClock_Config(); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); MX_GPIO_Init(); static void MX_RTC_Init(void); MX_I2C1_Init(); static void MX_TIM1_Init(void); MX_RTC_Init(); static void MX_USART1_UART_Init(void); MX_TIM1_Init(); static void MX_USART3_UART_Init(void); MX_USART1_UART_Init(); static void MX_TIM2_Init(void); MX_USART3_UART_Init(); static int abs(int x); MX_TIM2_Init(); RTC_TimeTypeDef STime; HAL_TIM_Base_Start(&htim1); RTC_DateTypeDef DateToUpdate; HAL_TIM_Encoder_Start(&htim2, DHT_DataTypedef DHT11_Data; TIM_CHANNEL_1|TIM_CHANNEL_2); lcd_init(); uint8_t second=0; uint8_t minute=0; char ht[17]; uint8_t hour=0; char nhdo[17]; uint8_t day=0; char mess[]="i come back"; 71 //SIM800L_CallNum( (uint8_t *)mobile); while (1) lastsecond = second; { } //lay gio HAL_RTC_GetTime(&hrtc, &STime, RTC_FORMAT_BIN); sprintf(ht,"Speed:%0.1f km/h",speed); lcd_goto_XY(1,0); HAL_RTC_GetDate(&hrtc,&DateToUpdate lcd_send_string(ht); , RTC_FORMAT_BIN); second = STime.Seconds; //in man hinh nhdo am minute = STime.Minutes; DHT_GetData(&DHT11_Data); hour = STime.Hours; Temperature = DHT11_Data.Temperature; day = DateToUpdate.Date; Humidity = DHT11_Data.Humidity; month = DateToUpdate.Month; year = DateToUpdate.Year; sprintf(nhdo, "temp:%0.f", Temperature); lcd_goto_XY(0,0); // //in man hinh tg lcd_send_string(nhdo); lcd_goto_XY(0,8); sprintf(nhdo, "humi:%0.f", // Humidity); sprintf(ht,"%d:%d:%d",hour,minute,second) lcd_goto_XY(0,8); ; lcd_send_string(nhdo); // lcd_send_string(ht); // lcd_goto_XY(0,0); //gui du lieu vao smartphone // sprintf(ht,"%d/%d/%d",day,month,year); // if(Temperature35) lcd_send_string(ht); { sprintf(mess, //get_speed(); "%d/%d/%d-%d:%d:%d: encoder_count_now = WARNNING\ntemp=%0.f*C ", HAL_TIM_GET_COUNTER(&htim2); if(abs(second - lastsecond) > 10) { day,month,year,hour,minute,second,Temper ature); speed = 2*3.14*0.064*3.6*abs(encoder_count_now encoder_count_pre)/300; SIM800L_SendEN_SMS((uint8_t *)mobile,(uint8_t *)mess); encoder_count_pre = encoder_count_now; 72 sprintf(mess, HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ 7,GPIO_PIN_SET); "%d/%d/%d:%d:%d:%d: \n-temp=%0.f*C \nhumi=%0.f%c \n-speed=%0.1fkm/h", HAL_Delay(100); day,month,year,hour,minute,second,Temper ature,Humidity,0x25,speed); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ 7,GPIO_PIN_RESET); SIM800L_SendEN_SMS((uint8_t *)mobile,(uint8_t *)mess); HAL_Delay(100); } //SIM800L_CallNum( (uint8_t *)mobile); else if(Humidity90) { lastminute=minute; sprintf(mess, "%d/%d/%d- %d:%d:%d: WARNNING\n humi=%0.f%c ", HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ 7,GPIO_PIN_SET); day,month,year,hour,minute,second,Humidit y,0x25); HAL_Delay(100); SIM800L_SendEN_SMS((uint8_t *)mobile,(uint8_t *)mess); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ 7,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ HAL_Delay(100); 7,GPIO_PIN_SET); } HAL_Delay(1000); HAL_Delay(100); HAL_GPIO_WritePin(GPIOA,GPIO_PIN_ } } 7,GPIO_PIN_RESET); int abs(int x) HAL_Delay(100); { } if(x>=0) return x; if(abs(minute-lastminute) >= 15 ) else return -x; { //SIM800L_Info_Show(); } /** 73 * @brief System Clock Configuration * @retval None |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_ */ PCLK2; void SystemClock_Config(void) { RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; /** Initializes the RCC Oscillators according to the specified parameters RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; * in the RCC_OscInitTypeDef structure */ RCC_OscInitStruct.OscillatorType = if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATO { RTYPE_HSE; Error_Handler(); RCC_OscInitStruct.HSEState = RCC_HSE_ON; } RCC_OscInitStruct.HSEPredivValue = PeriphClkInit.PeriphClockSelection = RCC_HSE_PREDIV_DIV1; RCC_PERIPHCLK_RTC; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) RCC_PLLSOURCE_HSE; { RCC_OscInitStruct.PLL.PLLMUL = Error_Handler(); RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != } } HAL_OK) { /** Error_Handler(); * @brief I2C1 Initialization Function } * @param None /** Initializes the CPU, AHB and APB buses clocks * @retval None */ */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_S static void MX_I2C1_Init(void) { YSCLK 74 /* USER CODE BEGIN I2C1_Init */ /* USER CODE BEGIN RTC_Init */ /* USER CODE END I2C1_Init */ /* USER CODE END RTC_Init */ /* USER CODE BEGIN I2C1_Init */ RTC_TimeTypeDef sTime = {0}; /* USER CODE END I2C1_Init */ RTC_DateTypeDef DateToUpdate = {0}; hi2c1.Instance = I2C1; RTC_AlarmTypeDef sAlarm = {0}; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; /* USER CODE BEGIN RTC_Init */ hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; /* USER CODE END RTC_Init */ /** Initialize RTC Only */ hrtc.Instance = RTC; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = // if (HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR1) != 0x32f2) // { I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; Error_Handler(); } hrtc.Init.OutPut = RTC_OUTPUTSOURCE_ALARM; /* USER CODE BEGIN I2C1_Init */ if (HAL_RTC_Init(&hrtc) != HAL_OK) /* USER CODE END I2C1_Init */ { Error_Handler(); } } /** /* USER CODE BEGIN * @brief RTC Initialization Function Check_RTC_BKUP */ * @param None * @retval None */ /* USER CODE END Check_RTC_BKUP */ static void MX_RTC_Init(void) { 75 /** Initialize RTC and set the Time and Date /* USER CODE BEGIN RTC_Init */ */ sTime.Hours = 0x11; /* USER CODE END RTC_Init sTime.Minutes = 0x24; */ sTime.Seconds = 0x0; // HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DR1,0x32f2); if (HAL_RTC_SetTime(&hrtc, // } &sTime, RTC_FORMAT_BCD) != HAL_OK) { } Error_Handler(); } /** DateToUpdate.WeekDay = * @brief TIM1 Initialization Function RTC_WEEKDAY_TUESDAY; * @param None DateToUpdate.Month = * @retval None RTC_MONTH_MAY; */ DateToUpdate.Date = 0x18; static void MX_TIM1_Init(void) DateToUpdate.Year = 0x21; { if (HAL_RTC_SetDate(&hrtc, /* USER CODE BEGIN TIM1_Init */ &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) /* USER CODE END TIM1_Init */ { Error_Handler(); } TIM_ClockConfigTypeDef sClockSourceConfig = {0}; /** Enable the Alarm A TIM_MasterConfigTypeDef sMasterConfig = {0}; */ sAlarm.AlarmTime.Hours = 0x0; /* USER CODE BEGIN TIM1_Init */ sAlarm.AlarmTime.Minutes = 0x0; sAlarm.AlarmTime.Seconds = 0x0; /* USER CODE END TIM1_Init */ sAlarm.Alarm = RTC_ALARM_A; htim1.Instance = TIM1; if (HAL_RTC_SetAlarm(&hrtc, htim1.Init.Prescaler = 72-1; &sAlarm, RTC_FORMAT_BCD) != HAL_OK) { TIM_COUNTERMODE_UP; Error_Handler(); } htim1.Init.CounterMode = htim1.Init.Period = 0xffff-1; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; 76 htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = /* USER CODE BEGIN TIM2_Init */ TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) /* USER CODE END TIM2_Init */ { Error_Handler(); } TIM_Encoder_InitTypeDef sConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; /* USER CODE BEGIN TIM2_Init */ if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) { /* USER CODE END TIM2_Init */ htim2.Instance = TIM2; Error_Handler(); } htim2.Init.Prescaler = 0; htim2.Init.CounterMode = sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim 1, &sMasterConfig) != HAL_OK) { TIM_COUNTERMODE_UP; htim2.Init.Period = 0xffff; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; sConfig.EncoderMode = TIM_ENCODERMODE_TI12; Error_Handler(); } /* USER CODE BEGIN TIM1_Init */ sConfig.IC1Polarity = TIM_ICPOLARITY_RISING; sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI; /* USER CODE END TIM1_Init */ sConfig.IC1Prescaler = TIM_ICPSC_DIV1; sConfig.IC1Filter = 0; } sConfig.IC2Polarity = TIM_ICPOLARITY_RISING; /** * @brief TIM2 Initialization Function TIM_ICSELECTION_DIRECTTI; * @param None sConfig.IC2Prescaler = TIM_ICPSC_DIV1; * @retval None sConfig.IC2Filter = 0; */ if (HAL_TIM_Encoder_Init(&htim2, &sConfig) != static void MX_TIM2_Init(void) { sConfig.IC2Selection = HAL_OK) { 77 Error_Handler(); huart1.Init.StopBits = UART_STOPBITS_1; } huart1.Init.Parity = UART_PARITY_NONE; sMasterConfig.MasterOutputTrigger = huart1.Init.Mode = UART_MODE_TX_RX; TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; TIM_MASTERSLAVEMODE_DISABLE; if huart1.Init.OverSampling = UART_OVERSAMPLING_16; (HAL_TIMEx_MasterConfigSynchronization(&htim if (HAL_UART_Init(&huart1) != HAL_OK) 2, &sMasterConfig) != HAL_OK) { { Error_Handler(); Error_Handler(); } } /* USER CODE BEGIN USART1_Init */ /* USER CODE BEGIN TIM2_Init */ /* USER CODE END USART1_Init */ /* USER CODE END TIM2_Init */ } } /** /** * @brief USART3 Initialization Function * @brief USART1 Initialization Function * @param None * @param None * @retval None * @retval None */ */ static void MX_USART1_UART_Init(void) static void MX_USART3_UART_Init(void) { { /* USER CODE BEGIN USART3_Init */ /* USER CODE BEGIN USART1_Init */ /* USER CODE END USART3_Init */ /* USER CODE END USART1_Init */ /* USER CODE BEGIN USART3_Init */ /* USER CODE BEGIN USART1_Init */ /* USER CODE END USART3_Init */ /* USER CODE END USART1_Init */ huart3.Instance = USART3; huart1.Instance = USART1; huart3.Init.BaudRate = 9600; huart1.Init.BaudRate = 9600; huart3.Init.WordLength = huart1.Init.WordLength = UART_WORDLENGTH_8B; UART_WORDLENGTH_8B; huart3.Init.StopBits = UART_STOPBITS_1; 78 huart3.Init.Parity = UART_PARITY_NONE; huart3.Init.Mode = UART_MODE_TX_RX; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; huart3.Init.HwFlowCtl = GPIO_InitStruct.Pull = GPIO_NOPULL; UART_HWCONTROL_NONE; huart3.Init.OverSampling = GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; UART_OVERSAMPLING_16; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); if (HAL_UART_Init(&huart3) != HAL_OK) { } Error_Handler(); } /* USER CODE BEGIN */ /* USER CODE BEGIN USART3_Init */ /* USER CODE END */ /* USER CODE END USART3_Init */ /** } * @brief This function is executed in case of error occurrence /** * @retval None * @brief GPIO Initialization Function */ * @param None void Error_Handler(void) * @retval None { */ /* USER CODE BEGIN Error_Handler_Debug */ static void MX_GPIO_Init(void) { /* User can add his own implementation to report the HAL error return state */ GPIO_InitTypeDef GPIO_InitStruct = {0}; disable_irq(); while (1) /* GPIO Ports Clock Enable */ { HAL_RCC_GPIOC_CLK_ENABLE(); } HAL_RCC_GPIOD_CLK_ENABLE(); /* USER CODE END Error_Handler_Debug */ HAL_RCC_GPIOA_CLK_ENABLE(); } HAL_RCC_GPIOB_CLK_ENABLE(); #ifdef USE_FULL_ASSERT /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET); /** * @brief Reports the name of the source file and the source line number * /*Configure GPIO pin : PA7 */ where the assert_param error has occurred * @param file: pointer to the source file name GPIO_InitStruct.Pin = GPIO_PIN_7; 79 * @param line: assert_param error line source number ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ * @retval None */ void assert_failed(uint8_t *file, uint32_t line) /* USER CODE END */ } #endif /* USE_FULL_ASSERT */ { /* USER CODE BEGIN */ /************************ (C) COPYRIGHT /* User can add his own implementation to report STMicroelectronics *****END OF FILE****/ the file name and line number, The End 80 ... đó, chúng em định thực đề tài: “ HỆ THỐNG GIÁM SÁT NHIỆT ĐỘ, ĐỘ ẨM, CƯỜNG ĐỘ GIÓ QUA SMS? ?? Đề tài ứng dụng công nghệ SMS phổ biến nhiều thiết bị để điều khiển giám sát Với đề tài sử dụng thiết bị... dự án, nghiên cứu lĩnh vực điều khiển giám sát thông minh với tiên tiến vượt trội Điều khiển giám sát thơng minh, tích hợp hệ thống hệ thống điều khiển giám sát nhiệt độ, độ ẩm, cường độ gió, ... tốn thiết kế 3.1 Tổng quát đề tài Đề tài nảy yêu cầu thiết kế hệ thống giám sát nhiệt độ, độ ẩm cường độ gió Khi từ vi xử lý đưa liệu sang điện thoại qua tin nhắn SMS hiển thị liệu lên hình LCD

Ngày đăng: 19/03/2023, 18:16

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

  • Đang cập nhật ...

Tài liệu liên quan