Como utilizar o módulo de reconhecimento de voz SPCE061A com o Arduíno

Bruno Stabile

brn.stabile@gmail.com

Pontifícia Universidade Católica de São Paulo

Faculdade de Ciências Exatas e Tecnologia

Engenheria Elétrica

Capítulos

  1. Introdução

  2. Configuração do Sistema

  3. Comunicação Serial com o módulo

  4. Integração ao Arduíno

 

Introdução

Este documento propõe explicitar como programar o módulo de reconhecimento de voz produzido

pela ELECHOUSE que possui o microcontrolador SPCE061A produzido pela SUNPLUS.

O modulo é capacitado à realizar a gravação de 15 padrões diferentes, sendo estes

padrões de comandos de voz, frequências pré definidas ou também como variações de sinais

elétricos, entretanto aqui iremos apenas demonstrar como ativar e desativar um LED, sendo que isto retrata a base de conhecimento mínima necessária para realizar outras operações como ligar um motor.

Configuração do Sistema

O módulo foi utilizado em dois sistemas operacionais, Windows XP Professional e Windows 7 Professional, ambos não apresentaram problemas de compatibilidade.

O kit comercializado pela ELECHOUSE[1] , inclui o modulo de reconhecimento de voz, cabos para ligação no Arduíno e o microfone para realizar a gravação dos comandos. Porém, para gravar os comandos no microcontrolador do modulo, necessitamos de um conversor USB TTL que irá interpretar os comandos enviados para o microcontrolador. Este conversor TTL[2] poderá ser encontrado na mesma loja que o módulo de reconhecimento de voz. Outrora, podemos utilizar qualquer conversor TTL que possua interface de comunicação USB ou Serial.

Entretanto, caso utilizar o conversor comercializado pela ELECHOUSE, é necessário

instalar os drivers que irão reconhecer o dispositivo em nosso sistema, e disponível no link abaixo:

Drivers do ConversorUSB-TTL[3]

Após realizar o download, certifique-se que o conversor esteja desconectado do computador, assim

abra a pasta "PL2303_Prolificá_DriverInstaller_v1_7_0", caso o arquivo estiver compactado com extensões .zip ou .7z descompacte-o para que não ocorram erros na instalação, e execute o arquivo "PL2303_Prolific_DriverInstaller_v1.7.0.exe". Concluída a instalação introduza o conversor em uma das portas USB e espere o termino de configuração do dispositivo. Devemos também verificar em qual porta COM do sistema o conversor está instalado, sendo que esta verificação deverá ser feita pelo Gerenciador de Dispositivos do Windows, sendo que este pode ser acessado pelo comando devmgmt.msc introduzido no Executar que é localizado no Menu Iniciar. Com o gerenciador aberto, expandir a opção COM/LPT e verificar o dispositivo assim como na figura 1.

Figura 1: Gerenciador de Dispositivos – Portas COM

Para verificar se a instalação foi concluída, utilize o arquivo "PL2303CheckChipVersion.exe" localizado na mesma pasta de instalação, sendo que este deverá exibir a versão instalada assim como na figura 2.

Figura 2: Verificação da instalação do Conversor TTL

Com o conversor já configurado com o sistema operacional, conecte o módulo de voz ao conversor TTL seguindo o esquema de ligação da figura 3.

                                                                                    

figura 3 : Esquema de ligação do módulo com o conversor

Comunicação Serial com o módulo

Aqui podemos utilizar qualquer software que envie comandos pela porta Serial de comunicação do computador, assim como o HyperTerminal.

Os comandos de configuração do módulo serão enviados a partir do software AccessPort[4] neste tutorial, sendo que estes comandos são pré definidos pelo fabricante do microcontrolador. Os comandos poderão ser encontrados no manual elaborado pela ELECHOUSE[5].

Após realizar o download do AccessPort execute-o pelo arquivo “AccessPort.exe”, e lembre-se que este provavelmente também estará compactado, assim devemos configurar a comunicação com o módulo em “tools>configuration”, ou então pressionando a tecla “F2”, abaixo estão as configurações necessárias:

  • COM”x”*

  • Baud rate: 9600

  • Parity bit: None

  • Data bit: 8

  • Stop bit: 1

  • Send format: Hex

  • Receive format: Char

* O “x” representa a porta conectada ao conversor verificada no gerenciador de dispositivos

Com as corretas configurações pressione “CTRL+P” e certifique-se o envio de comandos Hexadecimais pressionando “Hex” na parte de envio de comandos “Send->”.

Inicialmente enviaremos o comando “AA 11” que representa ao microcontrolador a ação de gravar o primeiro grupo de comandos, sendo que é possível gravar até 3 grupos de comandos com 5 tipos diferentes em cada.

Alguns feedbacks serão enviados para o AccessPort para o orientar o programador qual a instrução interpretada, veja na figura 4.

                                                                                        

Figura 4: Comunicando com o módulo de voz

A completa gravação de um comando é representada como “Finish one”, sendo que ao finalizar a gravação dos 5 comandos do grupo a mensagem “Group1 finished” é exibida .

Após finalizada a gravação do primeiro grupo de instruções devemos enviar o comando “AA 21” que representa ao microcontrolador a ação de importar os comandos gravados no grupo 1 e iniciar o reconhecimento destes comandos.

Integração ao Arduíno

Com a programação do módulo concluída podemos iniciar a montagem do circuito junto ao Arduíno conforme a figura 6.

Figura 6 : Esquema de ligação do módulo de voz com o Arduíno

Abaixo o código para programação do Arduíno com alguns comentários.

int led = 13; //ligar led no pino 13

byte com = 0; //comandos recebidos pelo modulo de voz

void setup()

{

Serial.begin(9600);

//definicao do led 13 como saída

pinMode(led, OUTPUT);

delay(2000);

//Comandos de configuracao do modulo de voz

Serial.write(0xAA);

Serial.write(0x37);

delay(1000);

//Comandos de configuracao do modulo de voz

Serial.write(0xAA);

Serial.write(0x22);

//Pre definicao do estado do led 13

digitalWrite(led,HIGH);

}

void loop() // funcao de recorrencia

{

while(Serial.available())

{

com = Serial.read();

switch(com)

{

//A cada comando reconhecido pelo módulo o Arduino irá piscar o LED 13

case 0x21:

digitalWrite(led,LOW);

delay(250);

digitalWrite(led,HIGH);

break;

case 0x22:

digitalWrite(led,LOW);

delay(250);

digitalWrite(led,HIGH);

break;

case 0x23:

digitalWrite(led,LOW);

delay(250);

digitalWrite(led,HIGH);

break;

case 0x24:

digitalWrite(led,LOW);

digitalWrite(led,HIGH);

break;

case 0x25:

digitalWrite(led,LOW);

delay(250);

digitalWrite(led,HIGH);

break;

}

}

}

Após a compilação do programa acima e feito o upload para a placa do Arduíno, pressione o botão reset do Arduíno e o sistema poderá ser utilizado para acionar o LED 13.

Links

[1] kit comercializado pela ELECHOUSE

http://www.elechouse.com/elechouse/index.php?main_page=product_info&cPath=168_170&products_id=2151

[2] conversor TTL

http://www.elechouse.com/elechouse/index.php?main_page=product_info...

[3] Drivers do ConversorUSB-TTL

http://www.elechouse.com/elechouse/index.php?main_page=product_info...

[4] software AccessPort

http://www.sudt.com/en/ap/download.htm

[5] manual elaborado pela ELECHOUSE

http://www.elechouse.com/elechouse/images/product/Voice%20Recogniti...

Exibições: 2627

Tags: SPCE061A, arduino, reconhecimento, serial, voz

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Bruno Stabile dos Santos em 9 fevereiro 2013 às 17:19

Ola Maycon,

Ja tentou ver se as variaveis n1~n4 estao recebendo realmente os carcteres corretos ?

Uma sugestao, analisar os tipos de dados que estao sendo enviados e recebidos, se sao Bytes, Strings, HEX e afins.

De uma olhada no link abaixo

http://arduino.cc/en/Serial/Print

Comentário de Maycon Douglas em 9 fevereiro 2013 às 12:00

Tipo  eu fiz este programa e simulei no proteus.O único problema é que se eu enviar um dado na serial com mais ou menos que  3 caracteres o programa não aciona o led mais quando chega o comando "0x11" que é para ligar o led.Se eu enviar somente 3 caracteres por vez para o pic ele aciona o led quando chega  o comando "0x11",mas quando eu mandar mais de 3 ele para de acionar.

Comentário de Bruno Stabile dos Santos em 7 fevereiro 2013 às 19:28

Aparentemente esta correto, iniciamos o módulo de reconhecimento de voz e realizamos a leitura dos dados enviados pelas portas rx/tx, não sei lhe informar se a estrutura esta correta, mas a lógica é esta mesmo.

Comentário de Maycon Douglas em 7 fevereiro 2013 às 17:44

Fiz um programa e simulei no proteus.Olhem se é mais ou menos isso?

//Variavel

char n1,n2,n3,n4;


void main()
{

//Abre a comunicação com a placa de reconhecimento de voz
printf("0xAA\r");
printf("0x37\r");
delay_ms(1000);
printf("0xAA\r");
printf("0x21\r");

while (true) // Loop infinito do programa
{


while(kbhit()==1){

n1=getc();
n2=getc();
n3=getc();
n4=getc();


//Comando de voz "Liga"

if (n1=='0' && n2=='x' && n3=='1' && n4=='1'){


output_high(pin_D1);



}

//Comando de voz "Desliga"

if (n1=='0' && n2=='x' && n3=='1' && n4=='2'){


output_low(pin_D1);



}


}


}

}

Comentário de Bruno Stabile dos Santos em 7 fevereiro 2013 às 15:39

Ola Maycon,

Ainda não o utilizei com PIC, entretanto, primeiramente precisaríamos habilitar comunicação RX/TX no microcontrolador, de um aolahda neste link. assim poderíamos receber os códigos HEXA e criar uma rotina para uso destes dados, assim como disse o William.

Observe que no ATMEL utilizamos os pinos RX/TX, acredito que no PIC tenha algo parecido.

Comentário de William Lima em 7 fevereiro 2013 às 10:41
Cara se olhar o codigo de exemplo ele usa uma faixa de valores em hexa.
O codigo nao tenho mas para usar cm um pic basta verificar a saida do sensor e fazer sua programacao
Comentário de Maycon Douglas em 7 fevereiro 2013 às 9:59

Programa em Linguagem C para uso do módulo de reconhecimento de voz SPCE061A com PIC18F4550?

Publicidade

Convide um amigo para o Lab!

 Loja Lab de Garagem

Novo!

Garagino Rev1

Por: R$ 29,00

Ou em até 6x de

R$ 5,18 

Novo!

Estação de Solda

Temperatura Ajustável - 50W

Por: R$ 150,00

Ou em até 18x de

R$ 10,00

 

Exclusividade do LdG!

Android 4.0 Mini PC

Por: R$ 195,00

Ou em até 18x de

R$ 13,00

Osciloscópio Digital

(ADS1102C) - 100MHz - 2 Canais

Por: R$ 1920,00

Ou em até 18x de

R$ 127,96

© 2013   Criado por Marcelo Rodrigues.

Badges  |  Relatar um incidente  |  Termos de serviço