0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用语音命令控制直流电机

454398 来源:工程师吴畏 2019-07-31 11:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

电路图

建立连接如下:

ENA L298N到Arduino 11的引脚

L298N的ENB到Arduino的10号引脚

L298N的IN1到Arduino的9号引脚

L298N的IN2到Arduino的第8针

L298N的IN3到Arduino的第7针

L298N的IN4到Arduino的第6针

将正在使用的电池电源正极连接到L298N的12V连接器,电池到L298N的GND,以及L298N的GND到GND of Arduino

最后,连接L298N两端的两个电机

怎样用语音命令控制直流电机

如何运行程序

首先,在Arduino IDE的帖子末尾复制并粘贴Arduino代码并上传代码。

然后从Wekinator的示例页面下载草图。

下载MFCC的可执行文件(mel-frequency cepstral coefficient)。我有一个64位操作系统,所以我下载了“win64”。

下载后,将其解压缩并运行“.exe”文件。它将如下所示。现在您需要一个麦克风来为Wekinator提供输入。如果已连接外接麦克风,请确保在声音设置中选择了该麦克风。

您需要另一个草图来获取Wekinator的输出。该草图在本文末尾给出。将其粘贴到新的处理窗口并运行草图。

打开Wekinator并进行如下图所示的设置。将输入设置为13,将输出设置为1.将类型设置为“所有动态时间扭曲”,使用5种手势类型,然后单击“下一步”。

现在按住output_1前面的“+”按钮并说“前进”。

然后按住output_2前面的“+”按钮并说出“向后”。

然后按住output_3前面的“+”按钮并说出“right”。

然后按住output_4前面的“+”按钮并说“左”。

然后按住“ outpu前面的+“按钮t_5并说“停止”。

然后,单击“Train”,然后单击“Run”。确保已上载Arduino代码并且处理草图正在后台运行。现在电机应根据您的声控命令移动。尝试用你的声音进行测试,并在需要时重复上述步骤进行重新训练。

它是如何工作的?

总之,这个项目有三个部分:Wekinator,Processing和Arduino。使用机器学习,Wekinator正在告诉处理它正在收听的语音是否是预先训练好的语音命令。然后处理读取该消息并将其传递给Arduino,然后Arduino决定是否顺时针/逆时针转动电机。 Wekinator和处理之间发生的所有通信都是通过OSC(开放式声音控制)协议。处理和Arduino之间的通信是通过串口完成的。

Arduino代码

#include //Including the library that will help us in receiving and sending the values from processing

ValueReceiver《1》 receiver; /*Creating the receiver that will receive only one value.

Put the number of values to synchronize in the brackets */

/* The below variable will be synchronized in the processing

and it should be same on both sides. */

int output;

//Motor Pins

int EN_A = 11;

int IN1 = 9;

int IN2 = 8;

int IN3 = 7;

int IN4 = 6;

int EN_B = 10;

void setup()

{

/* Starting the serial communication because we are communicating with the

Processing through serial. The baudrate should be same as on the processing side. */

Serial.begin(19200);

//Initializing the motor pins as output

pinMode(EN_A, OUTPUT);

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

pinMode(EN_B, OUTPUT);

digitalWrite(EN_A, HIGH);

digitalWrite(EN_B, HIGH);

// Synchronizing the variable with the processing. The variable must be int type.

receiver.observe(output);

}

void loop()

{

// Receiving the output from the processing.

receiver.sync();

// Matching the received output to light up led‘s

if (output == 1)

{

//Forward

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

}

else if (output == 2)

{

//Backward

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, HIGH);

}

else if (output == 3)

{

//Right

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

}

else if (output == 4)

{

//Left

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

}

else if (output == 5)

{

//Stop

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

}

}

处理代码

import vsync.*; // Importing the library that will help us in sending and receiving the values from the Arduino

import processing.serial.*; // Importing the serial library

// Below libraries will connect and send, receive the values from wekinator

import oscP5.*;

import netP5.*;

// Creating the instances

OscP5 oscP5;

NetAddress dest;

ValueSender sender;

// This variable will be syncronized with the Arduino and it should be same on the Arduino side.

public int output;

void setup()

{

// Starting the serial communication, the baudrate and the com port should be same as on the Arduino side.

Serial serial = new Serial(this, “COM10”, 19200);

sender = new ValueSender(this, serial);

// Synchronizing the variable as on the Arduino side.

sender.observe(“output”);

// Starting the communication with wekinator. listen on port 12000, return messages on port 6448

oscP5 = new OscP5(this, 12000);

dest = new NetAddress(“127.0.0.1”, 6448);

}

//This is called automatically when OSC message is received

void oscEvent(OscMessage theOscMessage) {

if (theOscMessage.checkAddrPattern(“/output_1”)==true)

{

output = 1;

}

else if (theOscMessage.checkAddrPattern(“/output_2”)==true)

{

output = 2;

}

else if (theOscMessage.checkAddrPattern(“/output_3”) == true)

{

output = 3;

}

else if (theOscMessage.checkAddrPattern(“/output_4”) == true)

{

output = 4;

}

else if (theOscMessage.checkAddrPattern(“/output_5”) == true)

{

output = 5;

}

else

{

}

}

void draw()

{

// Nothing to be drawn for this example

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 直流电机
    +关注

    关注

    36

    文章

    1772

    浏览量

    73478
  • 语音控制
    +关注

    关注

    5

    文章

    510

    浏览量

    29553
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32电机控制基础——无刷直流电机换相控制原理

    与有刷直流电机相比,无刷直流电机除使用电子换相器取代有刷直流电机电刷机械换向,使用永磁体产生转子磁场外,从结构和工作原理上都和有刷直流电机相类似,故其
    的头像 发表于 10-09 17:15 3495次阅读
    CW32<b class='flag-5'>电机</b><b class='flag-5'>控制</b>基础——无刷<b class='flag-5'>直流电机</b>换相<b class='flag-5'>控制</b>原理

    单片机直流电机调速原理

    在工业自动化、智能设备等领域,直流电机的调速控制至关重要,而单片机凭借其灵活的控制能力,成为实现直流电机精准调速的核心部件。单片机直流电机
    的头像 发表于 07-17 13:42 487次阅读

    浮思特 | 无刷电机与有刷直流电机的区别是什么,该如何选择?

    在精密运动控制领域,永磁直流电机因其优于交流电机的可控性,被广泛应用于需精准调节速度、扭矩或位置的场景。美蓓亚三美有刷直流电机当前主流直流电机
    的头像 发表于 07-16 10:15 3069次阅读
    浮思特 | 无刷<b class='flag-5'>电机</b>与有刷<b class='flag-5'>直流电机</b>的区别是什么,该如何选择?

    无刷直流电机双闭环控制的仿真研究

    摘 要:为了便于对无刷直流电机的运行特性和控制策略的研究,文章详细的介绍了无刷直流电机工作原理和数学模型,提出无刷直流电机控制策略,采用电
    发表于 07-08 18:33

    无刷直流电机模糊自适应PID控制的研究

    摘要:为了提高无刷直流电机控制系统的动、静态性能,将模糊控制结合PID控制算法应用到无刷直流电机速度控制
    发表于 07-07 18:29

    无刷直流电机控制研究

    摘一要:设计了一种采用 TMS320LF2407DSP作为主控制器,集成 IGBT 作为功率驱动元件的无刷直流电机控制器,对电机转速和电流的双闭环 PID 调节。通过在跑步机上的试验表
    发表于 06-26 13:39

    直流电机EMC整改:怎么选择?功率多少?

    南柯电子|直流电机EMC整改:怎么选择?功率多少?
    的头像 发表于 05-29 09:36 717次阅读
    <b class='flag-5'>直流电机</b>EMC整改:怎么选择?功率多少?

    电机:无刷直流电机的原理

    运动的原理都是依靠磁场,要么利用磁场的异性相吸,要么利用磁场的同性互斥。无刷直流电机和有刷直流电机的主要区别在于,无刷电机电流的大小和方向是通过控制器来改变的。通常,定
    的头像 发表于 05-23 21:00 6332次阅读
    <b class='flag-5'>电机</b>:无刷<b class='flag-5'>直流电机</b>的原理

    永磁直流电机实用设计及应用技术

    电气和自动化控制及仪器仪表中。在医用方面,永磁直流电机用处更不小,如医用的各种仪器、 手术工具,如开脑术中的电动锯骨刀,特别是野外手术中的各种仪器基本上都是用的永磁直流电机。在残疾人用品方面,如机械手
    发表于 03-31 15:42

    直流电机控制方法的Matlab仿真研究

    针对无刷直流电机控制方法进行了深入研究 。根据无刷直流电机实际物理模型建立相应的数学模型,电机使用双闭环进行控制 。根据
    发表于 03-27 12:15

    无刷直流电机运行原理与基本控制方法

    一、几个术语解释(极对数、相数、电角度、电角频率、相电压、线电压、反电动势)二、无刷直流电机的运行原理(运行原理、数学模型)三、无刷直流电机的基本控制方法(各参数相互关系、换流过程与换流模式)四、车用无刷
    发表于 03-14 14:18

    直流电机基本知识彩色PDF来啦

    1 直流电机的工作原理、主要结构、额定值 2直流电机的电枢绕组 3直流电机的电枢反应 4电枢绕组感应电动势和电磁转矩 5直流电机换向 一文带你了解
    发表于 02-28 01:28

    直流电机

    直流电机(direct current machine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋
    发表于 02-27 01:06

    直流电机的基本工作原理与结构

    本章主要讨论直流电机的基本结构和工作原理,讨论直流电机的磁场分布、感应电动势、电磁转矩、电枢反应及影响、换向及改善换向方法,从应用角度分析直流发电机的运行特性和直流电动机的工作特性。
    发表于 02-27 01:03

    使用单片机实现直流电机的PWM调速控制原理图

    使用单片机实现直流电机的PWM调速控制
    发表于 12-10 15:29 6次下载