Easy VR 3

Salve a tutti,

ho acquistato arduino uno e easy vr3 con l’intento di realizzare un progetto di domotica molto semplice.
Dopo un po di studio, essendo appassionato alla materia, sono …quasi riuscito nell’intento!!!
Funziona alla perfezione, pronuncio un comando, mi risponde, da tensione al pin dichiarato, controllo con il tester prima di collegare al relè e mi dà 4,8 volt…collego il pin alla scheda relè e tutto d’un tratto la tensione, misurata sul pin collegato alla scheda relè mi scende a 1,8 volt e naturalmente il relè non da segno di vita!!!
Vi chiedo un’aiutino per tentare di risolvere il mio problema.
Premetto che la scheda relè con arduino funziona perfettamente!
Potrebbero essere le librerie caricate non correttamente?
Grazie sin da ora per i Vostri interventi
Arnaldo

Buongiorno, essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

Riesci a fare un piccolo schema di come effettui i collegamenti alla scheda relè (inclusa alimentazione e controllo) ?

Va bene anche un disegno fatto su un pezzo di carta, puché si capisca :D :D :D

Guglielmo

Carissimo Guglielmo ci riesco ......ma cortesemente mi dici come devo pubblicarlo p.s. scusa l'ignoranza ... :confused:

Dipende ... ... se il file/immagine è inferiore al 1.2MBytes, puoi usare il bottene "Attachments and other options" che si trova in basso a sinistra ed attaccre il tutto al tuo post, altrimenti, molto più comodo, puoi metterlo su un sito pubblico di immagini (... ma va bene anche Dropbox, Google Drive, ecc. purché in zona pubblica e non privata) e, con l'apposita icona (quella a destra della tavolozza dei colori) includerlo nel post.

Guglielmo

disegno collegamenti

Va bene l'allegato che hai messo ... ... hai letto bene il manuale della Easy VR3 ? Hai visto che il manuale, a pagina 14, specifica chiaramente:

The six I/O pins IO1–IO6 are connected directly to the embedded microcontroller on the EasyVR module, so they are referenced to the internal 3.0V regulated power supply VDD. If you need to interface to circuits using a different supply, there are a number of solutions you can adopt. Some of these are outlined below (here IOn indicates any one of the six I/O pins of the EasyVR).

ed anche:

All the I/O pins are inputs with weak internal pull-up after power on. You must explicitly configure a pin before you can use it as an output (see the example code Use general purpose I/O pins).

Il che significa che:

  1. Indipendentemente dall'alimentazione, comunque i GPIO lavorano a 3V

  2. Da softwate devi impostare il pin in questione esplicitamnete come output

Poi, leggendo, appare abbastanza chiaro che la corrente massima che quei pin riesocno ad erogare è sui 5 mA ... sicuro che il tuo modulo non assoba di più sul pin di controllo ?

Guglielmo

… dubbio … ma tu hai una “Easy VR3” o hai un “EasyVR V3 Arduino Shield” ? … perché sono due cose diverse:

<—>
Guglielmo

caro Guglielmo,
nel software ho specificato l’azione dei pin, come vedi

void action()
{
   switch (group)
   {
   case GROUP_1:
     switch (idx)
     {
     case G1_LUCE_SI:
     digitalWrite (2,HIGH);
     easyvr.playSound(1,EasyVR::VOL_FULL);
   // write your action code here
      
       break;
     case G1_LUCE_NO:
    
     digitalWrite (2,LOW );
     easyvr.playSound(2,EasyVR::VOL_FULL);
       // write your action code here

e, quando invio il comando vocale al pin 2 arrivano 4,8 V!
comunque anche i 3 v andrebbero bene per eccitare il relè ma ho provato ad alimentare un led rosso e neanche si accende pur erogando 4,8 v !

ho acquistato una easy VR 3 schield che si incastra su un arduino 1

#include <EasyVR.h>

#include "SoftwareSerial.h"
SoftwareSerial port(12, 13);
#include "EasyVR.h"
EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
  GROUP_1  = 1,
};

enum Group1 
{
  G1_CHI_SEI = 0,
  G1_TEMPO = 1,
  G1_COME_STAI = 2,
  G1_SEI_AMICA_DI_AMELIA = 3,
  G1_A_CHI_VUOI_BENE = 4,
  G1_LUCE_SI = 5,
  G1_LUCE_NO = 6,
  G1_LED_SI = 7,
  G1_LED_NO = 8,
  G1_LUME_SI = 9,
  G1_LUME_NO = 10,
  G1_LO_CONOSCI = 11,
  G1_PRESENTATI = 12,
};



int8_t group, idx;

void setup()
{

  // setup PC serial port
  Serial.begin(9600);
  port.begin(9600);
   


  while (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    delay(1000);
  }

  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(0);
  easyvr.setLanguage(1);

  group = 1; //<-- start group (customize)
}



void loop()
{

    easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

  Serial.print("Say a command in Group ");
  Serial.println(group);
  easyvr.recognizeCommand(group);

  do
  {
    // can do some processing while waiting for a spoken command
  }
  while (!easyvr.hasFinished());
  
  if (easyvr.getID() < EasyVR::EASYVR3)
    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();
	// beep
    easyvr.playSound(0, EasyVR::VOL_FULL);
    // perform some action
    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);
    }
  }
}

void action()
{
    switch (group)
    {
    case GROUP_1:
      switch (idx)
      {
      case G1_CHI_SEI:
      easyvr.playSound(13,EasyVR::VOL_FULL);
        // write your action code here         group = GROUP_1; <-- or jump to another group X for composite commands
        break;
      case G1_TEMPO:
       easyvr.playSound(10,EasyVR::VOL_FULL);
        // write your action code here
   
        break;
      case G1_COME_STAI:
       easyvr.playSound(8,EasyVR::VOL_FULL);
        // write your action code here
   
        break;
      case G1_SEI_AMICA_DI_AMELIA:
       easyvr.playSound(12,EasyVR::VOL_FULL);
        // write your action code here
       
        break;
      case G1_A_CHI_VUOI_BENE:
      easyvr.playSound(7,EasyVR::VOL_FULL);
        // write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
      case G1_LUCE_SI:
      digitalWrite (2,HIGH);
      easyvr.playSound(1,EasyVR::VOL_FULL);
    // write your action code here
       
        break;
      case G1_LUCE_NO:
     
      digitalWrite (2,LOW );
      easyvr.playSound(2,EasyVR::VOL_FULL);
        // write your action code here
       
        break;
      case G1_LED_SI:
      digitalWrite (3,HIGH);
      easyvr.playSound(3,EasyVR::VOL_FULL);
        // write your action code here       
        
        break;
      case G1_LED_NO:
      digitalWrite (3,LOW);
      easyvr.playSound(4,EasyVR::VOL_FULL);
       
        break;
      case G1_LUME_SI:
      digitalWrite (4,HIGH);
      easyvr.playSound(5,EasyVR::VOL_FULL);
       
        break;
      case G1_LUME_NO:
      digitalWrite (4,LOW);
      easyvr.playSound(6,EasyVR::VOL_FULL);
        // write your action code here        group = GROUP_1; <-- or jump to another group X for composite commands
        break;
      case G1_LO_CONOSCI:
       easyvr.playSound(9,EasyVR::VOL_FULL);
        // write your action code here        group = GROUP_1; <-- or jump to another group X for composite commands
        break;
      case G1_PRESENTATI:
        easyvr.playSound(11,EasyVR::VOL_FULL);
        // write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
      }
      break;
    }
}

Ma questo codice dove lo metti ? Dove gira ? Su Arduino o sulla EasyVR ? Perché NON mi sembra che abbia un linguaggio ‘C’ like … ::slight_smile:

Guglielmo

Edit: … guardando bene suppongo che sia un pezzo di codice scritto per Arduino che gira quindi sulla UNO … :smiley:

Ah, due cose …

  1. ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

  2. metti TUTTO il codice, NON solo un pezzetto, perché NON si capisce cosa fai e se dichiari correttamente i pin. (… mi raccomando, come su detto, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra)

Guglielmo

non so se ho fatto bene! Ho controllato tutte le saldature e sono ok; Sul monitor seriale è tutto ok, riconosce (easy VR detected !)

... NO, ma ok :D

  1. dovevi editare il post (lo faccio ora io) e chiudere il vecchio codice nei tag CODE
  2. dovevi creare un nuovo post con TUTTO il codice

... ma va bene ugualmente ;)

Guglielmo

Come immaginavo ... ... per usare un pin di I/O come output, come fai tu, NON basta usare il comando "digitalWrite (2,HIGH);" il quale dice solo al pin di andare HIGH, ma il pin DEVE essere stato in precedenza configurato come OUTPUT !

Quindi, se usi il pin 2, nel setup() dovrai avere "pinMode(2, OUTPUT);"

Ricorda che nel caso dovessi usarli invece come input, dovresti comunque dichiararli, sempre con la pinMode(), come tali.

Ti consiglio di andarti a studiare, sul reference di Ardunio, la funzione pinMode() ;)

Guglielmo

Grazie..... adesso provo e ti faccio sapere

Guglielmo,

Ho seguito il tuo consiglio e adesso funziona tutto alla perfezione!

devo dire che la materia è affascinante ma come tutte le cose c’è bisogno di studio ed impegno, da neofita della materia ,grazie anche al tuo aiuto, mi ritengo soddisfatto per il risultato ottenuto e sono pronto per nuovi progetti.
Grazie
Arnaldo

Bene e ... ... dedica un po' di tempo a guardarti tutte le varie funzioni nel "reference" di Arduino ;)

Guglielmo