C# + Arduino UNO 语音识别控制 LED:零模块、纯软件方案
硬件极简清单
| 元件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| LED (红/绿/蓝) + 220Ω 电阻 | 各 1 |
| 面包板 + 跳线 | 1套 |
| USB 数据线 | 1 |
| 电脑内置麦克风或带麦耳机 | 1 |
软件环境
- Arduino IDE
- Visual Studio 2015/2017/2019/2022 (Community 免费)
- .NET Framework 4.7+ (含
System.Speech程序集)
核心思路
利用 Windows 自带 System.Speech.Recognition 引擎离线识别中文/英文指令,C# 程序通过串口发送单字符指令给 Arduino,Arduino 解析字符控制 LED。无需任何语音识别模块,成本最低。
Arduino 端代码
const byte B_LED = 10, R_LED = 9, G_LED = 8;
char cmd = '0';
void setup() {
Serial.begin(9600);
pinMode(B_LED, OUTPUT);
pinMode(R_LED, OUTPUT);
pinMode(G_LED, OUTPUT);
}
void loop() {
if (Serial.available()) cmd = Serial.read();
switch (cmd) {
case 'B': digitalWrite(B_LED, HIGH); break; // 蓝灯亮
case 'R': digitalWrite(R_LED, HIGH); break; // 红灯亮
case 'G': digitalWrite(G_LED, HIGH); break; // 绿灯亮
case 'Z': digitalWrite(B_LED, LOW); break; // 蓝灯灭
case 'X': digitalWrite(R_LED, LOW); break; // 红灯灭
case 'C': digitalWrite(G_LED, LOW); break; // 绿灯灭
case 'V': digitalWrite(B_LED, HIGH); digitalWrite(R_LED, HIGH); digitalWrite(G_LED, HIGH); break; // 全亮
case 'M': digitalWrite(B_LED, LOW); digitalWrite(R_LED, LOW); digitalWrite(G_LED, LOW); break; // 全灭
}
}
C# 端核心逻辑 (WinForms)
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.IO.Ports;
SerialPort port = new SerialPort("COM5", 9600); // 修改为实际端口
SpeechRecognitionEngine rec = new SpeechRecognitionEngine();
SpeechSynthesizer tts = new SpeechSynthesizer();
void InitGrammar() {
var cmds = new Choices(new[] {
"Blue On", "Red On", "Green On",
"Blue Off", "Red Off", "Green Off",
"All On", "All Off",
"Exit", "Arduino Say Good Bye to makers"
});
var g = new Grammar(new GrammarBuilder(cmds));
rec.LoadGrammarAsync(g);
rec.SetInputToDefaultAudioDevice();
rec.SpeechRecognized += Rec_SpeechRecognized;
rec.RecognizeAsync(RecognizeMode.Multiple);
}
void Rec_SpeechRecognized(object s, SpeechRecognizedEventArgs e) {
string cmdChar = "";
switch (e.Result.Text) {
case "Blue On": cmdChar = "B"; break;
case "Red On": cmdChar = "R"; break;
case "Green On": cmdChar = "G"; break;
case "Blue Off": cmdChar = "Z"; break;
case "Red Off": cmdChar = "X"; break;
case "Green Off": cmdChar = "C"; break;
case "All On": cmdChar = "V"; break;
case "All Off": cmdChar = "M"; break;
case "Arduino Say Good Bye to makers":
tts.SpeakAsync("Good Bye Makers"); return;
case "Exit": Application.Exit(); return;
}
if (cmdChar != "") SendCmd(cmdChar);
}
void SendCmd(string c) {
port.Open(); port.Write(c); port.Close();
}
关键配置步骤
- VS 项目 → 引用 → 添加引用 → 程序集 → Framework → System.Speech 勾选
- Arduino IDE 记下端口号 (如 COM5),C# 代码中
port.PortName对应修改 - 上传 Arduino 代码 → 运行 C# 程序 → 点击“开始识别”按钮
- 对着麦克风说英文指令 (需在 Windows 语音识别设置中训练/选择英语引擎)
接线示意图

- LED 阳极经 220Ω 接 D8/D9/D10,阴极共地
扩展方向
- 把 LED 换成继电器模块 → 声控家电/灯光
- 加入中文语法文件 (
System.Speech支持中文识别,需安装中文语言包) - Arduino 端增加传感器读数,C# 端语音播报温湿度
- 迁移到
Windows 10 Speech SDK/Azure Cognitive Services获得更高准确率
🎤 一句话总结:电脑做耳朵,Arduino 做手脚,零额外硬件成本实现语音控制,极适合初学者理解“语音→串口→执行器”完整链路。
制造工艺
- 在 MATRIX Voice 树莓派上安装 Google Assistant:分步指南
- 树莓派实时人脸识别全流程指南:从硬件到模型训练
- Windows IoT + 树莓派打造人脸识别智能门锁
- 智能笔:基于树莓派与 IMU 的实时手写与运动追踪
- 自制LUMAZOID:基于Arduino的音乐可视化灯光控制器
- 用 Arduino 打造绚丽显示器 Ambilight 系统
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- 用 Arduino 制作超声波悬浮装置:分步指南
- “走开”机器人:Arduino 入门级超声波避障发声装置
- 模拟指针风格 POV 时钟:Arduino Nano + 17 LED + 霍尔传感器
- 单 LED 光绘:自制电动双轴系统绘制动态图像
- 可见光通信 (Li-Fi) 实验:Arduino 实现 LED 无线数据传输