当前位置: 首页 > article >正文

STM32项目分享:智能语音分类垃圾桶

目录

 一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 

 七、包含内容

  项目分享


 一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能语音分类垃圾桶

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的智能语音分类垃圾桶

功能如下:

  1. STM32F103C8T6单片机系统板作为主控单元
  2. 舵机驱动垃圾桶盖打开与关闭
  3. 按键控制四个分类垃圾桶的开关
  4. 语音识别控制分类垃圾桶开关
  5. 光电红外传感器监测垃圾是否已满,并指示灯提示
  6. OLED显示屏显示分类垃圾桶开关状态
  7. 手机蓝牙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;
		}
	}
}

六、实验效果 

 七、包含内容

  项目分享


http://www.kler.cn/a/518750.html

相关文章:

  • 使用python-docx包进行多文件word文字、字符批量替换
  • 基于迁移学习的ResNet50模型实现石榴病害数据集多分类图片预测
  • (2)STM32 USB设备开发-USB虚拟串口
  • Baklib如何推动企业知识管理的创新与转型探讨
  • 2024年AI多极竞争:技术创新与商业突破
  • 【游戏设计原理】82 - 巴斯特原则
  • 基于Flask的微博话题舆情分析可视化系统的设计与实现
  • Java Swing 基础组件详解 [论文投稿-第四届智能系统、通信与计算机网络]
  • 数据结构与算法之堆: LeetCode 208. 实现 Trie (前缀树) (Ts版)
  • Java面试题2025-Mysql
  • Pandas与Numpy的数据分析进阶题
  • 免费GPU算力,不花钱部署DeepSeek-R1
  • 【由浅入深认识Maven】第2部分 maven依赖管理与仓库机制
  • 基于大语言模型构建本地个人AI助理
  • WebRtc06: 音视频数据采集
  • ICSE‘25 LLM Assistance for Memory Safety
  • 【面试】【程序员基本知识】计算机网络,设计模式,正则,安全
  • 一文简单回顾复习Java基础概念
  • InfiniBand客户端注册机制详解:ib_register_client函数的作用与实现
  • DDD架构实战第六讲总结:领域驱动设计中的聚合
  • 近年流行的开发技术
  • 02-AD-绘制原理图(画示意图+添加已有P封装)
  • MySQL核心知识:春招面试数据库要点
  • PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)
  • 使用 Serilog 在 .NET Core 6.0 中日志记录
  • Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程