基于STM32的光照测量报警仿真设计
基于STM32的光照测量报警仿真设计
(Proteus仿真+程序设计+设计报告+讲解视频
)
仿真图Proteus 8.9
程序编译器:keil 5
编程语言:C语言
设计编号:C0111
1.主要功能
本次嵌入式课程设计综合实验的内容为基于STM32单片机的光照强度采集报警系统。完成LCD1602液晶显示、光敏电阻、蜂鸣器控制等多项任务。
1、以STM32为最小系统电路进行连接,用LCD1602液晶显示屏显示光照强度和光照阈值。
2、用光敏电阻进行光照强度测量。
3、可以通过按键可以设置光照阈值。设置按键进入设置模式/退出设置模式,按键加减调整阈值。
4、当光强超过设置的阈值时有声光报警,对应报警指示灯点亮,蜂鸣器报警。
5、默认光照强度100Lux。
STM32单片机 LCD1602 按键 光照传感器
资料下载链接:
通过网盘分享的文件:KEY_C0111
链接: https://pan.baidu.com/s/1AMzJsXzeY2ZGYnVBwPEJsQ?pwd=btwv
提取码: btwv
2.仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
开始仿真后LCD1602液晶第一行显示LIGHT光照强度=70Lux,第二行显示光照强度报警值,。
调整光照为90Lux,高于阈值,蜂鸣器报警。
3.程序设计
程序是用keil5 mdk版本打开的,如果打开有问题,核实下keil的版本。程序是HAL版本编写的,有stm32cubemx配置文件。有注释可以结合讲解视频理解。
int main(void)
{
/* USER CODE BEGIN 1 */
ADC_ChannelConfTypeDef sConfig = {0}; //建立sConfig结构体
char str[20]; //字符串的存放数组
uint32_t adcv; //存放ADC转换结果
set_flag = 0;
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; //采样周期为1.5个周期
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_USART1_UART_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
LCD_Init(); //初始化LCD1602
HAL_TIM_Base_Start_IT(&htim3);//开启定时器3
//打开串口1接收中断,接收数据存入dat数组,数组长度为1
HAL_UART_Receive_IT(&huart1, dat, 1);
// LCD_ShowString(0,0,dis_str);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
sConfig.Channel = ADC_CHANNEL_1; //选择通道1
HAL_ADC_ConfigChannel(&hadc1, &sConfig); //选择ADC1的通道道1
HAL_ADC_Start(&hadc1); //启动ADC1
HAL_ADC_PollForConversion(&hadc1, 10); //等待ADC1转换结束,超时设定为10ms
adcv = HAL_ADC_GetValue(&hadc1); //读取ADC1的转换结果
// temp=(float)adcv*(3.3/4095)*100;
light_temp=light_intensity(adcv);
sprintf(str,"LIGHT=%4.0fLux ",light_temp);
// LCD_ShowString(0,0,"MV:");
LCD_ShowString(0,0,str);
HAL_UART_Transmit(&huart1, (uint8_t *)str, 20, 10); //串口1发送字符串,数组长度为5,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10); //串口1发送字符串,数组长度为2,超时10ms
if(set_flag){//设置模式
sprintf(str,"%4.0fLux",warming_val);
LCD_ShowString(1,0,"SET:");
LCD_ShowString(1,4,str);
}else{
sprintf(str,"%4.0fLux",warming_val);
LCD_ShowString(1,0,"ALM:");
LCD_ShowString(1,4,str);
}
HAL_UART_Transmit(&huart1, (uint8_t *)&"ALM=", 3, 10); //串口1发送字符串,数组长度为12,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)str, 8, 10); //串口1发送字符串,数组长度为5,超时10ms
HAL_UART_Transmit(&huart1, (uint8_t *)&"\n\r", 2, 10); //串口1发送字符串,数组长度为2,超时10ms
if(light_temp>warming_val){//如果超过报警值
// HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_RESET);//BEEP引脚拉低
HAL_GPIO_WritePin(GPIOA,LED0_Pin, GPIO_PIN_SET);
}else{
// HAL_GPIO_WritePin(GPIOA,BEEP_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,LED0_Pin, GPIO_PIN_RESET);//BEEP引脚拉低
}
HAL_ADC_Stop(&hadc1); //停止ADC1
HAL_Delay(300);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
程序流程图
4.设计报告
9126字设计报告,内容包括设计目标、硬件设计、软件设计、结论等。
随着物联网技术的快速发展,嵌入式系统在环境监测领域的应用日益广泛。光照强度作为环境参数之一,在农业大棚、智能仓储、工业照明等场景中具有重要监测价值。传统光照监测设备功能单一、交互性差,难以满足实时显示与动态调控的需求。本设计以STM32单片机为核心,结合传感器技术与人机交互模块,构建一套具备阈值报警功能的光照采集系统,通过Proteus仿真验证实现低成本、高效率的开发流程,为嵌入式课程综合实验提供典型案例。
通过本次设计,我们希望能够提高对单片机的理解和应用能力。通过实践和探索,我们希望能够掌握相关的硬件和软件设计方法,为今后的学习和工作打下坚实的基础。同时,我们也希望能够通过这次设计,培养我们的团队协作能力和创新精神。
5.下载链接
0、常见使用问题及解决方法–必读!!!!
1、程序代码
2、Proteus仿真
3、功能要求
4、开题报告
5、设计报告
6、框图
7、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接:
通过网盘分享的文件:KEY_C0111
链接: https://pan.baidu.com/s/1AMzJsXzeY2ZGYnVBwPEJsQ?pwd=btwv
提取码: btwv