大家好啊,我是情谊,今天我们来介绍一下我最近设计的stm32产品,我们在今年七月份的时候参加了光电设计大赛,我们小队使用的就是stm32的智能送餐小车,虽然止步于省赛,但是还是一次成长的经验吧,那么我也来分享一下我们小队这次的产品设计,希望里面的一些模块可以给你们一点的参考建议。
我先说说我的博客文章的设计吧,我准备的是以模块的方式展示代码,但是文章的最后我会附带我们小队设计的stm32小车的完整代码
接下来我再说说我的小车实现的功能:
1二维码识别,使用openmv扫描对应颜色的二维码后,oled屏幕上显示对应的菜品名称,并且小车识别追踪该颜色物体
2压力传感器感知物体重量,当压力传感器的重量超过一定值后小车才会运动,注意!这个功能和上面的二维码识别并不冲突,上面扫码后openmv只能识别到该颜色,但是小车却不能动,只有压力传感器有示数才会运动
3APP点单,我们小组是使用ESP8266wifi模块制作了一个APP来模拟点单
4温度传感器时刻感知环境温度,这个模块的功能其实就是在送餐途中进行保温使用的
5蜂鸣器播报,客户下单后蜂鸣器会进行鸣叫
6红外光管避障,我们小组并未在避障方面进行过多的功能,所以只有简单的避障功能:小车识别到前方有物体,然后停下来,等到前方没有物体后继续运动
以上就是我的产品的全部功能了
注意注意!!!
我文章末尾上传的代码只有功能1和功能2和功能6的代码,功能3我只能负责给你们说说怎么做,如果实在需要代码,请联系我,这部分代码不是免费的,功能4和功能5的代码不在我的电脑上,所以我就不进行讲解了。
器件端
首先声明一下:
本次实验的芯片是基于stm32c8t6
本次实验使用的红外光管为下图
代码端
我们直接配置一个引脚,当红外光管被挡住时,我们只需要检测引脚的电平就可以判断前方是否有障碍。这里我使用了两个红外光管进行避障检测。
检测引脚电平代码:
//红外光管
void INFRARED_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
uint8_t INFRARED_Get(void)
{
return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3);
}
//红外光管
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "OLED.h"
#include "stdio.h"
int main(void)
{
INFRARED_Init();
delay_ms(1000);
while (1)
{
Led_Flash(50);
}
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET)
{
t=INFRARED_Get();
KeyNum = Key_GetNum();
Read_DMP();
if(KeyNum==1)
{
if(t==0)
{
Set_Pwm(0,0);
}
else
{
Set_Pwm(2000,2000);
}
}
if(KeyNum==2)
{
Set_Pwm(0,0);
}
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
因为我的颜色识别是使用的pid计算,所以避障我就重新写的一个代码,使用两个代码实现功能
好了,以上就是红外避障的全部代码了,如果有什么问题,欢迎各位在评论区留言,本人看到一定会回消息的,还有一个问题,代码本身是由程序中截取出来的所以可能会出现部分代码出现错误,所以还是建议根据下方提供的链接查源代码,明天我会更新stm32智能颜色送餐小车(ESP8266使用和APP软件设计)如果本文章对你有用的话,请给一个小小的赞呗,你的赞就是对我的最大的鼓励!谢谢大家!
代码链接处:链接:链接: https://pan.baidu.com/s/1buk_I9_bZ_rIou1iW9v1jA?pwd=2180 提取码: 2180
最后一个需要注意以下,本代码中的pid参数我全部都置零了,请根据自己的小车进行调节!
mmexport1723541008067