Professional Documents
Culture Documents
HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ VIỄN THÔNG
2
2. Mạch nạp ST link V2:
Mạch hỗ trợ nạp đầy đủ các STM32 thông qua giao diện SWIM và STM8
thông qua giao diện JTAG/SWD và gỡ lỗi giao diện đơn giản,kết nối với PC
thông qua USB 2.0 tốc độ cao.
Phần mềm hỗ trợ:
Trực tiếp hỗ trợ ST chính thức IDE (phần mềm môi trường phát triển
tích hợp) ST Visual Develop (STVD) và phần mềm ghi ST Visual
Program (STVP).
Hỗ trợ STM32 như ATOLLIC, IAR, Keil, TASKING.
Thông số kỹ thuật:
Điện áp cung cấp : 5VDC bằng cổng
USB
Chức năng lập trình: Có thể ghi và ghi
FLASH ROM, EEPROM, AFR
Hiệu suất mô phỏng: sử dụng giao diện
USB2.0 để gỡ lỗi
Hiệu suất lập trình: sử dụng giao diện
USB2.0 để tải xuống SWIM / JTAG /
SWD.
3. Mạch chuyển USB UART PL2303 :
Cáp chuyển USB UART PL2303 được sử dụng để chuyển giao tiếp từ
USB sang UART và ngược lại thông qua cổng COM ảo trên máy tính, cáp
sử dụng IC giá rẻ PL2303 nên có chi phí thấp, đầu ra UART chuẩn Header
cái Female dễ dàng kết nối và sử dụng.
3
Thông số kỹ thuật:
Điện áp hoạt động : 5VDC ( cổng USB)
Ngõ ra dạng UART gồm 2 chân TX, RX.
Với 3 led trên board: led báo nguồn, led RX, led TX.
Kích thước:45x16mm
Hỗ trợ một số các hệ điều hành cũ Win XP, Win7,Linux,…
4. LCD xanh dương 1602 kết hợp module PCF 8574 giao tiếp I2C
sang LCD:
Lcd xanh dương 1602 hiển thị 16 kí tự và 2 dòng
, màn hình được thiết
kế tốt độ bền cao được ứng dụng rất phổ biến.
Thông số kỹ thuật:
Điện áp hoạt động : 5VDC
Kích thước : 80x36x12.5mm
Chữ trắng , nền xanh dương
Khoảng cách giữa các chân là 0.1inch dễ
dàng kết nối Breadboard
5.Cảm biến ánh sáng photodiode:
4
Cảm biến ánh sáng Photodiod Light Sensor sử dụng Photodiode thay vì quang trở
để cảm biến ánh sáng nên cho độ chính xác và độ ổn định cao, cảm biến có
Opamp tích hợp cho cả hai ngõ ra tín hiệu là Digital và Analog rất dễ sử dụng,
thích hợp cho các ứng dụng nhận biết sáng tối, cảm biến cường độ sáng,...
Thông số kỹ thuật:
Nguồn: 3.3 5VDC
Sử dụng photodiode cho độ chính xác cao.
Xuất tín hiệu Digital tinh chình bằng biến trở trên mạch hoặc Analog rất dễ sử
dụng.
Kích thước: 30 x 16mm
A0 Ngõ ra tín hiệu Analog
DO Ngõ ra tín hiệu Digital
VCC Nguồn 3.3~5VDC
5
GND Mass
6
hoạt chức năng bật đèn tự động trong thiết bị STM32F4. Khi mức độ ánh sáng tăng
lên (ví dụ: trong điều kiện sáng), photodiode sẽ tạo ra một dòng điện cao hơn, và có
thể được sử dụng để kích hoạt chức năng tắt đèn tự động.
Bằng cách sử dụng các chân GPIO (General Purpose Input/Output) trên STM32F4,
có thể kết nối photodiode và lập trình vi điều khiển để theo dõi giá trị đo được từ
photodiode và thực hiện các hành động bật/tắt đèn dựa trên mức độ ánh sáng đo
được.
Qua đó, vi điều khiển STM32F4 có thể được sử dụng để tạo ra một hệ thống điều
khiển đèn tự động dựa trên mức độ ánh sáng được đo bằng photodiode.
Tóm lại khi ánh sáng chiếu vào photondiode lấp đầy vùng nghèo làm tăng tính dẫn
điện và ngược lại. Sự biến thiên đó được ghi nhận bởi chức năng ADC và khi ràng
buộc bởi điều kiện if ,chương trình điều khiển đèn led sáng hoặc tắt.
III. Sơ đồ Mạch:
Sơ đồ khối:
Khối nguồn
3,3v
7
Khối cảm
Khối vi xử lý
Sơ đồ chức năng:
Vcc -> 3.3v
3.3V GND
Do -> Gnd
Gnd
SDA->PB7
Ao->Pa0
Vcc -> 3.3v
RXD->PA9
SCL->PD6
TXD->PA10
8
Lưu đồ giải thuật:
9
IV. Thiết kế hệ thống
Để thiết kế một hệ thống sử dụng photodiode để bật/tắt đèn tự động trong
STM32F4,cần thực hiện các bước:
Bước 1: Chuẩn bị thiết bị và linh kiện
- STM32F4 Discovery Kit hoặc một bo mạch STM32F4 tương tự.
- Mạch nạp ST link V2:
- Mạch chuyển USB UART PL2303
- LCD xanh dương 1602 kết hợp module PCF 8574 giao tiếp I2C sang LCD:
- Cảm biến ánh sáng Photodiode
Bước 2: Kết nối phần cứng
- Kết nối chân dương của photodiode với chân ANALOG INPUT của STM32F4.
- Kết nối chân âm của photodiode với một nguồn điện âm nếu cần thiết.
- Kết nối đèn LED với một chân GPIO OUTPUT của STM32F4.
1
Bước 3: Cấu hình GPIO và ADC
- Cấu hình chân GPIO OUTPUT để điều khiển đèn LED.
- Cấu hình chân GPIO ANALOG INPUT và ADC để đọc giá trị ánh sáng từ
photodiode.
1
- Sử dụng hàm GPIO_WritePin để điều khiển chân GPIO OUTPUT để bật/tắt đèn
LED.
Phụ lục
1
Code
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
1
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;
I2C_HandleTypeDef hi2c1;
UART_HandleTypeDef huart1;
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
1
/* USER CODE END Init */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 20);
lightcount=HAL_ADC_GetValue(&hadc1);
sprintf(msg,"light: %u",lightcount);
HAL_UART_Transmit(&huart1, (uint8_t*)msg , sizeof(msg), 100);
///for a count of time uart transmit a pack of information. Adjust this mean
update period being slower or faster. In reality to avoid a conflic when sunset make
the led toggle set the number 100 to thousand or bilion of milisecond///
if (HAL_ADC_GetValue(&hadc1)>2000){HAL_GPIO_WritePin(GPIOE, 7, SET);}
//for (int i=0;i<15;i++){msg[i]=lightcount;}
lcd_put_cur(1,0);
lcd_send_string(msg);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
1
/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
1
/**
* @brief ADC1 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC1_Init(void)
{
/** Configure the global features of the ADC (Clock, Resolution, Data Alignment and
number of conversion)
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV8;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
/** Configure for the selected ADC regular channel its corresponding rank in the
sequencer and its sample time.
*/
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
1
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */
/**
* @brief I2C1 Initialization Function
* @param None
* @retval None
*/
static void MX_I2C1_Init(void)
{
/**
1
* @brief USART1 Initialization Function
* @param None
* @retval None
*/
static void MX_USART1_UART_Init(void)
{
/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */
1
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOE_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* 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
*/
2
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* 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) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
#include "i2c-lcd.h"
extern I2C_HandleTypeDef hi2c1; // change your handler here accordingly
2
void lcd_clear (void)
{
lcd_send_cmd (0x80);
for (int i=0; i<70; i++)
{
lcd_send_data (' ');
}
}
lcd_send_cmd (col);
}
// display initialization
lcd_send_cmd (0x28);
HAL_Delay(1);
lcd_send_cmd (0x08);
HAL_Delay(1);
lcd_send_cmd (0x01);
HAL_Delay(1);
HAL_Delay(1);
lcd_send_cmd (0x06);
2
HAL_Delay(1);
lcd_send_cmd (0x0C);
}
//void lcd_de_stack_variable ()
/*
* i2c_lcd.h
*
* Created on: Dec 22, 2023
* Author: Dell Vostro 3400
*/
#include "stm32f4xx_hal.h"
void lcd_put_cur(int row, int col); // put cursor at the entered position row (0 or
1), col (0-15);
Header file
V. Kết luận
Kết luận là trong vi điều khiển STM32F4, photodiode được sử dụng để
phát hiện mức ánh sáng và điều khiển việc bật tắt đèn tự động. Tín hiệu từ
photodiode được chuyển đổi thành tín hiệu điện và sau đó được xử lý bởi
2
vi điều khiển. Vi điều khiển sẽ đưa ra quyết định về việc bật hoặc tắt đèn
dựa trên giá trị ánh sáng được đo.
Link video:
https://www.youtube.com/shorts/UofZEEg2Ssw
Họ và tên Phân công công việc Đánh giá
Làm powerpoint thuyết
Lê Văn Hoàng Anh trình, báo cáo, tham gia Hoàn thành
làm sản phẩm
Thuyết trình ,tham gia
Trương Gia Bảo Hoàn thành
làm sản phẩm
Nguyễn Nhật Minh Tham gia làm sản phẩm Hoàn thành