STM32智能睡眠检测系统

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

六、实验效果

七、包含内容

项目分享

一、前言

项目成品图片:

哔哩哔哩视频链接:

【STM32智能睡眠检测系统】 https://www.bilibili.com/video/BV12mE96yED6/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2f2

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32智能睡眠检测系统

功能如下:

  1. STM32F103C8T6单片机作为主控芯片
  2. 检测功能:检测环境温度、心率、血氧、翻身次数、震动监测
  3. 显示功能:OLED显示环境参数
  4. 手动控制:手动模式下可通过按键控制翻身次数清零、LED的开关
  5. 自动模式:自动模式下系统检测到心率/血氧/体温处于异常范围内或检测到震动时蜂鸣器报警
  6. 模式切换:通过按键可切换自动模式或手动模式
  7. 阈值调节:按键可调节心率上下限、血氧上下限、体温上下限的阈值
  8. 蓝牙APP:通过蓝牙连接手机APP,可查看环境信息数据与控制指令下发

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DS18B20温度
  • MAX30102心率血氧
  • ADXL345加速度
  • 震动传感器
  • BT04-A蓝牙模块
  • 有源蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

cpp 复制代码
#include "stm32f10x.h"
#include "led.h"
#include "beep.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "key.h"
#include "Modules.h"
#include "adcx.h"
#include "flash.h"
#include "TIM2.h" 
#include "timer.h"
#include "max30102_read.h"  
#include "ds18b20.h"		
#include "adxl345.h"		
#include "myiic.h"
#include "iic.h"
#include "usart2.h"

/****************异方辰电子工作室******************
					   STM32
											
 * 项目			:	    STM32睡眠监测系统(蓝牙版)                 
 * 版本			:       V2.0
 * 日期			:       2026.3.11
 * MCU			:	    STM32F103C8T6
 * 接口			:	    见代码		
 * IP账号		:	    异方辰电子/辰哥单片机设计(同BILIBILI|抖音|快手|小红书|CSDN|公众号|视频号等)
 * 作者			:	    辰哥 
 * 工作室		:       异方辰电子工作室
 * 授权IP	 	:	    辰哥单片机设计、异方辰电子、YFC电子、异方辰系列 
 * 官方网站	    :	    www.yfcdz.cn	

**********************BEGIN***********************/

#define KEY_Long1	11
#define KEY_1		1
#define KEY_2		2
#define KEY_3		3
#define KEY_4		4

#define AUTO_MODE     1   // 自动模式
#define MANUAL_MODE   2   // 手动模式
#define SETTINGS_MODE 3   // 设置模式


#define FLASH_START_ADDR	0x0801f000	// 起始地址

// 外部变量声明
  SensorModules sensorData;								
  SensorThresholdValue Sensorthreshold;		
  DriveModules driveData;									

// 全局变量定义
uint8_t mode = 1;	//系统模式  1自动  2手动  3设置
uint8_t step_num = 0;
extern unsigned char p[16];
// 系统静态变量
uint8_t count_m = 1;  // 手动模式按键计数
uint8_t count_s = 1;	 // 设置模式按键计数
uint8_t auto_page = 1;   


/**
  * @brief  主函数
  */
int main(void)
{ 
    // 系统初始化
    SystemInit();
    delay_init(72);  
    ADCx_Init();
    LED_Init();
    BEEP_Init();
    BEEP_Off();
    USART1_Config();
	  USART2_Init();
    Key_Init();
    OLED_Init(); 
    OLED_Clear();
    DS18B20_Init(); // DS18B20 温度传感器初始化
    IIC_init();		// IIC初始化
    adxl345_init(); // ADXL345模块初始化
    Init_MAX30102();// MAX30102模块初始化
    delay_ms(100); 
    TIM2_Init(72-1,1000-1);  
    delay_ms(200);
    flash_read();
    delay_ms(200);
    // 主循环
    while (1)
    {		

			USART2_ProcessCmd();
			
        SensorScan(); 	
        uint8_t current_key_num = KeyNum; 

            switch(mode)
            {
                case AUTO_MODE:
									OLED_autoPage1();		
									 SensorDataDisplay1();	

                AutoControl();
                Control_Manager();
                    if(current_key_num == KEY_1)
                    {
                        mode = MANUAL_MODE;
                        count_m = 1;
                        driveData.LED_Flag = 0;
                        driveData.BEEP_Flag = 0;
											OLED_Clear();
                        KeyNum = 0;
                    }
                    else if(current_key_num == KEY_Long1)
                    {
											OLED_Clear(); 
                        mode = SETTINGS_MODE;
                        count_s = 1;
                        KeyNum = 0; 
                    }
                    break;
                case MANUAL_MODE:
									
									  OLED_manualPage1();
										OLED_manualOption(SetManual());
								    ManualSettingsDisplay1();
								    ManualControl(count_m);
							     	Control_Manager();
                    if(current_key_num == KEY_1)
                    {
                         mode = AUTO_MODE;
                         OLED_Clear();
                         auto_page = 1; // 强制重置自动模式为第一页
                         KeyNum = 0; 

                    }
										
                    break;
										
               case SETTINGS_MODE:
             {
                    uint8_t sel = SetSelection();
                 
                    if(sel <= 4)
                    {
                        OLED_settingsPage1();
                        SettingsThresholdDisplay1();
                    }
                    else
                    {
                        OLED_settingsPage2();
                        SettingsThresholdDisplay2();
                    }
                 
                    OLED_settingsOption(sel);
                    ThresholdSettings(sel);
                 
                    OLED_Refresh();
                 
                    if(current_key_num == KEY_1)
                    {

                      FLASH_W(FLASH_START_ADDR,Sensorthreshold.tempminValue,
											                         Sensorthreshold.tempmaxValue,
										                         	 Sensorthreshold.hrMin,
										                         	 Sensorthreshold.hrMax,
										                         	 Sensorthreshold.spo2Min,
										                         	 Sensorthreshold.spo2Max,
											                         0x55AA);
                            mode = AUTO_MODE;
                            count_s = 1; 
                            OLED_Clear();
                            OLED_autoPage1();
                     
                        KeyNum = 0;
                    }
                    break;
            }
					}          
        
        }

      }

六、实验效果

七、包含内容

项目分享

相关推荐
wuyk5554 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
小僧景贤8 小时前
单片机全方位调试实战指南:串口/RTT/逻辑分析仪/示波器/内核排错分层避坑教程
单片机·嵌入式硬件·物联网
2401_8275012812 小时前
【无标题】
arm开发·嵌入式硬件
LeoZY_12 小时前
LinkScope 使用笔记:基于 OpenOCD 的通用硬件芯片调试助手
笔记·单片机·嵌入式硬件·开源软件
星空真迷人14 小时前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
iCxhust14 小时前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
hongmai66688814 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
m0_4666077015 小时前
只用三步使用MCSDK6生成电机控制工程
stm32·电机控制
2301_8014349816 小时前
STM32F407移植TinyUSB
stm32·单片机·嵌入式硬件
Dlrb121116 小时前
Linux驱动---Linux 中断系统及其上与下半部的介绍与阻塞IO实现按键检测
linux·嵌入式硬件·imx6ull·中断·阻塞io