STM32项目分享:智能语音分类垃圾桶
目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
六、实验效果
七、包含内容
项目分享
一、前言
项目成品图片:
哔哩哔哩视频链接:
STM32智能语音分类垃圾桶
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能语音分类垃圾桶
功能如下:
- STM32F103C8T6单片机系统板作为主控单元
- 舵机驱动垃圾桶盖打开与关闭
- 按键控制四个分类垃圾桶的开关
- 语音识别控制分类垃圾桶开关
- 光电红外传感器监测垃圾是否已满,并指示灯提示
- OLED显示屏显示分类垃圾桶开关状态
- 手机蓝牙APP接收分类垃圾桶已满消息
2.主要器件
- STM32F103C8T6最小系统板
- OLED 屏幕
- 光电红外传感器
- SNR8016语音识别模块
- BT04A蓝牙模块
- 舵机
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
uint8_t key_num = 0; //按键扫描标志位
uint32_t time_num = 0; //10ms计时
uint8_t flag_waste_1 = 0; //可回收垃圾桶标志位
uint8_t flag_waste_2 = 0; //厨余垃圾桶标志位
uint8_t flag_waste_3 = 0; //有害垃圾桶标志位
uint8_t flag_waste_4 = 0; //其他垃圾桶标志位
extern uint8_t usart2_buf[64]; //串口2接收数组
/**********************************
函数声明
**********************************/
void Key_function(void); //按键函数
void Monitor_function(void); //监测函数
void Manage_function(void); //处理函数
/****
******* 主函数
*****/
int main()
{
Delay_Init(); //延时初始化
Gpio_Init(); //IO初始化
Key_Init(); //按键初始化
Motor_Duoji_Init(); //舵机初始化
Motor_Duoji2_Init(); //舵机初始化
OLED_Init();
Usart1_Init(9600); //串口1初始化
Usart2_Init(9600); //串口2初始化
TIM_SetCompare1(TIM1,1830); //PWM输出
Delay_ms(100); //延时100ms
TIM_SetCompare4(TIM1,1830); //PWM输出
Delay_ms(100); //延时100ms
TIM_SetCompare1(TIM2,1830); //PWM输出
Delay_ms(100); //延时100ms
TIM_SetCompare2(TIM2,1830); //PWM输出
Delay_ms(100); //延时100ms
OLED_Clear();
OLED_ShowChinese(0,0,0,16,1);
OLED_ShowChinese(16,0,1,16,1);
OLED_ShowChinese(32,0,2,16,1);
OLED_ShowChinese(48,0,15,16,1);
OLED_ShowChinese(64,0,16,16,1);
OLED_ShowChar(80,0,':',16,1);
OLED_ShowChinese(96,0,11,16,1);
OLED_ShowChinese(112,0,12,16,1);
OLED_ShowChinese(0,16,3,16,1);
OLED_ShowChinese(16,16,4,16,1);
OLED_ShowChinese(32,16,15,16,1);
OLED_ShowChinese(48,16,16,16,1);
OLED_ShowChar(80,16,':',16,1);
OLED_ShowChinese(96,16,11,16,1);
OLED_ShowChinese(112,16,12,16,1);
OLED_ShowChinese(0,32,5,16,1);
OLED_ShowChinese(16,32,6,16,1);
OLED_ShowChinese(32,32,15,16,1);
OLED_ShowChinese(48,32,16,16,1);
OLED_ShowChar(80,32,':',16,1);
OLED_ShowChinese(96,32,11,16,1);
OLED_ShowChinese(112,32,12,16,1);
OLED_ShowChinese(0,48,7,16,1);
OLED_ShowChinese(16,48,8,16,1);
OLED_ShowChinese(32,48,15,16,1);
OLED_ShowChinese(48,48,16,16,1);
OLED_ShowChar(80,48,':',16,1);
OLED_ShowChinese(96,48,11,16,1);
OLED_ShowChinese(112,48,12,16,1);
while(1)
{
Key_function(); //按键函数
Monitor_function(); //监测函数
Manage_function(); //处理函数
}
}
/****
*******按键函数
*****/
void Key_function(void)
{
key_num = Chiclet_Keyboard_Scan(0); //按键扫描
if(key_num != 0) //有按键按下
{
switch(key_num)
{
case 1: //按键1:控制可回收垃圾桶打开
OLED_ShowChinese(96,0,9,16,1);
OLED_ShowChinese(112,0,10,16,1);
TIM_SetCompare1(TIM2,1920); //打开
Delay_ms(1000); //延时2s
Delay_ms(1000);
TIM_SetCompare1(TIM2,1830); //关闭
OLED_ShowChinese(96,0,11,16,1);
OLED_ShowChinese(112,0,12,16,1);
break;
case 2: //按键2:控制厨余垃圾桶打开
OLED_ShowChinese(96,16,9,16,1);
OLED_ShowChinese(112,16,10,16,1);
TIM_SetCompare2(TIM2,1920); //打开
Delay_ms(1000); //延时2s
Delay_ms(1000);
TIM_SetCompare2(TIM2,1830); //关闭
OLED_ShowChinese(96,16,11,16,1);
OLED_ShowChinese(112,16,12,16,1);
break;
case 3: //按键3:控制有害垃圾桶打开
OLED_ShowChinese(96,32,9,16,1);
OLED_ShowChinese(112,32,10,16,1);
TIM_SetCompare1(TIM1,1920); //打开
Delay_ms(1000); //延时2s
Delay_ms(1000);
TIM_SetCompare1(TIM1,1830); //关闭
OLED_ShowChinese(96,32,11,16,1);
OLED_ShowChinese(112,32,12,16,1);
break;
case 4: //按键4:控制其他垃圾桶打开
OLED_ShowChinese(96,48,9,16,1);
OLED_ShowChinese(112,48,10,16,1);
TIM_SetCompare4(TIM1,1920); //打开
Delay_ms(1000); //延时2s
Delay_ms(1000);
TIM_SetCompare4(TIM1,1830); //关闭
OLED_ShowChinese(96,48,11,16,1);
OLED_ShowChinese(112,48,12,16,1);
break;
default:
break;
}
}
}