第13课 窗帘语音控制#

13.1 项目介绍#

通过语音指令来控制窗帘的开合、调节光线及隐私保护程度的一种智能学校技术。这种技术结合了语音识别、电机驱动和智能控制系统,使学生和教师无需手动操作,只需简单的语音命令即可实现窗帘的自动化控制。

语音识别技术能够准确识别用户的语音指令,如“拉开窗帘”或“关闭窗帘”等,并将这些指令转化为电信号发送给窗帘的驱动电机。电机则根据接收到的信号,精确控制窗帘的开与合,从而实现智能化控制。

13.2 流程图#

A_11

13.3 实验代码#

//导入相关库文件
#include <SoftwareSerial.h>
#include <Stepper.h>     // 提供了控制步进电机的基本功能

// 定义引脚常量
const int RX_PIN = 25;  // 引脚 GPIO25 为 RX
const int TX_PIN = 26;  // 引脚 GPIO26 为 TX

// 电机参数(28BYJ-48)
const int STEPS_PER_REV = 2038;  // 实际步数/圈(不同电机可能有差异)
const int MOTOR_PIN1 = 14;       // IN1
const int MOTOR_PIN2 = 27;       // IN2
const int MOTOR_PIN3 = 16;       // IN3
const int MOTOR_PIN4 = 17;       // IN4

// 用户可调参数
int motorSpeed = 10;      // 转速(RPM),建议5-12,超过15极易堵转
int rotationCount = 2;    // 转动圈数
bool reverseDirection = false; // 反转标志位

// 初始化步进电机(注意引脚顺序IN1-IN3-IN2-IN4)
Stepper myStepper(STEPS_PER_REV, MOTOR_PIN1, MOTOR_PIN3, MOTOR_PIN2, MOTOR_PIN4);

SoftwareSerial mySerial(RX_PIN, TX_PIN); // 定义软件串口引脚(RX, TX)

// 定义变量用于存储从语音模块接收到的控制码
volatile int Voice_Control = 0;  // 初始化为0,确保首次判断时不触发任何指令

void setup(){
  Serial.begin(9600); // 硬件串口(与电脑通信)
  mySerial.begin(9600); // 软件串口(与外设通信)
}

void loop(){
   if (mySerial.available() > 0) {  // 持续检查软串口是否有来自语音模块的数据
     Voice_Control = mySerial.read();  // 读取多个字节的数据
     Serial.println(Voice_Control);   // 将接收到的数据通过硬件串口输出,便于调试和监控
  }
  if (Voice_Control == 63) { // 判断接收到的指令数值63,并执行相应操作
    delay(2000);
    // 反转测试
    rotateMotor(rotationCount, false);
    delay(1000); 
  }
  else if (Voice_Control == 64) { // 判断接收到的指令数值64,并执行相应操作
    delay(2000);
    // 正转测试
    rotateMotor(rotationCount, true);
    delay(1000);  // 停顿1秒  
  }
  // 清除指令,避免重复执行
  Voice_Control = 0;
}

// 电机转动函数
void rotateMotor(int turns, bool reverse) {
  myStepper.setSpeed(motorSpeed);
  int steps = STEPS_PER_REV * turns * (reverse ? -1 : 1);
  myStepper.step(steps);
}

13.4 实验结果#

外接电源,选择好正确的开发板板型(ESP32 Dev Module)和 适当的串口端口(COMxx),然后单击cou0按钮上传代码。代码上传成功后,通过智能语音模块控制窗帘缓慢拉开与关闭。

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

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

对着麦克风说:“关闭窗帘” 或 “关窗帘” 等命令词时,喇叭播放对应的回复语 “已为您关闭窗帘”,同时窗帘缓慢关闭。