订阅
纠错
加入自媒体

『免费开源』基于STM32的智能垃圾桶之综合代码(HAL库)

2020-07-31 10:39
SingleYork
关注

我们用定时器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

<上一页  1  2  3  4  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

    人工智能 猎头职位 更多
    扫码关注公众号
    OFweek人工智能网
    获取更多精彩内容
    文章纠错
    x
    *文字标题:
    *纠错内容:
    联系邮箱:
    *验 证 码:

    粤公网安备 44030502002758号