산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

C#과 아두이노 우노로 만드는 간단 음성 인식 제어 시스템

프로젝트 개요

별도의 음성 인식 모듈 없이, PC의 내장 마이크 또는 이어폰 마이크와 C#(.NET Framework)의 System.Speech 라이브러리를 활용해 음성 명령으로 아두이노의 LED를 제어하는 입문자용 프로젝트입니다. 2020년 업데이트 튜토리얼은 Medium에서 확인 가능합니다.

동작 원리

  1. PC에서 C# 윈폼 앱 실행: System.Speech.Recognition으로 음성 인식 엔진 구동
  2. 사전 정의된 명령어("Blue On", "Red Off" 등) 인식 시 해당 문자('B', 'X' 등)를 시리얼 포트로 아두이노 전송
  3. 아두이노: 시리얼 수신 문자 파싱하여 해당 LED ON/OFF (디지털 핀 8, 9, 10)

하드웨어 구성

부품수량비고
아두이노 우노1
LED (파랑, 빨강, 초록)각 1
220Ω 저항 (임의 값 가능)3LED 전류 제한
브레드보드1
점퍼 와이어1세트
마이크 내장 이어폰 또는 PC 내장 마이크1음성 입력용

회로도

소프트웨어 준비

  1. 아두이노 IDE 설치 및 스케치 업로드
  2. 마이크로소프트 비주얼 스튜디오 (2010 이상, .NET Framework 포함) 설치
  3. C# 윈폼 프로젝트 생성 후 참조 추가 → .NET → System.Speech 체크
  4. 코드 내 COM 포트(myPort.PortName = "COM5")를 본인 환경에 맞게 수정 (아두이노 IDE와 동일해야 함)

아두이노 스케치 (C/C++)

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) {
    case 'B': digitalWrite(blueLed, HIGH); break;   // Blue On
    case 'R': digitalWrite(redLed, HIGH); break;    // Red On
    case 'G': digitalWrite(greenLed, HIGH); break;  // Green On
    case 'Z': digitalWrite(blueLed, LOW); break;    // Blue Off
    case 'X': digitalWrite(redLed, LOW); break;     // Red Off
    case 'C': digitalWrite(greenLed, LOW); break;   // Green Off
    case 'V':                                         // All On
      digitalWrite(blueLed, HIGH);
      digitalWrite(redLed, HIGH);
      digitalWrite(greenLed, HIGH);
      break;
    case 'M':                                         // All Off
      digitalWrite(blueLed, LOW);
      digitalWrite(redLed, LOW);
      digitalWrite(greenLed, LOW);
      break;
  }
}

C# 윈폼 코드 핵심 부분


// 음성 인식 엔진 설정
SpeechRecognitionEngine re = new SpeechRecognitionEngine();
SpeechSynthesizer ss = new SpeechSynthesizer(); // 음성 합성(피드백용)
Choices commands = new Choices();
commands.Add(new string[] {
  "Blue On", "Red On", "Green On",
  "Blue Off", "Red Off", "Green Off",
  "All On", "All Off",
  "Exit", "Arduino Say Good Bye to makers"
});
Grammar gr = new Grammar(new GrammarBuilder(commands));
re.LoadGrammarAsync(gr);
re.SetInputToDefaultAudioDevice();
re.SpeechRecognized += re_SpeechRecognized;
re.RecognizeAsync(RecognizeMode.Multiple);

// 인식 이벤트 핸들러
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 c) {
  myPort.Open();
  myPort.Write(c.ToString());
  myPort.Close();
}

실행 방법

  1. 아두이노 USB 연결 → 스케치 업로드 → 시리얼 모니터로 COM 포트 확인
  2. C# 프로젝트 COM 포트 설정 일치 확인
  3. C# 앱 실행 → "Start" 버튼 클릭 → "Voice Recognition Started!" 메시지 확인
  4. 마이크에 대고 명령어 말하기 (예: "Blue On", "All Off")

확장 아이디어

주의사항

제조공정

  1. MATRIX Voice 라즈베리 파이에 구글 어시스턴트 설치하기 – 단계별 가이드
  2. 라즈베리파이 실시간 얼굴 인식: 엔드투엔드 가이드
  3. 윈도우 IoT와 라즈베리파이로 안전한 얼굴 인식 도어락 만들기
  4. 스마트 펜: 라즈베리파이와 IMU로 실시간 필기·모션 추적
  5. 나만의 LUMAZOID 만들기: DIY 아두이노 음악 비주얼라이저
  6. 아두이노로 모니터 앰비라이트(Ambilight) 시스템 직접 만들기
  7. 아두이노 나노로 37개 LED 룰렛 게임 만들기
  8. 아두이노로 초음파 부양 장치 만들기: 단계별 가이드
  9. 'Go Away' 로봇 만들기 – 아이들을 위한 쉬운 아두이노 스타터 키트
  10. 아날로그 스타일 LED POV 시계 - 아두이노 나노 DIY 프로젝트