『免费开源』基于STM32的智能垃圾桶之综合代码(HAL库)
我们用定时器TIM2来实现1ms整数倍时间的定时,是在“非阻塞模式下定时器的回调函数” HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)中,添加一些变量来实现:
接下来,我们可以设置4个舵机的初始状态,根据<基于STM32的智能垃圾桶之舵机控制(HAL库)>中介绍的有关舵机控制的知识,我们可以通过如下方式设置4个舵机的初始角度为0°,并将4个舵机的状态都设置为“空闲”状态:
因为我们有使用到USART1和USART3这两个串口的中断功能,所以,我们还需要使能他们的中断接收:
在使能中断接收后,当串口有接收到数据,便会自动进入到“串口接收完成回调函数” HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)里面来:
我们在使用定时器中断和串口中断时,还需要在“stm32f1xx_it.c”文件中,添加如下代码,否则,定时器中断和串口中断不起作用:
接下来,我们就要来实现语音识别部分的代码,如下图所示,让我们USART1接收到0xFE(即:254)时,语音模块口令模式唤醒成功,这个时候RGB红灯亮,同时语音播报模块会提示“主人请吩咐”。若10秒内没有说出具体的垃圾名,则RGB红灯灭,下一次操作时需要重新唤醒:
这个时候,便进入了具体的垃圾类别的处理程序,当我们语音播报模块播放“主人请吩咐”完成后,我们便可以说出具体的垃圾名,然后,系统会根据语音识别模块的返回值来执行对应的动作,这里是通过一个switch()语句来实现:
具体的垃圾分类识别成功后,RGB绿色指示灯会亮,且语音播报模块会播放对应的垃圾分类名,同时,对应的垃圾桶盖会慢慢打开,这个打开的速度,可以在一定范围内调节。垃圾桶盖打开完成后,延时5秒,便会自动关闭,这部分功能实现代码,是在Servo_OpenAndClose()这个函数中,以舵机1的代码为例,其余3个舵机代码类似:
接下来,我们只需要将代码下载到我们的开发板中,即可看到运行的效果:
由于我们的蜂鸣器正好跟舵机4共用了定时器TIM3的通道4引脚,所以,下载程序后蜂鸣器会一直在响,可能会对语音识别有一点小干扰,但是影响不会很大,如果有小伙伴在用我们的『OWL Micro F1开发板』做这个DIY项目,大家也可以把蜂鸣器拆除。
好了,到这里,我们的整个<智能垃圾桶>的DIY项目就全部介绍完成了,感兴趣的小伙伴们可以自己动手做起来,虽然这个代码是在我们的『OWL Micro F1开发板』上实现的,但是,如果大家没有我们的这款开发板,大家也可以将代码移植到别的STM32F1系列的板子上去运行。当然咯,大家也可以在我们的代码基础上继续做一些优化,做一个更好玩的DIY项目出来。
需要完整代码的小伙伴们可在我们『芯知识学堂』微信公众号后台回复“智能垃圾桶”后即可获得本项目所有资料的下载链接,您们的支持是我们坚持创作的动力,感谢大家的支持!
原创不易,转载请务必注明出处!
end
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
-
即日-2025.8.1立即下载>> 《2024智能制造产业高端化、智能化、绿色化发展蓝皮书》
-
精彩回顾立即查看>> 2024 智能家居出海论坛
-
精彩回顾立即查看>> 【在线会议】多物理场仿真助跑新能源汽车
推荐专题
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论