Système de reconnaissance vocale simple avec C# et Arduino UNO
Composants et fournitures
| Arduino UNO | × | 1 |
| Résistance 220 Ω (valeur flexible, éviter trop faible) | × | 3 |
| LEDs (bleue, rouge, verte) | × | 3 |
| Breadboard | × | 1 |
| Fils de connexion (jumpers) | × | 1 |
| Écouteurs avec microphone (type smartphone) ou microphone intégré PC | × | 1 |
Applications et services en ligne
- Arduino IDE
- Microsoft Visual Studio 2015 (ou version ultérieure avec .NET Framework pour application Windows Forms)
À propos du projet
Note : Mise à jour 2020
Ce projet date de 2 ans et a reçu des retours encourageants. Si vous êtes nouveau, je recommande le tutoriel mis à jour (2020) :
https://medium.com/illumination/how-to-make-your-first-voice-project-using-arduino-956bfd494947
Description du projet
Nous sommes tous dotés de capteurs naturels (oreilles, langue, nez...) utilisés au quotidien dans une communication bidirectionnelle (émission/réception). Nous appliquons le même concept aux machines !
Comme tout débutant, j'ai commencé par faire clignoter des LEDs, mais je voulais les contrôler par commande vocale. Après recherches et apprentissage, j'ai terminé ce projet pour le partager avec la communauté créative, surtout les débutants ! La méthode la plus simple pour la reconnaissance vocale avec Arduino.
Nous utilisons des LEDs pour simplifier. Dans ce projet, nous allumons/éteignons des LEDs non pas de façon standard, mais par commandes vocales. C'est très simple et facile, seule une base de programmation est nécessaire.
Pourquoi ce projet ?
Tout a commencé quand mon professeur a démontré un projet C# Windows Forms contrôlant une ampoule virtuelle par commande vocale (sans Arduino). C'était fascinant ! Pour un projet Arduino, j'ai pensé : pourquoi ne pas contrôler une vraie LED par la voix ? Contrôle matériel physique, pas virtuel.
Pourquoi c'est simple ?
Raison importante : aucun module externe de reconnaissance vocale n'est nécessaire ! J'étais sûr qu'il existait un moyen sans module dédié, et je l'ai trouvé grâce à : c-sharpcorner.com
Comment le réaliser
- Rassembler tous les composants.
- Monter le circuit sur breadboard selon le schéma.
- Brancher l'Arduino par USB à l'ordinateur.
- Télécharger le code Arduino, l'ouvrir dans l'IDE Arduino, créer un nouveau sketch, coller le code.

Il faut installer Visual Studio (j'utilise VS 2010, toute version permettant application Windows Forms C# convient). Lien de téléchargement : Dropbox

Note #0 : Le projet ne fonctionnera pas sans la bibliothèque System.Speech dans Visual Studio. Pour l'ajouter : Barre d'outils → Projet → Ajouter une référence → .NET → Rechercher "System.Speech" → OK.

Note #1 : Le port COM dans l'IDE Arduino doit correspondre à celui du code C#. Exemple : COM5 dans les deux.

Téléverser le sketch Arduino, puis lancer l'application C# (flèche verte "Start"). En cas de doute, regardez la vidéo de démonstration.
Que pouvez-vous faire avec ce projet ?
Utilisez votre créativité pour créer quelque chose de nouveau ! Apprenez, Créez, Partagez, Recommencez.
Codes sources
Code Arduino (C/C++)
/* Contrôle LEDs ON/OFF par reconnaissance vocale C# (System.Speech)
* Partie excitante : pas de module externe nécessaire, utilise microphone PC/écouteurs.
* Idée de base pour débutants, à vous de l'adapter utilement.
* Keep Learning, Share, Think and Repeat. Enjoy!
* By Jalal Mansoori
*/
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) {
// États ON
case 'B': digitalWrite(blueLed, HIGH); break;
case 'R': digitalWrite(redLed, HIGH); break;
case 'G': digitalWrite(greenLed, HIGH); break;
// États OFF (lettres arbitraires, à faire correspondre dans le code C#)
case 'Z': digitalWrite(blueLed, LOW); break;
case 'X': digitalWrite(redLed, LOW); break;
case 'C': digitalWrite(greenLed, LOW); break;
// Tout allumer
case 'V':
digitalWrite(blueLed, HIGH);
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, HIGH);
break;
// Tout éteindre
case 'M':
digitalWrite(blueLed, LOW);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
break;
}
}
Code C# (Visual Studio)
/* Programme de liaison C# - Arduino pour transmission données microphone → Arduino
* By Jalal Mansoori
*/
using System;
using System.Windows.Forms;
using System.IO.Ports; // Liaison série C# - Arduino
using System.Speech; // Reconnaissance vocale
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(); // Pour réponse vocale
Choices commands = new Choices(); // Stockage commandes
public Form1() {
InitializeComponent();
myPort.PortName = "COM5"; // À adapter selon votre port Arduino IDE
myPort.BaudRate = 9600; // Identique à Serial.begin(9600)
processing();
}
void processing() {
// Définition des commandes vocales
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(); // Micro intégré ou casque
re.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(re_SpeechRecognized);
}
void re_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
switch (e.Result.Text) {
// LED ON
case "Blue On": sendDataToArduino('B'); break;
case "Red On": sendDataToArduino('R'); break;
case "Green On": sendDataToArduino('G'); break;
// LED OFF
case "Blue Off": sendDataToArduino('Z'); break;
case "Red Off": sendDataToArduino('X'); break;
case "Green Off": sendDataToArduino('C'); break;
// Groupes
case "All On": sendDataToArduino('V'); break;
case "All Off": sendDataToArduino('M'); break;
// Réponse vocale
case "Arduino Say Good Bye to makers":
ss.SpeakAsync("Good Bye Makers");
break;
// Quitter
case "Exit":
Application.Exit();
break;
}
txtCommands.Text += e.Result.Text.ToString() + Environment.NewLine; // Affichage historique
}
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);
}
}
}
Schéma de câblage
Suivez simplement le schéma et connectez les composants sur votre breadboard :
- Connectez d'abord les LEDs et résistances comme indiqué.
- Ensuite, connectez l'anode (+) de chaque LED sur la même colonne que la résistance reliée au pin Arduino :
- LED Verte + → Pin numérique 8
- LED Rouge + → Pin numérique 9
- LED Bleue + → Pin numérique 10 - Enfin, reliez le GND de l'Arduino aux cathodes (-) des LEDs avec un fil de connexion.
schematic_ob2ZmiQwOV.fzz (fichier Fritzing)
Processus de fabrication
- Installer Google Assistant sur un MATRIX Voice Raspberry Pi – Guide étape par étape
- Reconnaissance faciale en temps réel sur Raspberry Pi – Guide complet
- Construire une porte à reconnaissance faciale sécurisée avec Windows IoT et Raspberry Pi
- Stylo intelligent : Suivi temps réel de l'écriture et du mouvement avec Raspberry Pi et IMU
- Construisez votre propre LUMAZOID : Visualiseur musical DIY Arduino
- Créer un système Ambilight spectaculaire pour moniteur avec Arduino
- Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
- Construire un dispositif de lévitation ultrasonique avec Arduino – Guide étape par étape
- Construire un Robot « Dégage » – Kit de Démarrage Arduino Facile pour Enfants