硬件准备
uno
接线方式①:用zener(齐纳稳压管), 使用2个1/2W以下3.6V的稳压管在D+ 和D-线上接线方式②:在5V BUS上串接2个二极管1N4148, 利用1N4148的压降,将电压从5V降到约3.6V
接线方式③:用LM1117将5V降到3.3V(不推荐)
四线USB
普通USB
红色为VCC正极接5V
黑线为负极接地DND
白线为Data- 负电压数据线 接上拉电阻1.5k ohm和68ohm
绿线为Data+ 正电压数据线接68ohm
arduino 接线电路图
| 语音模块 LD3320 |328P引脚 |Ardiuno 2560引脚 |leonardo | (AVR_ATmega32U4) |
MISO |···········D12 |···········D50 |···········D14 |
MOSI |···········D11 |···········D51 |···········D16 |
SCK |···········D13 |···········D52 |···········D15 |
NSS |···········D4 |···········D4 | ···········D4 |
RS |···········D9 |···········D9 | ···········D9 |
IRQ |···········D2 |···········D2 |···········D2 |
WR |···········GND |···········GND |···········GND |
注意: 如果使用mega2560板,须先将ld3320.h文件中SPI pins部分进行修改 , 把10,11,12,13(默认为uno的SPI引脚),改为53,51,50,52(mega2560中的SPI引脚): // define software SPI pins /** SPI chip select pin */ uint8_t const LD_CHIP_SELECT_PIN = 53;//uno 10 /** SPI Master Out Slave In pin */ uint8_t const SPI_MOSI_PIN = 51;//uno 11; /** SPI Master In Slave Out pin */ uint8_t const SPI_MISO_PIN = 50;//uno 12; /** SPI Clock pin */ uint8_t const SPI_SCK_PIN =52;//uno 13; #endif // SOFTWARE_SPI
软件准备
arduino ide 搭建(请自行百度)
先下载ld3320 库文件,并复制到arduino的libraries文件夹下
LD3320库文件点这里
keyboard.h这个库文件一般IDE默认下载的实例里面有
硬件准备
LD3320 语音识别模块 如图
arduino leonardo(或者其他32u4芯片系列的arduino)
LED灯
面包板
杜邦线
接线
这边没有找到合适的图片所以文字表达,大家应该也ok吧
连接 LD3320 语音模块到arduino leonardo
3.3V – VCC
GND – GND
MISO – D12
MOSI – D11
SCK – D13
NSS – D4
RST – D9
IRQ – D2
WR – GND
语音识别模块测试
代码如下,烧录arduino leonardo
#include <ld3320.h>
VoiceRecognition Voice; //声明一个语音识别对象
#define Led 8 //定义LED控制引脚
void setup()
{
pinMode(Led,OUTPUT); //初始化LED引脚为输出模式
digitalWrite(Led,LOW); //LED引脚低电平
Voice.init(); //初始化VoiceRecognition模块
Voice.addCommand("kai deng",0); //添加指令,参数(指令内容,指令标签(可重复))
Voice.addCommand("guan deng",1); //添加指令,参数(指令内容,指令标签(可重复))
Voice.start();//开始识别
}
void loop() {
switch(Voice.read()) //判断识别
{
case 0: //若是指令“kai deng”
digitalWrite(Led,HIGH); //点亮LED
break;
case 1: //若是指令“guan deng”
digitalWrite(Led,LOW);//熄灭LED
break;
default:
break;
}
}
以上代码测试
如果 开灯口令能点亮LED说明LD3320语音模块通了
keyboard.h模拟键盘
接下研究下KEYBORAD代码
arduino leonardo可以直接用arduino的keyboard实例
所谓keyboard库,功能就是将arduino 模拟成一个usb键盘。
Api如下
Keyboard.begin()
Keyboard.end()
Keyboard.press()
Keyboard.print()
Keyboard.println()
Keyboard.release()
Keyboard.releaseAll()
Keyboard.write()
Keyboard. press (键值); 输入:键值
Keyboard. press(‘A’);
Keyboard. press(KEY_LEFT_GUI);//左win
实际输出: 模拟usb键盘上键值所对应按键被按下
Keyboard.release(键值) 输入:键值
Keyboard.release(‘A’);
Keyboard.release(KEY_LEFT_GUI);//左win
实际输出: 模拟usb键盘上键值所对应按键被松开
输入键值与按键的对应关系见键值表
PS:Keyboard. press()和Keyboard.release()请成对使用,防止出现按键被按下没有松开的情况
Keyboard.print(character);//模拟键盘敲出一个字符
Keyboard.print(characters);//模拟键盘敲出一串字符的过程
输入:字符或字符串
Keyboard.print(“A”);
Keyboard.print(“ABCDE”);
实际输出 模拟在usb键盘上敲出单个字符或字符串的过程
Keyboard.println(character)// 模拟键盘敲出一个字符并添加换行的过程
Keyboard.println(characters)// 模拟键盘敲出一串字符并添加换行的过程
实际输出
| 模拟在usb键盘上敲出单个字符或字符串并添加换行的过程
Keyboard.releaseAll()
实际输出:释放所有按键;
语音模拟键盘
#include <Keyboard.h>
#include <ld3320.h>
#include <PinMap.h>
VoiceRecognition Voice; //声明一个语音识别对象
bool lastCapsLockState;
void setup() {
// initialize control over the keyboard:
Keyboard.begin();
TIMSK0 = 0;
Voice.init(); //初始化VoiceRecognition模块
//add fun
Voice.noiseTime(0x10);
Voice.voiceMaxLength(0x14);
Voice.micVol(0x55);
Voice.addCommand("zhuo mian", 0); //添加指令,参数(指令内容,指令标签(可重复))
Voice.addCommand("hong", 0);
Voice.addCommand("tui chu", 1);
Voice.addCommand("xia ye", 2);
Voice.addCommand("shang qu", 3);
Voice.addCommand("di bu", 4);
Voice.addCommand("zui shang", 5);
Voice.addCommand("liu lang qi", 6);
Voice.addCommand("guan bi", 7);
Voice.addCommand("xian shi", 8);
Voice.addCommand("qie huan", 9);
Voice.addCommand("shui jiao", 10);
Voice.addCommand("fang da", 11);
Voice.addCommand("bi ge", 11);
Voice.addCommand("suo xiao", 12);
Voice.addCommand("si mou", 12);
Voice.addCommand("mi ma", 13);
Voice.addCommand("en", 14);
Voice.addCommand("oh", 14);
Voice.addCommand("pi", 14);
Voice.addCommand("kiu", 14);
Voice.addCommand("wu", 14);
Voice.addCommand("a", 14);
Voice.addCommand("ei", 14);
Voice.addCommand("si", 14);
Voice.addCommand("jie suo", 15);
Voice.start();//开始识别
}
void loop() {
switch (Voice.read()) //判断识别
{
case 0: //若是指令“ei”
Keyboard.press(KEY_LEFT_GUI);//左win
Keyboard.press('d');
break;
case 1: //若是指令“B”
Keyboard.press(KEY_ESC);
//Keyboard.print("You pressed the button ");
// Keyboard.print(counter);
// Keyboard.println(" times.");
break;
case 2:
Keyboard.press(KEY_PAGE_DOWN);
break;
case 3:
Keyboard.press(KEY_PAGE_UP);
break;
case 4:
Keyboard.press(KEY_END);
break;
case 5:
Keyboard.press(KEY_HOME);
break;
case 6:
Keyboard.press(KEY_LEFT_GUI);//左alt
Keyboard.press('2');
break;
case 7:
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F4);
break;
case 8:
Keyboard.press('f');
break;
case 9:
Keyboard.press(KEY_LEFT_ALT);//左alt
Keyboard.press(KEY_TAB);
break;
case 10:
Keyboard.press(KEY_LEFT_GUI);//左win
delay(500);
Keyboard.press('l');
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release('l');
break;
case 11:
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.print('+');
break;
case 12:
Keyboard.press(KEY_RIGHT_CTRL);
Keyboard.print('-');
break;
case 13:
Keyboard.println("12312311");
break;
case 14:
;
break;
case 15:
Keyboard.press(KEY_RETURN);
break;
default:
break;
delayMicroseconds(20000);
}
Keyboard.releaseAll();
Keyboard.end();//结束键盘通讯
}
下图语音操作对照
以上实例说明键盘和语音指令都是可以自由修改的
所以大家可以发挥下脑洞,我个人还完成了一个语音识别控制智能家居
大家也可以到我的github上fork star
github主页
参考
联系方式
Any question connect me.
ccwanyuan2014@163.com
提issue
转载请注明
转载自chanjeff123.github.io
本站文章请勿直接转载,转载前请务必署名
最后编辑时间为:2019-06-30 19:59:30