Quantcast
Channel: Yassine – SURTR TECHNOLOGY
Viewing all articles
Browse latest Browse all 21

Interfacer un module de reconnaissance vocale Grove avec Arduino + exemples

$
0
0



Bonjour, et bienvenue dans ce tutoriel spécial où j’interface Grove Speech Recognizer qui m’a été envoyé par Seeed Studio, merci beaucoup.

Site web de Seeed Studio :
https://www.seeedstudio.com/

Page produit :
https://www.seeedstudio.com/Grove-Speech-Recognizer-p-2708.html

Wiki du produit Seeed Studio :
http://wiki.seeedstudio.com/Grove-Speech_Recognizer/

Ceci est un tutoriel rapide sur la façon d’interfacer le module Grove speech recognizer avec la carte Arduino, vous pouvez utiliser ce module pour contrôler vos appareils domestiques (Tv, lumières, température…) ou faire votre Robot contrôlé par la voix….

Et non ce n’est pas un assistant de type J.A.R.V.I.S, c’est un module qui a 22 commandes intégrées que vous pouvez facilement associer à votre projet, l’avantage est qu’il est complètement embarqué et que tout le processus de reconnaissance vocale est fait par le module et envoyé à l’Arduino via UART, pas besoin d’avoir constamment votre Arduino branché à l’ordinateur.

Dans ce projet, nous verrons l’interfaçage de base et quelques exemples qui incluent quelques LEDs et un petit robot classique à 2 roues motrices.

Vous pouvez ajouter un haut-parleur (0.5-1 W) et il répètera les commandes lorsqu’il sera détecté dans une voix de femme « The blewtewth device is ready to pair ».

Voici une liste de commandes que vous pouvez utiliser:

“Turn on the light”,
“Turn off the light”,
“Play music”,
“Pause”,
“Next”,
“Previous”,
“Up”,
“Down”,
“Turn on the TV”,
“Turn off the TV”,
“Increase temperature”,
“Decrease temperature”,
“What’s the time”,
“Open the door”,
“Close the door”,
“Left”,
“Right”,
“Stop”,
“Start”,
“Mode 1”,
“Mode 2”,
“Go”,



Composants

Les principaux sont la carte Arduino et le module de reconnaissance vocale Grove, le reste dépend de votre projet, ici j’ai inclus quelques composants nécessaires pour un robot classique à 2 roues motrices.

 

Si vous voulez savoir plus sur le pilote L298n qui contrôle les moteurs du robot, veuillez jeter un coup d’oeil sur ce tuto:

Utiliser un pont en H L298n avec Arduino pour contrôler une moteur

Schémas de câblage:

Schéma 1: Câblage simple pour test

L’haut-parleur est facultatif, mais il est préférable d’avoir un retour d’information lors de vos premiers essais.

W1
Câblage de base pour tester le module, le haut-parleur est optionnel

 

Schéma 2: Ajout des LEDs

Vous pouvez associer n’importe quelle commande vocale à ce que vous voulez.

W2
Avec les LED pour savoir comment associer vos commandes aux fonctions

 



Schéma 3: Ajout du double pont en H L298n

Ici on veut contrôler un robot à deux roues motrices.

W3
Robot à 2 roues motrices avec pilote l298n

Librairies

On aura pas besoin de librairies additionnelles ni pour le module ni pour les composants utilisés dans les autres exemples.

Codes

Vous pouvez copier les codes ci dessous, ou bien les télécharger directement ici.

Code 1: Test basique

On affiche le nom de la commande reconnue sur le moniteur série.

//Code from http://wiki.seeedstudio.com/Grove-Speech_Recognizer/

#include <SoftwareSerial.h>

#define SOFTSERIAL_RX_PIN 2
#define SOFTSERIAL_TX_PIN 3

SoftwareSerial softSerial(SOFTSERIAL_RX_PIN,SOFTSERIAL_TX_PIN);

const char *voiceBuffer[] =
{
"Turn on the light",
"Turn off the light",
"Play music",
"Pause",
"Next",
"Previous",
"Up",
"Down",
"Turn on the TV",
"Turn off the TV",
"Increase temperature",
"Decrease temperature",
"What's the time",
"Open the door",
"Close the door",
"Left",
"Right",
"Stop",
"Start",
"Mode 1",
"Mode 2",
"Go",
};

void setup()
{
Serial.begin(9600);
softSerial.begin(9600);
softSerial.listen();
}

void loop()
{
char cmd;

if(softSerial.available())
{
cmd = softSerial.read();
Serial.println(voiceBuffer[cmd - 1]);
}
}

 

Code 2: Contrôle de “lumières” et LEDs

Ce code peut vous aider à associer des commandes vocales à des actions spécifiques.

/* Ceci est un code à utiliser avec Grove Speech Recognizer
 * On allume/éteint les lumières (LEDs sur broche 7) et les Modes 1/2 contrôle les autres LEDs
 * Veuillez visiter https://SurtrTech.com pour plus d'infos
 */

#include <SoftwareSerial.h>           //Librairie

#define SOFTSERIAL_RX_PIN 2           //Broches Module
#define SOFTSERIAL_TX_PIN 3

#define RED 8             //Broches LEDs colorés et "lumière" (LED)
#define YEL 9
#define GRE 10
#define LIGHT 7

short m=0;

SoftwareSerial softSerial(SOFTSERIAL_RX_PIN,SOFTSERIAL_TX_PIN);

const char *voiceBuffer[] =       //Liste des commandes
{                                 
"Turn on the light",
"Turn off the light",
"Play music",
"Pause",
"Next",
"Previous",
"Up",
"Down",
"Turn on the TV",
"Turn off the TV",
"Increase temperature",
"Decrease temperature",
"What's the time",
"Open the door",
"Close the door",
"Left",
"Right",
"Stop",
"Start",
"Mode 1",
"Mode 2",
"Go",
};

void setup()
{
    Serial.begin(9600);       //Comm série avec PC et module
    softSerial.begin(9600);
    softSerial.listen();
    pinMode(RED,OUTPUT);      //Modes des broches
    pinMode(YEL,OUTPUT);
    pinMode(GRE,OUTPUT);
    pinMode(LIGHT,OUTPUT);
}

void loop()
{
    int cmd;                   //cmd est le numéro de la commande reçu par Arduino depuis le module
    if(softSerial.available()) //Si on reçoit quelque chose
    {
        cmd = softSerial.read();                    //On stock le numéro (valeur cmd)
        Serial.println(voiceBuffer[cmd - 1]);       //Montrer le nom de la commande
    }
    if(cmd==1)                                      //Allumer la lumière
       digitalWrite(LIGHT,HIGH);                    
    
    if(cmd==2)                                      //Eteindre
       digitalWrite(LIGHT,LOW);
    
    if(cmd==20)                                     //Lancer mode 1 une fois
        Mode1();
    
    if(cmd==18){                                    //Arrêt mode
         m=0;
        digitalWrite(RED,LOW);
        digitalWrite(YEL,LOW);
        digitalWrite(GRE,LOW);
    }
    if(cmd==21)
        m=1;
    
    if(m==1)                                      //Lancer mode 2 et le laisser activé
       Mode2();

}


void Mode1(){                               //Séquence LED
    digitalWrite(RED,HIGH);
    digitalWrite(YEL,HIGH);
    digitalWrite(GRE,HIGH);
    delay(1000);
    digitalWrite(RED,LOW);
    delay(1000);
    digitalWrite(YEL,LOW);
    delay(1000);
    digitalWrite(GRE,LOW);
    delay(1000);
    digitalWrite(RED,HIGH);
    delay(1000);
    digitalWrite(YEL,HIGH);
    delay(1000);
    digitalWrite(GRE,HIGH);
    delay(2000);
    digitalWrite(RED,LOW);
    digitalWrite(YEL,LOW);
    digitalWrite(GRE,LOW);
}

void Mode2(){
    digitalWrite(RED,HIGH);
    digitalWrite(YEL,HIGH);
    digitalWrite(GRE,HIGH);
    delay(1000);
    digitalWrite(RED,LOW);
    digitalWrite(YEL,LOW);
    digitalWrite(GRE,LOW);
    delay(700);
    digitalWrite(RED,HIGH);
    digitalWrite(YEL,LOW);
    digitalWrite(GRE,HIGH);
    delay(500);
    digitalWrite(RED,HIGH);
    digitalWrite(YEL,LOW);
    digitalWrite(GRE,LOW);
    delay(300);
}

 

Code 3: Robot contrôlé par commandes vocales

/* Ceci est un code à utiliser avec Grove Speech Recognizer et un pilote de moteurs DC L298n
 * On associe quelques commandes vocales avec quelques mouvement du robot
 * Veuillez visiter https://SurtrTech.com pour plus d'infos
 */


#include <SoftwareSerial.h>           //Librairie

#define SOFTSERIAL_RX_PIN 2           //Broches Module
#define SOFTSERIAL_TX_PIN 3

SoftwareSerial softSerial(SOFTSERIAL_RX_PIN,SOFTSERIAL_TX_PIN);

int in1 = 8;                          //Broches du L298n ici on ne contrôle pas la vitesse
int in2 = 9;
int in3 = 10;
int in4 = 11;

void setup() {

    pinMode(in1, OUTPUT);            //Modes des broches   
    pinMode(in2, OUTPUT);
    pinMode(in3, OUTPUT);
    pinMode(in4, OUTPUT);
    
    softSerial.begin(9600);
    softSerial.listen();
}

void loop() {

int cmd;                          //Variable "cmd" ou on enregistre le numéro de la commande reçu par Arduino
    
    if(softSerial.available())
    {
        cmd = softSerial.read();    //Si il y a une coomunication depuis le module on enregistre le numéro de la commande
    
    }
    
    if(cmd==19){                        //La commande 19=Start
        Forward();                      //Droite/Gauche/Stop commandes 17/16/18
        delay(2000);                    //Délai pour laisser le robot rouler un peu, modifier les délais comme vous voulez
        Stop();                         //Stop pour l'arrêter
    }
    
    if(cmd==17){                        //Même chose qu'on haut Droite/Gauche et Arrêt
        Right();
        delay(500);
        Stop();
    }
    
    if(cmd==16){
        Left();
        delay(500);
        Stop();
    }
    
    if(cmd==18)
        Stop();

}

//Fonctions classiques pour contrôler un L298n

void Forward(){
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
}


void Left(){
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}

void Right(){
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
}

void Stop(){
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
}

 



Résultats

Après avoir câblé le module, vous devez d’abord dire « Hicell » (en entier), puis la commande (en anglais).

Lorsque votre « Hicell » est détecté, une LED rouge clignote pendant 5 secondes et il attend votre commande pendant cette période, puis il dit votre commande, si elle est reconnue, une LED bleue clignote également, et si vous avez un haut-parleur relié au module, vous entendrez la commande répétée. N’hésitez pas à consulter le tutoriel vidéo pour plus d’informations.

Enjeu

Le seul problème que j’ai rencontré est que parfois le module ne peut pas détecter le « Hicell », et pour la première fois vous ne serez pas en mesure de dire si le module est cassé, ou si le câblage est incorrect… Vous pouvez le tester avec la voix « Google translate » : Il suffit d’écrire « Hicell » et d’appuyer sur pour le lire avec un haut-parleur proche du microphone du module.

Adapter à votre projet

int cmd;

if(softSerial.available())

{

cmd = softSerial.read();

}

Le module envoie le numéro de la commande (1-22) à l’Arduino et il est stocké dans « cmd » si il n’est pas utilisé « cmd » sera 0 à nouveau, donc vous associez chaque numéro avec une fonction que vous voulez exécuter… vous pouvez voir des exemples dans les codes.


Viewing all articles
Browse latest Browse all 21

Latest Images

Trending Articles



Latest Images