目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
六、实验效果
七、包含内容
项目分享
一、前言
项目成品图片:
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1odyABmEeT/?spm_id_from=333.1387.homepage.video_card.click&vd_source=199aed5297a00e80e1faf7e270afe8d7
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能婴儿床
功能如下:
- 环境采集:采集环境温湿度、声音、水滴、撞击震动情况
- 模式切换:可通过按键切换自动模式和手动模式
- 自动模式:自动模式下温度超过温度上限开启风扇降温,温度小于温度下限开启加热片加热,湿度超过湿度阈值时开启风扇除湿;如果声音传感器检测到婴儿啼哭则自动播放音乐并摇床;如果雨滴传感器检测到婴儿尿床,则通过蓝牙发送信息;如果检测到婴儿撞击到床上,则通过蓝牙发送信息并且开启蜂鸣器报警。
- 手动模式:手动模式下可通过按键控制加热片、风扇、摇床、音乐播放
- 阈值调节:可设置温度上限、温度下限、湿度阈值、声音阈值
- 蓝牙APP:通过蓝牙APP可以接收所有环境信息,可控制指令下发
2.主要器件
- STM32F103C8T6最小系统板
- OLED显示屏(4针IIC协议)
- 声音传感器
- DHT11温湿度传感器
- 震动传感器
- 雨滴传感器
- JR6001语音模块
- BT04A蓝牙模块
- 扬声器
- 大功率LED灯模块
- 有源蜂鸣器
- 步进电机
- PTC加热片
- 风扇模块
- 继电器
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
#include "stm32f10x.h" #include "led.h" #include "beep.h" #include "usart.h" #include "usart2.h" #include "delay.h" #include "jdq.h" #include "oled.h" #include "key.h" #include "Modules.h" #include "TIM2.h" #include "TIM3.h" #include "adcx.h" #include "flash.h" #include "fan.h" #include "bump.h" #include "stepmotor.h" /****************异方辰电子工作室******************* STM32 *项目 : STM32智能婴儿床 *版本 : V1.0 *MCU : TM32F103C8T6 *接口 : 见代码 *BILIBILI : 异方辰电子 *小红书 : 异方辰电子 *CSDN : 异方辰电子 *授权IP : 辰哥单片机设计、异方辰、YFC电子、北海单片机设计 **********************BEGIN***********************/ #define KEY_Long1 11 #define KEY_1 1 #define KEY_2 2 #define KEY_3 3 #define KEY_4 4 #define FLASH_START_ADDR 0x0801f000 //写入的起始地址 //传感器变量声明 uint16_t time_num = 0; //10ms计时 uint16_t count_voice=0,count_strike=0,count_music=0; SensorModules sensorData; //声明传感器数据结构体变量 SensorThresholdValue Sensorthreshold; //声明传感器阈值结构体变量 DriveModules driveData; //声明驱动器状态结构体变量 static uint8_t app_cmd = 0; // 0 无指令 3 开 4 关 uint8_t mode = 0; //系统模式 1自动 2手动 3设置 //系统静态变量 static uint8_t count_a = 1; //自动模式按键数 uint8_t count_m = 1; //手动模式按键数 static uint8_t count_s = 1; //设置模式按键数 extern uint8_t usart2_buf[256]; //串口2接收数组 char display_buf[16]; //显示数组 int main(void) { SystemInit();//配置系统时钟为72M delay_init(72); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断优先分组 //传感器初始化 SHAKE_Init(); MAC_Init(); DHT11_Init(); RAIN_Init(); //执行器初始化 FAN_Init();//风扇初始化 BEEP_Init();//蜂鸣器初始化 JDQ_Init();//加热片初始化 MOTOR_Init(); Key_Init();//按键初始化 OLED_Init();//OLED初始化 USART1_Config();//串口1初始化 USART2_Config();//串口2初始化 USART3_Config();//串口3初始化 TIM2_Init(72-1,1000-1); FLASH_ReadThreshold();//阈值读取函数 //// TIM3_Int_Init(1000-1,72-1); //定时1ms中断 OLED_Clear();//清屏 while (1) { SensorScan(); //获取传感器数据 time_num++; //计时变量+1 if(time_num >= 5000) { time_num = 0; } Bluetooth_Control();//蓝牙控制函数 switch(mode) { case AUTO_MODE://默认自动模式 OLED_autoPage1(); //显示主页面1固定信息 SensorDataDisplay1(); //显示传感器1数据 AutoControl();//自动模式控制函数 /*按键1按下时切换模式*/ if (KeyNum == KEY_1) //系统模式mode 1自动 2手动 3设置 { KeyNum = 0; mode = MANUAL_MODE;//进入手动模式 count_m = 1;//手动模式下按键2的次数置一 OLED_Clear(); } if (KeyNum == KEY_Long1) { KeyNum = 0; mode = SETTINGS_MODE;//进入阈值设置模式 count_s = 1;//阈值设置模式下按键2按下的次数置一 OLED_Clear(); } Control_Manager();//执行器执行函数 break; case MANUAL_MODE://手动模式下 OLED_manualOption(SetManual());//手动模式光标显示函数 ManualControl(SetManual());//手动模式控制函数 OLED_manualPage1();//手动模式界面1显示 ManualSettingsDisplay1();//手动模式界面1的开关显示 if (KeyNum == KEY_1) //系统模式mode 0手动 1自动(默认) { KeyNum = 0; mode = AUTO_MODE;//进入自动模式 count_a = 1;//自动模式下按键2按下的次数置一 OLED_Clear(); } Control_Manager();//执行器执行函数 break; case SETTINGS_MODE://阈值设置函数 OLED_settingsOption(SetSelection()); //实现阈值设置页面的选择功能 ThresholdSettings(SetSelection()); //实现阈值调节功能 OLED_settingsPage1(); //显示阈值设置界面1固定信息 SettingsThresholdDisplay1(); //显示传感器阈值1数据 //判断是否退出阈值设置界面 if (KeyNum == KEY_1) { KeyNum = 0; mode = AUTO_MODE; //进入自动模式 count_a = 1;//自动模式下按键2按下的次数置一 OLED_Clear(); //清屏 //存储修改的传感器阈值至flash内 FLASH_W(FLASH_START_ADDR, Sensorthreshold.tempValue_H,Sensorthreshold.tempValue_L, Sensorthreshold.humiValue); } break; default: break; } } }