Comandi vocali EasyVR shield

Da appassionato Makers almeno una volta nella vita hai immaginato di poter impartire comandi vocali ad un progetto tecnologico realizzato da te: EasyVR è nata proprio per farti realizzare questo sogno.

comandi vocali

Più volte avrei voluto dare ai miei progetti la capacità di comprendere i miei comandi vocali.

Interagire con la voce è una caratteristica dell’essere umano, almeno per la maggior parte delle persone, comunichiamo ogni giorno con la voce e i film di fantascienza ci hanno prospettato un futuro in cui l’interazione uomo macchina avviene attraverso la voce.

Forse siamo ancora lontani da quel momento, a mio avviso non troppo, vedi Siri:

comandi vocali siri

che Apple ha introdotto con le ultime versioni di IOS e smartphone.

Ma come puoi dotare il tuo progetto di comandi vocali con Arduino e la EasyVR shield?

Due appassionati Matteo e Marco, a cui ho dedicato già un articolo qualche settimana fa, hanno realizzato un tutorial video:

Come hai visto hanno utilizzato la EasyVR per impartire comandi vocali ad un piccolo robot.

Potresti decidere di utilizzarla per controllare il tuo impianto domotico …

corro a comprarne una anch’io così potrò testare personalmente gli insegnamenti appresi dal video.

Comandi Vocali con arduino e easyVR

Sul sito ufficiale della shield easyVR ho trovato il manuale utente, sia per il collegamento della easyVR al pc sia per la sua configurazione ed anche il link alle librerie da usare con Arduino per realizzare velocemente il mio prossimo progetto.

Matteo e Marco mi hanno anche inviato la foto del loro progetto del robot con comandi vocali:

comando vocale easyVR

e lo sketch utilizzato per apprendere i comandi vocali dalla easyVR e trasformarli in movimento applicato al loro robot:

#include "EasyVR.h"
#include "SoftwareSerial.h"
SoftwareSerial port(12,13);
EasyVR easyvr(port);
//Groups and Commands
enum Groups
{
  GROUP_0  = 0,
  GROUP_1  = 1,
  GROUP_4  = 4,
};
enum Group0
{
  G0_GO = 0,
};
enum Group1
{
  G1_ANDARE = 0,
  G1_DESTRA = 1,
  G1_SINISTRA = 2,
  G1_STOP = 3,
  G1_INDIETRO = 4,
};
enum Group4
{
  G4_VAI = 0,
};
EasyVRBridge bridge;
int8_t group, idx;
char comando;

void setup(){
  // bridge mode?
  if (bridge.check())
  {
    cli();
    bridge.loop(0, 1, 12, 13);
  }
  // run normally
  Serial.begin(9600);
  port.begin(9600);
  if (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    for (;;);
  }
  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(5);
  easyvr.setLanguage(1);
  group = 1; //<-- start group (customize)

}
void action();
void loop(){
  easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)
  Serial.print("Say a command in Group ");
  Serial.println(group);
  easyvr.recognizeCommand(group);
  do
  {
    //cosa fare in attesa
  }
  while (!easyvr.hasFinished());

  easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off
  idx = easyvr.getWord();
  if (idx >= 0)
  {

    // built-in trigger (ROBOT)
    // group = GROUP_X; <-- jump to another group X
    return;
  }
  idx = easyvr.getCommand();
  if (idx >= 0)
  {
    // print debug message
    uint8_t train = 0;
    char name[32];
    Serial.print("Command: ");
    Serial.print(idx);
    if (easyvr.dumpCommand(group, idx, name, train))
    {
      Serial.print(" = ");
      Serial.println(name);
    }
    else
      Serial.println();
    easyvr.playSound(0, EasyVR::VOL_FULL);
    //azioni
    action();
  }
  else // errors or timeout
  {
    if (easyvr.isTimeout())
      Serial.println("Timed out, try again...");
    int16_t err = easyvr.getError();
    if (err >= 0)
    {
      Serial.print("Error ");
      Serial.println(err, HEX);
    }
  }

  if(Serial.available()>0){

    comando=Serial.read();
    Serial.println(comando);

}
void go(){
  //Motore sinistro
  digitalWrite(7,HIGH);
  analogWrite(6,255);
  //Motore destro
  digitalWrite(4,HIGH);
  analogWrite(5,255);
}
void stop(){
  //Motore sinistro
  digitalWrite(7,LOW);
  analogWrite(6,0);
  //Motore destro
  digitalWrite(4,LOW);
  analogWrite(5,0);
}
void back(){
  //Motore sinistro
  digitalWrite(7,LOW);
  analogWrite(6,255);
  //Motore destror

  digitalWrite(4,LOW);
  analogWrite(5,255);
}
void right(){
  //Motore sinistro
  digitalWrite(7,HIGH);
  analogWrite(6,255);
  delay(2000);
  analogWrite(6,0);
  //Motore destro
  digitalWrite(4,LOW);
  analogWrite(4,0);

 }

void left(){
  digitalWrite(7,LOW);
  analogWrite(6,0);
  //Motore destro
  digitalWrite(4,HIGH);
  analogWrite(5,255);

}
void action()
{
    switch (group)
    {
      case GROUP_1:
      switch (idx)
      {
      case G1_ANDARE:go();
        break;
      case G1_DESTRA:right();
        break;
      case G1_SINISTRA:left();
        break;
      case G1_STOP:stop();
        break;
      case G1_INDIETRO:back();
        break;
      }
   }
}

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/comandi-vocali-easyvr-shield.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.