Você está na página 1de 66

UNIVERSIDADE FEDERAL DE PERNAMBUCO

CENTRO DE TECNOLOGIA E GEOCIÊNCIAS


CURSO DE ENGENHARIA ELETRÔNICA
TRABALHO DE GRADUAÇÃO

Pedro Filipe Leite Correia de Toledo


Pedro Lyra Pereira Cabral

Interruptor Eletrônico Controlado por Palmas

RECIFE,
28 DE JULHO DE 2010
UNIVERSIDADE FEDERAL DE PERNAMBUCO
CENTRO DE TECNOLOGIA E GEOCIÊNCIAS
CURSO DE ENGENHARIA ELETRÔNICA
TRABALHO DE GRADUAÇÃO

Pedro Filipe Leite Correia de Toledo


Pedro Lyra Pereira Cabral

Interruptor Eletrônico Controlado por Palmas

Trabalho de Graduação apresentado como


requisito para obtenção do título de Bacharel
em Engenharia Elétrica Eletrônica em Julho
de 2010, pelo Curso de Engenharia Elétrica
Eletrônica da Universidade Federal de
Pernambuco
Orientador: João Paulo Cerquinho Cajueiro

RECIFE,
28 DE JULHO DE 2010
Pedro Filipe Leite Correia de Toledo
Pedro Lyra Pereira Cabral

Interruptor Eletrônico Controlado por Palmas

Trabalho de Graduação apresentado como


requisito para obtenção do título de Bacharel
em Engenharia Elétrica Eletrônica em Julho
de 2010, pelo Curso de Engenharia Elétrica
Eletrônica da Universidade Federal de
Pernambuco
Orientador: João Paulo Cerquinho Cajueiro

Aprovado em 28 de Julho de 2010

BANCA EXAMINADORA

___________________________________________________________________
Professor João Paulo Cerquinho Cajueiro – Universidade Federal de Pernambuco

___________________________________________________________________
Professor Mauro Rodrigues dos Santos – Universidade Federal de Pernambuco

___________________________________________________________________
Professor Tomaz de Carvalho Barros – Universidade Federal de Pernambuco
DEDICATÓRIA

Eu dedico este trabalho a toda minha família e amigos, em especial a minha avó Edite Leite
da Silva (in memoriam)
Pedro Toledo

Dedico este trabalho a meus queridos pais e irmãs, que sempre me apoiaram nesta longa
empreitada da graduação
Pedro Cabral
“Probabilitas enim est gradus certitudinis, et ab hac differt ut pars à toto."
Jacob Bernoulli
RESUMO

Este trabalho se constitui do desenvolvimento de um circuito que tem a função de um


interruptor controlado a palmas. O circuito tem uma parte analógica e outra digital. A parte
analógica deve receber o sinal sonoro através de um microfone e filtrá-lo para gerar um im-
pulso digital correspondente a palma e utiliza componentes como capacitores, resistores, am-
plificadores operacionais, além do circuito integrado LM 555, operando como monoestável. O
processamento digital foi feito utilizando o microcontrolador PIC 16F877A do fabricante mi-
crochip. O circuito também possibilita gravar uma sequência de palmas, para que o interrup-
tor seja ativado apenas quando esta sequência for repetida.
LISTA DE FIGURAS

Figura 1 - Diagrama de Blocos do Circuito .............................................................................. 12


Figura 2 - Circuito do sensor completo .................................................................................... 13
Figura 3 - Microfone de carvão (Esquemas Eletrônicos, 2010) .............................................. 14
Figura 4 - Microfone de cristal (Esquemas Eletrônicos, 2010) ................................................ 14
Figura 5 - Microfone condensador (PCB Piezotronics, 2010) ................................................. 15
Figura 6 - Microfone condensador de eletreto.......................................................................... 15
Figura 7 - Microfone magnético dinâmico ............................................................................... 15
Figura 8 - Um microfone magnético dinâmico típico .............................................................. 16
Figura 9 - Principais diagramas direcionais de microfones (WIKIPEDIA, 2010) ................... 16
Figura 10 - Esquema do filtro passa altas ativo ........................................................................ 17
Figura 11 - Resposta em frequência do filtro passa alta ativo .................................................. 18
Figura 12 – Esquema de conexão dos pinos do 555 (STMicroelectronics, 2008) ................... 18
Figura 13 - Esquema simplificado do 555 (STMicroelectronics, 2008) .................................. 18
Figura 14 - Esquema de ligação como monoestável (STMicroelectronics, 2008) ................... 19
Figura 15 - Esquema da ligação do 555 ................................................................................... 20
Figura 16 - Filtro passa-baixas ................................................................................................. 20
Figura 17 - Resposta em frequência do filtro passa-baixa ....................................................... 21
Figura 18 - Foto do PIC 16F877A (Fonte: HTTP://www.solarbotics.com)............................. 23
Figura 19 - Esquema do PIC 16F877A (fonte: http://derbytimer.com/diy/) ............................ 24
Figura 20 - Esquemático do modo de operação astável (STMicroelectronics, 2008) .............. 25
Figura 21 - Esquema de ligação do astável .............................................................................. 26
Figura 22 - Displays de 7 segmentos comerciais (Soares, 2009) ............................................. 27
Figura 23 - Ligação dos pinos do display de 7 segmentos (Soares, 2009) ............................... 27
Figura 24 - Ligação cátodo comum e ânodo comum (Soares, 2009) ....................................... 28
Figura 25 - Esquema do modo de varredura (Soares, 2009) .................................................... 28
Figura 26 - Ligação do circuito para fazer a varredura ............................................................ 29
Figura 27 - Foto de um display LCD de 16 pinos .................................................................... 30
Figura 28 - Esquema de ligação do LCD (Messias, 2007) ....................................................... 31
Figura 29 - Diagrama de tempo do protocolo de comunicação ................................................ 32
Figura 30 - Tempo entre duas palmas ...................................................................................... 37
Figura 31 - Diagrama de tempo de varredura dos displays de 7 segmentos ............................ 37
Figura 32 - Fluxograma do programa detector de duas palmas ............................................... 38
Figura 33 - Fluxograma do programa detector de sequência de palmas .................................. 40
LISTA DE TABELAS

Tabela 1 - Pinagem do LCD ..................................................................................................... 30


Tabela 2 - Descrição do RS ...................................................................................................... 31
Tabela 3 - Descrição do R/W ................................................................................................... 31
Tabela 4 - Comando 0x30 ........................................................................................................ 32
Tabela 5 - Comando de comunicação em 8 vias ...................................................................... 33
Tabela 6 - Comando para limpar o display............................................................................... 33
Tabela 7 - Comando para ligar display sem cursor .................................................................. 33
Tabela 8 - Comando para deslocamento automático do cursor para direita ............................. 33
Tabela 9 - Limpeza do display ................................................................................................. 34
Tabela 10 - Retorno do cursor .................................................................................................. 34
Tabela 11 - Modo de operação ................................................................................................. 34
Tabela 12 - Descrição dos modos de operação......................................................................... 35
Tabela 13 - Controle de display e cursor .................................................................................. 35
Tabela 14 - Descrição de controle de display e cursor ............................................................. 35
Tabela 15 - Deslocamento do cursor ou da mensagem ............................................................ 35
Tabela 16 - Descrição do deslocamento do cursor ou da mensagem ....................................... 35
Tabela 17 - Configuração para utilização ................................................................................. 36
Tabela 18 - Descrição de configuração para utilização ............................................................ 36
SUMÁRIO

1 INTRODUÇÃO ..................................................................................................................... 10

2 OBJETIVO ............................................................................................................................ 11

3 VISÃO GERAL DO CIRCUITO .......................................................................................... 12

4 SENSOR PARA RECONHECER A PALMA...................................................................... 13

4.1 Captação do Som ............................................................................................................ 13

4.2 Filtro Ativo ..................................................................................................................... 17

4.3 Temporizador 555 ........................................................................................................... 18

4.4 Última Filtragem ............................................................................................................. 20

5 MICROCONTROLADOR .................................................................................................... 22

5.1 Microcontroladores PIC .................................................................................................. 22

5.2 Histórico.......................................................................................................................... 22

5.3 Estrutura .......................................................................................................................... 22

5.4 PIC 16F877A .................................................................................................................. 23

6 PERIFÉRICOS ...................................................................................................................... 25

6.1 Oscilador Astável ............................................................................................................ 25

6.2 Display de Sete Segmentos ............................................................................................. 27

6.3 Display LCD ................................................................................................................... 29

7 ALGORITMO ....................................................................................................................... 37

7.1 Sensor de Palmas Simples .............................................................................................. 37

7.1.1 Fluxograma............................................................................................................... 38

7.2 Sensor de Palmas com Detector de Sequência (música) ................................................ 39

7.2.1 Fluxograma............................................................................................................... 40

8 MANUAL DE OPERAÇÃO DO CIRCUITO ...................................................................... 41

8.1 Funcionamento do Sensor de Duas Palmas .................................................................... 41

8.2 Funcionamento Sensor Sequência de Palmas ................................................................. 43


9 RESULTADOS OBTIDOS ................................................................................................... 47

9.1 Circuito de Captação de Duas Palmas ............................................................................ 47

9.2 Circuito de Captação de Sequência de Palmas ............................................................... 47

10 CONCLUSÃO ..................................................................................................................... 49

REFERÊNCIAS ....................................................................................................................... 50

APÊNDICE A – CÓDIGO DUAS PALMAS .......................................................................... 52

APÊNDICE B – CÓDIGO SEQUÊNCIA DE PALMAS ........................................................ 55

APÊNDICE C – ESQUEMA CIRCUITO COMPLETO DUAS PALMAS ............................ 60

APÊNDICE D – ESQUEMA CIRCUITO COMPLETO SEQUÊNCIA DE PALMAS ......... 61

APÊNDICE E – CUSTOS DO CIRCUITO ............................................................................. 62

ANEXO A – PRINCIPAIS FIGURAS DOS DATASHEETS ................................................. 64


10

1 INTRODUÇÃO

Nos dias de hoje a eletrônica está cada vez mais presente no cotidiano. Um dos objeti-
vos da engenharia é desenvolver aplicações tecnológicas que possam tornar a vida das pessoas
mais confortável.
Apesar de ser uma tecnologia já existente no mercado, foi desenvolvido um interruptor
de palmas. É muito prático, por exemplo, ao chegar em casa simplesmente acender as luzes
com o bater de palmas. Também é útil quando se está deitado e deseja-se apagar as luzes.
Para isto foi desenvolvido um circuito completo com diversas etapas analógicas e digi-
tais que tem por objetivo processar o sinal sonoro das palmas e com isso ativar o interruptor.
11

2 OBJETIVO

O objetivo básico do projeto é detectar o som do bater de palmas das mãos e com isso
ativar uma lâmpada.
O primeiro objetivo é desenvolver um sensor que com duas palmas acenda uma luz e
com uma única palma apague-a. Outro ponto crucial do projeto é a ampliação do mesmo para
que ao toque de uma sequência de palmas o interruptor seja ativado.
É um requisito do projeto a utilização do microcontrolador PIC 16F877A, por ser o
disponível para uso.
12

3 VISÃO GERAL DO CIRCUITO

O princípio de funcionamento do circuito se baseia na utilização de um microfone,


capaz de gerar um sinal muito intenso devido a intensidade do som propagado pelo bater pal-
mas ou estalar os dedos.
Esse sinal deve ser interpretado por um circuito como um pulso de entrada que está
ligado a um microcontrolador, o qual será responsável por ligar ou desligar o interruptor do
sistema.
O microcontrolador PIC 16F877A recebe um pulso e faz toda a parte de processamen-
to. Inicialmente o microcontrolador é usado apenas para capturar duas palmas e ativar uma
saída.
Depois várias palmas são registradas, formando uma sequência. Ele terá a função de
gravar a sequência e sempre que ela for executada novamente deverá ativar o interruptor.

Figura 1 - Diagrama de Blocos do Circuito


13

4 SENSOR PARA RECONHECER A PALMA

Para reconhecer o som da palma é necessário um transdutor que converta o sinal me-
cânico do som em um sinal elétrico, ou seja, um microfone. Em seguida uma interface para
digitalizar o sinal.
São necessários vários estágios para realizar esta função. Inicialmente há um microfo-
ne que faz a conversão entre o sinal mecânico do som e um sinal elétrico. Em seguida um
filtro ativo passa-altas depois há um capacitor de acoplamento e um circuito LM555 ligado
como monoestável. Na saída do LM 555 é colocado um filtro passa-baixas.

Figura 2 - Circuito do sensor completo

4.1 Captação do Som

Para captar o sinal sonoro é utilizado um microfone. Ele capta a vibração do ar provo-
cado pelo som, transformando essa vibração mecânica em impulsos elétricos, produzindo on-
das de mesma frequência que o som que a gerou.
O microfone converte vibrações mecânicas na faixa audível (em frequências de 20 Hz
a 20 kHz - seja no ar, água ou num material sólido) em um sinal elétrico. Na maioria dos mi-
crofones em uso as ondas sonoras são convertidas em vibrações mecânicas através de um dia-
fragma (palavra oriunda do grego diáphragma, significa literalmente barreira, separação) fino
e flexível e em seguida convertidas em sinal elétrico. Serão brevemente analisados aqui al-
guns dos tipos mais comuns de microfone: carvão, cristal, condensador, eletreto e dinâmico.
O microfone de carvão possui um grande número de grânulos de carvão dentro de pe-
queno invólucro. Quando esses grânulos são comprimidos, sua resistência é baixa e quando
14

são soltos, sua resistência é alta, o que faz com que a resistência varie quando ondas sonoras
atingem o diafragma.
O microfone de carvão é um exemplo de transdutor passivo pois não pode produzir
uma tensão de saída por si mesmo. É necessário ter uma fonte de tensão contínua para obter
corrente através de R. Essa corrente é necessária para produzir a tensão de áudio.

Figura 3 - Microfone de carvão (Esquemas Eletrônicos, 2010)

Também existe o microfone de cristal. Este cristal é um material piezoelétrico que


gera uma tensão quando submetido à pressão. A pressão das ondas sonoras que deslocam o
diafragma para frente e para trás provoca a vibração do cristal, o que produz uma tensão de
saída. A tensão de saída está diretamente relacionada com a onda sonora que incide sobre o
microfone. O microfone de cristal é um transdutor ativo, porque pode produzir uma tensão de
saída por si mesmo.

Figura 4 - Microfone de cristal (Esquemas Eletrônicos, 2010)

Um microfone condensador funciona com um princípio capacitivo. Um diafragma fino


colocado a uma pequena distância de uma placa de metal estacionária forma um capacitor.
Quando ocorre uma variação de pressão o diafragma se move, fazendo com que a distância
entre diafragma e placa varie, produzindo uma variação na capacitância proporcional a varia-
ção de pressão.
15

Figura 5 - Microfone condensador (PCB Piezotronics, 2010)

Um eletreto, material ferroelétrico permanentemente carregado ou polarizado, pode ser


colocado na placa metálica a fim de criar uma “pré-polarização” fazendo com que sejam cria-
dos microfones de baixo custo e fácil utilização.

Figura 6 - Microfone condensador de eletreto

Um microfone magnético ou dinâmico é baseado no princípio de indução magnética.


Este sistema simples pode ser obtido juntando uma bobina de fio a um diafragma fino. Quan-
do ocorrer uma variação de pressão a bobina irá se mover. Como a bobina está submetida a
um campo magnético, o seu movimento cria uma tensão proporcional à pressão exercida.

Figura 7 - Microfone magnético dinâmico


16

Em relação ao tipo de transdução acústica há dois tipos de microfone: microfones de


pressão (geralmente de pior qualidade) e microfones de gradiente de pressão (microfones com
propriedades direcionais). Os microfones de gradiente de pressão apresentam um fenômeno
chamado efeito de proximidade que resulta num aumento acentuado da amplitude das fre-
quências graves na proximidade da fonte sonora.

Figura 8 - Um microfone magnético dinâmico típico

Sendo assim, os microfones podem ser classificados quanto à diretividade da seguinte


forma:
 Omnidirecionais - Captam o som da fonte não importando a direção em que este che-
gue a sua cápsula.
 Bidirecionais - Captam o som igualmente no eixo da cápsula (0º e 180º), rejeitando o
som que chega a 90º e a 270º.
 Cardioides - Captam com maior eficácia os sons emitidos na sua frente. À medida que
a fonte sonora se desloca do eixo central do microfone, sua captação é reduzida. Desta
forma, sons vindos de trás não são captados ou são captados com pequena intensidade.
 Super e Hipercardioides - Captam além dos sons emitidos na sua frente, parte dos sons
emitidos na parte de trás. Isto é bastante útil para aumentar o ganho do som, sem que
haja microfonia.

Figura 9 - Principais diagramas direcionais de microfones (WIKIPEDIA, 2010)


17

4.2 Filtro Ativo

Como se deseja que o circuito atue quando houver uma palma, mas não quando hou-
ver uma voz muito alta, um filtro que separe um sinal do outro foi implementado. Dado que a
voz humana se concentra em baixas frequências, enquanto que uma palma pode ser aproxi-
mada por um delta de Dirac e, portanto, tem componentes em todas as frequências, um filtro
passa-altas deve atenuar a voz e deixar passar apenas as palmas.
É o utilizado o circuito com amplificador operacional, mostrado na Figura 10.

Figura 10 - Esquema do filtro passa altas ativo

Procedendo com a análise no domínio de Laplace, considerando o amplificador opera-


cional ideal.

Tem-se então o ganho

E a frequência de corte

Para os valores escolhidos de componentes


18

Encontra-se então o gráfico na resposta em frequência mostrado na Figura 11, este


encontrado através de simulação pelo programa Circuit Maker 2000.

Figura 11 - Resposta em frequência do filtro passa alta ativo

4.3 Temporizador 555

O circuito 555 é extremamente popular e encontra diversas aplicações. Ele pode ser
utilizado em geração de pulsos, temporização sequencial, atraso de tempo, modulação de lar-
gura de pulso (PWM) e geração de rampa linear.

Figura 12 – Esquema de conexão dos pinos do 555 (STMicroelectronics, 2008)

O circuito equivalente interno é como mostrado na Figura 13.

Figura 13 - Esquema simplificado do 555 (STMicroelectronics, 2008)


19

O CI 555 pode ser conectado de diversas maneiras. No caso escolheu-se a ligação co-
mo monoestável para detectar quando ocorreu uma palma.
O multivibrador monoestável ou one-shot é uma variação do flip-flop, que é um mul-
tivibrador biestável, no qual uma das saídas está capacitivamente acoplada a uma das entra-
das. Assim o circuito permanece em um estado, sendo forçado a outro estado por um pulso
momentâneo. Ele retorna ao estado inicial após certo tempo determinado pelo valor do resis-
tor e capacitor.

Figura 14 - Esquema de ligação como monoestável (STMicroelectronics, 2008)

Neste modo de operação o timer funciona como um one-shot. O capacitor externo está
inicialmente descarregado. Após a aplicação de um pulso trigger negativo de menos de um
⅓VCC (Pino 2) o flip-flop é ativado e capacitor começa a ser carregado.
A voltagem no capacitor cresce exponencialmente por um período T=1,1.R1.C1, até
que a voltagem se iguala a ⅔VCC. O comparador do threshold então reseta o flip-flop, o qual
descarrega o capacitor a partir do transistor do pino e leva a saída para o nível lógico zero.
Deseja-se um tempo de aproximadamente 8 ms e escolheu-se arbitrariamente um ca-
pacitor de 680 nF, então R deve ser igual a 10,7 kΩ. Considerando esse valor, foi utilizado o
valor comercial mais próximo e mais comum, que é 10 kΩ. Logo, o novo valor para o tempo
será de 7,48 ms.
A forma como foi ligado no circuito é mostrada na Figura 15.
20

Figura 15 - Esquema da ligação do 555

4.4 Última Filtragem

Na saída do monoestável, para evitar a ocorrência de mais de um pulso é colocado um


filtro passa-baixas. Isto evita oscilações indesejadas na saída do monoestável.

Figura 16 - Filtro passa-baixas


21

Para os valores utilizados

Através da simulação foi encontrado o gráfico da Figura 17.

Figura 17 - Resposta em frequência do filtro passa-baixa


22

5 MICROCONTROLADOR

5.1 Microcontroladores PIC

Os PICs (PICmicro) são uma família de microcontroladores fabricados pela Microchip


Technology, que processam dados de 8 bits, de 16 bits e, mais recentemente, de 32 bits. Seu
nome é oriundo de "Programmable Interface Controller". Contam com extensa variedade de
modelos e periféricos internos. Possuem alta velocidade de processamento devido a sua arqui-
tetura Harvard e conjunto de instruções RISC.
Os PICs podem ser programados em linguagem mnemônica (assembly) ou usando-se
compiladores de linguagem de alto nível (Pascal-petasse, C, Basic) que geram um código para
ser gravado na memória de programa desses microcontroladores.

5.2 Histórico

As raízes dos PICs se originaram na universidade de Harvard com um projeto para o


Departamento de Defesa, mas este foi vencido por um projeto de memória mais simples (e
mais confiável na época) da Universidade de Princeton. A arquitetura Harvard foi primeira-
mente usada no 8x300 da Signetics, e foi adotada pela General Instruments para uso como
interface controladora de periféricos (PIC) que foi projetada para compensar o fraco barra-
mento de I/O da sua CPU CP1600 de 16 bits. A divisão de microeletrônica foi depois trans-
formada na Arizona Microchip Technology (por volta de 1985), com os PICs como seu pro-
duto principal.

5.3 Estrutura

O PIC16x é muito simples, tem somente 33 instruções de 12 bits de largura fixa, inclu-
indo diversas instruções de salto condicional a flags para a próxima instrução (para loops e
rotinas condicionais), produzindo um código enxuto importante para aplicações em sistemas
embarcados. Ele tem pipelines marginais (2 estágios, 1 de busca e 1 de execução), combina-
dos com execução em um ciclo (exceto para saltos, com 2 ciclos), tendo um desempenho mui-
to bom para a sua categoria.
23

O PIC 17x tem mais modos de endereçamento (direto, indireto, e relativo; as instru-
ções de modo indireto gastam 2 ciclos para execução), mais instruções (58 de 16 bits), mais
registradores (232 a 454), mais até 64k palavras de espaço de programa (2k a 8k no chip). As
versões top de linha também possuem instruções de multiplicação de 8 bits sem sinal de 1
ciclo. Esse modelo está obsoleto, não sendo mais recomendado para novos projetos de acordo
com a Microchip.

5.4 PIC 16F877A

O modelo de controlador disponível para este projeto foi o PIC 16F877A da empresa
Microchip. Este modelo possui 40 pinos, sendo que destes 40 pinos, 7 pinos são usados para
alimentação e controle do mesmo.

Figura 18 - Foto do PIC 16F877A (Fonte: HTTP://www.solarbotics.com)

Os demais pinos são conhecidos por I/Os (Inputs/Outputs). Estas I/Os são agrupadas
em portas (ports), de no máximo 8 pinos cada (limitação pois o componente possui um núcleo
de 8 bits).
Há um total de 33 I/Os disponíveis, que podem ser configuradas como entradas ou
saídas em tempo de execução.
24

Figura 19 - Esquema do PIC 16F877A (fonte: http://derbytimer.com/diy/)

Alguns pinos, porém, possuem outras funções além de serem entradas ou saídas digi-
tais. Por exemplo, pode-se observar que os pinos 2 a 10 (exceto o pino 6) são entradas analó-
gicas, e podem ser usados para detectar uma variação de tensão entre 0V e 5V, transformando
esta variação em uma informação binária de 10 bits. Os pinos 39 e 40 também são pinos usa-
dos na gravação do microcontrolador, e os pinos 25 e 26 são usados para comunicação SERI-
AL padrão RS232. Os pinos 16 e 17 são pinos geradores de pulso (PWM), muito útil para
controle de velocidade de motores, por exemplo. O pino 6 é um pino usado para contagem
rápida.
25

6 PERIFÉRICOS

6.1 Oscilador Astável

Para o funcionamento do circuito é necessário o uso de um oscilador de 10 Hz. Deci-


diu-se utilizar um circuito integrado 555 ligado no modo astável. A partir disto foi possível
conseguir a frequência desejada.

Figura 20 - Esquemático do modo de operação astável (STMicroelectronics, 2008)

Se o circuito for conectado da forma mostrada na Figura 20 ele dispara a si próprio e


funciona como um multivibrador. O capacitor externo carrega através de R A+RB e descarrega
através de RB. Então o duty cycle pode ser precisamente ajustado pela razão desses dois resis-
tores.
Neste modo de operação o capacitor carrega e descarrega entre ⅓VCC e ⅔VCC. No
modo de disparo os tempos de carga e descarga do capacitor e também a frequência indepen-
dem da tensão de alimentação.
O tempo de carregamento do capacitor é dado por

O tempo de descarregamento do capacitor é dado por

Então o período total de oscilação é


26

Assim a frequência de oscilação é dada por

O duty cycle é dado por

Escolheram-se os seguintes valores para os componentes

Sendo assim tem-se uma frequência

E um duty cycle

Figura 21 - Esquema de ligação do astável


27

6.2 Display de Sete Segmentos

Os displays de sete segmentos são compostos, basicamente, de sete LEDs internos


dispostos de maneira a formar um dígito. De acordo com a forma que são “acesos” ou “apa-
gados” é possível demonstrar os números de 0 a 9 e até mesmo algumas letras. Na Figura 22
são mostrados alguns tamanhos encontrados no mercado.

Figura 22 - Displays de 7 segmentos comerciais (Soares, 2009)

Na Figura 23 é possível observar a posição de cada segmento, sua nomenclatura, as-


sim como sua ligação através dos pinos. Existem muitos outros modelos, com pinagens dife-
rentes e até mesmo com mais segmentos. E antes de usá-los é recomendável uma consulta
ao datasheet do fabricante.

Figura 23 - Ligação dos pinos do display de 7 segmentos (Soares, 2009)

Além dos tipos, tamanhos, cores e pinagens diferentes é preciso também observar a
ligação do pino comum. Ele pode ser do tipo Anodo Comum com ligação no VCC ou Catodo
Comum com ligação no GND. A escolha de um ou outro depende do tipo do projeto, mas um
não substitui o outro.
28

Figura 24 - Ligação cátodo comum e ânodo comum (Soares, 2009)

São necessários sete (ou oito se for considerado o ponto) pinos de I/O do microcontro-
lador para ligar um display. Se for necessário ligar mais de um display seriam necessários
muitos pinos. Para isto é possível utilizar o modo de varredura.
A varredura não serve apenas para entradas, mas também saídas. A Figura 25 mostra
como isso pode ser implementado. Ligam-se todas as linhas dos segmentos juntas. Assim
quando é enviado um valor para um display, é enviado para todos.

Figura 25 - Esquema do modo de varredura (Soares, 2009)

O que determinará qual display mostrará o valor é o controle do anodo/catodo. Ao


inserir um valor na linha, estando todos os anodos (ou catodos) desligados, nenhum display
acende e não há nenhum valor em nenhuma posição. Porém se é ligado um dos displays atra-
vés de seu anodo (ou catodo) o valor será apresentado por este display e na posição desejada.
Para mostrar outro valor, em outro ponto, basta trocar o valor da linha e ligar apenas o
display desejado. Assim é possível fazer uma varredura, usando mais de um display e apenas
uma linha de dados para sete segmentos. O ponto mais importante é a velocidade com que
isso é feito, pois devido à limitação da visão humana não é possível perceber que os valores
estão sendo trocados e muito menos que a posição dos mesmos variou. Dessa forma é possí-
29

vel visualizar um valor com um número de dígitos, todos mostrados ao mesmo tempo. Em
média podem-se usar tempos de 5 ms (0,005s) a 30 ms (0,03s).
No caso do circuito montado foi utilizado esse modo varredura no circuito de duas
palmas para visualizar o tempo entre as duas palmas.

Figura 26 - Ligação do circuito para fazer a varredura

6.3 Display LCD

Para uma melhor interface máquina–usuário, um display de cristal líquido (LCD) está
configurado para mostrar todas sequências gravadas do experimento. Mas antes, devemos
inicializá-lo, isto é, configurar o LCD. Para isso, exige-se que um protocolo de configuração
seja implementado.
Existem muitos LCDs no mercado, mas trabalhar-se-á com o modelo mais padrão de
todos. Trata-se de um display de duas linhas com 16 caracteres cada uma. Esse display é bem
conhecido por ser o modelo utilizado nos telefones públicos (orelhões). Outra característica
importante do display que estaremos estudando é que ele já possui um drive de controle inter-
30

no. Desta forma, nos comunicaremos com ele através de uma comunicação paralela, passando
comandos e caracteres que desejamos escrever, diretamente em código ASCII.

Figura 27 - Foto de um display LCD de 16 pinos

Neste LCD possuímos 16 pinos para ligação do mesmo ao PIC. A Tabela


1identifica cada um desses pinos:
Tabela 1 - Pinagem do LCD

Os dois primeiros pinos (Vss e Vdd) são relativos à alimentação do componente e de-
vem ser ligados a uma tensão nominal de 5VDC. As tensões mínima e máxima para alimenta-
ção podem variar conforme o fabricante, mas na maioria dos casos ficam entre 4,75 e
5,25Vdc.
O pino Vo é utilizado para controle contraste e normalmente o ligamos ao centro de
um potenciômetro de 10k com as extremidades ligadas ao Vss e ao Vdd. Na verdade, esse
pino deve possuir uma tensão entre Vss e Vdd.
31

Figura 28 - Esquema de ligação do LCD (Messias, 2007)

O pino RS (Register Select) é utilizado para definirmos o tipo de informação passada


através da comunicação paralela.
Tabela 2 - Descrição do RS

O pino R/W muda o estado do LCD entre Leitura (Read) e Escrita (Write). Essa mu-
dança pode ser feita para escrevermos um comando ou dado e checarmos quando o LCD ter-
minou a operação e está pronto para darmos continuidade ao processo.
Tabela 3 - Descrição do R/W

Neste caso, o LCD só opera em modo de escrita. Por isso, precisamos garantir o ter-
mino das operações internas do módulo de LCD através de tempos pré-estabelecidos. Esses
tempos serão descritos adiante.
O pino E(Enable) é utilizado para efetivar a leitura da informação escrita no barramen-
to de dados. Essa leitura é efetuada na borda de descida deste sinal.
Os pinos DB0 na DB7 equivalem ao barramento de dados paralelo. Apesar de existi-
rem oito vias de dados, esses displays também podem operar com apenas quatro vias (DB4 a
32

DB7), com as demais vias ficando sem função. Neste caso, as informações são enviadas em
dois pacotes de 4 bits cada um. O pinoas A(Anode) e K(Katode) são usados para ligação do
Backligth(iluminação de fundo). O fato é que, apesar da existência dos pinos, nem todos os
displays possuem essa iluminação.
Para nós, então, valerá a comunicação em oito vias de dados, acrescida dos controles
RS e E, dando um total de dez pinos interligando o PIC ao LCD. Desta forma, para enviarmos
uma informação ao LCD precisaremos primeiramente ajustar RS para informarmos se é um
comando ou um dado. Em seguida, devemos escrever a informação no barramento de dados.
Próximo passo é darmos um pulso em E.

Figura 29 - Diagrama de tempo do protocolo de comunicação

A primeira ação a ser efetuada no display é a sua inicialização, garantido a


comunicação em 8 vias. Para isso, devemos criar ma rotina baseada no seguinte roteiro:
1. Aguarde pelo menos 15 ms após a energização do LCD para garantir que ele já es-
tá operando corretamente.
2. Envie o comando 0x30 para o display 3 vezes e aguarde pelo menos 3 ms para ca-
da vez.
Tabela 4 - Comando 0x30

3. Estabeleça as condições de utilização. Neste caso, comunicação em oito vias, dis-


play de duas linhas e matriz de 7x5 e aguarde 2ms.
33

Tabela 5 - Comando de comunicação em 8 vias

4. Comando de para limpar o display e posicionar o cursor na primeira linha, primei-


ra coluna(esquerda) e aguarde 2ms.
Tabela 6 - Comando para limpar o display

5. Envie o comando para ligar o display sem cursor e aguarde 2ms.

Tabela 7 - Comando para ligar display sem cursor

6. Envie o comando para estabelecer o modo de operação. Por exemplo, deslocamen-


to automático do cursor para a direita e aguarde 2ms.

Tabela 8 - Comando para deslocamento automático do cursor para direita

O código abaixo mostra como foi configurado.


“char const tabela[6] = { 0x30,0x38,0x0f, 0x01, 0x06 };
void lcd_ini(void){
delay_ms(15);
char contador = 0;
RS=0;
E = 0;
for(contador=0;contador<3; contador++){
DATA = tabela[0];
E = 1;
E = 0;
delay_ms(3);
}
34

for(contador=0;contador<4 ;contador ++ ){
DATA = tabela [ contador + 1] ;
E = 1;
E = 0;
delay_ms(2);
}
}”
Vejamos agora quais são os comandos existentes no display. As nomeclaturas utiliza-
das respeitam a maioria dos datasheets existentes para esse tipo de componente. Para infor-
mações mais detalhadas, recomendamos a consulta direta ao manual do modelo em uso no seu
projeto. Os tempos apresentados também podem variar de um modelo pra outro. Alguns co-
mandos estão tabelados.

Tabela 9 - Limpeza do display

Tabela 10 - Retorno do cursor

Tabela 11 - Modo de operação


35

Tabela 12 - Descrição dos modos de operação

Tabela 13 - Controle de display e cursor

Tabela 14 - Descrição de controle de display e cursor

Tabela 15 - Deslocamento do cursor ou da mensagem

Tabela 16 - Descrição do deslocamento do cursor ou da mensagem


36

Tabela 17 - Configuração para utilização

Tabela 18 - Descrição de configuração para utilização

No código em anexo é mostrado o que foi realizado para a configuração do LCD.


37

7 ALGORITMO

7.1 Sensor de Palmas Simples

Conhecido um pouco mais do PIC, é preciso entender o que o algoritmo do programa


faz. A cada palma um pulso quadrado será gerado e processado pelo PIC. A ideia principal é
contar o tempo entre as palmas como mostrado no diagrama da Figura 30 e verificar se essa
diferença é maior ou menor que um tempo definido.

Figura 30 - Tempo entre duas palmas

Com o periférico capture será capturado cada pulso para entrar em uma interrupção.
Dentro de cada interrupção será gravada a diferença de tempo entre pulsos, isto é, entre pal-
mas em um registrador.
Outro ponto principal é a varredura a qual tem como objetivo mostrar os tempos entre
palmas. A varredura consiste em maximizar o uso dos pinos para jogar informação em cada
Displays de 7-segmentos. Nesse caso, são usados 4 transistores npn para chavear cada display
de 7 segmentos. Em cada ciclo de trabalho de cada display as informações são jogadas através
de 8 pinos do PIC.A figura abaixo mostra o diagrama temporal do chaveamento do displays e
o layout do circuito. Existe um pequeno delay para ativar cada display que está relacionado
com o tempo de chaveamento do transistor.

Figura 31 - Diagrama de tempo de varredura dos displays de 7 segmentos


38

7.1.1 Fluxograma

A Figura 32 mostra o fluxograma do código do implementado mostrando o uso do


capture e o uso da varredura pra mostrar o tempo entre as palmas.

Figura 32 - Fluxograma do programa detector de duas palmas


39

7.2 Sensor de Palmas com Detector de Sequência (música)

A ideia principal do sensor a música é armazenar as diferenças de tempos entre palmas


em um vetor e compará-lo com outro vetor que armazena outra sequência de tempos entre
palmas. Isto é, uma musica é armazenada a priori e comparada com outra musica. Se a se-
quência de tempos dos dois vetores forem iguais então acionará a carga desejada.
Considerando quatro sequências e uma variável de controle:
(a1,a2,a3....aN)
(b1,b2,b3....bN)
(c1,c2,c3..c[N-1])
(d1,d2,d3...d[N-1])
AcendE=0.
As sequências são “c” e “d” são dadas por:
c(i) = a(i+1)-a(i)
d(i) = b(i+1)-b(i)
Caso c(i) = d(i) para todo i E (1,2,3....,n) , então AcendE = AcendE +1. Nesse caso, se
AcendE = N-1 , então as sequências são iguais.Consequentemente, a Luz acenderá. Algorit-
micamente resolvido.
40

7.2.1 Fluxograma

As próximas figuras mostram o fluxograma do programa correspondente a sequência


de palmas.

Figura 33 - Fluxograma do programa detector de sequência de palmas


41

8 MANUAL DE OPERAÇÃO DO CIRCUITO

8.1 Funcionamento do Sensor de Duas Palmas

1 – Estrutura geral: Azul -> LED de operação, Amarelo-> Simulação do sensor da palma e
Verde-> dysplays de 7 segmentos (varredura)

2 –Azul -> Indica que aconteceu a primeira palma


42

3 - Azul-> Indica que a segunda palma aconteceu. Verde-> Como o tempo foi maior que 3
segundos(3,3 segundos jah que o oscilador externo está em 10Hz) então a LUZ(Vermelho)
não acendeu.

4 - Azul-> Indica que a segunda palma aconteceu. Verde-> Como o tempo foi menor que 3
segundos(1,7 segundos jah que o oscilador externo está em 10Hz) então a LUZ(Vermelho)
acendeu.
43

8.2 Funcionamento Sensor Sequência de Palmas

1 – Apresentação do trabalho de graduação: Vermelho->LED de Operação, Azul->LCD, Ver-


de->simulação do sensor de palma e Amarelo->Botões de controle.

2 – Fase de gravação da musica, isto é, da primeira sequencia (a1, a2,..., aN): Amarelo -> bo-
tão de gravação ativado. Azul -> sequencia de tempos gravados.
44

3 – Gravação da segunda sequencia (b1,b2,b3....bN): Verde- Está habilitado para tentar ligar a
luz ; Vermelho: A musica não está sendo gravada e sim testada ; Azul: O LCD está mostrando
as duas sequencias.

4 – Gerando as seqüência: (a2-a1,a3-a2,a4-a3,....,an-a(n-1)) e (b2-b1,b3-b2,b4-b3,....,bn-b(n-


1)) e que serão comparadas para ligar a LUZ.
45

5 – Se tudo OK, então a Luz ligará:

6- Mais uma palma desligará a LUZ.


46

8 – Botão que mostra o vetor : (a2-a1,a3-a2,a4-a3,....,an-a(n-1))

9 – Botão que mostra o vetor : (b2-b1,b3-b2,b4-b3,....,bn-b(n-1))


47

9 RESULTADOS OBTIDOS

Inicialmente foram encontradas dificuldades para simular o circuito. As funções de


interrupção de capture e outras do PIC não estavam sendo simuladas da forma esperada. Foi
verificado que o problema era com a versão do programa Labcenter Electronics Proteus 7.6
SP0. Quando foi utilizada a versão 7.1 SP2 do Proteus a simulação funcionou da forma espe-
rada.
Outra dificuldade encontrada foi quanto a captação de som. O transdutor do microfone
e o circuito tinha um alcance limitado. Foram feitas algumas melhorias no circuito, trocando
componentes e procurando melhorar o ganho, a fim de obter o resultado satisfatório. Decidiu-
se por utilizar o amplificador operacional em malha aberta para obter maior ganho.

9.1 Circuito de Captação de Duas Palmas

O programa de captação de palmas funcionou da maneira esperada, ativando a saída e


ligando o LED com duas palmas e desligando com uma palma.
Foram utilizados neste caso três displays de sete segmentos ativados pelo modo de
varredura. Isto foi feito no sentido de economizar I/O do PIC, já que cada display no modo
normal consome sete (ou oito, se tiver o ponto) pinos de I/O. Neste caso foi recomendável
utilizar o modo de varredura, que nada mais é do que atualizar um display de cada vez, tendo
um pino que ativa esse display. Desta forma se usam 8 pinos para enviar as informações e
mais os pinos para ativar o display. Este display mostrou da forma esperada o tempo entre
batidas de palmas.

9.2 Circuito de Captação de Sequência de Palmas

Também foi feita uma melhoria para detectar uma sequência de palmas, ou seja, uma
“música”. Ele recebe uma sequência de palmas, gravando os tempos correspondentes e depois
verifica se a sequência é repetida.
Neste caso, como havia vários valores de tempos, foi preferível utilizar um mostrador
de LCD. Foi utilizado o popular mostrador de LCD que tem duas linhas com 16 caracteres
cada uma. Após alguns estudos, funcionou como esperado, mostrando os tempos das palmas e
48

depois mostrando a comparação entre as diferenças. Se estivesse dentro do limite tolerável ele
ativava a saída.
Foram encontradas algumas dificuldades quanto a montagem do display LCD pois
este tem 16 pinos. Quando foi ser feita a ligação do PIC com o LCD foi escolhida a porta D
do PIC. Porém verificou-se que os pinos da porta D não estão adjacentes no PIC, fazendo com
que se tornasse trabalhoso ligar todos os pinos do PIC e do LCD. Uma melhoria possível seria
escolher pinos no PIC colocados de forma contínua, fazendo com que a ligação entre PIC e
display LCD fosse mais prática.
49

10 CONCLUSÃO

Este trabalho de graduação foi desenvolvido no intuito de complementar os conheci-


mentos adquiridos ao longo do curso. Foi utilizado o aprendizado de eletrônica analógica e
digital.
A parte do sensor abrangeu disciplinas como Circuitos Elétricos, Eletrônica Analógi-
ca, Sinais e Sistemas e Princípios de Comunicação, no intuito de digitalizar um sinal analógi-
co: as palmas. O programa do microcontrolador foi desenvolvido em linguagem C. Esta havia
sido estudada em disciplinas como Computação Eletrônica, Métodos Computacionais e Mi-
crocomputadores.
O microcontrolador PIC, que foi utilizado neste projeto, já havia sido estudado ao lon-
go do curso na disciplina de microcomputadores. O PIC é largamente utilizado e esta foi ape-
nas uma aplicação possível para este microcontrolador.
A metodologia de projeto utilizada foi muito importante. Desenvolver o sensor de
palmas em blocos e depois acoplá-los foi a melhor escolha para detectar oportunidades de
melhoria, pois o projeto de um circuito grande acaba tornando sua análise muito complexa.
Quanto à parte da programação foi interessante desenvolver primeiro um exemplo
mais simples, que foi o sensor de detector de duas palmas para depois desenvolver o mais
complexo sensor detector de sequência de palmas.
Concluiu-se que a utilização da teoria em conjunto com a prática, com o auxílio da
matemática, física, simulações computacionais, fazendo um planejamento e divisão do traba-
lho é essencial para o sucesso em um projeto desta magnitude.
Em relação ao projeto final concluí-se que talvez seja mais vantajosa à produção deste
circuito em larga escala, pois o custo unitário cairia bastante, estima-se metade do preço. Nes-
te caso, os custos foram altos por que os componentes foram comprados no varejo.
Para futuros projetos de graduação poderia ser proposto o desenvolvimento de um
circuito de alimentação de corrente contínua, a montagem em circuito impresso e um estudo
mais aprofundado da parte de captação.
50

REFERÊNCIAS

CUSTOM COMPUTER SERVICES. CCS Downloads. C Compiler Reference Manual,


2010. Disponivel em: <http://www.ccsinfo.com/downloads/ccs_c_manual.pdf>. Acesso em:
15 de Junho de 2010.

ESQUEMAS ELETRÔNICOS. Como Funciona um Microfone?, 2010. Disponivel em:


<http://eletronicos.etc.br/tag/microfones/>. Acesso em: 23 de Julho de 2010.

HOROWITZ, P.; HILL, W. The Art of Electronics. 2ª. ed. Cambridge: Cambridge
University Press, 1989.

MAIA, T. A. C.; RETES, P. F. L. eletronica.org. Interruptor Eletrônico Controlado por


Som, 2008. Disponivel em: <http://www2.eletronica.org/projetos/interruptor-eletronico-
controlado-por-som/>. Acesso em: 12 de Julho de 2010.

MESSIAS, A. R. Rogercom. Conectando um Pen-drive a um Microcontrolador, 2007.


Disponivel em: <http://www.rogercom.com/Microcontrolador/Pag05.htm>. Acesso em: 25 de
Julho de 2010.

PCB PIEZOTRONICS. Microphone Handbook, 2010. Disponivel em:


<http://www.pcb.com/Linked_Documents/Vibration/Microphone_Handbook.pdf>. Acesso
em: 22 de Julho de 2010.

PEREIRA, F. Microcontroladores PIC: Programação em C. São Paulo: Érica, 2003.

SILVA JÚNIOR, V. P. Linguagem C para microcontroladores PIC. [S.l.]: Vidal Projetos


Personalizados, 1999.

SOARES, M. J. Arne Robotics. Controle de Displays de Sete Segmentos, 2009. Disponivel


em: <http://www.arnerobotics.com.br/eletronica/Microcontrolador_PIC_pratica_4.htm>.
Acesso em: 24 de Julho de 2010.
51

SOUZA, D. J.; LAVINIA, N. C. Conectando o PIC 16F877A: Recursos Avançados. 3ª. ed.
São Paulo: Érica, 2003.

STMICROELECTRONICS. General-purpose single bipolar timers. NE555, SA555, SE555,


2008. Disponivel em: <http://www.st.com/stonline/products/literature/ds/2182.pdf>. Acesso
em: 20 de Julho de 2010.

STMICROELECTRONICS. General-purpose single operational amplifier. UA741, 2009.


Disponivel em: <http://www.st.com/stonline/products/literature/ds/5304/ua741.pdf>. Acesso
em: 21 de Julho de 2010.

WIKIPEDIA. Wikipedia. Microfone, 2010. Disponivel em:


<http://pt.wikipedia.org/wiki/Microfone>. Acesso em: 13 de Julho de 2010.
52

APÊNDICE A – CÓDIGO DUAS PALMAS

#include <16f877A.h>
#device adc=8
#use delay(clock=4000000)
#fuses HS,NOWDT,PUT
#priority timer0, ccp1

int codificacao[] = {// DPGFEDCBA


0b00111111, // 0
0b00000110 // I-1
0b01011011, // T-2
0b01001111, // A-3
0b01100110, // E-4
0b01101101, // U-5
0b01111101, // M1-6
0b00000111, // M2-7
0b01111111, // O-8
0b01101111};// vazio -9
int diferenca=0,unidade=0,dezena=0,centena=0,milhar=0,controle=0,controle2=0;
int tempoPassado,tempoAtual;
#INT_CCP1
void trata_ccp1(){
//teste para ver se essa interrupção está funcionando//
if(controle2%3 == 0){
output_high(PIN_B2);
tempoPassado = CCP_1;
output_low(PIN_B3);
}
if(controle2%3 == 1){
output_low(PIN_B2);
tempoAtual = CCP_1;
diferenca= tempoAtual - tempoPassado;
if(diferenca<30){
output_high(PIN_B3);
}else{
output_low(PIN_B3);
controle2=-1;
}
}
if(controle2%3==2){
output_low(PIN_B3);
53

}
controle2++;

}
#int_timer0
void trata_t0(){
if(controle%4==0){
//varre a unidade
output_a(2);
output_d(codificacao[unidade]);
}
if(controle%4==1){
//varre a dezena
output_a(16);
output_d(codificacao[dezena]);
}
if(controle%4==2){
//varre a dezena
output_a(8);
output_d(codificacao[centena]);
}
if(controle%4==3){
//varre a dezena
output_a(4);
output_d(codificacao[milhar]);
}
controle++;
}

int pegaDezena(int numero){


int temp=0;
temp = numero;
temp = temp%100;
temp = temp - temp%10;
temp = temp/10;
return(temp);
}
int pegaCentena(int numero){
int temp=0;
temp = numero;
temp = temp - temp%100;
temp = temp/100;
return(temp);
54

void atualiza(long int numero ){


unidade = numero%10;
dezena = pegaDezena(numero);
centena = pegaCentena(numero);
}

void main(){

/* Configuração */
//configuração da conversao
setup_adc(ADC_OFF);
//configuração da varredura
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);
set_timer0(0);
//habilitação da interrupção
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_CCP1);
/* liga o computador */
output_high(PIN_B1); //ligando a maquina
/* configuração do capture 1 */
setup_timer_1(T1_EXTERNAL); // habilita o timer 1 com clock externo
set_timer1(0); //limpando o timer 1
setup_ccp1(CCP_CAPTURE_FE) ; // coloca a entrada CCP1 em captura com sensibilidade na borda descida
/*Computador*/
while(true){
atualiza(diferenca);
}
}
55

APÊNDICE B – CÓDIGO SEQUÊNCIA DE PALMAS

#include <16f877.h>
#include <REGS.h>
#device adc=8
#use delay(clock=4000000)
#fuses HS,NOWDT,PUT
//definição das variáveis de controle//
int botaoDeGravacao=0,verificacaoIgualdade=0,botaoDeMostraTempoGravados = 0,
botaoDeMostraTempoTestados = 0,acende=0,apagaLuz=0,i2=0;
int numeroDePalmas=0;
int numeroDePalmasTeste=0;
int numeroDePalmasTotal=0;
int vetorDeTempos[15]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int vetorDeRazoes[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int vetorDeTemposTeste[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int vetorDeRazoesTeste[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
//rotina da interrupção de borda de descida da entrada CCP1 pino 17//
#define DATA PORTD
#define RS PORTE_0
#define E PORTE_1
#define lcd_seg_lin 0x40
char const tabela[6] = { 0x30,0x38,0x0f, 0x01, 0x06,0x01};
void lcd_pos_xy(char x ,char y){
char endereco;
if(y!=1) endereco = lcd_seg_lin;
else
endereco = 0 ;
endereco = endereco + (x - 1);
RS=0;
endereco = 0x80 | endereco;
DATA = endereco ;
E = 1;
E = 0;
delay_ms(2);
}
void lcd_ini(void){
delay_ms(15);
char contador = 0;
RS=0;
E = 0;
for(contador=0;contador<3; contador++){
DATA = tabela[0];
56

E = 1;
E = 0;
delay_ms(3);
}
for(contador=0;contador<4;contador ++ ){
DATA = tabela [ contador + 1] ;
E = 1;
E = 0;
delay_ms(2);
}
}
void lcd_escreve(char caracter){
RS = 1 ;
delay_us(100);
DATA = caracter ;
E = 1;
E = 0;
}
void limpa_lcd(){
lcd_pos_xy(1,1);
lcd_escreve(" ");
lcd_pos_xy(1,2);
lcd_escreve(" ");
}
#INT_CCP1
void trata_ccp1(){
//zerando a variavel acende//
acende = 0;
//caso a opção de gravação foi requisitada//
if(botaoDeGravacao==1){
//começando a gravação//
numeroDePalmas++; //conta o numero de palmas
vetorDeTempos[numeroDePalmas-1] = CCP_1; //grava os tempos entre as palmas
//imprimindo os tempos das palmas
lcd_pos_xy(2*(numeroDePalmas)-1,1);
printf(lcd_escreve,"%d",vetorDeTempos[numeroDePalmas-1]);
numeroDePalmasTotal = numeroDePalmas; //grava o numero total de palmas
//se não for a palma para desligar a luz, então essa rotina grava os interlos entre as palmas que serão compa-
rados
//com os intervalos gravados anteriormente
if(apagaLuz == 0){
//verificação da música
if((botaoDeGravacao==0)&&(vetorDeTempos[0]!=0)){
57

numeroDePalmas=0; //essa variável é zerada caso uma nova musica seja gravada denovo
numeroDePalmasTeste++; //conta o número de palmas
vetorDeTemposTeste[numeroDePalmasTeste-1] = CCP_1; //grava os tempos entre as palmas

//imprimindo os tempos das palmas de testes


lcd_pos_xy(2*(numeroDePalmasTeste)-1,2);
printf(lcd_escreve,"%d",vetorDeTemposTeste[numeroDePalmasTeste-1]);
if(numeroDePalmasTeste == numeroDePalmasTotal){
output_high(PIN_B2);
numeroDePalmasTeste = 0; //zera a variavel de contagem para uma nova comparação
verificacaoIgualdade = 1; //permite que os intervalos dos dois eventos diferentes sejam
comparados
}
}
}else{
//caso seja palma para desligar entao a luz será desligada
lcd_pos_xy(1,1);
lcd_escreve("Luz OFF");
output_low(PIN_B3); //apaga a luz
apagaLuz=0; //variável que define se a palma é para ser gravada ou a que apagará a luz
}
}
void main(){
/*definição*/
int i=0,botaoDeApagamento=0;
/* Configuração */
//configuração da conversao
setup_adc(ADC_OFF);
//configuração da varredura
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_2);
set_timer0(0);
//habilitação da interrupção
enable_interrupts(GLOBAL);
enable_interrupts(INT_CCP1);
/* liga o computador */
output_high(PIN_B1); //ligando a maquina
/* configuração do capture 1 */
setup_timer_1(T1_EXTERNAL); // habilita o timer 1 com clock externo
set_timer1(0); //limpando o timer 1
setup_ccp1(CCP_CAPTURE_FE) ; // coloca a entrada CCP1 em modo de captura com sensibilidade na borda
de descida
//configurando o LCD;
TRISD=0b00000000;
58

TRISE=0b00000000;
lcd_ini();
lcd_pos_xy(1,1);
lcd_escreve("TG 2010.1");
lcd_pos_xy(1,2);
lcd_escreve("Pedro s");
delay_ms(2000);
limpa_lcd();
set_timer1(0);
/*Computador*/
while(true){
//verificando se o sistema está em fase de gravação ou não
botaoDeGravacao = input(PIN_B4);
botaoDeMostraTempoGravados = input(PIN_C3);
botaoDeMostraTempoTestados = input(PIN_C4);
if((botaoDeGravacao == 1)){
output_low(PIN_B2);
}else{
output_high(PIN_B2);
}
//verificando se o sistema está em fase de apagamento
botaoDeApagamento = input(PIN_B5);
//atualiza os display para verificar os tempos entre as palmas
if((verificacaoIgualdade == 1)){
output_high(PIN_B6);
//formando as razoes para a verificação e comparando as razoes
limpa_lcd();
for(i=1;i<numerodePalmasTotal;i++){
//formando o vetor de razões da musica gravada//
vetorDeRazoes[i-1]=vetorDeTempos[i] - vetorDeTempos[i-1];
lcd_pos_xy(2*i-1,1);
printf(lcd_escreve,"%d",vetorDeRazoes[i-1]);
//formando o vertor de razões da musica de teste//
vetorDeRazoesTeste[i-1] = vetorDeTemposTeste[i] - vetorDeTemposTeste[i-1];
lcd_pos_xy(2*i-1,2);
printf(lcd_escreve,"%d",vetorDeRazoesTeste[i-1]);
//testando a igualdade//
if((vetorDeRazoesTeste[i-1]>=vetorDeRazoes[i-1]-2)&&(vetorDeRazoesTeste[i-1]<=vetorDeRazoes[i-
1]+2)){
acende++;
}
delay_ms(3000);
}
59

//ligando o led de acordo com a comparação anterior


if ((acende >= numerodePalmasTotal-1)){
output_high(PIN_B3);
apagaLuz = 1;
limpa_lcd();
lcd_pos_xy(1,1);
lcd_escreve("Luz ON");
delay_ms(300);
}
verificacaoIgualdade=0;
}
if(botaoDeApagamento ==1){
for(i=0;i<9;i++){
//limpando os dados totais//
vetorDeRazoes[i]=0;
vetorDeTempos[i]=0;
}
limpa_lcd();
}
if((botaoDeMostraTempoGravados == 1)){
limpa_lcd();
for(i2=1;i2<numerodePalmasTotal;i2++){
//Mostando todas diferenças de tempos gravados//
lcd_pos_xy(2*i2-1,1);
printf(lcd_escreve,"%d",vetorDeRazoes[i2-1]);
}
lcd_pos_xy(1,2);
lcd_escreve("Tempos Gravados");
delay_ms(1000);
}
if((botaoDeMostraTempoTestados ==1)){
limpa_lcd();
for(i2=1;i2<numerodePalmasTotal;i2++){
//Mostando todas diferenças de tempos de testes gravados//
lcd_pos_xy(2*i2-1,1);
printf(lcd_escreve,"%d",vetorDeRazoesTeste[i2-1]);
}
lcd_pos_xy(1,2);
lcd_escreve("Tempos Testes");
delay_ms(1000);
}
}
}
60

APÊNDICE C – ESQUEMA CIRCUITO COMPLETO DUAS PALMAS


61

APÊNDICE D – ESQUEMA CIRCUITO COMPLETO SEQUÊNCIA DE PALMAS


62

APÊNDICE E – CUSTOS DO CIRCUITO

CIRCUITO DETECTOR DE DUAS PALMAS


Quantidade Referencia Valor Preço Unitário Preço Total

2 Capacitor 100nF 0,53 1,06


2 Capacitor 10nF 0,26 0,52
2 Capacitor 680nF 1,46 2,92
1 Capacitor 220n 0,53 0,53

2 Resistor 330k 0,10 0,2


1 Resistor 1k 0,10 0,1
4 Resistor 10k 0,10 0,4
1 Resistor 560k 0,10 0,1
3 Resistor 220 0,41 1,23

1 AMPOP UA741 1,46 1,46


2 TIMER NE555 0,80 1,6
1 LED AMARELO 0,29 0,29
1 LED VERMELHO 0,29 0,29
1 LED VERDE 0,29 0,29

1 TRANS PIC16F877A 29,90 29,9


1 MICROFONE ELETRETO 0,71 0,71

TOTAL 41,6
63

CIRCUITO DETECTOR DE SEQUÊNCIA DE PALMAS


Quantidade Referencia Valor Preço Unitário Preço Total

2 Capacitor 680nF 1,46 2,92


2 Capacitor 10nF 0,26 0,52
2 Capacitor 100nF 0,53 1,06
1 Capacitor 220nF 0,53 0,53

2 Resistor 330k 0,10 0,20


5 Resistor 1k 0,10 0,50
1 Resistor 560k 0,10 0,10
3 Resistor 330 0,10 0,30
4 Resistor 10k 0,10 0,40
0,00
2 TIMER NE555 0,80 1,60
1 AMPOP UA741 1,46 1,46

1 DIODO AMARELO 0,29 0,29


1 DIODO VERMELHO 0,29 0,29
1 DIODO VERDE 0,29 0,29

1 LCD1 JHD162A 28,60 28,60

1 PIC PIC16F877A 29,90 29,90

2 TRIMPOT 2K2 1,00 2,00

1 MICROFONE ELETRETO 0,71 0,71

TOTAL 71,67
64

ANEXO A – PRINCIPAIS FIGURAS DOS DATASHEETS


65