domingo, 28 de agosto de 2016

Faça seu Arduino falar


INTRODUÇÃO

          Observei em alguns fóruns a necessidade da comunidade de fazedores em criar projetos que sintetize a voz, por isso, escrevo este artigo para auxiliar nossos companheiros nesta jornada. Não iremos propriamente sintetizar voz, mas criar uma técnica dos nossos projetos reportarem seus resultados de forma audível através da concatenação de arquivos ".wav".

        Inúmeras são as possibilidades de aplicação desta técnica, onde não necessariamente teremos de ficar observando uma tela para obter o resultado da variável que estamos monitorando, podemos fazer outras coisas enquanto esperamos o sistema reproduzir audivelmente o que queremos. Aplicações de inclusão social e acessibilidade podem ser desenvolvidas por exemplo: Para pessoas com deficiência visual ou baixa visão. A imaginação de cada um de nós será o limite.


DESCRIÇÃO

          Sintetizar voz não é uma tarefa simples e fácil, em minhas buscas na web encontrei alguns poucos exemplos com placas eletrônicas dedicadas e shields para Arduino que são funcionais mas pouco atraentes por causa de suas características e limitações por exemplo: voz robotizada, língua inglesa, alto custo entre outros.

          Nossa proposta é utilizar arquivos de áudio no formato wave utilizando o padrão PCM que trabalha confortavelmente com o Arduino. Apesar da facilidade de uso desses arquivos de áudio, um problema que constatei foi a baixa qualidade do som reproduzido pelo padrão de Modulação por Código de Pulso.

PCM - 8KHz de amostragem - 8 bits de resolução - canal mono - Usado em Sistema Telefônico


Teoria da Amostragem:

Qualidade de som = Amostra de Frequência * Resolução da Amostra

  • 16 Kbps - Rádio de ondas curtas
  • 32 Kbps - Rádio AM
  • 96 Kbps - Rádio FM
  • 128 Kbps - Próximo ao CD
  • 256 Kbps - Estúdio de Som

Felizmente com um pouco mais de trabalho podemos obter um resultado satisfatório.


Vamos demonstrar nossa técnica através de um termômetro que fala a temperatura registrada!!!

  • Inicialmente vamos usar uma biblioteca chamada TMRpcm. Com ela podemos reproduzir claramente arquivos wav de 22050 Hz 8-bit PCM mono.

  • Usei o aplicativo Easy Voice Recorder com as configurações acima para gravar em arquivos separados uma voz feminina, os arquivos contém as pronúncias temperatura, graus Celcius e os números 20 até 40.

  • Editei os arquivos de áudio no software Sony Vegas.


Segue o código fonte do nosso projeto:

#include <SD.h>
#include <TMRpcm.h>

#define pinoChipSelectSD 53

TMRpcm audioCartaoSD;

const int SENSOR_LM35 = A0;
const float CONVERSAO_CELSIUS = 0.49;

int leituraSensor;
float temperaturaAtual, temperaturaAnterior;
String valorTemp;

void setup(){  
    Serial.begin(9600);
    if (!SD.begin(pinoChipSelectSD)) {
        Serial.println("Falha no cartao SD");  
    }

    pinMode(SENSOR_LM35, INPUT);
    audioCartaoSD.speakerPin = 11;
}

void loop(){  
    temperaturaAtual = analogRead(SENSOR_LM35) * CONVERSAO_CELSIUS;
    if(temperaturaAtual != temperaturaAnterior) {
        temperaturaAnterior = temperaturaAtual;
                
        valorTemp = String(int(temperaturaAtual));
        valorTemp.concat(".wav");

        char nomeArquivo[valorTemp.length( ) + 1];
        valorTemp.toCharArray(nomeArquivo, sizeof(nomeArquivo));        
        
        audioCartaoSD.play("temp.wav");
        while(audioCartaoSD.isPlaying());
        audioCartaoSD.play(nomeArquivo);
        while(audioCartaoSD.isPlaying());
        audioCartaoSD.play("graus.wav");

        Serial.println(temperaturaAtual);
        delay(5000);        
    }
}

O componentes usados foram:

  1. Arduino Mega 2560
  2. Leitor de Cartão Micro SD
  3. Sensor de Temperatura LM35
  4. Buzzer para escutar que posteriormente foi conectado a um caixa de som de computador

As conexões dos componentes foram:

  1. Saída de som para fone de ouvido, caixa de som, amplificador, etc. Pino 11 para Arduino Mega e pino 9 para Arduino Uno.
  2. Formate o cartão micro SD em FAT32 e copie os arquivos de áudio.
  3. Terminal 2 (terminal do meio) do LM35 ao pino A0 do Arduino.

Leitor de cartão SD:

Arduino Mega
Cartão SD
50
MISO
51
MOSI
52
SCK
53
CS
GND
GND
5 volts
VCC

Arduino Uno
Cartão SD
12
MISO
11
MOSI
13
SCK
4
CS
GND
GND
5 volts
VCC


Assista o vídeo abaixo ou clique AQUI para abrir uma nova página para o youtube.



LINKS E DOWNLOADS

Biblioteca TMRpcm  https://github.com/TMRh20/TMRpcm/wiki

Download Direto TMRpcm  https://github.com/TMRh20/TMRpcm/archive/master.zip

Código Fonte do Termômetro  https://www.dropbox.com/s/7zlk8c1s6cllq1e/FacaArduinoFalar.ino?dl=0

Arquivos de Áudio  https://www.dropbox.com/s/uegr1sjvmxr0c37/Arquivos%20de%20Audio.rar?dl=0

5 comentários:

  1. Excelente matéria, vídeo.

    Agradeço você por dividir o conhecimento.

    Meus parabéns.

    ResponderExcluir
  2. Ola boa noite como seria fazer ele falar com um sensor ntc em vez do sensor lm35?

    ResponderExcluir
  3. Não consegui baixar os arquivos. O servidor está com virus.

    ResponderExcluir
  4. É possível adicionar um relógio no projeto?

    ResponderExcluir

Postagem mais antiga Página inicial