基于STM32红外感应的自动迎客人语音控制系统设计


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

基于STM32红外感应的自动迎客人语音控制系统设计,旨在通过结合STM32单片机与红外传感器技术,实现智能化、自动化的迎客服务。以下是对该系统设计的详细介绍:

STM32单片机控制模块:
作为系统的核心控制单元,负责接收红外传感器信号、执行控制算法、驱动语音模块等功能。
STM32单片机以其高性能、低功耗和丰富的外设接口,能够满足系统对实时性和准确性的要求。

功能介绍

STM32单片机自动迎客门红外感应步进电机语音播报41
本系统由STM32F103C8T6单片机核心板、语音播报、ULN2003步进电机控制、红外避障传感器、按键及电源组成。
1、红外探头检测到有人时,自动门打开(步进电机向打开方向旋转一周),人员进入,语音播报欢迎。
2、在开门的状态下,检测不到人遮挡,自动门关闭。
3、在关门过程中,再次检测到人遮挡,会停止关门进行开门操作。防止夹到人。
4、另外按键操作相当于门里的开关,按下开关门打开,门里人出来,语音播报欢迎再次光临。

设计程序

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
#include <stdio.h>
#include "adc.h"

#define TIMELATERNUM 2000		//步进电机旋转时间

unsigned char i ;	
char dis0[16];	 //暂存

unsigned char zfFlag = 0 ;		 //正反转标志
unsigned int  timeLater = 0;		 //时间延时
char rekey =0;//防止重复按下
char keyFlag = 0;//按键操作开门标志
void yyReportReadAdd(unsigned char yyAdd) ;
int main(void)
 { 		
	delay_init();	    	 //延时函数初始化	  
	uart_init(9600);	 	//串口初始化
	uart2_init(9600)	;
	 
  TIM3_Int_Init(29,7199);//3ms  	 
	
	LED_Init();		  		//初始化与LED连接的硬件接口 	 
	KEY_Init();
	 
	zfFlag = 1 ;		 //正反转标志
	timeLater = TIMELATERNUM;		 //时间延时	
	
	delay_ms(100);
	yyReportReadAdd(86);//播报地址语音 “欢迎使用”
	 while(1)
	{	
		if(key==0) //检测到按键按下
		{
		 	if(rekey == 0)//防止重复按下
			{
				delay_ms(20); 
				if(key==0)//确认按键按下
				{
					rekey =1;
					if(zfFlag != 2)	//门没有打开或者没在打开过程
					{
						zfFlag=2;		//驱动电机启动 正传开门
						timeLater = TIMELATERNUM; 	//旋转//**All notes can be deleted and modified**//
						keyFlag = 1;//按键操作开门标志						
					}			
					yyReportReadAdd(85);//播报地址语音		//欢迎再次光临			
				}			
			}
		}
		else
		{rekey =0 ;}	//防止重复按下
		
		if(keyFlag == 1)//按键操作标志
		{
			if(timeLater == 0 ){keyFlag = 0;}//按键开门操作完成
		}
		else
		{
			if(manhot == 0)
			{
				if(zfFlag != 2)	//门没有打开或者没在打开过程
				{
					zfFlag=2;		//驱动电机启动 正传开门
					timeLater = TIMELATERNUM; 	//旋转//**All notes can be deleted and modified**//
					yyReportReadAdd(84);//播报地址语音  //欢迎光临
				}
			}
			else
			{
				if(zfFlag != 1)	//门没有打开或者没在打开过程
				{
					zfFlag=1;		//驱动电机启动 正传开门
					timeLater = TIMELATERNUM; 	//旋转//**All notes can be deleted and modified**//
				}
			}			
		}					
	}											    
}
 
void ctrlBuJinDj(void)
{
	static unsigned char MotorNum=0;

	if(timeLater>0)
	{
		timeLater-- ;
		if(zfFlag==2)			  //电机转动时间不为零 设置了时间		正转
		{
			MotorNum++;
			if(MotorNum==1)//接通d相 其他关闭
			{Coil_D1;}
			else if(MotorNum==2)//接通c相 其他关闭
			{Coil_C1;}
			else if(MotorNum==3)//接通b相 其他关闭
			{Coil_B1;}
			else if(MotorNum==4)//接通a相 其他关闭
			{Coil_A1;MotorNum=0;}
		}
		else if(zfFlag==1)			  //电机转动时间不为零 设置了时间 反转
		{
			MotorNum++;
			if(MotorNum==1)		//接通a相 其他关闭
			{Coil_A1;}
			else if(MotorNum==2)   //接通b相 其他关闭
			{Coil_B1;}
			else if(MotorNum==3)//接通c相 其他关闭
			{Coil_C1;}
			else if(MotorNum==4)//接通d相 其他关闭
			{Coil_D1;MotorNum=0;}
		}	
	}
	else
	{
		{Coil_OFF;}	
	}
}

void yyReportReadAdd(unsigned char yyAdd) //语音播报地址
{
	yy_rest=0; 			//yyxp(语音芯片的简写,下同)的复位脚为高电平//
	delay_us(300); 	//持续 200us//
	yy_rest=1; 			//然后复位脚置零//
	delay_us(300); 
	yy_rest=0; 			//yyxp(语音芯片的简写,下同)的复位脚为高电平//
	delay_us(300); //持续 200us//
	yy_rest=1; 			//然后复位脚置零//
	delay_us(300); 
	while(yyAdd>0)				 //若  等于 0 则不工作,若大于 0 则继续自减//
	{
		yy_data=0; 			//data 脚位为高电平//
		delay_us(300); 		//持续 100us//
		yy_data=1; 			//然后置零//                          
		delay_us(300); //持续 100us 这三句的意思就是发从一个 100us 的脉冲(高低各 100us)//
		yyAdd--; 				//z 自减完成后开始播放对应的语音(因为 z 是几就播放第几段)//
	}
	delay_ms(5);
}













具体实现截图

请添加图片描述

请添加图片描述
请添加图片描述

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值