dimanche 31 mai 2020

Commande vocal d'un robot contrôlé par une carte Arduino


Ce projet a pour but de réaliser une commande vocale à un ROVER, pour cela j'ai utilisé une carte Arduino, et le shield EasyVR 3.

EasyVR 3 est un module polyvalent de reconnaissance de la parole destiné à ajouter facilement des mots au dictionnaire, c'est le même principe que celui du script de reconnaissance vocal que j'ai réalisé sur Matlab. Il peut être utilisé avec n'importe quel hôte avec une UART Interface alimenté à 3.3V - 5V, tels que des PIC et des cartes Arduino. Les mots ou les commandes enregistrés sont de type mono-locuteurs. 

On peut ajouter des nouveaux mots à son dictionnaire en utilisant le programme EasyVR Commander (figure 1), cette procédure consiste à prononcer deux fois chaque mot pour que le module effectue l’analyse, et les mots sont enregistrés selon des groupes pour faciliter le travail, dans mon cas j'ai enregistré mes échantillons de référence dans le groupe 4 (figure 1). 

Figure 1 : EasyVR Commander
Figure 1 : EasyVR Commander

Après l’enregistrement des mots dans le dictionnaire, on passe au programme Arduino. En premier lieu on commence par écouter l'utilisateur et enregistrer sa commande, puis on active la reconnaissance pour le groupe quatre où j’ai enregistré les échantillons de référence, on attend que l’utilisateur arrête de parler et enfin on arrête l’enregistrement :


easyvr.setPinOutput(EasyVR::IO1, HIGH); //Ecouter l'utilisateur  
easyvr.recognizeCommand(4); // Activer le groupe 4

//on attend que l’utilisateur arrête de parler
do 
while (!easyvr.hasFinished()); 
//Arrêter l'enregistrement
easyvr.setPinOutput(EasyVR::IO1, LOW); 

Après la fin de l’enregistrement, si un mot est reconnu, le programme de l'Arduino envoie le numéro de l'index du mot dans le groupe, sinon l’Arduino envoie -1, donc on test la variable idx qui correspond à l’index et on exécute la commande qui correspond au mot prononcé : 

 idx=easyvr.getWord(); 

if (idx>= 0) 
switch (idx) 
case 0: //Avance                                       

Avance();
break; 

case 1: //Recule 

Recule();
break; 

case 2: //Arrête 

Stop();
break; 

case 3: //Droite 

Droite();
break; 

case 4: //Gauche 

Gauche();
break; 
}



Et voilà le programme est déjà terminé 👌