Relatório Técnico Final



Documentos relacionados
Na primeira aula, conhecemos um pouco sobre o projeto Arduino, sua família de placas, os Shields e diversos exemplos de aplicações.

ARDUINO UNO Guia do Usuário

Manual Técnico Arduino Supervisório MODBUS & Conversor RS485

ACENDENDO AS LUZES. Capitulo 2 - Aula 1 Livro: Arduino básico Tutor: Wivissom Fayvre

Placa Acessório Modem Impacta

SCD 912. Dispositivo de comunicação e armazenamento. Apresentação. Dados Técnicos. Conexões

Programação de Robótica: Modo Circuitos Programados - Avançado -

Comunicação Serial com o AVR ATMEGA8

PROJETO. Ponte Digital. Luciano Daniel Amarante - carabina@pop.com.br Ricardo Watzko - rw@netuno.com.

Manual de utilização do módulo NSE METH-8RL/Exp

Manual Técnico Módulo Ponte H Dupla

Programação Básica em Arduino Aula 2

Copyright 2013 VW Soluções

Manual do instalador Box Input Rev Figura 01 Apresentação do Box Input.

RECONHECIMENTO DE VOZ UTILIZANDO ARDUINO

Características técnicas Baseado no ATMega da empresa AVR, fabricante de micro-controladores em plena ascensão e concorrente do PIC Pode usar ATMega

Comunicação USB com o PIC Vitor Amadeu Souza Parte II vitor@cerne-tec.com.br

Leitor MaxProx-Lista-PC

A idéia hardware sugerida é colocar a placa entre o PC e o microcontrolador, conforme mostrado no esquema abaixo.

MANUAL DE INSTALAÇÃO E PROGRAMAÇÃO CONVERSOR - IP / USB / SERIAL RV1

Matriz seletora VGA/WXGA & Controle RS x 8 TRANSCORTEC STATUS OUTPUT 2

TUTORIAL Arduino Nano

FACILITY TOP HÍBRIDA. Manual Técnico MANUAL TÉCNICO AUTOMATIZADOR PARA PORTÕES DESLIZANTES MONDIALE. P Rev. 1

Introdução ao Arduino. Pessanha Santos ASPOF EN-AEL

Easy Lab. Manual do usuário Revisão /11/14. DMA Electronics 1

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ CÂMPUS CURITIBA CURSO DE ENGENHARIA DE COMPUTAÇÃO

WiFiShield. Introdução

O Laboratório de Garagem

Hamtronix INTERFACE ECHOLINK Manual de Instalação e Operação Hardware Revisão C

Manual Técnico Interface Modbus

Manual MifareUSB/Serial

PROGRAMAÇÃO DO TREINAMENTO:

Manual. Controle de motores via Bluetooth. William Trevine

DISCADORA DISC CELL 5 ULTRA

Boletim Técnico R&D 03/08 CARACTERÍSTICAS DO DRIVER MPC6006L 14 de março de 2008

CURSO OPERACIONAL TOPOLOGIA SISTEMA SIGMA 485-E

Central de Alarme de Oito Zonas

Figura 01 Visão Geral da Placa

Módulo FGM721. Controlador P7C - HI Tecnologia

Quadro de consulta (solicitação do mestre)

MANUAL DE INSTALAÇÃO TETROS MOTO V2. N de Homologação: Versão 1.00

Geral: Manual de Utilização do Software de Teste Gradual Windows

Funções de Posicionamento para Controle de Eixos

PAINEL ELETRÔNICO DE MENSAGENS MANUAL DE OPERAÇÃO E INSTALAÇÃO CARROS URBANOS E G7 MARCOPOLO

INDICE 1. INTRODUÇÃO CONFIGURAÇÃO MÍNIMA INSTALAÇÃO INTERLIGAÇÃO DO SISTEMA ALGUNS RECURSOS SERVIDOR BAM...

CAPÍTULO 2 CARACTERÍSTICAS DE E/S E PORTA PARALELA

Este tutorial mostra como utilizar as ferramentas Send Mail e Web Commands.

Programação em BASIC para o PIC Vitor Amadeu Souza

Manual de digitação de contas Portal AFPERGS

OMNI-3MD. Placa Controladora de 3 Motores. Disponível Biblioteca para Arduino. Manual de Hardware. Outubro de 2013

Manual de utilização do módulo NSE METH 3E4RL

TUTORIAL INSTALAÇÃO DA ROTINA 2075 NO LINUX

Manual. do POS. O novo POS é de fácil uso e aplicação. Conheça suas funções e características

1. CAPÍTULO COMPUTADORES

Manual do instalador Box Output DC Rev Figura 01 Apresentação do Box Output DC.

Conversor Ethernet Serial CES-0200-XXX-XX. Manual V3.9

5 Entrada e Saída de Dados:

Alarme Automotivo com mensagem para móvel utilizando Arduino

GUIA DE INSTALAÇÃO F 19

IW10. Rev.: 02. Especificações Técnicas

Modelo R02 - Volume 2 - Operacional

ANEXO I. Medidas (Largura, Altura, Profundidade): 45 mm, 20 mm, 15 mm; Parafusos e porcas para fixação e espaçadores se necessário;

Hamtronix CONTROLE REMOTO DTMF. CRD200 - Manual de Instalação e Operação. Software V 2.0 Hardware Revisão B

Programação em BASIC para o PIC Mostrando Mensagens no Display LCD Vitor Amadeu Souza

Robótica com Arduino

Manual de Instalação. GPRS Universal

Módulo WCM200. Controlador WSI250 - HI Tecnologia

LINEAR EQUIPAMENTOS RUA SÃO JORGE, TELEFONE: SÃO CAETANO DO SUL - SP - CEP

Switch HDMI. 3 entradas e 1 saída. Manual do Usuário

GUINDASTE CONTROLADO POR PC ATRAVÉS DE INTERFACE SERIAL RS- 232

DESENVOLVIMENTO DE UM SISTEMA DE OBTENÇÃO DE DADOS PARA CALIBRAÇÃO DE CENTRAIS INERCIAIS

SISTEMA INTEGRADO DE GESTÃO ACADÊMICA

ÍNDICE 1. INTRODUÇÃO DESCRIÇÃO DO PICKIT Ligação da porta USB LEDs de estado Botão... 5

Medidor de campo para sinais de TV digital HD padrão Brasileiro ISDB-T

PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ

Tarifação ON-LINE Sistema de Tarifação Telefônica V. 6.0 GUIA DE INSTALAÇÃO COLETOR

Potenciometer [Potenciômetro] - Ligado ao eixo de saída do servo, monitora a posição do mesmo.

A senha 001 de fábrica é

PROGRAMA DE GERENCIAMENTO DOS AMPLIFICADORES MR 4.50D-XT MR 6.50D-XT MR 6.80-XT Rev. 2.3 de 29/01/2014

INFORMATIVO DE PRODUTO

Guia de consulta rápida

Introdução. Em se tratando de computador, entendemos que memória são dispositivos que armazenam dados com os quais o processador trabalha.

Manual de Instalação... 2 RECURSOS DESTE RELÓGIO REGISTRANDO O ACESSO Acesso através de cartão de código de barras:...

Minicurso de Arduino

CAPÍTULO 5. INTERFACES PARA PERIFÉRICOS DE ARMAZENAMENTO INTERFACES DIVERSAS: FIREWIRE, SPI e I 2 C INTERFACES COM O MUNDO ANALÓGICO

DESCRIÇÃO DO FUNCIONAMENTO Basicamente o ANTRON II-s recebe sinais provenientes da atuação de contatos elétricos externos, associados a equipamentos

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

CONTROLE DE UM SERVO MOTOR

Comm5 Tecnologia Manual de utilização da família MI. Manual de Utilização. Família MI

WR-3454G 54M WIRELESS ROUTER WR-3454G MANUAL DE INSTALAÇÃO

Programa de Atualização de Pontos do Lince GPS

Manual do Usuário - NKPROX

Centrais de Alarme DSC MANUAL DE CENTRAL DE ALARME. Disponibilizado por www. alarmsystems. com.

SISTEMA DE MONITORAMENTO DIGITAL

INTRODUÇÃO BARRAMENTO PCI EXPRESS.

Programa de Instalação do Lince GPS

2014 Lumikit Sistemas para Iluminação

D-Fly2 Manual do Usuário

Projeto de controle e Automação de Antena

Transcrição:

Cama Hospitalar Relatório Técnico Final Igor Bertuol Plácido Negrão Lucas Santos Stavitzki Guilherme Nunes Nogueira Neto 4º Bimestre Visto: Igor Bertuol Plácido Negrão Lucas Santos Stavitzki

Sumário 1.0 Resumo...6 2.0 Introdução... 7 3.0 Detalhamento do Problema... 8 3.1 EasyVR... 8 3.1.1 Atribuição de Pinos... 9 3.1.2 Configuração Serial... 9 3.2 EasyVR GUI 2.1.8... 10 3.2.1 Configuração... 10 3.3 Arduino Uno... 12 3.3.1 Alimentação... 13 3.3.2 Entrada e Saída... 14 3.4 Arduino UI... 14 3.4.1 Configuração... 14 3.4.2 Programação... 15 3.5 Integração EasyVR com Arduino Uno... 15 3.5.1 Hardware... 15 3.5.2 Software... 15 3.5.2.1 Codificação do Software... 21 3.6 Motores... 22 3.7 Maquete... 23 4.0 Cronograma... 25 5.0 Procedimento de Teste e Validação do Projeto... 34 5.1 Testes em Caixa Preta... 34 5.1.1 EasyVR... 34 5.1.2 EasyVR GUI... 34 5.1.3 Arduino... 34 5.1.4 Arduino UI... 34 5.1.5 Integração Arduino e EasyVR... 34 5.1.6 Motores... 35 5.1.7 Maquete... 35 5.2 Testes em Caixa Branca... 35 5.2.1 EasyVR... 35 5.2.2 EasyVR GUI... 36 5.2.3 Arduino... 36 5.2.4 Arduino UI... 36 5.2.5 Integração Arduino com EasyVR... 36 2

5.2.6 Motores... 37 5.2.7 Maquete... 37 6.0 Análise dos Riscos... 38 7.0 Plano de Testes... 41 7.1 EasyVR...... 41 7.2 EasyVR GUI 2.1.8... 41 7.3 Arduino UNO... 42 7.4 Arduino UI... 42 7.5 Motores... 43 7.6 Maquete... 43 8.0 Conclusão... 44 9.0 Referências Bibliográficas... 45 3

Índice de Figuras Pontifícia Universidade Católica do Paraná Figura 1 - Diagrama de Bloco da Visão Geral do Projeto... 8 Figura 2 - Dimensionamento Físico... 8 Figura 3 - Atribuição de Pinos... 9 Figura 4 - Representação do Frame de dados Transmitido pelo EasyVR.... 10 Figura 5 - Conexão entre os módulos EasyVR e Arduino Uno.... 10 Figura 6 - Treinamento de Comando.... 11 Figura 7 - Diagrama Elétrico do Arduino Uno.... 13 Figura 8 Fluxograma... 14 Figura 9 - Grupo 1 no EasyVR Gui... 16 Figura 10 - Grupo 2 no EasyVR Gui... 17 Figura 11 - Grupo 3 no EasyVR Gui... 18 Figura 12 - Grupo 4 no EasyVR Gui... 19 Figura 13 - Fluxo dos comandos... 19 Figura 14 - Arduino com Arquivo CamaHospitalar.pde.... 21 Figura 15 Motor DC 12V com Caixa de Redução.... 22 Figura 16 Diagrama Elétrico do L298.... 23 Figura 17 Protótipo da Maquete.... 24 Figura 18 - Cronograma Parte 1... 25 Figura 19 - Cronograma Parte 2... 26 Figura 20 - Cronograma Parte 3... 27 Figura 21 - Cronograma Parte 4... 28 Figura 22 - Cronograma Parte 5... 29 Figura 23 - Cronograma Parte 6... 30 Figura 24 - Cronograma Parte 7... 31 Figura 25 - Cronograma Parte 8... 32 Figura 26 - Cronograma Parte 9... 33 Figura 27 - Diagrama de Blocos da Visão Geral do Projeto... 41 Figura 28 - Visão geral da maquete.... 47 Figura 29 - Parte de elevação da região onde a perna fica situada.... 47 Figura 30 - Parte de elevação da região onde o dorso fica situado.... 48 Figura 31 - Engrenagens e motores da maquete.... 49 Figura 33 - Driver do Motor... 50 Figura 32 - Arduino e EasyVR... 50 Figura 34 - Circuitos implementados na maquete e no motor do dorso.... 51 Figura 35 - Speaker e motor da perna.... 52 4

Índices de Tabelas Tabela 1 - Atribuição de Pinos do EasyVR.... 9 Tabela 2 - Características do Microcontrolador ATmega328.... 12 Tabela 3 - Tabela de Comandos no EasyVR Gui... 16 Tabela 4 - Tabela de Análise de Riscos... 40 Tabela 5 - Tabela de Testes do EasyVR... 41 Tabela 6 - Tabela de Testes do EasyVR GUI 2.1.8... 42 Tabela 7 - Tabela de Testes do Arduino Uno... 42 Tabela 8 - Tabela de Testes do Arduino UI... 43 Tabela 9 - Tabela de Testes dos Motores... 43 Tabela 10 - Tabela de Testes da Maquete... 44 5

1.0 Resumo As tarefas comuns do dia a dia são desafiantes para qualquer indivíduo e tornam-se muito mais complicadas para pessoas com deficiência motora que são dependentes de outras para realização de suas necessidades mais básicas. Sabendo desta incapacidade que acomete deficientes físicos, sobretudo pessoas tetraplégicas, que não movimentam braços e pernas, e com o intuito de fazer com que tenham cada vez mais independência motora, este projeto visa criar uma cama hospitalar automatizada facilitando a realização de movimentos básicos como, por exemplo, possibilitando a regulagem da cama utilizando apenas comandos de voz. Empregando a tecnologia de reconhecimento de voz através do módulo EasyVR que utiliza a interface serial RS-232 para se comunicar com outros módulos como o Arduino, um microcontrolador ATmega328 que irá controlar os motores que atuarão na maquete da cama hospitalar. 6

2.0 Introdução Visando propiciar autonomia para pessoas com necessidades motoras específicas, que não podem realizar voluntariamente movimentos dos membros superiores e inferiores, a possibilidade de atingir independência através de comandos de voz para a realização de tarefas faz toda a diferença. O objetivo da cama hospitalar é possibilitar o ajuste de uma cama conforme a vontade e necessidade do usuário por meio de comandos de voz, dando assim independência ao usuário em suas tarefas cotidianas. Neste projeto não está incluso o ajuste de elevação vertical (altura), expansão horizontal e rotação longitudinal da cama. Também não está incluso nenhuma espécie de massagem ou colchão de ar para o tratamento de hematomas e escaras ocasionadas pela falta de movimentação do usuário. O desenvolvimento deste projeto visa realizar o ajuste de elevação do tronco do usuário bem como a elevação da parte inferior de seu corpo através de comandos de voz. Este documento traz seções onde são detalhados: O problema tratado com aspectos relevantes. Soluções já existentes que possuem a mesma tecnologia empregada neste projeto. Descrição funcional da solução incluindo diagrama de blocos para que se tenha uma visão geral do sistema. Tecnologias que serão empregadas para o desenvolvimento. Testes e validações necessários junto de uma análise de riscos para que se tenha a confiabilidade no sistema em geral. Cronograma do projeto. Procedimento de Teste e Validação do Projeto. Análise dos Riscos. Plano de Testes. Conclusão da solução proposta resumindo os objetivos a serem alcançados no projeto. 7

3.0 Detalhamento do Projeto O projeto está separado em cinco módulos, cada um com uma função específica. 3.1 EasyVR Figura 1 - Diagrama de Bloco da Visão Geral do Projeto É um módulo de voz projetado para ser utilizado em qualquer aplicação que seja necessário um reconhecimento de voz. Podem ser usados com qualquer host que possua uma comunicação serial RS-232, alimentado a 3.3V 5V. O microfone fornecido com o módulo EasyVR é um microfone condensador onidirecional (Horn EM9745P-382). Possui sensibilidade -38dB, impedância de carga 2.2k, tensão de operação 3.3V e resposta de freqüência na faixa de 100Hz a 20kHz. Figura 2 - Dimensionamento Físico 8

3.1.1 Atribuição de Pinos O EasyVr conta com pinos de comunicação, de energia, microfone e IO s. A tabela 1 mostra a atribuição de pinos do EasyVR. Conector Número Nome Tipo Descrição J1 1 GND - Terra 2 VCC I Alimentação DC 3 ERX I Entrada de dados Serial (Nível TTL) 4 ETX O Transmissão de dados Serial (Nível TTL) J2 1 2 PWM O Saída de áudio J3 J4 Figura 3 - Atribuição de Pinos 1 MIC_RET - Terra do Microfone 2 MIC_IN I Sinal de entrada do Microfone 1 /RST I Reset 2 /XM I Seletor de Boot 3 IO1 IO Pino IO de propósito Geral (3.0 VDC TTL) 4 IO2 IO Pino IO de propósito Geral (3.0 VDC TTL) 5 IO3 IO Pino IO de propósito Geral (3.0 VDC TTL) 3.1.2 Configuração Serial Tabela 1 - Atribuição de Pinos do EasyVR. Sua conexão serial possui características imprescindíveis para realizar sua comunicação como: Taxa de transmissão: 9600 (padrão), 19200, 38700, 57600, 115200. 9

Frame: 8 bits de dados, sem paridade, 1 stop bit. Pontifícia Universidade Católica do Paraná Figura 4 - Representação do Frame de dados Transmitido pelo EasyVR. A comunicação se da através de caracteres ASCII. O canal de recebimento RX do EasyVR deve ser ligado ao canal de transmissor do seu Host. O canal de transmissão TX do EasyVR deve ser ligado ao canal de recebimento RX do Host. 3.2 EasyVR GUI 2.1.8 Figura 5 - Conexão entre os módulos EasyVR e Arduino Uno. É usado para configurar os comandos necessários no módulo EasyVR, para realizar sua configuração. O EasyVR deve estar conectado ao PC através do Arduino Uno ou usando uma placa adaptadora. No software o usuário pode definir um novo trigger, grupos de comandos, sons e senhas. Baseado na fala gravada é possível gerar qualquer ação virando assim um comando. 3.2.1 Configuração Deve-se escolher a porta de comunicação em que o dispositivo está conectado para realizar a conexão. Após a conexão estabelecida poderão ser feitas as configurações necessárias. Existem quatro tipos de comandos possíveis no software, são eles: 10

Trigger É um grupo especial de comando, serve como gatilho para efetuar uma ação. É um comando dependente que pode ser alterado pelo usuário, mas vem previamente cadastrado com o comando independente Robot. Group São grupos de comandos dependentes utilizados pelo usuário para definição de quaisquer ações. Password É um grupo especial de comandos dependentes de até cinco senhas vocais. Wordset É um grupo de 22 comandos independentes com ações previamente definidas que podem ser utilizadas em 6 idiomas, Inglês, Italiano, Alemão, Francês, Espanhol e Japonês. SoundTable É um grupo onde é possível inserir áudio.wav para sair através do speaker do EasyVR. Quando o EasyVR GUI conecta-se ao módulo, são lidos todos os comandos definidos pelo usuário e grupos, com isso são armazenados na memória não-volátil do EasyVR. Um comando deve ser treinado duas vezes com a voz do usuário, como é visto na figura 6. Figura 6 - Treinamento de Comando. Se acontecer qualquer erro durante o treinamento do comando, o mesmo será cancelado. Erros poderão acontecer quando a voz do usuário não estiver de alguma maneira correta, por questões de ruídos no ambiente ou o segundo treinamento for muito diferente do primeiro. O software também irá alertar se um comando é muito semelhante a outro já cadastrado, destacando o comando em conflito. 11

3.3 Arduino Uno É uma placa de microcontrolador baseado no ATmega328, possui 14 pinos de entrada/saída digital (dos quais 6 podem ser usados como saídas PWM), 6 entradas analógicas, um cristal oscilador de 16MHz, uma conexão USB, uma entrada de alimentação, uma conexão ICSP e um botão de reset. O Arduino Uno possui um conversor USB para Serial. Características Microcontrolador ATmega328 Tensão Operacional 5V Tensão de entrada (recomendada) 7-12V Tensão de entrada (limites) 6-20V Pinos E/S digitais 14 (dos quais 6 podem ser saídas PWM) Pinos de entrada analógica 6 Corrente CC por pino E/S 40 ma Corrente CC para o pino 3,3V 50 ma Flash Memory 32 KB (ATmega328) dos quais 0,5KB são utilizados pelo bootloader SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328) Velocidade de Clock 16 MHz Tabela 2 - Características do Microcontrolador ATmega328. 12

3.3.1 Alimentação Figura 7 - Diagrama Elétrico do Arduino Uno. É possível conectá-lo pela porta USB (5V) ou por uma fonte externa de 6 a 20 volts. No entanto se alimentação for menor que 7V, o pino 5V pode fornecer menos de 5V e a placa pode se mostrar instável. Da mesma maneira caso a alimentação seja maior que 12V, o regulador pode superaquecer e danificar a placa. Os pinos de alimentação são os seguintes: Vin: A entrada de alimentação para a placa Arduino quando está utilizando uma fonte de alimentação externa. 5V: A fonte de alimentação regulada usada para o microcontrolador e para outros componentes na placa. Pode vir tanto do VIN através do regulador embarcado ou da conexão USB, ou outra fonte regulada em 5V. 3V3: Uma fonte de 3,3V gerada pelo regulador embarcado. A corrente máxima suportada é de 50mA. GND: Pinos terra. 13

3.3.2 Entrada e Saída Cada um dos 14 pinos digitais do Arduino Uno podem ser utilizados como uma entrada ou uma saída utilizando as funções pinmode(), digitalwrite(), e digitalread(). Existem dois pinos referentes à comunicação serial que são os pinos 0 (RX) e o pino 1 (TX), usados para receber (RX) e transmitir (TX) dados seriais TTL. Estes pinos são conectados aos pinos correspondentes do chip serial USB-para-TL ATmega8U2. Possui também um LED no pino 13, que quando este pino está no valor HIGH este LED está aceso, quando o pino está em LOW o LED está apagado. 3.4 Arduino UI O Arduino Uno é programado utilizando uma interface própria chamada de Arduino UI. O ATmega328 no Arduino Uno vem pré-gravado com um bootloader que permite a você enviar um novo código sem a utilização de um programador de hardware externo. Ele se comunica utilizando o protocolo original STK500. 3.4.1 Configuração Figura 8 Fluxograma Após o Arduino estabelecer uma comunicação USB com o PC, o Arduino UI deve ser configurado para a porta COM correta (Tools -> Serial Port). Após está configuração deve-se selecionar o modelo do Arduino utilizado (Tools -> Board). 14

3.4.2 Programação A programação é realizada na sua própria interface, e possui funções específicas para o tratamento das portas de entrada e saída e definições do hardware em geral. Possui diversas bibliotecas para funcionalidades extras como SoftwareSerial, EEPROM, Ethernet entre outras, que são desenvolvidas por terceiros e que para usá-las é necessário instalá-la primeiro. A linguagem de programação usada é C/C++. 3.5 Integração EasyVR com Arduino Uno A integração do módulo EasyVR com Arduino Uno é através da comunicação serial existente entre ambos os módulos. 3.5.1 Hardware O Arduino Uno é ligado via USB que é conectada ao PC. É necessário instalar um driver Serial-USB para que a conexão seja efetuada corretamente. É ligado o ERX e ETX do EasyVR nos pinos 12 (RX) e 13 (TX) (definidos na própria programação) do Arduino Uno, os pinos VCC e GND que alimentam o EasyVR são provenientes de saídas padrões de alimentação que o Arduino Uno possui, através dos pinos 5V e GND. O microfone deve ser inserido no EasyVR ao conector J3. Existem dois tipos de modos que podem ser configurados no Arduino que possibilitam configurações distintas no módulo EasyVR. Estes modos são chamados de Normal Mode e Bridge Mode. O Normal Mode estará sempre ativo, já para o Bridge Mode ser ativado é necessário compilar outro código que pode ser visto no anexo IX. 3.5.2 Software Para haver uma comunicação com o módulo EasyVR e o software EasyVR GUI deve-se compilar no Arduino UI o código que se encontra no anexo IX. Neles serão configurados os comandos de voz respectivos para cada comando. O Index do Grupo é o valor que EasyVR sinaliza ao Arduino em qual grupo ele deverá procurar pelo comando falado. O Index dos Comandos do Grupo é o valor que o EasyVR irá retornar ao Arduino e assim irá verificar se o comando falado é igual ao gravado. Os comandos gravados foram: 15

Index do Grupo Descrição Index dos Comandos do Grupo Nome do Comando 1 Grupo 1 0 ATIVAR_CAMA 0 AJUSTAR_CAMA 2 Grupo 2 1 DESATIVAR_CAMA 0 PERNA 3 Grupo 3 1 DORSO 0 BAIXAR 4 Grupo 4 1 LEVANTAR 2 PARE Tabela 3 - Tabela de Comandos no EasyVR Gui Figura 9 - Grupo 1 no EasyVR Gui 16

Figura 10 - Grupo 2 no EasyVR Gui 17

Figura 11 - Grupo 3 no EasyVR Gui 18

Figura 12 - Grupo 4 no EasyVR Gui Figura 13 - Fluxo dos comandos Para comunicar-se com o módulo EasyVR e o software Arduino UI, é realizado o upload do arquivo CamaHospitalar.pde, Protocol.h, NewSoftSeral.h e NewSoftSerial.cpp no 19

software Arduino UI. Este arquivo possui toda a configuração necessária de pinos, taxa de transmissões para que se faça a correta comunicação entre os módulos e o PC. A partir deste arquivo é feita toda a lógica de programação usando os comandos de fala gravados no EasyVR GUI. O programa que irá controlar os comandos enviados pelo módulo EasyVR e realizar as ações necessárias no módulo de motores, será inserido no Arduino Uno. 20

Figura 14 - Arduino com Arquivo CamaHospitalar.pde. 3.5.2.1 Codificação do Software Com os comandos de voz recebidos do EasyVR é realizado o tratamento dos comandos. Estes comandos são separados por grupos onde cada um tem um tipo de ação que é definida pelo usuário. No anexo IX e X pode ser visto a codificação completa. 21

3.6 Motores Serão utilizados dois motores DC com caixa redutora de 12 Volts de 44 RPM para realização dos ajustes do tronco superior e da parte inferior do corpo. Será utilizado uma Ponte H L298 para efetuar a troca de posição de rotação do motor, oito diodos schottky (1N5819) para supressão da força contra eletromotriz e quatro chave óptica configuradas como fim de curso para garantir que quando a cama atingir sua altura máxima ou mínima pare automaticamente. Figura 15 Motor DC 12V com Caixa de Redução. 22

Figura 16 Diagrama Elétrico do L298. 3.7 Maquete É o módulo que engloba e integra todos os outros módulos do projeto. Será desenvolvida com madeira MDF, acrílico e possuirá engrenagens que serão acionadas pelos motores e realizarão a elevação solicitada pelo usuário. Ambas as partes da cama irão subir ou descer de maneira gradual quando for solicitado, dando assim inúmeras posições para que o usuário tenha um conforto maior e dando a ele uma independência maior ainda. 23

Figura 17 Protótipo da Maquete. 24

4.0 Cronograma Figura 18 - Cronograma Parte 1 25

Figura 19 - Cronograma Parte 2 26

Figura 20 - Cronograma Parte 3 27

Figura 21 - Cronograma Parte 4 28

Figura 22 - Cronograma Parte 5 29

Figura 23 - Cronograma Parte 6 30

Figura 24 - Cronograma Parte 7 31

Figura 25 - Cronograma Parte 8 32

Figura 26 - Cronograma Parte 9 33

5.0 Procedimento de Teste e Validação do Projeto Pontifícia Universidade Católica do Paraná 5.1 Testes em Caixa Preta São direcionados ao usuário que não conhece o funcionamento interno sistema. Para este projeto foram elaborados os seguintes testes para cada módulo: 5.1.1 EasyVR Verifica-se o funcionamento do EasyVR através dos comandos definidos e caso os comandos definidos não efetuem a ação desejada o teste é falho. Dependências: Arduino, Motores, Maquete. 5.1.2 EasyVR GUI Não haverá testes de caixa preta pertinentes ao EasyVR GUI. 5.1.3 Arduino Verifica-se o funcionamento do Arduino através dos comandos definidos e caso os comandos definidos não efetuem a ação desejada o teste é falho. Dependências: EasyVR, Motores, Maquete. 5.1.4 Arduino UI Não haverá testes de caixa preta pertinentes ao Arduino UI. 5.1.5 Integração Arduino e EasyVR Verifica-se o funcionamento da integração do Arduino e EasyVR através dos comandos definidos. Caso os comandos definidos não efetuem a ação desejada o teste é falho. Dependências: EasyVR, Arduino, motores e maquete. 34

5.1.6 Motores Verifica-se o funcionamento do Motor através dos comandos definidos. Caso os comandos definidos não efetuem a ação desejada o teste é falho. Dependências: EasyVR, Arduino, Maquete. 5.1.7 Maquete Verifica-se o funcionamento da maquete através dos comandos definidos. Caso os comandos definidos não efetuem a ação desejada o teste é falho. Dependências: EasyVR, Arduino, Motores. 5.2 Testes em Caixa Branca São direcionados ao desenvolvedor, o qual conhece o funcionamento interno do sistema (lógica utilizada, diagrama dos circuitos, etc). Para este projeto foram elaborados os seguintes testes para cada módulo: 5.2.1 EasyVR Conexão: É realizada uma conexão USB-Serial através do Arduino que é conectado ao PC, e com isso são feitos testes de comunicação através do Hyper Terminal. Verifica-se primeiramente se é estabelecida uma conexão e caso haja, deverá apresentar algum dado no terminal. É realizada uma conexão com MAX RS-232 ao PC, e com isso são feitos testes de comunicação através do Hyper Terminal. Verifica-se primeiramente se é estabelecida uma conexão e caso haja, deverá apresentar algum dado no terminal. É realizada uma conexão Serial Serial ao PC, e com isso são feitos testes de comunicação através do Hyper Terminal. Verifica-se primeiramente se é estabelecida uma conexão e caso haja, deverá apresentar algum dado no terminal. 35

Dependências: Arduino. Comandos: Após a gravação de comandos dependentes, os mesmos são testados para ver se os comandos são detectados corretamente e transmitidos. Os comandos independentes são testados para verificar se estão sendo corretamente detectados e transmitidos. Dependências: Arduino. 5.2.2 EasyVR GUI Verifica-se se as funcionalidades da interface EasyVR GUI estão realizando as devidas tarefas. Dependências: EasyVR. 5.2.3 Arduino Conexão: É realizada uma conexão USB através do Arduino que é conectado ao PC, e com isso são feitos testes de comunicação através do Arduino UI pelo seu Serial Monitor. Verifica-se se é estabelecida uma conexão. Dependências: EasyVR, Arduino UI. 5.2.4 Arduino UI Verifica-se se as funcionalidades da interface Arduino UI estão realizando as tarefas devidas. Dependências: Arduino. 5.2.5 Integração Arduino com EasyVR Para verificar se a sua integração está correta são feitos rotinas diretamente no código embarcado no Arduino em Normal Mode. As respostas são visualizadas no Serial Monitor presente no Arduino UI. São feitas rotinas de validação para verificar se os comandos enviados pelo EasyVR para o Arduino estão sendo tratadas de forma correta e 36

realizando a ação previamente estipuladas. Pontifícia Universidade Católica do Paraná Dependências: EasyVR, Arduino, Arduino UI, EasyVR GUI. 5.2.6 Motores Serão realizados testes de funcionamento e integração com Arduino. Dependências: Arduino. 5.2.7 Maquete Serão realizados testes das engrenagens e se as mesmas estão realizando os devidos ajustes na estrutura. Dependências: Arduino, motores. 37

6.0 Análise dos Riscos Os níveis de relevância referentes à tabela 4 são de 1 a 5. ID Descrição Probabilidade Impacto Severidade Ação/Prevenção Contingência 1 Documentação insuficiente 4 4 3 Pesquisar na web e em documentos acadêmicos Solicitar auxílio ao orientador Probabilidade: Aumentado de 1 para 4. Impacto: Aumentado de 2 para 4. Severidade: Aumentado de 1 para 3. Motivo: Após pesquisas foi verificado que a documentação disponível está completa. 2 Cronograma inviável 5 5 5 Reprogramar o cronograma Aumentar tempo de trabalho Probabilidade: Aumentado de 4 para 5. Impacto: Aumentado de 3 para 5. Severidade: Aumentado de 4 para 5. Motivo: Devido a problemas técnicos no módulo de reconhecimento de voz e falta de suporte ao mesmo. 3 Dificuldade no entendimento da tecnologia utilizada 2 4 5 Iniciar o estudo antecipadamente. Solicitar auxílio ao orientador. Motivo da Retirada: As dificuldades já foram sanadas. 4 Problema na compra do módulo EasyVR 1 4 5 Comprar com antecedência e rastrear o envio do produto. Comprar novo módulo. Probabilidade: Diminuído de 3 para 1. Motivo: Novo modelo disponível para compra. 5 Problema na compra do microcontrolad or Arduino 3 4 5 Comprar com antecedência e rastrear o envio do produto. Comprar novo microcontrola dor. Motivo da Retirada: O Arduino já foi comprado. 38

6 Queima do módulo de reconheciment o de voz 5 5 5 Estudar a documentação e possuir módulos de voz reserva. Comprar novo módulo de reconhecimen to de voz. Probabilidade: Aumentado de 2 para 5. Motivo: Após inúmeros testes realizados foi diagnosticada a queima do módulo. 7 Queima do microcontrolad or Arduino 2 5 5 Estudar a documentação e possuir microcontrolador de reserva. Comprar novo microcontrola dor. 8 Queima dos motores 2 2 2 Estudar a documentação e possuir motores reservas. Comprar novo motor. 9 Falha na implementação do EasyVR e Arduino 3 5 5 Efetuar testes de casos antes da implementação. Buscar auxílio a empresas coerentes a área. Impacto: Aumentado de 3 para 5. Severidade: Aumentado de 3 para 5. Motivo: O EasyVR e o Arduino são os pilares para todo o andamento do projeto. 10 Falha na implementação entre EasyVR, Arduino e Motores 3 4 4 Buscar em comunidades de desenvolvimento exemplos e implementações de comunicações com motores. Buscar auxílio a empresas coerentes a área. 11 Falta de EasyVR no mercado 1 3 3 Estudar a documentação do dispositivo de reconhecimento de voz CI HM2007. Comprar o dispositivo de reconhecimen to de voz CI HM2007. Probabilidade: Diminuído de 2 para 1. Motivo: Grande estoque do novo modelo disponível no mercado. 39

12 Falta de Arduino UNO no mercado 1 3 3 Estudar a documentação de outro microcontrolador. Comprar novo microcontrola dor. Probabilidade: Diminuído de 2 para 1. Motivo: Grande estoque disponível no mercado. 13* Impossibilidade do uso do EasyVR 2 4 4 Estudar a documentação do HM 2007. Realizar a compra do HM 2007. Tabela 4 - Tabela de Análise de Riscos 40

7.0 Plano de Testes Os testes realizados são baseados no diagrama geral do projeto, apresentado na figura 1 deste documento e repetida a seguir na figura 25: 7.1 EasyVR Figura 27 - Diagrama de Blocos da Visão Geral do Projeto Testes Detectar som da voz. Transmissão de feedback de comandos Descrição Têm como finalidade detectar o som da voz do usuário. Têm como finalidade reportar ao usuário se o comando foi efetuado corretamente. Resultados Esperados Verificar o comando de voz se está ou não está correto. Escutar o feedback de comandos efetuados corretamente. Tabela 5 - Tabela de Testes do EasyVR Resultados Obtidos Obtivemos sucesso no teste. Obtivemos sucesso no teste. Ação tomada em caso de falha do teste Repetir comando de voz. Revisar código. 7.2 EasyVR GUI 2.1.8 Testes Gravar som da voz. Descrição Gravar o som da voz do usuário. Resultados Esperados Verificar se a gravação de voz foi efetuada. Resultados Obtidos Obtivemos sucesso no teste. Ação tomada em caso de falha do teste Repetir comando de voz. Reconhecer o Reconhecer o som Verificar se o Obtivemos Regravar 41

som da voz gravada. Apagar o comando da gravação de voz. Incluir um comando de voz em um grupo. Incluir mais de um Trigger no grupo Trigger. Incluir comandos de vozes semelhantes. gravado anteriormente. Têm como finalidade apagar um comando de voz gravado anteriormente. Fazer uma gravação de voz virar um comando de voz. Têm como finalidade ter mais de um gatilho de comando de voz. Gravar comandos parecidos, mas com significado diferente. som da voz é reconhecido. Verificar se o comando de voz foi realmente excluído. Verificar se a gravação de voz foi bem sucedida. Verificar se a inserção do comando no grupo Trigger foi efetuado. Gravar comando com sucesso. sucesso no teste. Obtivemos sucesso no teste. Obtivemos sucesso no teste. Não obtivemos sucesso no teste. Não obtivemos sucesso no teste. Tabela 6 - Tabela de Testes do EasyVR GUI 2.1.8 comando de voz. Não é possível haver falha. Gravar novamente a voz e inseri - lá em um grupo. Gravar apenas um trigger. Gravar comandos de vozes que não se assemelhem na dicção. 7.3 Arduino UNO Testes Funcionamento do TX. Comunicação Serial. Descrição Verificar se o EasyVR esta escutando. Verificar se a comunicação esta sendo feita. Resultados Esperados Verificar se os comandos ditos estão sendo escutados. Os LED`S TX e RX deverão piscar. Resultados Obtidos Obtivemos sucesso no teste. Obtivemos sucesso no teste. Tabela 7 - Tabela de Testes do Arduino Uno Ação tomada em caso de falha do teste Repetir comando de voz. Verificar se os fios estão ligados de maneira correta. 7.4 Arduino UI Testes Função programada correta. Descrição Verificar se o comando de voz está de acordo com a função Resultados Esperados Verificar se os comandos de voz estão sendo escutados de Resultados Obtidos Obtivemos sucesso no teste. Ação tomada em caso de falha do teste Depurar o código. 42

Transmissão RX/TX. Rotação dos motores Direita / Esquerda. programada. Verificar se a configuração da comunicação serial está correta. Verificar se a programação está correta. acordo com sua função. Verificar se a comunicação está sendo feita corretamente. Motores deverão girar para o lado correto quando for solicitado. Tabela 8 - Tabela de Testes do Arduino UI Obtivemos sucesso no teste. Obtivemos sucesso no teste. Verificar codificação do programa. Verificar codificação do programa. 7.5 Motores Testes Funcionamento do motor. Rotação Direita / Esquerda do motor. Velocidade de rotação. Descrição Verificar o funcionamento do motor. Verificar a funcionalidade do motor. Verificar se a velocidade do motor está de acordo. Resultados Esperados Funcionar o motor. O motor deverá girar para esquerda e direita. Estar com um torque suficiente para elevar o encosto da maquete em um minuto. Tabela 9 - Tabela de Testes dos Motores Resultados Obtidos Obtivemos sucesso no teste. Obtivemos sucesso no teste. Obtivemos sucesso no teste. Ação tomada em caso de falha do teste Verificar conexões e programação. Verificar conexões e programação. Obter um novo motor. 7.6 Maquete Testes Funcionamento das engrenagens. Ângulo de elevação da maquete. Descrição Verificar a funcionalidade das engrenagens. Verificar se o ângulo de subida e descida está proporcional. Resultados Esperados A engrenagem fornecer o torque e velocidade desejada. Subida e descida com um ângulo de acordo. Resultados Obtidos Obtivemos sucesso no teste. Obtivemos sucesso no teste. Ação tomada em caso de falha do teste Redimensionar as engrenagens. Verificar as estruturas da maquete. 43

Velocidade de subida e descida. Verificar se o tempo de subida e descida está razoável para exemplificar o problema proposto. Estar com um bom tempo de subida e descida para exemplificar o problema proposto. Obtivemos sucesso no teste. Verificar as engrenagens da maquete. Verificar funcionamento dos sensores. Verificar se os sensores de altura máxima e altura mínima estão funcionando. Parar a movimentação da cama quando chegar na altura limite. Obtivemos sucesso no teste. Verificar posicionamento dos sensores e código. Verificar funcionamento do LED. Verificar se o LED está acesso quando a cama estiver ativada. LED deverá ficar acesso enquanto a cama estiver ativada. Obtivemos sucesso no teste. Verificar funcionamento do LED e o código. Tabela 10 - Tabela de Testes da Maquete 8.0 Conclusão O desenvolvimento deste projeto visa possibilitar mais autonomia a deficientes físicos, principalmente, com tetraplegia. Em algumas situações, pode facilitar que pessoas temporariamente incapacitadas de movimentação de membros superiores realizem movimentos básicos artificialmente dando autonomia ao paciente e tornando seu dia a dia mais confortável. A integração e utilização do módulo EasyVR possui certos aspectos interessantes mas há também alguns empecilhos, como falta de suporte adequado aos seus consumidores, e falta de informações específicas sobre o uso do produto com outros host s, o que dificultou o andamento do projeto. Outro fator que dificultou o andamento do projeto foi o difícil acesso a este produto no Brasil, o que acaba gerando alguns problemas na hora da procura e da compra, com isso conseqüentemente falta de suporte na língua portuguesa. Pelo fato do EasyVR ser um produto muito novo no mercado, existem poucas informações sobre o mesmo, e as que são encontradas são imprecisas. O produto também possui um hardware muito mal acabado que acaba dificultando se ele está operacional ou não. A equipe enfrentou alguns problemas em fazer a comunicação entre o módulo 44

EasyVR, módulo Arduino Uno e PC devido as dificuldades já citadas. Apesar destes empecilhos, a equipe providenciou outro módulo EasyVR, e com este novo módulo conseguiu sanar todos os problemas de comunicação citadas no documento. Devido a algumas limitações de programação encontradas na biblioteca divulgada pelos próprios fabricantes do EasyVR, tivemos alguns problemas durante a programação dos comandos de voz. O problema aconteceu devido a uma nova lógica que decidimos adotar para facilitar e gerar mais segurança ao usuário. A cama irá parar de se movimentar através do comando de voz parar e também através de um sensor para que caso ela chegue ao seu limite inferior ou limite superior. Conseguimos superar este problema através de uma nova programação e também através de portas lógicas. Uma botoeira de emergência, botões físicos para subir e descer a cama e um botão para deixar a cama em sua posição inicial poderão ser implementadas no projeto a fim de aumentar o leque de pessoas que poderão utilizar a cama, como pessoas que não possui uma boa dicção ou com problemas vocais e para facilitar a retirada ou entrada do usuário da cama. 9.0 Referências Bibliográficas EasyVR - Voice Recognition Module. Disponível em: <http://www.veear.eu/products/vrbot.aspx >. Acesso em 19 de abril de 2011. Arduino Uno. Disponível em: < http://multilogica-shop.com/arduino-uno >. Acesso em 19 de abril de 2011. HM2007: Speech Recognition Datasheet. Disponível em: < http://www.datasheetcatalog.org/datasheets/2300/499674_ds.pdf >. Acesso em 20 de abril de 2011. MCLOUGHLIN, Ian., Applied Speech and Audio Processing: With Matlab Examples, Cambridge University Press, 2009. L298: DUAL FULL-BRIDGE DRIVER. Disponível em: <http://www.datasheetcatalog.org/datasheet/sgsthomsonmicroelectronics/mxrqqxz.p df>. Acesso em 15 de novembro de 2011. 45

Chaves Ópticas. Disponível em: <http://www.newtoncbraga.com.br/index.php/como-funciona/872-acopladores-echaves-opticas-art120.html>. Acesso em 15 de novembro de 2011. 1N5819: Schottky Barrier Rectifier. Disponível em: <http://www.datasheetcatalog.org/datasheets/134/98455_ds.pdf>. Acesso em 15 de novembro de 2011. 46

Anexo I Visão geral da maquete Figura 28 - Visão geral da maquete. Anexo II Parte da elevação da perna da maquete Figura 29 - Parte de elevação da região onde a perna fica situada. 47

Anexo III Parte da elevação do dorso da maquete Pontifícia Universidade Católica do Paraná Figura 30 - Parte de elevação da região onde o dorso fica situado. 48

Pontifícia Universidade Católica do Paraná Anexo IV Engrenagens e motores da maquete Figura 31 - Engrenagens e motores da maquete. 49

Pontifícia Universidade Católica do Paraná Anexo V Arduino e EasyVR Figura 32 - Arduino e EasyVR Anexo VI Driver do Motor Figura 33 - Driver do Motor 50

Pontifícia Universidade Católica do Paraná Anexo VII Circuitos implementados na maquete e motor do dorso Figura 34 - Circuitos implementados na maquete e no motor do dorso. 51

Pontifícia Universidade Católica do Paraná Anexo VIII Speaker e motor da perna Figura 35 - Speaker e motor da perna. Anexo IX Codificação do código Bridge Mode #include "EasyVR.h" EasyVRBridge bridge; void setup() { cli(); bridge.loop(0, 1, 12, 13); void loop() { 52

Anexo X Codificação do código Normal Mode #include "NewSoftSerial.h" #include "protocol.h" #include "EasyVR.h" Pontifícia Universidade Católica do Paraná #define som_ajustefinalizado 1 #define som_camaativada 2 #define som_camadesativada 3 #define som_configuracoesefetuadas 4 #define som_dorsobaixando 5 #define som_dorsolevantando 6 #define som_dorsoselecionado 7 #define som_inicializandoconfiguracoes 8 #define som_pernabaixando 9 #define som_pernalevantando 10 #define som_pernaselecionada 11 #define som_qualacaorealizar 12 #define som_qualregiaoajustar 13 #define RXPIN 12 #define TXPIN 13 NewSoftSerial VRserial(RXPIN, TXPIN); EasyVR easyvr(vrserial); byte VRbot_receivePin; byte VRbot_transmitPin; long VRbot_baudRate; int VRbot_bitPeriod; int StatusCama = 0; //se 1 cama ativada se 0 cama desativada int StatusAjuste = 0; //se 1 cama ativada se 0 cama desativada int StatusRegiao = 0; //se 1 cama ativada se 0 cama desativada int StatusSensorA0; //SENSOR DE MINIMO PERNAS int StatusSensorA1; //SENSOR DE MAXIMO PERNAS int StatusSensorA2; //SENSOR DE MINIMO DORSO int StatusSensorA3; //SENSOR DE MAXIMO DORSO int verificapelosensor; int somregiao = 0; int somacao = 0; void setup(){ pinmode(0, OUTPUT); pinmode(1, INPUT); pinmode(2,output); 53

pinmode(3,output); pinmode(4,output); pinmode(5, OUTPUT); //Status led de aguardando comando de voz pinmode(6, OUTPUT); pinmode(7, OUTPUT); pinmode(8, OUTPUT); //OUTPUT 1 PARA O MOTOR pinmode(9, OUTPUT); //OUTPUT 2 PARA O MOTOR pinmode(10, OUTPUT); //ATIVA/DESATIVA MOTOR DAS PERNAS pinmode(11, OUTPUT); //ATIVA/DESATIVA MOTOR DO DORSO pinmode(12, INPUT); //VRbot_receivePin pinmode(13, OUTPUT); //VRbot_transmitPin digitalwrite(2, LOW); if(analogread(a0) > 400){ StatusSensorA0 = 1; StatusSensorA1 = 0; if(analogread(a1) > 400){ StatusSensorA1 = 1; StatusSensorA0 = 0; if(analogread(a2) > 400){ StatusSensorA2 = 1; StatusSensorA3 = 0; if(analogread(a3) > 400){ StatusSensorA3 = 1; StatusSensorA2 = 0; Serial.begin(9600); delay(200); Pontifícia Universidade Católica do Paraná Serial.println("Software - Cama Hospitalar. Versao: 4.5"); Serial.println("CONFIGURACAO - Modo Normal"); VRbot_baudRate = 9600; VRbot_bitPeriod = 1000000 / VRbot_baudRate; VRbot_receivePin = 12; VRserial.begin(9600); digitalwrite(vrbot_transmitpin, HIGH); delaymicroseconds( VRbot_bitPeriod); easyvr.playsound(som_inicializandoconfiguracoes, EasyVR::VOL_FULL); 54

if (!VRbot_Detect()) Serial.println("EASYVR DETECTADO - NAO"); else { Serial.println("EASYVR DETECTADO - SIM"); VRbot_SetTimeout(10); VRbot_SetLanguage(0); easyvr.playsound(som_configuracoesefetuadas, EasyVR::VOL_FULL); void loop() { if(statuscama == 0) { AtivarCama(); else if(statusajuste == 0) { VerificaAjuste(); else if(statusregiao == 0) { VerificaRegiao(); else { RealizaAcao(); void AtivarCama() { int trigger; Serial.println("Para ligar a cama diga: ATIVAR CAMA"); VRbot_RecognizeSD(1); trigger = VRbot_CheckResult(); if( trigger == -1){ Serial.println("Timeout de 10 segundos atingido!"); return; else if( trigger == -2){ //Serial.println("Comando Invalido!!!"); //return; AtivarCama(); else if( trigger == 0 ){ Serial.println("CAMA ATIVADA"); digitalwrite(2, HIGH); 55

easyvr.playsound(som_camaativada, EasyVR::VOL_FULL); StatusCama = 1; return; void VerificaAjuste() { int Ajuste; Serial.println("Para realizar algum ajuste diga: AJUSTAR CAMA"); VRbot_RecognizeSD(2); Ajuste = VRbot_CheckResult(); if( Ajuste == -1){ Serial.println("Timeout de 10 segundos atingido!"); return; else if( Ajuste == -2){ //Serial.println("Comando Invalido!!!"); //return; VerificaAjuste(); else if( Ajuste == 0 ){ StatusAjuste = 1; return; else if( Ajuste == 1){ easyvr.playsound(som_camadesativada, EasyVR::VOL_FULL); StatusCama = 0; StatusAjuste = 0; Pontifícia Universidade Católica do Paraná void VerificaRegiao() { int RegiaoRecebida; Serial.println("AJUSTAR REGIAO - DORSO OU PERNA DESLIGAR CAMA"); if(somregiao==0) easyvr.playsound(som_qualregiaoajustar, EasyVR::VOL_FULL); VRbot_RecognizeSD(3); RegiaoRecebida = VRbot_CheckResult(); if( RegiaoRecebida == -1){ somregiao = 1; Serial.println("Timeout de 10 segundos atingido!"); return; else if( RegiaoRecebida == -2){ 56

somregiao = 1; VerificaRegiao(); else if( RegiaoRecebida == 0 ){ Serial.println("REGIAO SELECIONADA - PERNA"); easyvr.playsound(som_pernaselecionada, EasyVR::VOL_FULL); digitalwrite(11, LOW); //DESATIVA MOTOR DORSO digitalwrite(10, HIGH); //ATIVA MOTOR PERNAS StatusRegiao = 1; //REGIAO PERNA SELECIONADA return; else if( RegiaoRecebida == 1 ){ Serial.println("REGIAO SELECIONADA - DORSO"); easyvr.playsound(som_dorsoselecionado, EasyVR::VOL_FULL); digitalwrite(10, LOW); //DESATIVA MOTOR PERNA digitalwrite(11, HIGH); //ATIVA MOTOR DORSO StatusRegiao = 2; //REGIAO DORSO SELECIONADA return; void RealizaAcao() { int AcaoRecebida; Serial.println("ACAO - LEVANTAR, BAIXAR OU PARAR?"); if(somacao==0){ delay(600); easyvr.playsound(som_qualacaorealizar, EasyVR::VOL_FULL); VRbot_RecognizeSD(4); verificapelosensor = 1; AcaoRecebida = VRbot_CheckResult(); Pontifícia Universidade Católica do Paraná if( AcaoRecebida == -1){ somacao = 1; Serial.println("Timeout de 10 segundos atingido!"); return; else if( AcaoRecebida == -2){ somacao = 1; RealizaAcao(); else if( AcaoRecebida == 0 && ((StatusSensorA0==0 && StatusRegiao==1) (StatusSensorA2==0 && StatusRegiao==2)) ){ somacao = 1; digitalwrite(8, LOW); digitalwrite(9, LOW); if(statusregiao==1) 57

easyvr.playsound(som_pernabaixando, EasyVR::VOL_FULL); else easyvr.playsound(som_dorsobaixando, EasyVR::VOL_FULL); Pontifícia Universidade Católica do Paraná Serial.println("LEVANTANTO..."); digitalwrite(8, HIGH); digitalwrite(9, LOW); return; else if( (AcaoRecebida == 1 && ((StatusSensorA1==0 && StatusRegiao==1) (StatusSensorA3==0 && StatusRegiao==2)) ){ somacao = 1; digitalwrite(8, LOW); digitalwrite(9, LOW); if(statusregiao==1) easyvr.playsound(som_pernalevantando, EasyVR::VOL_FULL); else easyvr.playsound(som_dorsolevantando, EasyVR::VOL_FULL); Serial.println("BAIXANDO..."); digitalwrite(8, LOW); digitalwrite(9, HIGH); return; else if( AcaoRecebida ==2 AcaoRecebida == -3){ somregiao = 0; somacao = 0; Serial.println("PARADO"); digitalwrite(8, LOW); digitalwrite(9, LOW); digitalwrite(10, LOW); digitalwrite(11, LOW); StatusAjuste = 0; StatusRegiao = 0; easyvr.playsound(som_ajustefinalizado, EasyVR::VOL_FULL); return; boolean VerificaSensor() { if(analogread(a0) > 400){ digitalwrite(6, HIGH); 58

else{ StatusSensorA0 = 0; digitalwrite(6, LOW); if(analogread(a1) > 400){ digitalwrite(7, HIGH); else{ StatusSensorA1 = 0; digitalwrite(7, LOW); if(analogread(a2) > 400){ digitalwrite(7, HIGH); else{ StatusSensorA2 = 0; digitalwrite(7, LOW); if(analogread(a3) > 400){ digitalwrite(7, HIGH); else{ StatusSensorA3 = 0; digitalwrite(7, LOW); if (StatusSensorA0 == 0){ if (analogread(a0) > 400 && verificapelosensor == 1){ verificapelosensor = 0; StatusSensorA0 = 1; Serial.println("CAMA PAROU PELO SENSOR 0"); return true; if(statussensora1 == 0){ if (analogread(a1) > 400 && verificapelosensor == 1){ verificapelosensor = 0; StatusSensorA1 = 1; Serial.println("CAMA PAROU PELO SENSOR 1"); return true; if(statussensora2 == 0){ if (analogread(a2) > 400 && verificapelosensor == 1){ verificapelosensor = 0; 59

StatusSensorA2 = 1; Serial.println("CAMA PAROU PELO SENSOR 2"); return true; if(statussensora3 == 0){ if (analogread(a3) > 400 && verificapelosensor == 1){ verificapelosensor = 0; StatusSensorA3 = 1; Serial.println("CAMA PAROU PELO SENSOR 3"); return true; return false; /*******************************************************************************/ unsigned char VRbot_read(void) { while(1){ if(vrserial.available()) { return VRserial.read(); else if(verificasensor()){ return STS_SENSOR; void VRbot_write(int val) { VRserial.write(val); /*******************************************************************************/ unsigned char VRbot_Detect(void) { unsigned char i; for (i = 0; i < 5; ++i) { delay(100); VRbot_write(CMD_BREAK); if ( VRbot_read() == STS_SUCCESS) return 255; return 0; Pontifícia Universidade Católica do Paraná 60

unsigned char VRbot_SetLanguage(unsigned char lang) { VRbot_write(CMD_LANGUAGE); delay(5); VRbot_write(ARG_ZERO + lang); if (VRbot_read() == STS_SUCCESS) return 255; return 0; void VRbot_RecognizeSD(unsigned char group) { VRbot_write(CMD_RECOG_SD); delay(5); VRbot_write(ARG_ZERO + group); void VRbot_RecognizeSI(unsigned char ws) { VRbot_write(CMD_RECOG_SI); delay(5); VRbot_write(ARG_ZERO + ws); void VRbot_SetTimeout(unsigned char s) { VRbot_write(CMD_TIMEOUT); delay(5); VRbot_write(ARG_ZERO + s); delay(5); signed char VRbot_CheckResult(void) { unsigned char rx; rx = VRbot_read(); if (rx == STS_SIMILAR rx == STS_RESULT) { delay(5); VRbot_write(ARG_ACK); return (VRbot_read() - ARG_ZERO); if (rx == STS_TIMEOUT) return -1; if (rx == STS_SENSOR) return -3; return -2; 61