hm2007
Transcrição
hm2007
Centro Estadual de Educação Tecnológica Paula Souza GOVERNO DO ESTADO DE SÃO PAULO Etec “JORGE STREET” PROJETO DO TRABALHO DE CONCLUSÃO DO CURSO TÉCNICO EM ELETRÔNICA AUTOMAÇÃO RESIDENCIAL USANDO MICROCONTROLADOR E MÓDULO DE RECONHECIMENTO DE VOZ Francisco Marcelo Alves Borges Fabio Stankevicius Fernando Alves de Souza Denis Soares Alves Professor Orientador: Salomão Chouri Jr. São Caetano do Sul / SP 2015 6 AUTOMAÇÃO RESIDENCIAL USANDO MICROCONTROLADOR E MÓDULO DE RECONHECIMENTO DE VOZ Projeto do trabalho de Conclusão de Curso apresentado como prérequisito para obtenção do Diploma de Técnico em eletrônica. São Caetano do Sul / SP 2015 7 RESUMO A realidade de sistemas automatizados é cada vez mais aparente na vida moderna. Casas e prédios já contam com sistemas integrados de controle que possibilitam a realização de inúmeras atividades com facilidade e, em alguns casos, sem haver a necessidade de presença física. Sistemas automatizados têm o custo muito elevado e poucas pessoas têm acesso. Sendo assim, o presente trabalho tem como justificativa pesquisar, implementar e simular uma solução de baixo custo utilizando microcontroladores e módulos de reconhecimento de voz que foi alcançado com êxito. Palavras-chave: reconhecimento de voz, automação residencial e Arduíno 8 LISTA DE FIGURAS Figura 1 – Pinagem do microcontrolador ..............................................................13 Figura 2 – entradas e saídas do arduíno ...............................................................14 Figura 3 – Pinagem do arduíno .............................................................................15 Figura 4 – circuito do Arduíno ...............................................................................15 Figura 5 – partes do arduíno .................................................................................16 Figura 6 – Comunicação serial com arduíno .........................................................17 Figura 7 - Forma de onda para "um.wav" .............................................................18 Figura 8 - Forma de onda para "dois.wav" ............................................................18 Figura 9 - Pinagem HM2007p ..............................................................................21 Figura 10 – Diagrama de blocos ...........................................................................22 Figura 11 - fluxograma ..........................................................................................23 Figura 12 - croqui ..................................................................................................24 Figura 13 - cronograma .........................................................................................25 9 Sumário INTRODUÇÃO ......................................................................................................11 CAPÍTULO 1– FUNDAMENTAÇÃO TEÓRICA .....................................................13 1.1 – Microcontrolador .............................................................................................. 13 1.2 - Modulo de reconhecimento de voz ................................................................... 16 1.2.1 PRINCÍPIO BÁSICO DO RECONHECIMENTO DE VOZ .....................17 1.2.2 O CI DE RECONHECIMENTO DE VOZ ..............................................19 1.2.3 DESCRIÇÃO GERAL DA PLACA DE RECONHECIMENTO DE VOZ..20 2- PLANEJAMENTO .............................................................................................22 2.1 - Diagrama de blocos .......................................................................................... 22 2.2 - Fluxograma ....................................................................................................... 23 2.3 - Croqui................................................................................................................ 24 2.4 - Cronograma ...................................................................................................... 25 3 – DESENVOLVIMENTO DO PROJETO ............................................................26 3.1 – hardware .......................................................................................................... 26 3.2 – Software ........................................................................................................... 27 3.2 – Produto final ..................................................................................................... 28 3.3 - Previsão de custos ............................................................................................ 29 CONCLUSÃO........................................................................................................30 IMPLEMENTAÇÕES FUTURAS ...........................................................................31 APENDICE A:........................................................................................................32 PROGRAMAÇÃO DO MICROCONTROLADOR...................................................33 10 Introdução O projeto foi o escolhido de uma lista com várias outra ideias do grupo, foi feita uma votação entre os integrantes do grupo e os projetos mais votados foram: Drone, substituição da bengala comum por uma eletrônica para deficientes visuais e a automatização residencial. Depois da votação separamos os mais votados, e escolhemos em uma reunião o projeto da automatização residencial porque seria o mais viável e o que tinha tecnologias que queríamos pesquisar mais para compreender melhor. Este projeto tem como objetivo apresentar, simular e implementar uma solução de automação residencial de pequeno e médio porte. Para tanto, serão utilizadas tecnologias simples, procurando obter um resultado final de baixo custo e ótimo funcionamento, e diminuir os requisitos de conhecimentos necessários ao usuário operante do sistema. O controle poderá ser feito através de um comando de voz, por exemplo, “luz quarto” a lâmpada do quarto se acenderá, e com o mesmo comando poderá desligar a lâmpada. Esse comando de voz será reconhecido pelo módulo de comando de voz, e que este será ligado ao microcontrolador, que fará o controle de como e o que será acionado. Este projeto vai atuar direto na automatização de residências, podendo ser utilizado também em outras áreas como comércios, empresas e áreas comuns de condomínios. O setor de automatização residencial está em grande crescimento, pois os proprietários/moradores estão se tornando mais e mais conscientes dos benefícios da Automação Residencial. Estes benefícios geram demanda enquanto suprem razões para que os construtores incluam a automação residencial em suas novas construções e ao mesmo tempo ainda ofereçam serviços da readequação para residências já existentes. 11 Alguns dos benefícios, aqueles que podem imediatamente ser apropriados pelo proprietário/morador são os seguintes: Economia de energia Economia de tempo e esforço Segurança Conforto Acessibilidade Este projeto segue uma linha de pesquisa bibliográfica baseada em consultas a livros e sites da internet. Com base nessas pesquisas, o projeto tem finalidade aplicada, ou seja, aplicação prática e experimental de seu objeto de estudo. A primeira etapa do projeto é o desenvolvimento da programação do arduíno, através do software arduino-1.6.0. A etapa seguinte constitui-se na construção do aparelho que vai conter os hardwares todos utilizados e suas respectivas conexões de comunicações externas. 12 CAPÍTULO 1– Fundamentação Teórica 1.1 – Microcontrolador O microcontrolador é um dispositivo de fácil utilização, baixo custo e pode ser utilizado em uma variedade imensa de aplicações. Trata-se de um “single chip microcomputer”, ou seja, microcomputador em um único chip pois possui internamente um microprocessador, memória de programa, memória de dados e entradas e saídas. Esse microprocessador possui 28 pinos, sendo que 23 desses podem ser utilizados como I/O . A imagem abaixo exibe a sua pinagem: Figura 1 – Pinagem do microcontrolador A placa Arduino UNO possui pinos de entrada e saídas digitais, assim como pinos de entradas e saídas analógicas, abaixo é exibido a pinagem conhecida como o padrão Arduino: 13 Figura 2 – entradas e saídas do arduíno Conforme exibido na figura, a placa Arduino UNO possui 14 pinos que podem ser usados como entrada ou saída digitias. Estes Pinos operam em 5 V, onde cada pino pode fornecer ou receber uma corrente máxima de 40 mA. Cada pino possui resistor de pull-up interno que pode ser habilitado por software. Alguns desse pinos possuem funções especiais: PWM : 3,5,6,9,10 e 11 podem ser usados como saídas PWM de 8 bits através da função analogWrite(); Comunicação serial: 0 e 1 podem ser utilizados para comunicação serial. Deve-se observar que estes pinos são ligados ao microcontrolador responsável pela comunicação USB com o PC; Interrupção externa: 2 e 3 . Estes pinos podem ser configurados para gera uma interrupção externa, através da função attachInterrupt(). Para interface com o mundo analógico, a placa Arduino UNO possui 6 entradas, onde cada uma tem a resolução de 10 bits. Por padrão a referencia do conversor AD está ligada internamente a a 5V, ou seja, quando a entrada estiver com 5V o valor da conversão analógica digital será 1023. O valor da referência pode ser mudado através do pino AREF. A figura a seguir exibe a relação entre os pinos do microcontrolador ATMEL ATMEGA328 e a pinagem do Arduino UNO: 14 Figura 3 – Pinagem do arduíno Circuito eletrônico Figura 4 – circuito do Arduíno 15 Figura 5 – partes do arduíno 1.2 - Modulo de reconhecimento de voz O módulo VR3 (Voice Recognition V3) é uma versão compacta para reconhecimento de voz. Este produto suporta até 80 comandos, sendo 7 funcionando simultaneamente. Além disso, qualquer som pode ser utilizado como comando de voz. 16 Para conectar o VR3 no Arduino usamos o circuito abaixo: Figura 6 – Comunicação serial com arduíno 1.2.1 PRINCÍPIO BÁSICO DO RECONHECIMENTO DE VOZ O conceito fundamental aqui é que um som emitido pode ser convertido em impulsos elétricos com o uso de um microfone, e estes impulsos podem ser processados em sistemas digitais, como um computador, um microcontrolador. Na forma digital, podem ser armazenados em memórias digitais. Veja abaixo como ficaram armazenados em arquivos de computador os vocábulos "um" e "dois". Os oscilogramas mostrados foram obtidos do programa "Wave Studio", da Creative Labs Inc. 17 Comando: Som Comando: Forma de Onda Ouça "um" (3594 bytes) Figura 7 - Forma de onda para "um.wav" Ouça "dois" (3.287 bytes) Figura 8 - Forma de onda para "dois.wav" A diferença que você vê entre as formas de onda também pode ser detectada por sistemas digitais através de um processamento das mesmas. Sistemas denominados DSP's ("Processadores de Sinais Digitais") são especializados neste tipo de tarefa, mas microprocessadores ou microcontroladores também podem ser utilizados. 18 Um sistema simples de reconhecimento de voz recebe durante um treinamento um conjunto de comandos (na forma de palavras ou expressões) e os armazena. Posteriormente, em modo de recohecimento, sons serão recebidos e comparados com os padrões de comando programados. Onde houver alguma semelhança razoável, um comando é obedecido. O reconhecimento de voz é dito "dependente do usuário" quando exige uma semalhança bastante grande entre os padrões emitido e gravado para cada comando, de modo que só deve reconhecer comandos de quem o treinou. Um sistema independente do usuário é mais complexo, pois analisa e detecta padrões de comando de modo a reconhecê-los, não importando quem os emitiu. 1.2.2 O CI DE RECONHECIMENTO DE VOZ O HM2007 é um circuito integrado que já tem algum tempo de projeto. Sua aplicação em sistemas comandados por voz é descrita em algumas páginas interessantes da internet. No CEFET/SC, foi utilizado na segunda versão da Cadeira de Rodas Comandada por Voz. O HM2007 é dependente de usuário, já inclue em sua construção o sistema de áudio, com entrada para microfone. A capacidade do sistema é para até 40 comandos de voz, de duração 0,96s, ou até 20 comandos de 1,92s, com padrões armazenados em um ci auxiliar de memória, de organização 8x x 8 bits. Esquemas de ampliação desta memória, para um aumento do número de comandos, poderiam ser utilizados. 19 O ci pode ser controlado de duas formas: no "modo manual", o treinamento dos comandos é feito com o auxílio de um pequeno teclado numérico externo ou no "modo CPU", o chip é comandado por um microcontrolador, que pode acionar o processo de treinamento dos comandos e configurar outras opções de funcionamento do sistema. 1.2.3 DESCRIÇÃO GERAL DA PLACA DE RECONHECIMENTO DE VOZ O CI HM2007 é o centro do sistema, e se conecta a uma memória de 8k x 8, uma entrada de microcofone, e a um latch de saída, implementado com um 74LS373. Este CI armazena o último comando reconhecido ou treinado, ou ainda códigos de erro do sistema. Para uso com um dos kits centrais, a alimentação do módulo é feita através dos pinos "Vcc" e "GND" do conector de saída de comando. Opcionalmente, um regulador pode ser montado na placa, provendo uma fonte de alimentação que permite o uso da placa com outros sistemas, que podem mesmo ser alimentados por ela. A bateria que provê armazenamento dos padrões de voz quando a placa é desconectada da alimentação externa é composta por duas pilhas de 1,5V. Para uso com kits de microcontrolador, um "jumper" permite o controle da saída "tri-state" do latch de comandos, de modo que a placa pode ser utilizada como uma porta de entrada em um sistema de decodificação de endereçamento. Para experimentação, pode ser utilizada em conjunto com um módulo de teclado para treinamento dos comandos e um algum sistema que utilize os comandos reconhecidos. Um outro recurso disponível na placa é um "jumper" para seleção do modo de controle (manual ou CPU). No modo CPU o conector de teclado se torna a entrada de interface para microcontrolador. 20 Figura 9 - Pinagem HM2007p 21 2- Planejamento Para implementar o projeto foi realizado um planejamento do mesmo, elaborando-se um diagrama de blocos para estruturar o hardware, um fluxograma para estruturar o software, e um croqui para estruturar o projeto. 2.1 - Diagrama de blocos Figura 10 – Diagrama de blocos 22 2.2 - Fluxograma Figura 11 - fluxograma 23 2.3 - Croqui Figura 12 - croqui 24 2.4 - Cronograma Figura 13 – cronograma 25 3 – Desenvolvimento do projeto 3.1 – hardware Circuíto elétrico 26 3.2 – Software O software foi desenvolvido na plataforma Arduíno que utiliza uma linguagem bem parecida com linguagen C. A listagem completa encontra-se no apêndice A. 27 3.2 – Produto final 28 3.3 - Previsão de custos Uno R3 (ARDUINO) R$ 20,90 Modulo de Reconhecimento por Voz: R$ 50,49 Led’s, Plugues, Resistores: R$ 25,90 Caixa de acoplamento (INTERFACE): R$ 15,00 Total (INTERFACE): R$ 112,29 Montagem e acabamento da maquete: R$ 138,77 Total do projeto: R$ 251,06 29 Conclusão O projeto proposto teve êxito em apresentar e implementar uma solução de automação residencial por comando de voz de pequeno e médio porte. O projeto em si seguiu de acordo com o planejado, não só isso, superou nossas expectativas. Neste projeto utilizamos tecnologias não tivemos na grade do curso, assim como o modulo VR3, a programação do Arduino e a do próprio modulo em si. Melhoramos nossa capacidade de trabalho em grupo. 30 Implementações futuras Para possibilitar a aplicação comercial deste produto, as perspectivas de melhorias são: O desenvolvimento de novos periféricos de ação baseados na estrutura disponibilizada. Desta forma será possível controlar outros elementos como ar condicionado, banheira, microondas entre outros. Aumentar a capacidade de armazenamento de instruções gravadas. Melhorar o reconhecimento das vozes gravadas. Aumentar o número de saídas de controle. Implementar interfaces de saídas infra vermelho. 31 Apendice A: Programação do microcontrolador 32 Programação do microcontrolador #include <SoftwareSerial.h> #include "VoiceRecognitionV3.h" VR myVR(2,3); // 2:RX 3:TX, you can choose your favourite pins. uint8_t records; // save record uint8_t buf[64]; int int int int int int int int ligado = 6; sinal = 7; modulo = 5 ; sala = 8; quarto = 9; cozinha = 10; suite = 11; banho = 12; int int int int int vmodulo = 0; vsala = 0; vquarto = 0; vcozinha = 0; vsinal = 0; int vmenos =0; int vmais =0; int valor =0; #define #define #define #define #define #define #define sa qu co ap me ma mo (0) (1) (2) (3) (4) (5) (6) 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("]"); } } } 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 "); 33 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(sala, OUTPUT); pinMode(quarto, OUTPUT); pinMode(cozinha, OUTPUT); pinMode(suite, OUTPUT); pinMode(banho, OUTPUT); pinMode(sinal, OUTPUT); pinMode(modulo, OUTPUT); pinMode(ligado, OUTPUT); digitalWrite(ligado, HIGH); digitalWrite(sinal, LOW); analogWrite(sala,0); digitalWrite(quarto, LOW); digitalWrite(cozinha, LOW); digitalWrite(suite, LOW); digitalWrite(banho, LOW); digitalWrite(modulo, LOW); 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)sa) >= 0){ Serial.println("sala loaded"); } if(myVR.load((uint8_t)qu) >= 0){ Serial.println("quarto loaded"); } if(myVR.load((uint8_t)co) >= 0){ Serial.println("cozinha loaded"); } if(myVR.load((uint8_t)ap) >= 0){ Serial.println("apagar loaded"); } if(myVR.load((uint8_t)mo) >= 0){ Serial.println("modulo loaded"); } if(myVR.load((uint8_t)me) >= 0){ 34 Serial.println("menos loaded"); } if(myVR.load((uint8_t)ma) >= 0){ Serial.println("mais loaded"); } } void loop() { if(vsinal == 1){ digitalWrite(sinal, HIGH); delay(50); digitalWrite(sinal, LOW); delay(50); digitalWrite(sinal, HIGH); delay(50); digitalWrite(sinal, LOW); vsinal = 0; } int ret; ret = myVR.recognize(buf, 50); if(ret>0){ switch(buf[1]){ case sa: vsinal = 1; if(vsala == 0 && vmodulo == 1){ analogWrite(sala, 255); digitalWrite(modulo, LOW); valor = 255; vsala = 1; vmodulo = 0; } else{ if(vmodulo == 1){ vsinal = 1; analogWrite(sala, 0); digitalWrite(modulo, LOW); vsala = 0; valor = 0; vmodulo = 0; } } break; case qu: vsinal = 1; if(vquarto == 0 && vmodulo == 1){ digitalWrite(quarto, HIGH); digitalWrite(modulo, LOW); vquarto = 1; vmodulo = 0; } else{ vsinal = 1; if(vmodulo == 1){ digitalWrite(quarto,LOW); digitalWrite(modulo, LOW); vquarto = 0; vmodulo = 0; } } break; case co: vsinal = 1; if(vcozinha == 0 && vmodulo == 1){ digitalWrite(cozinha, HIGH); digitalWrite(modulo, LOW); vcozinha = 1; vmodulo = 0; } else{ 35 vsinal = 1; if(vmodulo == 1){ digitalWrite(cozinha,LOW); digitalWrite(modulo, LOW); vcozinha = 0; vmodulo = 0; } } break; case ap: vsinal = 1; if(vmodulo == 1){ analogWrite(sala, 0); digitalWrite(quarto, LOW); digitalWrite(cozinha, LOW); digitalWrite(modulo, LOW); vsala = 0; vquarto = 0; vcozinha = 0; valor = 0; vmodulo = 0; } break; case mo: vsinal = 1; vmodulo = 1; digitalWrite(modulo, HIGH); break; case me: if(vmodulo == 1 & valor >= 50); vsinal = 1; valor = valor - 50; analogWrite(sala, valor); vsala = valor; vmodulo = 0; break; case ma: if(vmodulo == 1 & valor <= 200); vsinal = 1; valor = valor + 50; analogWrite(sala, valor); vsala = valor; vmodulo = 0; break; default: Serial.println("Record function undefined"); break; } } printVR(buf); } 36