• 语音控制-循迹跟随避障前进后退左转右转


    语音控制-循迹跟随避障前进后退左转右转

    小车超声波测距摇头的代码进行修改

    需要在厂家的配置平台上进行配置,根据不同的语音,将某些引脚输出不同的电平,给单片机检测,然后将生成的SDK包下载到本地,再烧录进SU-03T模块中,后续将模块搭配小车使用

    平台:http://www.smartpi.cn/#/

    程序

    程序文件

    1.main.c:调用控制舵机的定时器0初始化函数、控制超声波的定时器2初始化函数,循环内调用语音识别函数Voice()

    2.Motor.c:小车前进、后退、左转、右转和停止的函数

    3.Delay.c:延时函数

    4.Sg90.c:定时器0初始化函数,中断PWM,舵机摇头的角度(封装成函数)

    5.HC-SR04.c:定时器2初始化函数,不开启中断,超声波测距函数

    6.Avoid.c:避障模式

    7.Voice.c:语音识别模块,根据语音模块的三个输出引脚的电平状态不同,调用不同的功能模块

    8.Tracking.c:循迹模式,将之前的循迹代码封装整合而来

    9.Follow.c:跟随模式,将之前的跟随代码封装整合

    10.OLED.c:OLED相关函数,语音控制时该模块可用可不用

    11.IIC.c:IIC协议,OLED使用

    在这里插入图片描述

    1.SU-03T语音识别模块控制小车程序

    SU-03T提前烧录好SDK,将A25、A26、A27引脚接到单片机P1.5、P1.6、P1.7口,因为在官网平台上设置了A25、A26、A27默认上电为高电平,听到语音控制后,将引脚的输出电平改变,单片机检测到三个引脚的不同电平调用不同的模块,然后主函数main中while循环里直接调用Voice()即可

    Voice.c:

    sbit A25 = P1^5;
    sbit A26 = P1^6;
    sbit A27 = P1^7;
    
    /**
      * @brief 语音识别,根据A25,A26,A27端口状态启用不同模式
      * @param 无
      * @retval无
      */
    void Voice()
    {
    	//循迹模式
    	if(A25 == 0 && A26 == 1 && A27 == 1)
    	{
    		TrackIng();
    	}
    	//避障模式
    	if(A25 == 1 && A26 == 0 && A27 == 1)
    	{
    		Start_Avoid();
    	}
    	//跟随模式
    	if(A25 == 1 && A26 == 1 && A27 == 0)
    	{
    		Follow();
    	}
    	//停止
    	if(A25 == 1 && A26 == 1 && A27 == 1)
    	{
    		Stop();
    	}
    	//前进
    	if(A25 == 0 && A26 == 0 && A27 == 0)
    	{
    		GoForward();
    	}
    	//后退
    	if(A25 == 0 && A26 == 1 && A27 == 0)
    	{
    		GoBack();
    	}
    	//左转
    	if(A25 == 1 && A26 == 0 && A27 == 0)
    	{
    		GoLeft();
    	}
    	//右转
    	if(A25 == 0 && A26 == 0 && A27 == 1)
    	{
    		GoRight();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    OLED屏可根据需要接电路显示,不过在OLED显示时会去遍历点阵数据,有for循环, 清屏函数也有,如果for循环调用得多,对循迹和跟随模块的实时性会造成影响,因为切换模式时想在OLED屏上显示当前模式,就要在上面的 if 判断内调用OLED的显示函数, 有可能模块的输出脚发生了电平转换,但程序还在for循环里跑,就不能及时改变状态,造成小车实时性不好

    实验结果

    上电后,语音模块初始化,可用语音控制小车前进后退左转右转,或切换到具体的功能

    但有一点小瑕疵,小车启动的时候马达声音有点大,有噪声,有时候语音模块识别不到人说话,在配置平台上有降噪功能选择,选择后重新生成SDK烧录,识别效果会好一点,但偶尔也会被噪声干扰,得靠近点,说大声点才能识别得到

    至此,小车项目完结撒花。。。

    小车演示:【年轻人的第一辆三轮车,争取以后能载人】 https://www.bilibili.com/video/BV1K3411M7P9?share_source=copy_web&vd_source=d6b62ea36d09d5899101585761eec921

  • 相关阅读:
    【Vue】computed方法生成计算属性
    Dive into TensorFlow - 解析 TF 核心抽象 op 算子
    模板与泛型编程值typelist实现
    力扣(LeetCode)6. Z 字形变换(C++)
    Matlab直接求贝塞尔函数的导函数
    青云霍秉杰:一文读懂Prometheus长期存储主流方案
    《MySQL 数据库 (一)》
    C#实现基于广度优先BFS求解无权图最短路径----完整程序展示
    数字孪生软件架构选BS还是CS?不,我们选择CSaaS!
    修改docker默认存储位置【高版本的docker】
  • 原文地址:https://blog.csdn.net/weixin_46251230/article/details/126405385