第18课 语音控制风扇系统#

18.1 项目介绍#

夏天来了,风扇成了家里或商场里的“小救星”。但每次手动调节风速,是不是觉得有点麻烦?想象一下,只需动动嘴,风扇就乖乖听话,那该多方便!语音控制风扇,真的是懒人福音!无需动手,只需口头指令,就能轻松实现开关、调节风速等功能。

想象一下,回家一进门,喊一声类似于“打开风扇”等命令词,立刻就能感受到凉风拂面;感觉风速小,喊一声类似于“风大一点”等命令词,又能感受到凉风变大;感觉风速大了需要风速小点,喊一声类似于“风小一点”等命令词,立马能感受到凉风变小;需要外出出门时,喊一声类似于“关闭风扇”等命令词,风扇立刻就能停止。

这种便捷性,对于行动不便者或商场业主来说,更是大大提升了生活质量。

语音控制风扇系统是通过组合智能语音模块和电机模块,实现对家里的温度进行语音智能调节。

18.2 实验组件#

ESP32 Plus主板 *1

智能语音模块 *1

130电机模块 *1

风扇叶 *1

4P线 *2

USB线 *1

18.3 接线图#

智能语音模块和130电机模块的控制引脚:

130电机模块(IN+引脚)

io19

130电机模块(IN-引脚)

io18

智能语音模块(TXD引脚)

io16

智能语音模块(RXD引脚)

io27

⚠️ 特别注意:智能农场已经组装好了,这里不需要把电机模块和智能语音模块拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

18.4 代码流程图#

18.5 实验代码#

打开“Thonny”软件,点击“此电脑” → “D:” → “MicroPython资料” → “MicroPython_代码”。并鼠标左键双击“Project_18_voice_control_fan_system.py”。

# 作者 : www.keyes-robot.com

from machine import UART, Pin, PWM
import time

# 定义引脚常量
RX_PIN = 27      # 引脚 GPT027 为 RX
TX_PIN = 16      # 引脚 GPT016 为 TX

#电机的两个引脚
INA =PWM(Pin(19,Pin.OUT),10000,0) #INA对应于IN+
INB =PWM(Pin(18,Pin.OUT),10000,2) #INB对应于IN-

# 使用UART2作为替代(如果硬件连接允许)
uart = UART(2, baudrate=9600, rx=RX_PIN, tx=TX_PIN)

def setup():
    print("系统启动...")
    INA.duty(0) # 初始关闭风扇
    INB.duty(0) 
    
def loop():
    if uart.any():  # 检查是否有数据可读
        command = uart.read(1)  # 读取一个字节
        if command:
            command = command[0]  # 获取字节值
            
            if command == 5:
                INA.duty(700) #占空比范围为0-1023
                INB.duty(0)
                print("打开风扇")
            elif command == 7:
                INA.duty(1000) 
                INB.duty(0)
                print("转速加快")
            elif command == 8:
                INA.duty(700) 
                INB.duty(0)
                print("转速减慢")
            elif command == 6:
                INA.duty(0) 
                INB.duty(0)
                print("关闭风扇")
            else:
                print(f"未知命令: {command}")
                return
            
            # 回传接收到的命令(可选)
            uart.write(str(command).encode())
            print(f"执行命令: {command}")

# 主程序
if __name__ == "__main__":
    setup()
    while True:
        loop()
        time.sleep(0.1)  # 短暂延迟以减少CPU占用

18.6 实验结果#

按照接线图接好线,将 ESP32 主控板通过Micro USB数据线与计算机相连供电,外接电源供电,然后单击按钮,示例代码开始执行。

示例代码开始执行之后,语音控制风扇。

对着智能语音模块上的麦克风,使用唤醒词 “你好,小智” 或 “小智小智” 来唤醒智能语音模块,同时喇叭播放回复语 “有什么可以帮到您”;

智能语音模块唤醒后,对着麦克风说:“打开风扇” 或 “请开风扇” 或 “开风扇” 等命令词时,喇叭播放对应的回复语 “已为您打开风扇”,同时风扇转动;

对着麦克风说:“风大一点” 或 “大一点” 等命令词时,喇叭播放对应的回复语 “风速已增加”,同时风扇转速加快;

对着麦克风说 “风小一点” 或 “小一点” 等命令词时,喇叭播放对应的回复语 “风速已减弱”,同时风扇转速减慢;

对着麦克风说:“关闭风扇” 或 “请关风扇” 或 “关风扇” 或 “关上风扇” 等命令词时,喇叭播放对应的回复语 “已为您关闭风扇”,同时风扇不转。

Img

单击“停止/启动后端进程”退出程序。