Простая система распознавания голоса на C# и Arduino UNO
Компоненты и расходники
| Arduino UNO | × | 1 |
| Резисторы 220 Ом (любое подходящее значение, не слишком малые) | × | 3 |
| Светодиоды (синий, красный, зелёный) | × | 3 |
| Макетная плата | × | 1 |
| Перемычки | × | 1 |
| Наушники с микрофоном (или встроенный микрофон ПК) | × | 1 |
Приложения и сервисы
- Arduino IDE
- Microsoft Visual Studio 2015+ (любая версия с .NET Framework для Windows Forms)
О проекте
Примечание
Проект сделан 2 года назад, получил хорошие отзывы. Если вы новичок — рекомендую обновлённый туториал 2020 года: Medium статья.
Описание проекта
У нас есть сенсоры (уши, язык, нос…) для двустороннего обмена информацией. Тот же принцип применяем к машинам! Как новичок, я начинал с мигания светодиодов, но хотел управлять ими голосом. После поисков и обучения сделал этот проект — самый простой способ голосового управления Arduino для начинающих.
Никаких внешних модулей распознавания речи — используем встроенный микрофон ПК/наушников и библиотеку System.Speech в C#. Управляем 3 светодиодами голосом: вкл/выкл каждый, все сразу.
Почему это просто?
- Нет внешних модулей — только ПК + Arduino.
- Распознавание делает
System.Speech.Recognitionв Windows. - Arduino лишь принимает символы по Serial и переключает пины.
Вдохновлено статьёй: Turning LED Off and On Through Voice Recognition.
Как собрать
- Соберите схему на бредборде (см. ниже).
- Подключите Arduino USB к ПК.
- Откройте Arduino IDE, создайте новый скетч, вставьте код ниже, загрузите.
- Установите Visual Studio (ссылка на скачивание в оригинале). Создайте Windows Forms App (.NET Framework).
- Добавьте ссылку на System.Speech: Project → Add Reference → .NET → поиск
System.Speech→ OK. - Вставьте C# код ниже, проверьте COM-порт (должен совпадать с Arduino IDE).
- Запустите C# приложение (зелёная стрелка), нажмите «Start» — распознавание запущено.




Смотрите демо-видео на YouTube (ссылка в оригинале).
Что можно сделать на базе этого проекта?
Включайте фантазию: управление реле, сервоприводами, роботами, умным домом. Learn, Create, Share, Repeat!
Код
Arduino Sketch (C++)
/* Voice Recognition LED Control
* By Jalal Mansoori
* No external voice module needed — uses PC microphone + C# System.Speech
*/
const int blueLed = 10;
const int redLed = 9;
const int greenLed = 8;
char incomingData = '0';
void setup() {
Serial.begin(9600);
pinMode(blueLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
}
void loop() {
incomingData = Serial.read();
switch (incomingData) {
// ON
case 'B': digitalWrite(blueLed, HIGH); break;
case 'R': digitalWrite(redLed, HIGH); break;
case 'G': digitalWrite(greenLed, HIGH); break;
// OFF
case 'Z': digitalWrite(blueLed, LOW); break;
case 'X': digitalWrite(redLed, LOW); break;
case 'C': digitalWrite(greenLed, LOW); break;
// ALL ON
case 'V':
digitalWrite(blueLed, HIGH);
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, HIGH);
break;
// ALL OFF
case 'M':
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
break;
}
}
C# Code (Windows Forms)
/* C# Voice Recognition → Arduino Serial
* By Jalal Mansoori
* Требует: System.Speech (добавить через Add Reference)
*/
using System;
using System.Windows.Forms;
using System.IO.Ports;
using System.Speech;
using System.Speech.Recognition;
using System.Speech.Synthesis;
namespace CsharpCode {
public partial class Form1 : Form {
SerialPort myPort = new SerialPort();
SpeechRecognitionEngine re = new SpeechRecognitionEngine();
SpeechSynthesizer ss = new SpeechSynthesizer();
Choices commands = new Choices();
public Form1() {
InitializeComponent();
myPort.PortName = "COM5"; // проверьте в Arduino IDE!
myPort.BaudRate = 9600;
processing();
}
void processing() {
commands.Add(new string[] {
"Blue On", "Red On", "Green On",
"Blue Off", "Red Off", "Green Off",
"Exit", "All On", "All Off",
"Arduino Say Good Bye to makers"
});
Grammar gr = new Grammar(new GrammarBuilder(commands));
re.RequestRecognizerUpdate();
re.LoadGrammarAsync(gr);
re.SetInputToDefaultAudioDevice();
re.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(re_SpeechRecognized);
}
void re_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
switch (e.Result.Text) {
case "Blue On": sendDataToArduino('B'); break;
case "Red On": sendDataToArduino('R'); break;
case "Green On": sendDataToArduino('G'); break;
case "Blue Off": sendDataToArduino('Z'); break;
case "Red Off": sendDataToArduino('X'); break;
case "Green Off": sendDataToArduino('C'); break;
case "All On": sendDataToArduino('V'); break;
case "All Off": sendDataToArduino('M'); break;
case "Arduino Say Good Bye to makers":
ss.SpeakAsync("Good Bye Makers");
break;
case "Exit":
Application.Exit();
break;
}
txtCommands.Text += e.Result.Text + Environment.NewLine;
}
void sendDataToArduino(char character) {
myPort.Open();
myPort.Write(character.ToString());
myPort.Close();
}
private void btnStop_Click(object sender, EventArgs e) {
re.RecognizeAsyncStop();
btnStop.Enabled = false;
btnStart.Enabled = true;
}
private void btnStart_Click(object sender, EventArgs e) {
re.RecognizeAsync(RecognizeMode.Multiple);
btnStop.Enabled = true;
btnStart.Enabled = false;
MessageBox.Show("Voice Recognition Started!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
Схема
Подключение на бредборде:
- Светодиоды + резисторы 220 Ом по схеме.
- Аноды светодиодов к цифровым пинам Arduino: зелёный → D8, красный → D9, синий → D10.
- Катоды всех светодиодов к GND Arduino через перемычки.
Файл схемы Fritzing: schematic_ob2ZmiQwOV.fzz
Производственный процесс
- Установка Google Assistant на MATRIX Voice Raspberry Pi — пошаговое руководство
- Распознавание лиц в реальном времени на Raspberry Pi — полное руководство
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Smart Pen: Отслеживание почерка и движений в реальном времени с Raspberry Pi и IMU
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание рулетки на 37 светодиодов с Arduino Nano
- Создание ультразвукового левитатора на Arduino: пошаговое руководство
- Робот «Уходи!» — простой стартовый набор Arduino для детей
- Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами