STM32项目分享:基于STM32的酒店送餐小车的设计与搭建

“我们不做一锤子买卖,只做手艺成长的长期伙伴!”

目录

一、视频展示

二、项目简介

三、原理图设计

四、PCB硬件设计

五、程序设计

六、资料分享


一、视频展示

基于STM32的酒店送餐小车的设计与实现 -视频分享

二、项目简介

题目:基于STM32的酒店送餐小车的设计与搭建
主控: STM32f103c8t6
显现:OLED显示屏
三个循迹模块
避障检测:超声波
声光报警:LED+蜂鸣器
三按键
电池供电
功能:
1、OLED液晶显示屏选择餐桌,显示到达状态。
到达餐桌位置,可按键选择供餐点,到达后停留十秒,然后绕圈回到出发点。就是2、绕黑线转动一圈,有三个供餐点,小车左侧检测到黑色标贴时,即

三、原理图设计

四、PCB硬件设计

五、程序设计

#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "lcd.h"
#include "timer.h"
#include "IOput.h"
#include "HW_Track.h"
#include "wave.h"
#include "usart.h"
#include "MOTOR.h"
#include "sim900a.h"
extern u8 res,res1;
u8 mode,set,speed,cound,speed_flag;
u8 step,count,count1=0,fang_flag=1,sen_flag=1;
void Wave(void)
{
	length = Senor_Using(); //超声波程序
	if(length>20)
	{
		go(70,70);OLED_ShowCH(72,4,"前进");
	}
	else
	{
		time_count = 0;
		while(time_count <= 100)
		{
			back(70,70);OLED_ShowCH(72,4,"后退");
		}
		time_count = 0;
		while(time_count <= 60)
		{
			turn_left(98,98);OLED_ShowCH(72,4,"左转");
		}
	}
}
void TrackWave(void)
{
	if(length>20)
	{
		BEEP=1;
		HW_Track(); //循迹程序
		OLED_ShowCH(72,4,"    ");
	}
	else
	{
		BEEP=0;
		stop();
		OLED_ShowCH(72,4,"停止");
	}
	length = Senor_Using(); //超声波程序
}
int main (void)
{
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	char English_message[]={"The food trolley has arrived, please pick up your food in time"};                             //英文短信内容
	char phonenumber[]={"15980211168"};                             //接受短信的号码
	OLED_Init();
	delay_ms(1);
	OLED_Clear();
	input_init();
	output_init();
	TIM2_Int_Init(71,9999);
	Usart3_Init(38400);
	TIM_PWM_Init(100,8);
	CH_SR04_Init();
	motor_init();
	OLED_ShowCH(72,4,"停止");
	OLED_ShowCH(40,2,"停止模式");
	sim900a_send_English_message(English_message,phonenumber);
	while(1)
	{
		time_count++;
		if(time_count>=100)
		{
			time_count=0;
			count++;
		}
		key_scan(1,1,1);
		OLED_ShowCH(0,0,"   送 餐 小 车 ");
		OLED_ShowCH(0,2,"模式:");
		OLED_ShowCH(0,4,"运动状态:");
		OLED_ShowCH(0,6,"位置:");
//		OLED_ShowNum(96,6,count,2,16);
		if(add_flag==1)
		{
			add_flag=0;
			speed_flag++;
			if(speed_flag>=4)
				speed_flag=0;
		}
		if(speed_flag==0)
		{
			step=0;
			OLED_ShowCH(40,6,"停止");
		}
		else if(speed_flag==1)
		{
			step=1;
			OLED_ShowCH(40,6,"一号");
		}
		else if(speed_flag==2)
		{
			step=2;
			OLED_ShowCH(40,6,"二号");
		}
		else if(speed_flag==3)
		{
			step=3;
			OLED_ShowCH(40,6,"三号");
		}
		if(dec_flag==1)
		{
			dec_flag=0;
			set=2;
		}
		if(set_flag==1)
		{
			stop();
			set_flag=0;
			set++;
			if(set>=2){set=0;}
		}
		if(set==1)
		{
			mode = 1;
			OLED_ShowCH(40,2,"循迹模式");
		}
		 if(set==0)
		{
			fang_flag=1;
			count1=0;
			mode = 0;
			BEEP=1;
			count=0;
			OLED_ShowCH(40,2,"停止模式");
		}
		if(set==2)
		{
			mode = 2;
			OLED_ShowCH(40,2,"避障模式");
		}
		if(mode == 0)
		{
			stop();
			OLED_ShowCH(72,4,"停止");
		}
		else if(mode == 1)
		{
			if(fang==0)
			{
				if(fang_flag==1)
				{
					fang_flag=0;
					count1++;
				}
			}
			else
			{
				fang_flag=1;
			}
			if(count1==step+1)
			{
				if(count>=10)
				{
					sen_flag=1;
					TrackWave();
					OLED_ShowCH(96,6,"    ");
				}
				else
				{
					stop();
					if(sen_flag==1)
					{
						sen_flag=0;
						sim900a_send_English_message(English_message,phonenumber);
					}
					OLED_ShowCH(96,6,"送达");
				}
			}
			else
			{
				OLED_ShowCH(96,6,"    ");
				count=0;
				TrackWave();
			}
			if(count1==5)
			{
				count1=0;
				set=0;
				stop();
				OLED_ShowCH(96,6,"    ");
			}
		}
		else if(mode==2)
		{
			Wave();
			add_flag=0;
		}
	}
}

六、资料分享

点击即可查看当前资料分享。

posted @ 2025-11-21 15:29  yangykaifa  阅读(9)  评论(0)    收藏  举报