Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 33 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
33
Dung lượng
0,99 MB
Nội dung
ĐẠI HỌC LẠC HỒNG KHOA CƠ ĐIỆN - ĐIỆN TỬ - BÁO CÁO MÔN HỌC VI ĐIỀU KHIỂN ĐỀ TÀI: ĐO NHIỆT ĐỘ DÙNG IC DS18B20 HIỂN THỊ TRÊN LED MA TRẬN 8X8 SVTH : GVHD: LÊ PHÚC HẢI HỒ NGUYỄN TẤN CƯỜNG Th.S NGƠ KIM LONG ĐỒNG NAI, 2021 MỤC LỤC Chương I: MỞ ĐẦU Lý chọn đề tài Mục tiêu nghiên cứu Phạm vi nghiên cứu Kết đạt Chương II: CƠ SỞ LÝ THUYẾT Phần cứng 1.1 Sơ đồ khối hệ thống 1.2 Vi xử lý: STM 32F407 1.3 Cảm biến nhiệt độ IC DS18B20 1.4 Module IC MAX7219 - LED matrix 8x32 1.5 Nút nhấn 1.6 Hệ thống phun sương 1.7 Module Relay Kích Mức Thấp 5VDC Phần mềm hỗ trợ lập trình 2.1 STM32cubeMX88 2.2 KeilC V5 Chương III: THIẾT KẾ Bài toán đặt Kết nối phần cứng Mạch thực tế 4.Viết Code hệ thống Chương IV: KẾT QUẢ Kết chương trình Kết Luận CHƯƠNG I: MỞ ĐẦU Lý chọn đề tài Ngày nay, với phát triển vượt bậc khoa học kỹ thuật, với phát triển việc vận dụng vi điều khiển để hỗ trợ phục vụ cho nhu cầu đời sống ngày, việc thay đổi điều chỉnh nhiệt độ cần thiết, theo dõi nhu cầu thiết yếu người việc sử dụng thiết bị để điều chỉnh nhiệt độ, dựa vào nhu cầu chúng em lựa chọn nghiên cứu mơ hình đo nhiệt độ hiển thị Led ma trận 8x8 để giúp điều chỉnh nhiệt độ mà người sử dụng mong muốn - Mục tiêu nghiên cứu ● ● - Phạm vi nghiên cứu - Kết đạt Sử dụng để đo nhiệt độ Người sử dụng tùy chỉnh hệ thống phun sương Phần cứng: Đấu nối thiết bị ngoại vi với vi xử lý trung tâm Xử lý vấn đề phần cứng phát sinh (nhiễu) Phần mềm: Nghiên cứu, đưa giải pháp lập trình Tăng giảm nhiệt độ theo ý muốn Đáp ứng nhu cầu người dùng CHƯƠNG II: CƠ SỞ LÝ THUYẾT Phần cứng Với đề tài đo nhiệt độ phần cứng bao gồm : Kit STM 32F407 – DISCOVERY - - DS18B20 - Module IC MAX7219 + Led ma trận 8x32 - IC MAX7219 - Động phun sương 12v - Hệ thống ống phun sương - Module Relay Kích Mức Thấp 5VDC Lí lựa chọn thiết bị : cần thiết cho nhu cầu sống đáp ứng mục đích người điều chỉnh nhiệt độ môi trường sinh hoạt, lao động làm việc - 1.1 Sơ đồ khối hệ thống: Hình 1.1: Sơ đồ khối ● Giải thích nguyên lý hoạt động khối: khởi động nạp code lập trình để hoạt động vào board(STM32F407 discovery), máy phun sương chế độ hoạt động chưa phun sương, lúc cảm biến nhiệt độ DS18B20 có nhiệm vụ lấy nhiệt độ từ môi trường Led Ma trận 8x32 hiển thị nhiệt độ để dự báo cho biết Khi nhiệt độ nóng thu từ mơi trường > t0 mong muốn để hệ thống phun sương hệ thống phun sương, thời gian phun sương lần phút ( thiết lập code) sau hết thời gian thiết lập, hệ thống phun sương ngắt trạng thái trở lại ban đầu 1.2 Vi xử lí : STM32F407 discovery Kit STM32F407 Discovery loại kit sử dụng nhiều trường đại học giảng dạy vi điều khiển ARM, so sánh ngoại vi sức mạnh STM32 so với dòng ARM hãng khác tầm giá, ARM ST vượt trội cấu hình ngoại vi nhiều Vi điều khiển chính: STM32F407VGT6 microcontroller featuring 32-bit ARM Cortex-M4F core, 1MB Flash, 192 KB RAM in an LQFP100 package - - Tích hợp sẵn mạch nạp debug STLINK/V2 - Nguồn cấp từ cổng usb mini qua ic nguồn chuyển thành 3.3V để cấp co MCU - Có sẵn chân nguồn: 3V 5V - Có cảm biến gia tốc: LIS302DL, ST MEMS motion senser, 3- axits - Có led - Có led thơng báo trạng thái nguồn - Tích hợp nút nhấn cho người sử dụng nút reset - Có cổng Micro USB OTG - Giá bán dao động từ 600-700 ngàn đồng Hình 1.2 Kit STM 32F407 DISCOVERY 1.3 Cảm biến nhiệt độ DS18B20 Cảm biến nhiệt độ DS18B20 1-Wire Digital Temperature Sensor IC sử dụng để đo nhiệt độ môi trường với chuẩn giao tiếp 1-Wire (1 chân Data nhất) dễ kết nối lập trình, cảm biến có chất lượng tốt, độ bền cao Cần nối chân Data cảm biến lên mức cao VCC qua điện trở kéo 4k7 Ohm 10k Ohm trước kết nối với Vi điều khiển Thông số kỹ thuật - Điện áp sử dụng: 3~5.5VDC - Dòng tiêu thụ: 1~1.5mA Chuẩn giao tiếp: Digital TTL 1-Wire (chỉ chân Data nhất, lưu ý cần nối chân Data cảm biến lên mức cao VCC qua điện trở kéo 4k7 Ohm 10k Ohm trước kết nối với Vi điều khiển) - - Khoảng nhiệt độ đo được: -55~125°C - Độ xác (sai số): ±0.5°C - Độ phân giải: 9~12 bit (có thể thiết đặt) - Thời gian phản hồi < 750ms - Kiểu chân: TO-92 Hình 1.3 Cảm biến nhiệt độ DS18B20 one wire Module cảm biến DS18B20 1.4 Module MAX7219 + LED matrix 8x32 Module tổ hợp Led Matrix 8x8, với led Matrix điều khiển IC MAX7219 (tương tự IC 74HC595) IC MAX7219 mắc nối tiếp giao tiếp với chuẩn SPI giúp tiết kiệm số chân cho vi điều khiển ( sử dụng chân để điều khiển ) Ngồi IC MAX7219 cịn tích hợp Static RAM 8x8 từ việc hiển thị trở nên mượt mà hơn, đồng thời Module cịn mở rộng thêm việc mắc nối tiếp mạch Led Matrix 8x8 MAX7219 lại với Thông số kỹ thuật : ● Led Matrix 8x8 (Cathode chung) , IC MAX7219 ● IC giao tiếp : MAX7219 ● Chuẩn giao tiếp : SPI ● Điện áp sử dụng: 5VDC ● Kích thước (cm): 6.3 x 3.5 x 1.5 ● Mạch hiển thị Led ma trận MAX7219 có ngõ vào tín hiệu nối tiếp, ghi dịch chuyển tín hiệu nên cần GPIO để điều khiển, mạch có khả nối tiếp thêm nhiều mạch cổng nối tiếp nên dễ dàng để mở rộng Sơ đồ chân: Hình 1.4.1 Sơ đồ chân module led ma trận + ic max 7219 ● DIN: chân truyền liệu từ vi điều khiển đến Max7219 (chân MOSI vi điều khiển) ● CLK: chân cấp xung nhịp hoạt động cho Max7219 nối với chân SCK vi điều khiển ● CS: chân lựa chọn hoạt động, chân nối với chân I/O vi điều khiển ● VCC: chân cấp nguồn: sử dụng nguồn 5VDC ● GND: kết nối với chân GND vi điều khiển Hình 1.4 Module led matrix MAX7219 8x32 1.5 Nút nhấn Nếu bạn biết đến cơng tắc đóng / mở nút nhấn hoạt động tương tự Thông số kỹ thuật : Số chân: chân Màu sắc: Đen Kích thước: 6x6x4.3mm Hình1.5 Nút Nhấn 1.6 Động Phun sương 12v - Bơm phun sương hay gọi bơm tạo sương kết hợp ưu điểm máy bơm tự mồi bơm hóa chất Bơm sản xuất nhiều loại vật liệu nhập có khả chống ăn mịn Bơm có kích thước nhỏ gọn, dòng điện tiêu thụ thấp, áp suất cao, tiếng ồn thấp, tuổi thọ dài Với khả chịu dầu, chịu nhiệt, kháng axit, kháng kiềm, kháng hóa chất, chống ăn mòn… Thân máy bơm tách khỏi động khơng có phận học nên khơng có ăn mịn thân máy bơm Thơng số kỹ thuật - Điện áp định mức: 12VDC - Dòng định mức: 2.1A - Công suất: 60W - Lưu lượng: 5L / phút - Áp suất: 0.8 MPA - Đầu ren: 17.8mm - Đầu ống: 10mm - Trọng lượng: 0.56 kg - Lực hút: mét - Lực đẩy tối đa: 35 mét Hình 1.6.1 Động phun sương Hình 1.6.2 Béc phun sương đầu Thơng số kỹ thuật: o Ống nhựa : - Ống LDPE ( ống dẻo ) Chất liệu: Nhựa mềm PVC - Chất lượng: Hàng chất lượng cao - Màu sắc:đa màu sắc Đặc điểm kỹ thuật: Đường kính trong: 4mm - Độ dày: 1,2-1.5mm - Tính năng: Ống tưới nhỏ giọt o Béc phun sương : - Nhựa ABS, POM - Số đầu tưới: họng phun - Bán kính tưới: 1m - Lưu lượng tưới: 25-35l/h - Áp suất làm việc: 2.5-4.5 B else if (HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_2)==1) { while(HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_2)==1); if (nhietdo>0) { nhietdo ; } else { nhietdo=45; } break; } break; } break; case 3: //setup minute max_clear(); while(1) 18 { caidatphut(); //button up minute if (HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_1)==1) { while(HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_1)==1); phut++; if (phut>59) phut =0; break; } //button down minute else if (HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_2)==1) { while(HAL_GPIO_ReadPin( GPIOB,GPIO_PIN_2)==1); if (phut>0) { phut ; } else { 19 phut=59; } break; } break; } break; case : // chay hethong motor while (1) { max_clear(); Temp = DS18B20_ReadTemp(&DS1); temp=Temp; char data2[4]; sprintf(data2, "%02d",temp); write_char( data2[1],2); write_char( data2[0],3); if(temp>nhietdo) { HAL_GPIO_WritePin( GPIOE,GPIO_PIN_1,1); for(;minute 4) dem=0; while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0)==1) i=0; 22 } else i=0; } } //hamcon hienthi cai dat nhiet void caidatnhietdo(void) { char data[2]; sprintf(data, "%02d", nhietdo); write_char( data[1],3); write_char( data[0],4); } //hamcon hienthi cai dat phut void caidatphut(void) { char data1[2]; sprintf(data1, "%02d", phut); write_char( data1[1],1); write_char( data1[0],2); } void SystemClock_Config(void) { 23 RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ HAL_RCC_PWR_CLK_ENABLE(); HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SC ALE1); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 4; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } 24 /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } /** * @brief TIM2 Initialization Function * @param None * @retval None */ static void MX_TIM2_Init(void) { 25 /* USER CODE BEGIN TIM2_Init */ /* USER CODE END TIM2_Init */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; /* USER CODE BEGIN TIM2_Init */ /* USER CODE END TIM2_Init */ htim2.Instance = TIM2; htim2.Init.Prescaler = 72; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 0xfffff; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) 26 { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM2_Init */ /* USER CODE END TIM2_Init */ } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { 27 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ HAL_RCC_GPIOH_CLK_ENABLE(); HAL_RCC_GPIOA_CLK_ENABLE(); HAL_RCC_GPIOB_CLK_ENABLE(); HAL_RCC_GPIOE_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET); /*Configure GPIO pins : PA2 PA3 PA4 */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pins : PB0 PB1 PB2 PB15 */ 28 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : PE1 */ GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); } /* USER CODE BEGIN */ /* USER CODE END */ /** * @brief This function is executed in case of error occurrence * @retval None */ void Error_Handler(void) 29 { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN */ /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ 30 /* USER CODE END */ } #endif /* USE_FULL_ASSERT */ CHƯƠNG IV: KẾT QUẢ Kết đạt được: - Mạch hoạt động ổn định không xuất lỗi - Đạt yêu cầu đề nêu - Tăng giảm nhiệt độ theo ý muốn Đáp ứng nhu cầu người dùng Kết Luận: Đề tài " Đo nhiệt độ dùng DS18B20 hiển thị led ma trận 8x8" kết trình tổng hợp kiến thức xử lý điều khiển STM32F học lớp Ngoài ra, q trình hồn thành mơ hình giúp thành viên nhóm hồn thiện nhiều kĩ thuật thu hoạch nhiều kỹ kiến thức bên Rõ ràng cho thấy : Về phần cứng : hoàn thiện kỹ quan sát đấu nối thiết bị Về phần mềm : hoàn thiện thiếu sót q trình tạo code, hiểu thêm STM32F hoạt động biết thêm chức Về phần kỹ : hoàn thiện kỹ viết báo cáo, thuyết trình cách thức hồn thành báo cáo hiệu quả, nâng cao kỹ hoạt động nhóm 31 Tài liệu tham khảo STM32 giao tiếp với DS18B20: https://vidieukhien.xyz/2018/05/14/stm32f4-giao-tiep-voi-ds18b20/ Lập trình STM32 đọc nhiệt độ với DS18b20 giao tiếp Onewire: https://khuenguyencreator.com/lap-trinh-stm32-doc-nhiet-do-voi-ds18b20/ 32 ... module led ma trận + ic max 7219 ● DIN: chân truyền liệu từ vi điều khiển đến Max7219 (chân MOSI vi điều khiển) ● CLK: chân cấp xung nhịp hoạt động cho Max7219 nối với chân SCK vi điều khiển ●... biến nhiệt độ DS18B20 one wire Module cảm biến DS18B20 1.4 Module MAX7219 + LED matrix 8x32 Module tổ hợp Led Matrix 8x8, với led Matrix điều khiển IC MAX7219 (tương tự IC 74HC595) IC MAX7219 mắc... đặt Đo nhiệt độ dùng IC DS18B20 hiển thị led ma trận 8x8 với yêu cầu: Nếu nhiệt độ nóng > t0 mong muốn, điều khiển mở hệ thống phun sương, thời gian phun sương lần phút (t0 xx phút người dùng