Seção: Tutoriais Infraestrutura

 

Sistema de Controle I: Desenvolvimento - Controle

 

Nessa parte, serão descritos os detalhes técnicos utilizados no desenvolvimento desse projeto. Como base inicial de acesso foi utilizado um aparelho celular simples, podendo ser um aparelho usado, com a função de autoatendimento. A partir desse ponto foi considerado o acesso ao circuito através da interface Headset (headphone combinado com um microfone) do aparelho. O circuito foi desenhado para reconhecer tons DTMF [3] (Dual-Tone Multi-Frequency) no sinal de áudio transmitido através da chamada atendida automaticamente pelo aparelho celular. Assim, de qualquer ligação feita para o celular acoplado ao circuito, foi possível transmitir comandos para o circuito.

 

Sistema DTMF

 

Segundo a Wikipédia 2013, a sinalização DTMF foi desenvolvida nos laboratórios Bell (Bell Labs) visando permitir a discagem DDD, que usa enlaces sem fio como os de micro-ondas e por satélite.

 

DTMF é a sigla em inglês de "Dual-Tone Multi-Frequency", os tons de duas frequências utilizados na discagem dos telefones mais modernos (Wikipédia, 2013).

 

A combinação das frequências que formam os tons DTMF, mostradas no quadro 1, onde o cruzamento de uma frequência alta, descrita na primeira linha e uma frequência baixa descrita na primeira coluna da esquerda. O cruzamento da linha com a coluna, ou seja o cruzamento das duas frequências, formam o respectivo tom DTMF.

 

Hz

1209

1336

1477

1633

697

1

2

3

A

770

4

5

6

B

852

7

8

9

C

941

*

0

#

D

Quadro 1: Tabela DTMF

Fonte: Wikipédia,2013

 

Para a detecção do tom DTMF, foi utilizado o CI (Circuito Integrado) MT8870DE [4] mostrado na figura 2. Esse CI tem a característica de detectar e decodificar todos os 16 pares dos tons DTMF e colocar em seus terminais de saída (Q4, Q3, Q2, Q1), um código de 4 bits (mostrado no quadro 2),

 

Segundo seu datasheet:

 

The MT8870D/MT8870D-1 monolithic DTMF receiver offers small size, low power consumption and high performance. Its architecture consists of a bandsplit filter section, which separates the high and low group tones, followed by a digital counting section which verifies the frequency and duration of the received tones before passing the corresponding code to the output bus. (p.4).

 

Figura 2: Pinagem MT8870DE

Fonte: Datasheet MT8870DE

 

 

DÍGITO

Q4

Q3

Q2

Q1

1

0

0

0

1

2

0

0

1

0

3

0

0

1

1

4

0

1

0

0

5

0

1

0

1

6

0

1

1

0

7

0

1

1

1

8

1

0

0

0

9

1

0

0

1

0

1

0

1

0

*

1

0

1

1

#

1

1

0

0

Quadro 2: Tabela da saída binária dos terminais

Fonte: datasheet MT8870DE

 

Microcontrolador

 

O microcontrolador utilizado foi o ATmega168 [5] (figura 3 e figura 4) fabricado pela Atmel Corporation. Apesar de ser um microcontrolador menos presente no mercado do que controladores baseados no PIC, o ATmega168 apresenta uma vantagem de ser o mesmo utilizado pelo projeto Arduino [6], uma ferramenta de programação, compilação e gravação de fácil utilização e vasta documentação e exemplos. Assim, foi possível a utilização de todas as ferramentas de desenvolvimento presente no Arduino, na fase inicial do desenvolvimento do software embarcado do projeto. As principais características do microcontrolador ATmega168 são:

  • 16k de memória flash;
  • 512 Bytes de EEPROM;
  • 1k Byte de RAM;
  • Dois contadores de 8bit e um 16bit;
  • 6 canais PWM (pulse-width modulation);
  • 8 canais 10-bit ADC em TQFP e MLF
  • 6 canais 10-bit ADC em PDIP;
  • 23 portas de entrada e saída programáveis;
  • Tensão de operação 2.7 a 5.5V;
  • Processador: 0 – 12 MHz @ 2.7 – 5.5V, 0 – 24 MHz @ 4.5 – 5.5V;
  • Baixo consumo: 1 MHz, 1.8V: 240μA, 32 kHz, 1.8V: 15μA.

 

Figura 3: ATmega168

Fonte: HWTech, 2008

 

 

Figura 4: Pinagem do ATmega168

Fonte: Datasheet ATmega168

 

 

Figura 5: Definição de pinagem segundo o arduino

Fonte: http://arduino.cc

 

Software de Controle

 

Como dito antes, foi utilizado o Arduino no desenvolvimento do software devido a facilidade da interface de programação (Figura 6). Por sua vez, foi necessário gravar o bootloader do Arduino no microcontrolador. A linguagem utilizada no desenvolvimento do software embarcado foi a linguagem C, no qual encontra-se na integra no APÊNDICE A, que posteriormente foi compilado, pela IDE do Arduino, em instruções assembly em seguida gravada diretamente no microcontrolador.

 

Basicamente, o software funciona em um loop infinito, ou seja, ao final da instrução ele retorna ao começo consultando as entradas de informações, quando encontra uma entrada esperada, a instrução é direcionada para o devido tratamento em outras funções. O software verifica dois tipos de entradas, uma é a entrada no pino 25 que no código é definido pelo nome "A2” (ver figura 4), esta entrada está ligada em um botão do tipo push-button que ao ser pressionado, coloca um sinal alto (5 volts).

 

Neste momento, no software, a intrusão ao reconhecer este sinal, aguarda 10 segundos e checa novamente, caso ainda assim o sinal continue alto, ou seja, o botão ainda está pressionado, inicia-se o processo de reset para a senha padrão, que neste caso foi definida como sendo a senha "1234”, diretamente na memória EEPROM em seguida retorna um sinal de áudio que será explicado a seguir.

 

A outra checagem é a entrada no pino 15, que no código é chamado de porta "9”, está entrada está ligada ao CI MT8870DE e recebe um sinal alto quando um código de 4 bits está disponível para leitura. Neste momento o software faz a leitura dos 4 bits nas portas Q1, Q2, Q3 e Q4 em seguida converte os bits em decimal utilizando a formula do quadro 2.3 e chama a função "criar_frase()” passando como parâmetro o número obtido que se refere ao dígito DTMF. Esta função primeiro retorna um sinal em formato de áudio com um tom breve indicando assim que o dígito foi recebido.

 

Com isso, podemos saber se o dígito foi reconhecido ou até mesmo se foi recebido duplicado, muito comum em casos de eco na telefonia. Depois, a função verifica qual dígito foi teclado a adiciona em uma variável externa para ser formado o comando. O dígito 12, que é a tecla "#”, indica que é o final daquele comando, chamando assim a função "dispara_comando()”. Esta função tem por finalidade analisar o conteúdo da variável externa, que chamamos de "frase”, onde foi salva uma certa quantidade de dígitos e executa processos diferentes para cada condição desta frase, como descrito no quadro 4.

 

 

(bit04 * 8) + (bit03 * 4) + (bit02 * 2) + (bit01 * 1);

 

Quadro 3: Conversão binário para decimal

 

 

Figura 6: Tela do Software de desenvolvimento Arduino

 

 

 

comando para trocar a senha:

            conteúdo da frase: <senha atual>*<nova senha>*<nova senha novamente>#

            exemplo: 1234*9876*9876#

 

comando para desligar uma tomada:

            conteúdo da frase: <senha>*<número da tomada>*0#

            exemplo: 1234*1*0#

 

comando para ligar uma tomada:

            conteúdo da frase: <senha>*<número da tomada>*1#

            exemplo: 1234*1*1#

 

comando de reboot e ligar uma tomada:

            conteúdo da frase: <senha>*<número da tomada>*3#

            exemplo: 1234*1*3#

 

comando para verificar o estado atual da tomada:

            conteúdo da frase: *<número da tomada>#

            exemplo: *3#

 

Quadro 4: lista de comandos

 

Os comandos de trocar senha, desligar tomada, ligar tomada e reinicializar, após serem executados retornam, em forma de áudio, um tom longo e agudo para informar o sucesso do comando. O comando que verifica o estado atual da tomada retorna um tom longo e agudo para informar que a tomada está no estado atual ligada ou um tom longo e grave para informar que a tomada está no estado atual desligada. Após a execução de cada comando, o conteúdo da frase é excluído, para guardar a próxima entrada.