Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Простая система распознавания голоса на C# и Arduino UNO

Компоненты и расходники

Arduino UNO × 1
Резисторы 220 Ом (любое подходящее значение, не слишком малые) × 3
Светодиоды (синий, красный, зелёный) × 3
Макетная плата × 1
Перемычки × 1
Наушники с микрофоном (или встроенный микрофон ПК) × 1

Приложения и сервисы

О проекте

Примечание

Проект сделан 2 года назад, получил хорошие отзывы. Если вы новичок — рекомендую обновлённый туториал 2020 года: Medium статья.

Описание проекта

У нас есть сенсоры (уши, язык, нос…) для двустороннего обмена информацией. Тот же принцип применяем к машинам! Как новичок, я начинал с мигания светодиодов, но хотел управлять ими голосом. После поисков и обучения сделал этот проект — самый простой способ голосового управления Arduino для начинающих.

Никаких внешних модулей распознавания речи — используем встроенный микрофон ПК/наушников и библиотеку System.Speech в C#. Управляем 3 светодиодами голосом: вкл/выкл каждый, все сразу.

Почему это просто?

Вдохновлено статьёй: Turning LED Off and On Through Voice Recognition.

Как собрать

  1. Соберите схему на бредборде (см. ниже).
  2. Подключите Arduino USB к ПК.
  3. Откройте Arduino IDE, создайте новый скетч, вставьте код ниже, загрузите.
  4. Установите Visual Studio (ссылка на скачивание в оригинале). Создайте Windows Forms App (.NET Framework).
  5. Добавьте ссылку на System.Speech: Project → Add Reference → .NET → поиск System.Speech → OK.
  6. Вставьте C# код ниже, проверьте COM-порт (должен совпадать с Arduino IDE).
  7. Запустите C# приложение (зелёная стрелка), нажмите «Start» — распознавание запущено.
Простая система распознавания голоса на C# и Arduino UNO
Простая система распознавания голоса на C# и Arduino UNO
Простая система распознавания голоса на C# и Arduino UNO
Простая система распознавания голоса на C# и Arduino UNO

Смотрите демо-видео на YouTube (ссылка в оригинале).

Что можно сделать на базе этого проекта?

Включайте фантазию: управление реле, сервоприводами, роботами, умным домом. Learn, Create, Share, Repeat!

Простая система распознавания голоса на C# и Arduino UNO

Код

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);
    }
  }
}

Схема

Подключение на бредборде:

  1. Светодиоды + резисторы 220 Ом по схеме.
  2. Аноды светодиодов к цифровым пинам Arduino: зелёный → D8, красный → D9, синий → D10.
  3. Катоды всех светодиодов к GND Arduino через перемычки.

Файл схемы Fritzing: schematic_ob2ZmiQwOV.fzz

Производственный процесс

  1. Установка Google Assistant на MATRIX Voice Raspberry Pi — пошаговое руководство
  2. Распознавание лиц в реальном времени на Raspberry Pi — полное руководство
  3. Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
  4. Smart Pen: Отслеживание почерка и движений в реальном времени с Raspberry Pi и IMU
  5. Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
  6. Создание потрясающей системы Ambilight для монитора на Arduino
  7. Создание рулетки на 37 светодиодов с Arduino Nano
  8. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  9. Робот «Уходи!» — простой стартовый набор Arduino для детей
  10. Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами