Go Down

Topic: Controlando motor de passo por voz (Read 80 times) previous topic - next topic

Aslam

Pessoal bom dia!

  Estou com um projeto que é fazer um motor de passo girar para os 2 dois lados usando a voz. Para isso comprei o voice recognition v3 e o driver ULN2003.
Fiz o teste separado do shield de voz usando 2 comandos para acender e apagar o led e funciono, fiz um programa para girar o motor para dois lados e funcionou tbm, porém quando eu "junto" os dois programa o comando de voz não funciona mais e o motor fica girando somente para um lado.
  O comando que faz  o motor girar para um lado eu coloquei junto da parte que faz o led acender e  para girar pro outro lado na parte que faz o led apagar.
 O programa está em anexo.
 Álguem pode me ajudar?
 Obrigado

bubulindo

Code: [Select]
#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include <Stepper.h> // Incluindo a biblioteca do Motor de Passo
const int stepsPerRevolution = 65; // Numero de passo por volta
 
Stepper myStepper(stepsPerRevolution, 8,9,10,11); // Faz a inicializa
/**       
  Connection
  Arduino    VoiceRecognitionModule
   2   ------->     TX
   3   ------->     RX
*/
VR myVR(2,3);    // 2:RX 3:TX, you can choose your favourite pins.

uint8_t records[7]; // save record
uint8_t buf[64];

int led = 13;

#define onRecord    (0)
#define offRecord   (1)

/**
  @brief   Print signature, if the character is invisible,
           print hexible value instead.
  @param   buf     --> command length
           len     --> number of parameters
*/
void printSignature(uint8_t *buf, int len)
{
  int i;
  for(i=0; i<len; i++){
    if(buf[i]>0x19 && buf[i]<0x7F){
      Serial.write(buf[i]);
    }
    else{
      Serial.print("[");
      Serial.print(buf[i], HEX);
      Serial.print("]");
    }
  }
}

/**
  @brief   Print signature, if the character is invisible,
           print hexible value instead.
  @param   buf  -->  VR module return value when voice is recognized.
             buf[0]  -->  Group mode(FF: None Group, 0x8n: User, 0x0n:System
             buf[1]  -->  number of record which is recognized.
             buf[2]  -->  Recognizer index(position) value of the recognized record.
             buf[3]  -->  Signature length
             buf[4]~buf[n] --> Signature
*/
void printVR(uint8_t *buf)
{
  Serial.println("VR Index\tGroup\tRecordNum\tSignature");

  Serial.print(buf[2], DEC);
  Serial.print("\t\t");

  if(buf[0] == 0xFF){
    Serial.print("NONE");
  }
  else if(buf[0]&0x80){
    Serial.print("UG ");
    Serial.print(buf[0]&(~0x80), DEC);
  }
  else{
    Serial.print("SG ");
    Serial.print(buf[0], DEC);
  }
  Serial.print("\t");

  Serial.print(buf[1], DEC);
  Serial.print("\t\t");
  if(buf[3]>0){
    printSignature(buf+4, buf[3]);
  }
  else{
    Serial.print("NONE");
  }
  Serial.println("\r\n");
}

void setup()
{
  /** initialize */
  myVR.begin(9600);
 
  Serial.begin(115200);
  Serial.println("Elechouse Voice Recognition V3 Module\r\nControl LED sample");
 
  pinMode(led, OUTPUT);
   
  if(myVR.clear() == 0){
    Serial.println("Recognizer cleared.");
  }else{
    Serial.println("Not find VoiceRecognitionModule.");
    Serial.println("Please check connection and restart Arduino.");
    while(1);
  }
 
  if(myVR.load((uint8_t)onRecord) >= 0){
    Serial.println("onRecord loaded");
  }
 
  if(myVR.load((uint8_t)offRecord) >= 0){
    Serial.println("offRecord loaded");
  }
}

void loop()
{
   myStepper.setSpeed(300);
  int ret;
  ret = myVR.recognize(buf, 50);
  if(ret>0){
    switch(buf[1]){
      case onRecord:
        /** turn on LED */
        for (int i = 0; i < 50; i++){
                 myStepper.step(stepsPerRevolution);
                 }
        digitalWrite(led, HIGH);
        break;
       
      case offRecord:
        /** turn off LED*/
        for (int i = 0; i < 50; i++){
                myStepper.step(-stepsPerRevolution); // sentido horario
                }
        digitalWrite(led, LOW);
        break;
       
       default:
        Serial.println("Record function undefined");
        break;
    }
    /** voice recognized */
    printVR(buf);
  }
}
This... is a hobby.

bubulindo

Assim de repente eu diria que muito possivelmente o teu problema tem a ver com a velocidade de comunicação com módulo de reconhecimento de voz e o facto da biblioteca de stepper bloquear enquanto está a dar os passos.

Sinceramente não vejo isso a ser resolvido de forma fácil principalmente por causa da UART em software.
This... is a hobby.

Go Up