Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

34
1. Introdução Este artigo tem o interesse de mostrar como pode ser feita a integração entre o Arduino e o MATLAB, no controle de um processo. O processo de teste e demonstração criado foi um sistema de aquecimento, automatizado pelo Arduino, que é uma ferramenta prática para reger circuitos eletrônicos, sendo este então o meio físico pelo qual a automação acontece. O MATLAB, por sua vez, está sendo o guia inteligente, que envia sua programação para o micro-controlador do Arduino que executa os comandos criados via IDE do MATLAB. Este processo é possível graças a porta serial inerente ao Arduino, que o faz capaz de comunicar-se com um computador, através de uma entrada USB. O MATLAB por sua vez, pode receber ou enviar dados pela comunicação serial, e assim o controle é completo. A exploração desta comunicação foi feita neste projeto para enfatizar o que de melhor há em cada uma dessas ferramentas. O projeto deste artigo é um sistema de aquecimento, que possui uma estrutura física, e um controle virtual por trás da mesma. O Arduino controla duas válvulas e um fogareiro que serão responsáveis pela vazão de água quente ou fria para dentro do compartimento ao qual se deseja controlar a temperatura. Os dados poderiam ser interpretados pelo Arduino que controlaria essa temperatura, porém ou essa temperatura teria que estar pré- definida no código fonte do programa, ou então o circuito seria muito mais complexos, envolvendo displays, potenciômetros e outros componentes para que fosse possível um controle dinâmico da temperatura. Neste ponto, o MATLAB entra como segunda ferramenta em nosso problema. Através do ambiente de interface gráfica do MATLAB. Foi criada uma interface (GUI – Graphical User Interface) onde poderão ser modificados os valores bases para o controle de temperatura, além de uma coleta de dados muito mais elegante. Isso porque o MATLAB possui vasta cadeia de ferramentas gráficas, e assim os dados podem ser acompanhados através de um gráfico, que mostrará o limite inferior e superior da faixa de controle de temperatura. Assim realizando a tarefa do sistema de controle de temperatura com maior êxito. Nas próximas etapas deste artigo poderemos ver com mais detalhadas a funcionalidade desse sistema e como o mesmo poderia ser expandido. Demonstrando também os detalhes da comunicação entre cada ferramenta, MATLAB e Arduino. Contudo, o leitor após o término do artigo terá condição de utilizar o conjunto aqui apresentado para criar processos diversos na automação e instrumentação como termômetros, sensores de ruídos, entre outras as diversas necessidades do ambiente acadêmico de se medição para a realização de experimentos e atividades de extensão.

description

Um projeto para ajudar iniciantes no uso da interface entre arduino e matlab de forma simples.

Transcript of Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Page 1: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

1. Introdução

Este artigo tem o interesse de mostrar como pode ser feita a integração entre o

Arduino e o MATLAB, no controle de um processo. O processo de teste e

demonstração criado foi um sistema de aquecimento, automatizado pelo Arduino, que

é uma ferramenta prática para reger circuitos eletrônicos, sendo este então o meio

físico pelo qual a automação acontece. O MATLAB, por sua vez, está sendo o guia

inteligente, que envia sua programação para o micro-controlador do Arduino que

executa os comandos criados via IDE do MATLAB.

Este processo é possível graças a porta serial inerente ao Arduino, que o faz

capaz de comunicar-se com um computador, através de uma entrada USB. O MATLAB

por sua vez, pode receber ou enviar dados pela comunicação serial, e assim o controle

é completo. A exploração desta comunicação foi feita neste projeto para enfatizar o

que de melhor há em cada uma dessas ferramentas. O projeto deste artigo é um

sistema de aquecimento, que possui uma estrutura física, e um controle virtual por

trás da mesma. O Arduino controla duas válvulas e um fogareiro que serão

responsáveis pela vazão de água quente ou fria para dentro do compartimento ao qual

se deseja controlar a temperatura. Os dados poderiam ser interpretados pelo Arduino

que controlaria essa temperatura, porém ou essa temperatura teria que estar pré-

definida no código fonte do programa, ou então o circuito seria muito mais complexos,

envolvendo displays, potenciômetros e outros componentes para que fosse possível

um controle dinâmico da temperatura.

Neste ponto, o MATLAB entra como segunda ferramenta em nosso problema.

Através do ambiente de interface gráfica do MATLAB. Foi criada uma interface (GUI –

Graphical User Interface) onde poderão ser modificados os valores bases para o

controle de temperatura, além de uma coleta de dados muito mais elegante. Isso

porque o MATLAB possui vasta cadeia de ferramentas gráficas, e assim os dados

podem ser acompanhados através de um gráfico, que mostrará o limite inferior e

superior da faixa de controle de temperatura. Assim realizando a tarefa do sistema de

controle de temperatura com maior êxito.

Nas próximas etapas deste artigo poderemos ver com mais detalhadas a

funcionalidade desse sistema e como o mesmo poderia ser expandido. Demonstrando

também os detalhes da comunicação entre cada ferramenta, MATLAB e Arduino.

Contudo, o leitor após o término do artigo terá condição de utilizar o conjunto aqui

apresentado para criar processos diversos na automação e instrumentação como

termômetros, sensores de ruídos, entre outras as diversas necessidades do ambiente

acadêmico de se medição para a realização de experimentos e atividades de extensão.

Page 2: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

2. Metodologia e Fundamentação Teórica

2.1. O MATLAB

Jack Little e Cleve Moler, são os fundadores da MathWorks, a empresa que

surgiu após a criação do MATLAB. Este surgiu quando eles perceberam a necessidade

que engenheiros e cientistas tinham de uma ferramenta mais abrangente que as

linguagens de programação disponíveis até então, como o Fortran e o C. Criaram então

uma ferramenta baseada nos cálculos de matrizes, para realizar todo tipo de cálculos

tanto da linha científica quanto da linha das engenharias.

Figura 2.1.1 – Tela de inicialização do MARLAB da versão utilizada neste artigo.

O MATLAB é uma linguagem de programação orientada a objeto com uma

vasta biblioteca, onde estão funções de uso em diversas áreas, como análise e

modelagem econômica e financeira, cálculos de estruturas, estudos de sinais e ondas,

propagação e análise de erros, gráficos entre outros. Sua biblioteca possui um

comando muito importante, que interliga e mostra todos os comandos disponíveis

naquela versão, o “help”. Com ele é possível entender como a sintaxe de uma função

deve ser utilizada e para que esta serve, além de mostrar exemplos de sua utilização.

Também inerente ao MATLAB está o GUIDE (GUI Development Environment),

que é o ambiente de desenvolvimento das interfaces gráficas do MATLAB. Este

Page 3: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

ambiente é de fácil entendimento e fácil manuseio, tornando possível o

desenvolvimento de programas em MATLAB para todo o tipo de utilização. Os

programas criados pelo GUIDE geram um arquivo “.fig” que guarda o modelo visual do

programa e um arquivo “.m” onde está contida toda a sua codificação. Claro, que

dependendo do programa, sendo este possuidor de diversas janelas e seções, o

número de arquivos gerados é igual a duas vezes o número de janelas existentes.

Figura 2.1.2 – Janela de edição de uma nova GUI

Estas GUI’s (Graphical User Interfaces), podem ser executadas fora do ambiente

MATLAB a partir do comando “mcc –m ‘nome do arquivo’.m”, que gera o executável

do programa criado no GUIDE, ou qualquer outro arquivo .m, sendo que então será

possível que o arquivo seja executado em qualquer computador. Para isso não é

necessário que o programa possua a IDE do MATLAB instalada, apenas é requerida a

instalação do MATLAB Compiler Runtime (MCR), disponível no site da MathWorks, na

seguinte url: <http://www.mathworks.com/products/compiler/mcr/>. A MathWorks

permite que criadores de programas em linguagem MATLAB distribuam junto à seu

programa o MCR (somente o MCR). Maiores informações sobre os direitos autorais

encontram-se no site da MathWorks.

Page 4: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

2.2. O Arduino

Iniciado em 2005 na cidade de Ivre, na Itália, o Arduino foi criado como uma

nova opção em plataformas de prototipagem eletrônica, frente às plataformas não

acessíveis existentes na época. E também tinha o objetivo de tornar a iniciação

daquelas pessoas que não possuíam conhecimentos em eletrônica mais rápida no

sentido de produção aplicável. Em 2006, o Arduino recebeu a menção honrosa na

categoria Comunidades Eletrônicas, pela Prix Ars Eletrônica, e também a marca de

50.000 placas vendidas.

Com a facilidade em operar-se fisicamente a placa, e a fácil linguagem de

programação e o seu ambiente limpo de desenvolvimento, que tornou essa expansão

extremamente rápida possível. Além do fato de ser uma plataforma Open-Source, ou

seja, os códigos Arduino são abertos a todos, bem como também todos os

componentes da placa. Devido a isso hoje existem diversas variações do Arduino.

Qualquer um pode montar seu próprio Arduino.

Figura 2.2.1 – Placa Arduino UNO correspondente com a utilizada no projeto.

Tecnicamente falando, o Arduino possui diversos modelos de placa, cada um

deles com algumas diferenças em seu hardware, como mais portas digitais e

analógicas, comunicações através de serial ou wireless, entre outras. Neste artigo foi

utilizado o modelo da placa Arduino UNO Ver 3. Que contém 6 portas analógicas, 12

portas digitais sendo seis destas podendo ser configuradas como PWM (Pulse Width

Modulation), que são portas que podem ser utilizadas para saída de valores de 0 a 255,

para controle de componentes não digitais. A versão UNO é uma placa bastante limpa

e com as funções principais do Arduino, sendo necessário o uso de Shields e outros

componentes para expandi-lo a ambientes como Bluetooth.

Uma outra importante característica é a comunicação pela serial, que permite

que os códigos sejam inseridos de um computador para dentro do micro-controlador

do Arduino UNO (ATMega 328), através da porta USB. E isso também permite a

Page 5: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

comunicação do Arduino em tempo de execução com diversos programas em diversas

plataformas. Uma delas será abordada aqui. A comunicação entre Arduino e Matlab.

Para a aplicação deste projeto, é importante o conhecimento das

características técnicas do Arduino. Suas portas digitais suportam uma corrente de até

50 mA. Enquanto as Power Pins, que são as portas de Vcc e Ground, suportam até 500

mA. Poucas aplicações práticas utilizarão uma corrente tão baixa. Motores, válvulas,

displays e muitos outros tenderão a puxar uma corrente bem maior que essas. Neste

caso, é necessário um circuito de proteção. Que consiste em um transistor com sua

base sendo acionada pela saída digital do Arduino, assim possibilitando passagem de

corrente através do coletor e do emissor. Nele estará conectado um relé, que então

abrirá o circuito onde está conectado o componente a ser usado. Neste projeto, os

relés ativarão as duas válvulas e o fogareiro.

2.3. Integrando as duas plataformas

Falando desta aplicação específica, para controlarmos o Arduino pela

codificação em MATLAB existem duas maneiras. Uma é fazendo com que o Arduino

envie valores a porta serial, que serão lidos pelo MATLAB, e vice-versa. Outra solução é

a desenvolvida pela MathWorks, para gerir a comunicação com o Arduino. Um pacote

é disponibilizado no site do MathWorks, em http://www.mathworks.com/hardware-

support/arduino-matlab.html. Esta conexão criará um servidor para o MATLAB na placa

do Arduino. Dessa forma, toda codificação é feita no MATLAB e então é executada na

placa Arduino. Para isso, descompacta-se o arquivo baixado, e se abre o arquivo

“adiosrv.pde” na pasta adiosrv. Então faz-se o upload do mesmo para o Arduino. A

partir daí, não é necessário que mais nenhum código seja enviado ao Arduino, sendo

todos os comandos feitos a partir da conexão com o MATLAB.

2.4. Eletrônica aplicada neste projeto

Para tornar este projeto possível sem danificar o Arduino devido às altas

tensões e correntes que alguns componentes consomem são necessários circuitos de

proteção, compostos de diodos, transistores e relés basicamente. Além destes

também serão usados resistores que são longos conhecidos, desde os estudos do

ensino médio de todos nós. Também analisaremos o funcionamento de um

componente essencial neste projeto, o sensor de temperatura e dos motores (mini

bombas d’água) que tornarão possível a capitação de uma grandeza física levando-a

Page 6: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

para dentro do computador através do Arduino e transformá

ao qual o sistema é aplicado.

2.4.1 Resistores

Os resistores são utilizados como divisor

corrente, provocando sua redução. Como divisores de tensão é o caso onde tem

uma fonte de tensão com um ponto de tensão de entrada V

resistores em série terminando

entre os dois resistores, a tensão de saída V

dividindo a resistência ligada à

Figura 2.4.1.1

Além disso, sabemos que para a corrente em um fio de resistência R, que a

relação entre a tensão e a

reduzir a corrente, como no caso deste projeto em que as portas digitais podem

suportar no máximo uma corrente de 50 mA e as portas de alimentação no máximo

correntes de 500 mA, dimensiona

esse limite decorrente não seja ultrapassado.

para dentro do computador através do Arduino e transformá-la em ação sobre o meio

ao qual o sistema é aplicado.

Os resistores são utilizados como divisores de tensão e como barreiras para a

corrente, provocando sua redução. Como divisores de tensão é o caso onde tem

com um ponto de tensão de entrada Ventrada e então tem

terminando-se no terra. Assim a tensão captável entre o ponto

, a tensão de saída Vsaída é dada pela soma das duas resistências

ndo a resistência ligada à terra vezes a tensão de entrada, como na fórmula:

���� � ��� �� ��� ����

Figura 2.4.1.1 – Esquema de ligação de um divisor de tensão

Além disso, sabemos que para a corrente em um fio de resistência R, que a

relação entre a tensão e a corrente é dada pela Lei de Ohm. Assim quando precisamos

reduzir a corrente, como no caso deste projeto em que as portas digitais podem

suportar no máximo uma corrente de 50 mA e as portas de alimentação no máximo

correntes de 500 mA, dimensiona-se os resistores para que com a tensão em questão

esse limite decorrente não seja ultrapassado.

� � ��

la em ação sobre o meio

es de tensão e como barreiras para a

corrente, provocando sua redução. Como divisores de tensão é o caso onde tem-se

e então tem-se dois

são captável entre o ponto

pela soma das duas resistências

terra vezes a tensão de entrada, como na fórmula:

�2.4.1.1�

Além disso, sabemos que para a corrente em um fio de resistência R, que a

quando precisamos

reduzir a corrente, como no caso deste projeto em que as portas digitais podem

suportar no máximo uma corrente de 50 mA e as portas de alimentação no máximo

se os resistores para que com a tensão em questão

�2.4.1.2�

Page 7: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

2.4.2 Relés

Relés são componentes que atuam como chaves que são extremamente fáceis

de serem usados. O dispositivo é formado por uma bobina que é ligada ao circuito

através de dois pinos e possui outros pinos que são completamente independentes

quanto ao circuito ao qual a bobina pertence. Quando surge uma tensão nos terminais

da bobina uma corrente é gerada e esta passa através da bobina gerando um campo

magnético que move uma haste de metal que abre o contado entre dois pinos

(terminais) do relé e fecha um curto-circuito entre um desses terminais e outro

terminal que antes estava fechado. Dessa forma é possível controlar através de quais

dos pinos fluirá a corrente.

Pode parecer estranho é claro o uso dos relés à primeira vista, pois o por quê

de fazermos a ligação para permitir ou não a corrente num circuito independente se já

controlamos a corrente no próprio circuito. A justificativa é simples, em circuitos

eletrônicos as correntes são baixas sendo da ordem de miliampères, porém para

algumas existe uma corrente maior no uso, como em motores movidos a 110 V que

precisam ser acionados por um circuito eletrônico. Neste caso é necessário que apenas

o circuito independente do relé esteja conectado ao dispositivo alimentado pela

tensão de 110 V, separado do circuito. Dessa forma o relé atua como uma chave para

um circuito de proteção.

Figura 2.4.2.1 – Parte interna de um relé de 5 terminais.

2.4.3 Transistores e diodos

Alguns componentes foram essenciais para o desenvolvimento da eletrônica

nos últimos anos. Estes componentes são baseados nas propriedades dos materiais

semicondutores (à base de óxidos de silício e germânio). Não cabe a este artigo

Page 8: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

descrever o mecanismo físico real destes dispositivos, porém é de sua alçada fazer

uma breve introdução ao seu funcionamento prático.

Desta forma, inicialmente, o diodo é um componente que possui polarização,

ou seja, o seu funcionamento muda ao invertermos a tensão. Quando uma tensão é

aplicada diretamente aos pólos do diodo ideal então este permitirá a passagem de

corrente. Em contrapartida, quando uma tensão é aplicada em seus terminais

reversamente, nenhuma corrente flui pelo diodo. Em diodos normais na verdade

quando na polarização reversa, o diodo permite a passagem de corrente, porém de

apenas alguns nanoampéres ou microampéres dependendo do material do diodo.

Sendo assim ainda pode ser utilizado com a finalidade de bloquear a corrente em um

determinado sentido. Contudo, basta saber que as aplicações de um diodo se

distribuem em todo tipo de uso, desde circuitos simples como o empregado neste

artigo até circuitos extremamente complexos como os circuitos internos de alguns

dispositivos eletrônicos.

Figura 2.4.3.1 – Diodo, o pólo negativo é representado pelo traço em cinza.

Figura 2.4.3.2 – Representação de um diodo em simbologia de circuitos

Os transistores por outro lado, apesar de serem feitos também de materiais

semi-condutores, devido a sua alocação no dispositivo, possuem um funcionamento

diferente. Os transistores possuem três terminais, onde a passagem de corrente

através de um destes, que é a base, permite a passagem de corrente através dos

outros dois, o emissor e o coletor. Com isso, os transistores atuam como já chaves no

sentido de um circuito controlar o outro. Por exemplo, tem-se um circuito onde está

ligado um LDR (Resistor dependente de luz), no escuro este resistor tem uma alta

resistência, porém na presença de luz sua resistência abaixa drasticamente. Desta

forma se um LDR estivesse ligado à base de um transistor, cujos terminais emissor e

coletor estão ligados a uma lâmpada, ao receber luz o LDR diminuiria sua resistência e

assim permitiria a passagem de corrente através do mesmo, fazendo assim com que a

lâmpada fosse ligada. Como conclusão vemos que seu uso pode ser expandido a

diversas aplicações onde haja a necessidade de controlar o funcionamento de partes

Page 9: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

de um determinado circuito, tornando-as em alguns momentos ativado e em outros

desativado.

Figura 2.4.3.3 – Representação de um transistor em um modelo de circuito

Figura 2.4.3.3 – Transistor 2n-3904

2.4.4 O sensor de temperatura LM35

Neste projeto foi utilizado o sensor de temperatura LM35, por possuir um funcionamento muito simples e uma boa precisão. O LM35 possui o formato de um transistor, e é um equipamento que precisa de uma alimentação de até 5 V corrente contínua. Desta forma os pinos laterais são a alimentação, sendo o da esquerda olhando pela parte achatada, o do positivo +5V e o da direita o terra. O pino do centro é o responsável pelo sinal que identifica a temperatura. Para cada 1 °C o pino do centro libera uma tensão de 10 mV. Dessa forma é fácil obter a temperatura ambiente. Basta pegar o valor da tensão e multiplicá-la por 100. Porém a entrada analógica do Arduino não fornece diretamente a tensão, mas sim um valor analógico que vai de 0 a 1023 numa faixa de 0 V a 5 V. Assim para efetuar a conversão basta aplicar-se uma regra de três simples para se descobrir o valor da tensão lida a partir do valor entregue pelo Arduino.

Figura 2.4.4.1 - Sensor de temperatura LM35.

Page 10: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

2.4.5 Amplificadores operacionais e o LM324

Amplificadores operacionais são dispositivos com inúmeras aplicações, sendo

usados em microfones, sensores, e diversos casos onde é necessário aumentar-se a

amplitude do sinal para torná-lo mais claro. O que eles fazem é simplesmente criar um

ganho para uma tensão de entrada, que dependerá da forma com que se monta o

circuito do amplificador, já que existem vários tipos, e das resistências utilizadas nesta

forma. Os amplificadores são dispositivos de três terminais principais, sendo estes,

entrada inversora, entrada não-inversora e saída. Além disso, se tem os dois terminais

de alimentação do amplificador, já que a amplificação só é possível se existe tensão

suficiente para aquela amplificação.

Neste projeto a montagem do amplificador utilizada foi a de amplificador não-

inversor. Ele recebe este nome pois o sinal é recebido com uma fase e amplificado

nesta mesma fase, ou seja, se a entrada do amplificador é de uma tensão positiva, sua

saída também será positiva, proporcional a entrada vezes o ganho de acordo com as

resistências. A Montagem consiste no sinal que se deseja amplificar, conectado a

entrada positiva (não-inversora) e a realimentação negativa, que consiste em um

resistor Rf que é ligado a saída e a entrada negativa (inversora). Além disso, um

resistor Ri é ligado a entrada negativa e conectado ao terra. A representação abaixo

mostra a montagem.

Figura 2.4.5.1 – Circuito de um amplificador operacional não-inversor

O ganho da tensão de saída Vo é dado pela relação a seguir:

Page 11: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

�� � �1 + �����(2.4.5.1)

O LM324 nada mais é que um circuito integrado de 4 amplificadores. Circuitos

integrados são dispositivos que possuem a montagem de vários circuitos úteis dentro

dos mesmos, e assim facilitam o uso de várias ferramentas. O LM324 neste caso,

permitiu que fosse usado um amplificador operacional neste projeto. Os pinos 4 e 11

do CI (Circuito Integrado) LM324 são o +V e –V respectivamente. E os pinos laterais e

das pontas são as saídas e entradas de cada um dos quatro amplificadores internos.

Neste projeto usamos o gate B, que especifica o uso do amplificador inferior esquerdo

olhando o CI de cima onde a contagem dos pinos começa encima à esquerda. Como

mostrado na figura abaixo.

Figura 2.4.5.2 – Esquema de um LM 324, visto de cima.

Figura 2.4.5.2 – LM 324N, empacotado com plástico, como o usado neste projeto.

Page 12: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

2.4.6 Capacitores

O uso de capacitores circuitos pode ter vários objetivos, mas em muitos deles o

objetivo de colocar um capacitor é o de filtrar o sinal. Num circuito de corrente

contínua o capacitor permite a passagem de corrente até que sua capacidade de

armazenar carga elétrica se esgote e então ele impede a passagem de corrente, e

então é como se o circuito estivesse aberto. Este é basicamente seu funcionamento

num circuito de corrente contínua.

Ao colocarmos um capacitor em série com uma fonte de tensão V, ele será

carregado até esta tensão, com uma carga qualquer própria dependente de sua

capacitância. Se essa fonte de corrente contínua não for constante, ou seja, for

oscilante entre valores positivos, o capacitor no momento que a tensão da fonte for

menor que a tensão já alcançada pelo capacitor, fornecerá tensão ao circuito. Como

mostrado na figura abaixo.

Figura 2.4.6.1 – Gráfico da tensão de uma fonte em paralelo com um capacitor.

Figura 2.4.6.2 – Esquema de ligação em paralelo Fonte-Capacitor.

Na figura 2.4.6.1 acima, as linhas pontilhadas em forma de sino seriam a tensão

fornecida pela fonte em paralelo com o capacitor como mostrado na figura 2.4.6.1,

onde o capacitor é o símbolo com um “C” ao lado esquerdo e “r” é a resistência

interna da fonte. Vemos que quando a tensão vai cair o capacitor começa a fornecer

tensão, que dessa forma fica mais constante. Isso pode ser feito em circuitos quando

Page 13: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

não se tem muita constância da tensão fornecida pela fonte, então se coloca

capacitores em paralelo para que a tensão seja mais constante.

Figura 2.4.6.3 – Capacitor eletrolítico como o utilizado no projeto, o terminal com a faixa cinza é o

negativo.

2.5 Alguns pontos importantes sobre eletromagnetismo e blindagem

Muitos foram os físicos que tiveram grande impacto no mundo graças às suas

descobertas. No ramo do eletromagnetismo podemos citar Faraday, Lenz, Maxwell,

Ohm, Gauss e muitos outros. Durante a resolução deste projeto, alguns obstáculos

surgiram e é possível perceber a aplicação de leis de alguns destes cientistas. Então

nada mais justo que fazer uma breve passagem sobre o conceito destas leis, a Lei de

Faraday da indução e a lei de Biot-Savart.

A Lei de Faraday diz o seguinte: “A fem induzida em uma espira fechada é dada

pela taxa de variação do fluxo magnético, com sinal negativo, através da área

delimitada pela espira”. Esta lei pode ser representada por:

� � −�Φ �!

Isso quer dizer que se um circuito fechado estiver na presença, por exemplo, de

um campo magnético gerado por fios que transportam corrente alternada. O efeito

deste campo magnético pode ser altamente prejudicial ao funcionamento do circuito.

Uma vez que a corrente é alternada, quer dizer que ela varia, chamando-se a

amplitude de 2A, entre +A e –A na forma de uma, senóide que é a convencional

fornecida pelas redes elétricas, como mostrado no gráfico a seguir.

Page 14: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Figura 2.5.1 – LM 324N, empacotado com plástico, como o usado neste projeto.

Este gráfico mostra que a corrente varia bastante ao longo do tempo. A relação

entre a corrente neste fio de c.a. com a campo magnético gerado é dada pela lei de

Biot-Savart:

"#$ � %�4&' (�)$*+̂+�

E como há uma relação entre o campo e a corrente, e como a corrente varia ao

longo do tempo, sabemos que o campo também o faz. Neste sentido sabemos que

haverá uma fem induzida no circuito fechado próximo ao fio de c.a. Além disso, essa

fem induzida gera uma fem induzida, que é igual a ε/R, onde R é a resistência do

circuito no pedaço onde o campo está agindo.

Dessa maneira, a corrente no circuito não será aquela prevista nos cálculos,

mas sim a prevista mais a corrente induzida, sendo assim, ter-se-ia, a partir das leis

mostradas e da discussão feita:

( � �- = (.��/0� � + (0��120�� = (.��/0� � − 1� . ��! 3%�4&' (�)$*+̂+� 4

Com isso, as leituras de um sensor, por exemplo, que dependeriam da corrente

que é recebida no mesmo, seriam alteradas já que não mais apenas a corrente

alternada está presente. E mais, além disso, como a corrente varia entre valores

positivos e negativos, o sentido do campo magnético gerado varia e assim o sentido da

corrente induzida também, gerando grandes alterações nas leituras, com grandes

oscilações.

Para contornar o problema de correntes induzidas em um fio elétrico é

necessário o uso da blindagem. Em termos práticos muito se houve falar da gaiola de

Faraday, famoso experimento do cientista inglês Michael Faraday, que ficou dentro de

uma gaiola metálica fechada e mandou que seus assistentes a eletrizassem com altas

descargas elétricas, o cientista porém em seu interior não se feriu. Isso porque no

Page 15: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

interior de um condutor metálico o campo elétrico é nulo. Sem campo elétrico não há

d.d.p. e sem esta não há corrente. Porém este é um fato eletrostático, que não

continua sendo satisfeito no caso descrito acima. A blindagem metálica por si só não

protege fios elétricos de campos magnéticos indutores de corrente. Para este fim é

preciso fazer o aterramento da estrutura metálica que envolve o cabo, permitindo que

a corrente seja induzida na superfície metálica externa e flua através dela até o

aterramento, que possui potencial nulo.

Isso aplicado ao problema do projeto tornou-se a solução, visto que o campo

gerado pelo fio de c.a. flui através da blindagem metálica externa, não havendo fem

induzida sobre o fio interno, e assim sobre o circuito (ou sobre o sensor caso o

envolvamos em material condutor) e assim a corrente induzida não existe, logo a

corrente real é aquela prevista para aquele circuito.

Muitos dispositivos utilizam este tipo de blindagem para justamente evitar os

campos magnéticos ao redor, comuns em aparelhos eletrônicos e mesmo nas paredes

por onde passa a corrente alternada através dos fios. Cabos de telefone, de fontes, de

rede e muitos outros possuem uma blindagem metálica, que nos equipamentos é

ligada ao aterramento, muitas vezes a própria estrutura metálica do equipamento.

Figura 2.5.2 – Representação de um cabo com sua blindagem exposta: o condutor é o cabo de cobre no

centro, o metal externo é a blindagem.

3. Montagem experimental

3.1 Material Utilizado

- Duas válvulas de água, de 110 V, da marca Emicol.

- 2 joelhos à 90% de 3/4 de polegada, com rosca.

- Uma protoboard.

- 3 latas de tinta vazias.

Page 16: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

- 3 relés CF413005, fabricante NCR.

- 3 transistores modelo 2N 3904-H36.

- 3 diodos modelo 11001N1.

- 4 resistores de 1 KΩ e 1 resistor de 8,2 KΩ.

- Arduino UNO Rev 3.

- 2 capacitores de 1 mF.

- Um sensor de temperatura LM35.

- 4 m de cabo paralelo de 2,5 mm de diâmetro.

- 2 m de fio de cobre isolado de 0,5 mm de diâmetro.

- 6 conectores RCA macho.

- 6 conectores RCA fêmea.

- 1 fogareiro de 110 V.

- 1 m de tubo de borracha móvel de 5 mm de diâmetro.

- 50 cm de tubo de plástico transparente de 1 cm de diâmetro.

- Um circuito integrado LM324N.

- Um computador com MATLAB ou MCR instalados.

3.2 Montagem Mecânica do Sistema

A montagem desses componentes consiste em um recipiente central (uma

lata), onde se permite controlar a temperatura. Nela haverá um furo para quando o

nível de água chegar a certo nível ele escorra pelo ladrão e caia no recipiente

posicionado à seu lado. Outro recipiente estará posicionado em um nível mais alto. Um

fogareiro estará posicionado abaixo do recipiente de controle (central). O outro

recipiente terá água a temperatura ambiente. Um furo é feito na base do recipiente

que está a um nível elevado. Nele está conectada a válvula, que então é ligada ao

recipiente central por uma tubulação. Dentro do tubo central existe um sensor que

está conectado com o Arduino.

A válvula do recipiente a nível elevado e o fogareiro são conectados a tomada

de 110 V e aos relés que fecharão os circuitos quando acionados pelo circuito de

proteção do Arduino. Mais à frente veremos como é o funcionamento do circuito.

Page 17: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

A partir das leituras deste sensor, e dos valores fornecidos pelo usuário do

sistema pelo programa desenvolvido no ambiente MATLAB, o controle será ativado.

Um gráfico mostra em tempo real as leituras de temperatura dentro do recipiente

central. Quando esta temperatura está abaixo da temperatura mínima da faixa de

temperatura fornecida ao programa pelo usuário, é ativado o fogareiro. A ativação se

dará através do sinal digital enviado pelo Arduino ao circuito de proteção, que o

ativará. Da mesma forma, se a temperatura passa da máxima estabelecida, o sistema

passa o sinal digital ao circuito de ativação pelo Arduino, que ativa a válvula de água

fria. Dentro da faixa estabelecida, ambos os mecanismos ficam desligados dentro da

faixa de controle.

Figura 3.2.1 – Esquema de montagem da parte mecânica do sistema, excluindo conexões com o circuito.

3.3 Montagem do circuito

Existem dois circuitos neste projeto. Um é o circuito de entrada, que fornecerá

dados da leitura do sensor ao Arduino, que por sua vez passará os dados ao MATLAB.

O segundo é o circuito de proteção que ativa os dispositivos de controle de

temperatura (Válvula e fogareiro), também ligado ao Arduino, pois dependendo da

leitura feita no primeiro circuito, o Arduino liberará os sinais necessários para ativação

dos equipamentos necessários naquele momento.

Começando pelo circuito de proteção, temos abaixo o esquema da montagem

do circuito.

Page 18: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Figura 3.3.1 – Esquema do circuito de saída do sistema de controle de temperatura.

O funcionamento de cada uma das saídas, ou seja, dos pinos digitais 8 e 12 é

exatamente o mesmo, pois podemos ver que os circuitos são idênticos em cada uma

dessas saídas, portanto entendendo uma, entendemos todas.

Inicialmente, temos que entender o por quê do sistema de proteção. O Arduino

como dito anteriormente, só pode suportar uma corrente máxima de 50 mA. Como o

relé tende a consumir uma corrente maior que essa, cerca de 500 mA, para a tensão

fornecida nas saídas digitais que é de cerca de 5 V, há a necessidade de haver

transistores entre ambos. Assim quando o sinal é liberado pelo Arduino, a base de

transistor o recebe, permitindo assim a passagem de corrente através do mesmo, uma

vez que este está sendo alimentado por uma bateria de 9 V. O ganho de corrente do

transistor é de 10, logo precisamos de dois transistores. O primeiro por estar com sua

base diretamente ligada ao Arduino, recebe a corrente máxima que o mesmo fornece,

quase 50 mA, porém se fosse só isto, teríamos uma sobrecarga. Assim o coletor do

primeiro transistor fica ligado a base do segundo, e como há um resistor de 270 Ω, a

corrente fica limitada a 9 V/270 Ω = 33 mA. Com isso, a corrente da base do primeiro

transistor fica dez vezes menor que isso, logo 3,3 mA. E a corrente no coletor do

segundo transistor fica sendo 330 mA, já sendo o suficiente para ativar o relé. Assim,

ao ativar a saída em um dos pinos de saída digital, o circuito permite a passagem de

corrente pelo relé que por sua vez ativa o circuito dos dispositivos de controle. Este é o

funcionamento do circuito.

Porém, se notarmos bem, ainda não se tem uma explicação para o motivo de

haver um diodo com polaridade revertida em paralelo com a bobina do relé. Sabemos

que o ativador do circuito individual do relé é o campo magnético gerado pela bobina

Page 19: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

do relé que liga a chave, fechando o circuito separado. É sabido também que bobinas

ao serem descarregadas, têm uma variação em seu fluxo magnético, ou seja, uma

f.e.m. é induzida como prevê a lei de Faraday. E Como diz a lei de Lenz, essa f.e.m.

induzida surge de tal forma que ela se opõe a força que cria a variação no fluxo

magnético, desta forma uma corrente no sentido contrário ao da corrente existente é

criada, podendo essa corrente em sentido oposto danificar o transistor. Por isso então,

é colocado um diodo em paralelo ao relé, pois ele só permite que a corrente passe no

sentido de ida, não no de volta e assim o transistor fica protegido.

Olhemos agora para o circuito de entrada de dados. Que fornece tensão do

sensor para a porta analógica 0 do Arduino.

Figura 3.3.2 – Circuito de entrada do sistema de controle de temperatura.

Ao analisar o fato de que as leituras deste sistema devem ser de no máximo

100 °C, pois acima disso não haveria mais água e sim vapor, percebemos uma

deficiência no sinal do sensor. A faixa de sinal de entrada do Arduino varia de 0 a 1023

quando o a tensão de entrada vai de 0 V a 5 V. Porém, se prestarmos atenção, o LM35

confere 10 mV para cada 1 °C, desta forma, para 100° C a tensão fornecida é igual a

100x10 mV = 1 V, logo não se aproveita toda a faixa de leitura do Arduino. Sendo que o

menor intervalo entre uma leitura já convertida no Arduino e outra, por exemplo,

entre 104 e 105, tem-se que este 1 está para a tensão x assim como 1023 está para 5

V, logo a a tensão x é igual a 5 mV, que equivale a 0,5 °C, ou seja, a leitura de

temperaturas correria variando 0,5 °C entre uma e outra.

Para melhorar esta leitura, precisamos multiplicar a tensão vinda por um

determinado ganho, pois, por exemplo, multiplicando por 10 a tensão do sensor,

teríamos que agora a tensão lida no arduino estaria não mais equivalente 10 mV para

cada 1 °C, mas sim 100 mV para 1 °C, e assim a menor variação na leitura do Arduino

Page 20: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

passaria a ser 0,05 °C. Para conseguir este ganho de 10 vezes a tensão utilizamos o

amplificador operacional LM 324. No caso deste circuito, ele fornece um ganho de 9,2

vezes a tensão de saída do sensor. Pois aplicando as resistências utilizadas na fórmula

2.4.5.1, temos que a tensão na saída do amplificador operacional é 8,2/1 + 1 = 9,2.

Para alimentar o amplificador operacional usamos a montagem de fonte de

alimentação simétrica, onde com duas baterias de 9 V, conectadas em série com um

fio entre elas ligado ao terra, para que se possa fornecer +9 V e -9V ao circuito. Além

disso, com o objetivo de tornar a d.d.p. vinda da saída 5 V do Arduino ainda mais

constante, fez-se necessário o uso de dois capacitores de 1000 μF em paralelo com a

alimentação do sensor. Desta forma as leituras do sensor ficam mais constantes, sem

grandes amplitudes entre picos. E assim é terminada a análise do circuito de entrada

do Arduino.

Figura 3.3.2 – Arduino conectado aos dois circuitos de entrada e saída. Visão superior.

Figura 3.3.2 – Arduino conectado aos dois circuitos de entrada e saída. Visão semi-frontal.

Page 21: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Figura 3.3.3 – Foto ampla da montagem realizada no laboratório de mecânica da EEIMVR.

Figura 3.3.4 – Foto da montagem, vista em parte, realizada no laboratório de mecânica da EEIMVR.

Page 22: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

4. Software de Controle

Para este projeto, foi desenvolvida uma GUI onde estão contidos: Uma caixa de

texto para a temperatura máxima da faixa de controle, uma caixa de texto para a

temperatura mínima da faixa de controle, um indicador de temperatura atual, um

gráfico mostrando a temperatura ao longo do tempo com os limites de temperatura

demarcados, um botão para iniciar o controle da temperatura e um botão para pará-

lo, além de um botão que permite que se abra gráficos de antigos controles de

temperatura. A codificação nas GUI’s é feitas de uma maneira um pouco diferente da

programação direta dos scripts padrões. Elas são baseadas nas funções que pertencem

a cada componente na interface, sendo que a codificação é separada entre estas

funções, não seguindo então um código único com início, meio e fim.

Cada componente da GUI possui uma função no arquivo do script da interface,

chamada Callback. Essas funções são ativadas quando estes componentes são

acionados. Por exemplo, para um botão executar uma ação quando este for “clicado”,

basta colocar o comando que se deseja na função Callback deste botão. Desta forma

então, foi codificado o script da GUI deste projeto em trÇes funções Callback e uma na

função CloseRequest, que é parecida com a Callback, porém é acionada quando a tela

inteira do programa é fechada.

As funções Callback ficam uma no botão “Parar Controle”, uma no botão

“Iniciar Controle” e uma no botão “Abrir Arquivo”. A função CloseRequest é para o

caso do usuário apertar o botão que fecha a janela do programa. Esta janela é

mostrada a seguir.

Figura 4.1: Tela do programa de controle

Page 23: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

O código mais importante está presente na Callback do botão “Iniciar

Controle”, que é responsável pela manutenção o gráfico da temperatura em tempo

real do sistema de aquecimento, sendo este:

function btt_Inicia_Callback(hObject, eventdata, handles)% Definição

da função CallBack do botão de Iniciar Controle

temp_Max = get(handles.caixa_TempMax,'String'); % pega o valor da

temperatura Máxima da caixa de Texto

temp_Min = get(handles.caixa_TempMin,'String'); % pega o valor da

temperatura Mínima da caixa de Texto

if isnan(str2double(temp_Max)) || (str2double(temp_Max) <= 0) %Testa

se a temp_Max é numérica e maior menor ou igual a zero errordlg('Por favor, digite uma temperatura máxima

válida.','Erro');% mostra a mensagem return;% sai da função CallBack end if isnan(str2double(temp_Min)) || (str2double(temp_Min) <= 0) %Testa

se a temp_Min é numérica e maior menor ou igual a zero errordlg('Por favor, digite uma temperatura mínima válida.',

'Erro');% mostra a mensagem return;% sai da função CallBack end if str2double(temp_Max) <= str2double(temp_Min) %Testa se a temp_Max é

menor ou igual a temp_Min errordlg('A temperatura Máxima deve ser maior que a temperatura

Mínima', 'Erro');% mostra a mensagem return;% sai da função CallBack end

conectado = 0; %inicializa a variável que verificará se foi realizada

a conexão com o arduino via porta serial try % tenta executar os comandos descritos em sua estrutura if exist('a','var') && isa(a,'arduino') && isvalid(a), %testa se

há alguma conexão com o arduino % nada a fazer else set(handles.caixa_Info,'String','Conectando...');%Exibe

mensagem enquanto efetua a conexão a=arduino('COM6');%estabeleca a conexão com o arduino na

variável a pela porta serial COM6 set(handles.caixa_Info,'String','Conectado!');%Exibe mensagem

quando conexão é alcançada end conectado = 1; % coloca o valor 1 mostrando que a conexão foi

estabelecida catch err % capita o erro ao tentar executar o código dentro da

estrutura do try msg = 'Erro ao tentar efetuar a conexão com o arduino'; % atribua

a mensagem a variável "msg" errordlg(msg); % exibe a mensagem de erro em uma janela ao usuário rethrow(err) % exibe a descrição do erro na Command Window do

MATLAB end % encerra o try if conectado == 1 % verifica se a conexão do arduino foi estabelecida

Page 24: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

set(handles.btt_Inicia,'Enable','off'); % Desabilita o botão

"Iniciar Controle" set(handles.btt_Abrir,'Enable','off'); % Desabilita o botão "Abrir

Arquivo" set(handles.btt_Para,'Enable','on'); % Habilita o botão "Parar

Controle" set(handles.caixa_TempMax,'Enable','off'); % Desabilita a caixa de

texto da temperatura máxima set(handles.caixa_TempMin,'Enable','off'); % Desabilita a caixa de

texto da temperatura mínima

handles.graficoTemperatura; %aciona o gráfico x=0:500;y=0.*x+str2double(temp_Max); %define a linha de

temperatura máxima handle.graficoTemperatura=plot(x,y,'r-');%plota a temperatura

máxima de controle x=0:500;y=0.*x+str2double(temp_Min); %define a linha de

temperatura mínima handle.graficoTemperatura=plot(x,y,'b-');%plota a temperatura

mínma de controle

axis([0 50 str2double(temp_Min)-15

str2double(temp_Max)+15]);%fixando a escala do gráfico

sens_Pin=0; % porta analógica onde será posto o sensor de

temperatura valvFria_Pin=8; % porta digital que ativará a válvula de água fria fogareiro_Pin=12; % porta digital que ativará o fogareiro a.pinMode(valvFria_Pin,'OUTPUT'); % configurando a porta como

saída a.pinMode(fogareiro_Pin,'OUTPUT'); % configurando a porta como

saída tempo=0;%inicia o contador de tempo cont=0; %inicia o contador tempoG=50; %faixa de tempo mostrado no gráfico FD=1; %frequência de amostragem na aquisição da medida de

temperatura casas=tempoG*FD; % inicia o número total de leituras para a faixa

inicial abrangida pelo gráfico vTempo(casas)=zeros; %inicia o vetor tempo com número de células

igual ao da variável casa vTemperatura(casas)=zeros; %inicia o vetor temperatura com número

de células igual ao da variável casa format bank;

while strcmp(get(handles.btt_Para,'Enable'),'off') == 0 % verifica

o estado do botão de Parar for i=(1+tempoG*FD*cont):(tempoG*FD+tempoG*FD*cont)

%inicia o loop que manterá o gráfico rolando ao longo das amostragens

de temperatura if strcmp(get(handles.btt_Para,'Enable'),'off') == 1 %

verifica se o botão "Parar Controle" foi pressionado break % encerra toda a estrutura da função

CallBack end pause(1/FD);%pausa para respeitar a taxa de amostragem tempo=tempo+1/FD; %acréscimo no contador de tempo estado = a.analogRead(sens_Pin) % capita o valor na

porta analógica que vai de 0 a 1023 numa faixa de 0 a 5 V temperatura = estado*500/(1023*9.2); %Calcula a

temperatura lida

Page 25: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

set(handles.txt_TempAtual,'String',num2str(temperatura)); if tempo*FD>=casas %verifica se o número de leituras

ultrapassou o número abrangido pela faixa do gráfico casas=casas+1;% aumenta em 1 o número de casas

lidas end vTempo(i:casas)=tempo; %guarda o novo tempo no vetor

tempo vTemperatura(i:casas)=temperatura; %guarda uma nova

temperatura no vetor temperatura handle.graficoTemperatura=plot(vTempo(1:casas),

vTemperatura(1:casas),'g-'); %plota os vetores tempo e temperatura

dentro da faixa valores atual axis([casas/FD-tempoG casas/FD str2double(temp_Min)-15

str2double(temp_Max)+15]);%estabelece a faixa de valores abrangida

pelo gráfico na amostragem atual if temperatura>str2double(temp_Max) %verifica se a

temperatura atual está acima da temp_Max

set(handles.txt_TempAtual,'ForegroundColor','r');%Pin

ta de vermelho o indicador da temperatura atual a.digitalWrite(valvFria_Pin,1);%Liga a válvula de

água fria a.digitalWrite(fogareiro_Pin,0);%Desliga o

fogareiro elseif temperatura<str2double(temp_Min)%verifica se a

temperatura atual está abaixo da temp_Min

set(handles.txt_TempAtual,'ForegroundColor','b');%Pinta de azul o

indicador da temperatura atual a.digitalWrite(fogareiro_Pin,1);%Liga o fogareiro a.digitalWrite(valvFria_Pin,0);%Desliga a válvula

de água fria else

set(handles.txt_TempAtual,'ForegroundColor','k');%Pinta de preto o

indicador da temperatura atual a.digitalWrite(fogareiro_Pin,0);%Desliga o

fogareiro a.digitalWrite(valvFria_Pin,0);%Desliga a válvula

de água fria end end cont=cont+1;% adiciona um ao contador de escalas de tempo end end a.digitalWrite(fogareiro_Pin,0);%Desliga o fogareiro a.digitalWrite(valvFria_Pin,0);%Desliga a válvula de água fria delete(instrfind({'Port'},{'COM6'})); % esclui relações de variáveis

com conexões à porta serial 'COM6' opcao=questdlg('Deseja salvar os dados de controle?','Sistema de

Aquecimento'); % exibe mensagem de pergunta ao usuário switch opcao % inicia a estrutura do escolha case 'Yes' % verifica se a opção escolhida foi sim filename = char(inputdlg('Digite o nome para o arquivo a ser

salvo.','Salvando controle')); % exibe mensagem requerindo o nome que

deve ser salva o controle de temperatura e o aloca na variável

"filename"

save(strcat(filename,'.mat'),'vTempo','vTemperatura','temp_Max','temp_

Page 26: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Min'); % salva as variáveis necessárias para a plotagem do controle

quando reacionado case 'No' %nada a fazer end set(handles.txt_TempAtual,'ForegroundColor','k'); % Pinta de preto as

letras no display que mostra as temperaturas atuais set(handles.txt_TempAtual,'String',''); % Escreve o valor de texto em

branco no display de temperatura atual set(handles.graficoTemperatura,'NextPlot','replace'); % Coloca o

estado do gráfico como substituível handle.graficoTemperatura=plot(0,0,'w'); % plota um ponto em branco no

gráfico de temperatura set(handles.graficoTemperatura,'NextPlot','add'); % Coloca o estado do

gráfico como adicionável clear; % apaga as variáveis na memória do MATLAB

A função deste código é toda aquela esperada pelo botão “Iniciar Controle”.

Seu funcionamento é simples. Ao usuário pressionar o botão, o sistema verifica se as

caixas de texto de temperatura estão preenchidas e com valores cabíveis, uma vez

verificado isto, o sistema continua à próxima etapa, que consiste em se fazer a

conexão com o Arduino. Então é nessa hora que o MATLAB tenta acessar o código do

arquivo “adiosrv.pde” que já fora transferido anteriormente para a placa, para que

possam ser feitos os comandos a seguir. Tendo conectado, a etapa seguinte é a de

determinação das portas de entrada e saída de dados, sendo a analógica a de entrada

e as digitais as de saída. Então começa o controle, a medida que o tempo passa o

sistema ativa ou desativa as saídas digitais de acordo com a leitura feita pelo sensor

que é conectado à entrada analógica do Arduino. Os valores da leitura do sensor

também são plotados no gráfico para o acompanhamento em tempo real da situação.

Uma vez pressionado o botão “Parar Controle” este é desabilitado, então essa

desabilitação é capitada na função CallBack do botão “Iniciar Controle” e todas as

variáveis são apagadas e o controle é encerrado.

Agora temos que analisar então o código presente no botão “Parar Controle”,

ou seja, o código da sua função de CallBack. Que é a seguinte:

function btt_Para_Callback(hObject, eventdata, handles)% Definição da

Função CallBack do Botão de Parar Controle

set(handles.btt_Inicia,'Enable','on');% Habilita o botão de Iniciar

Controle set(handles.btt_Abrir,'Enable','on');% Habilita o botão de Abrir

Arquivo set(handles.btt_Para,'Enable','off');% Desabilita o botão Parar

Controle set(handles.caixa_TempMax,'Enable','on');% Habilita a caixa de texto

de temperatura máxima set(handles.caixa_TempMin,'Enable','on');% Habilita a caixa de texto

de temperatura mínima set(handles.caixa_Info,'String','');% Apaga mensagem de conexão

Page 27: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Este código é bem simples, pois de fato sua função é apenas a de avisar a

função CallBack do botão “Iniciar Controle” que o botão de “Parar Controle” foi

acionado. Desta forma ao desabilitar o botão de “Parar Controle” a função do loop do

controle de sistema previamente iniciada é encerrada. A próxima função a ser

analisada também é simples, sendo esta parte do tipo CloseRequestFcn. Ela é acionada

ao ser fechada a janela inteira do sistema, então temos o seguinte código:

function TelaPrincipal_CloseRequestFcn(hObject, eventdata, handles)%

Definição da função acionada ao se tentar fechar a janela do programa

if exist('a','var') && isa(a,'arduino') && isvalid(a), % testa se o

arduino ainda está conectado opcao=questdlg('O sistema está será encerrado assim como todas as

comunicações ativas seriais, deseja realmente fechar?','Sistema de

Aquecimento'); switch opcao case 'Yes' a.end; % encerra a comunicação com o Arduino delete(instrfind({'Port'},{'COM6'})); % deleta quaisquer

variáveis relacionadas com a porta 6 delete(hObject); % fecha a tela do programa case 'No' %nada a fazer end else delete(hObject);% fecha programa todo end

A função deste código é simplesmente verificar se a conexão com o Arduino

está estabelecida no momento que o usuário fecha o programa, pois nesse caso,

poderia ser um engano, pois se perderia o controle e a oportunidade de salvá-lo. Neste

caso, em que o Arduino encontra-se conectado, o sistema pergunta ao usuário se ele

de fato deseja encerrar o programa, caso afirmativo, ele o encerra e perde-se o

controle corrente.

A última função a ser analisada é o CallBack do botão “Abrir Arquivo”, que

permite ao usuário verificar controles anteriores do sistema.

function btt_Abrir_Callback(hObject, eventdata, handles) % Define a

função CallBack do Botão Abrir Arquivo

if strcmp(get(handles.btt_Abrir,'String'),'Abrir Arquivo')% Verifica o

texto do botão Abrir Arquivo filename=char(inputdlg('Digite o nome do arquivo a ser

encontrado.','Abrir Arquivo'));% Exibe mensagem pedindo o nome do

arquivo a ser procurado e aloca o nome adquirido na variável

"filename" try % tenta executar a sequência de comandos limitado por sua

estrutura if strcmp(filename,'') %verifica se o nome digitado é nulo %nada a fazer

Page 28: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

else % capita o caso contrário, quando algum nome foi passado load(strcat(filename,'.mat')); % carrega o arquivo com o

nome dentro da variável filename set(handles.btt_Abrir,'String','Fechar Arquivo'); % coloca

o texto "Fechar Arquivo" no botão Abrir Arquivo set(handles.btt_Inicia,'Enable','off'); % Desabilita o

botão Iniciar Controle set(handles.caixa_TempMax,'Enable','off'); % Desabilita a

caixa de texto de Temperatura Máxima set(handles.caixa_TempMin,'Enable','off'); % Desabilita a

caixa de texto de Temperatura Mínima set(handles.caixa_TempMax,'String',char(temp_Max)); %

Coloca na caixa de texto de Temperatura Máxima o valor da Temperatura

Máxima do controle carregado set(handles.caixa_TempMin,'String',char(temp_Min)); %

Coloca na caixa de texto de Temperatura Mínima o valor da Temperatura

Mínimaa do controle carregado x=0:length(vTempo);y=0.*x+str2double(temp_Max); % Define

uma função de forma de reta com valor da Temperatura Máxima handle.graficoTemperatura=plot(x,y,'r-'); % plota a

temperatura máxima de controle x=0:length(vTempo);y=0.*x+str2double(temp_Min); % Define

uma função de forma de reta com valor da Temperatura Mínima handle.graficoTemperatura=plot(x,y,'b-'); % plota a

temperatura mínma de controle handle.graficoTemperatura=plot(vTempo, vTemperatura,'g-');

%plota os vetores tempo e temperatura dentro da faixa valores atual axis([0 length(vTempo) str2double(temp_Min)-20

str2double(temp_Max)+20]); % Define o intervalo de dados mostrado no

gráfico de acordo com as variáveis carregadas do controle em questão end catch err errordlg('O arquivo não foi encontrado'); % Exibe a mensagem

de erro caso não seja encontrado o arquivo deixado pelo usuário rethrow(err) % Exibe no Command Window a descrição completa do

erro end else set(handles.btt_Abrir,'String','Abrir Arquivo'); % Coloca o Texto

"Abrir Arquivo" no botão Abrir Arquivo set(handles.graficoTemperatura,'NextPlot','replace'); % Define

como substituível o estado do gráfico de Temperatura handle.graficoTemperatura=plot(0,0,'w'); % Plota um ponto em

branco no gráfico set(handles.graficoTemperatura,'NextPlot','add'); % Define como

adicionável o estado do gráfico de Temperatura set(handles.caixa_TempMax,'String',''); % Coloca o texto em branco

na caixa de Temperatura Máxima set(handles.caixa_TempMin,'String',''); % Coloca o texto em branco

na caixa de Temperatura Mínima set(handles.btt_Inicia,'Enable','on'); % Habilita o botão Iniciar

controle set(handles.caixa_TempMax,'Enable','on'); % Habilita a caixa de

texto de temperatura máxima set(handles.caixa_TempMin,'Enable','on'); % Habilita a caixa de

texto de temperatura mínima clear; % Apaga todas as variáveis da memória do MATLAB end

Page 29: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Este código simplesmente faz a pergunta ao usuário de qual o nome do arquivo

a ser aberto. Após isso, ele tenta encontrar o arquivo com o nome fornecido pelo

usuário, caso o arquivo não seja encontrado então é mostrada a mensagem de erro,

caso contrário, o programa plota os gráficos referentes aos dados de controle

encontrados. Uma vez aberto o arquivo, o usuário ao terminar de vê-lo pressiona

novamente o botão que agora está com o texto “Fechar Arquivo” e o arquivo é

fechado e o programa volta à configuração padrão de habilitações na tela.

5. Resultados e Análise

Utilizando as montagens já descritas e mostradas, foram feitos testes que nos

geraram arquivos de controle, que analisaremos aqui, o controles de ampla faixa de

temperatura, controles de baixa faixa de temperatura e controles sem os mecanismos

de tratamento de sinais. Com base nos gráficos faremos a análise do funcionamento

do sistema como um todo.

Figura 5.1 – Gráfico de controle com faixa curta entre as temperaturas máxima e mínima de controle.

Inicialmente, olhemos os problemas encontrados durante o planejamento do

projeto e de sua execução. Os problemas como um todo giram em torno do sensor e

da coleta de seu sinal adequadamente, do tempo de resposta e de sua precisão. Como

o sensor foi encapsulado em um pedaço de tubo de plástico, ele não está em contato

direto com a água. Isso provoca certo atraso no tempo de resposta da mudança de

temperatura dentro do tubo em relação a temperatura d’água. E como dentro do tubo

ainda existe ar e só então o sensor, existe um atraso na resposta do sensor. Porém

Page 30: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

este atraso mostrasse não muito importante visto que no longo prazo todo sistema

tende ao equilíbrio, assim ele funciona adequadamente.

Agora olhemos para o gráfico da figura 5.1, nosso primeiro resultado. Vemos

que à medida que o tempo passa, no início, como a temperatura no recipiente está

abaixo da temperatura mínima de controle, o fogareiro estava ligado, porém por um

certo tempo o gráfico tem bem no início uma taxa de aumento da temperatura baixa.

Isso ocorre porque o fogareiro é ligado e devido a sua baixa potência demora a

aquecer a água, além disso, transfere calor à blindagem do sensor e só depois ao

próprio sensor que então responde a este estímulo. A partir daí a temperatura vai

subindo gradualmente sem grandes picos e quando atinge a faixa de temperatura

mínima, quando o fogareiro é desligado, porém devido ao calor armazenado nas

estruturas metálicas do fogareiro e da lata, a temperatura continua a subir. Depois de

um tempo, então acontece o abaixamento da temperatura, pois esta passou do nível

máximo, que ligou a válvula fria, que a resfriou até a temperatura máxima. Este ciclo

se repete por um tempo até que todo o calor armazenado na estrutura acabe e então

a temperatura atinja a temperatura mínima e assim o fogareiro é ligado novamente. O

fato de as estruturas guardarem calor é benéfico, pois assim o sistema mantém sua

temperatura por mais tempo, como é percebido no final do gráfico. Através desse

gráfico o sistema mostrou sucesso

Após esta análise, olhamos para o gráfico da figura 5.2. Este é diferente do

primeiro no sentido de que a faixa de temperaturas aceitáveis é maior, então

analisamos outro aspecto do sistema e do mecanismo como ele funciona. Vemos que

o comportamento ao início do controle é análogo ao do primeiro gráfico, tendo o início

temperatura uma pequena taxa de aquecimento e depois crescendo mais

rapidamente. E também apresenta o comportamento de sobe e desce ao longo do

tempo. Mas uma coisa fica visível, a temperatura alcança a temperatura máxima de

controle, mas não a ultrapassa demais. Pois o calor armazenado foi mais dispersado ao

percorrer uma faixa maior de temperaturas. Isso representa um controle bem estável

da temperatura. Mostrando sua eficácia maior em faixas maiores.

Apesar disso, somos levados a analisar se de fato é necessária uma faixa de

temperatura em vez de simplesmente estabelecer uma temperatura pontual de

controle. De fato é preciso uma temperatura máxima, pois do contrário para este

sistema, haveria um caos maior e não constância. Isto ocorreria porque tendo a

temperatura com valor único buscado, os sistemas ligariam e desligariam a todo o

momento, pois a temperatura não fica muito tempo de fato constante no recipiente,

assim, à todo momento água quente e fria estariam sendo solicitadas sem

necessidade, visto que a temperatura encontrar-se-ia estabilizada. E também a

estrutura metálica não encontraria forma de estabilizar a temperatura só pelo calor

que a mesma guardou.

Page 31: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Figura 5.2 – Gráfico de controle com faixa curta entre as temperaturas máxima e mínima de controle.

Tendo visto os bons resultados obtidos, surge o momento de analisarmos a

quão prejudicada teria sido a coleta de dados caso não tivesse sido feita a blindagem

ou o filtro da tensão no sensor através dos capacitores. De fato ao olharmos a figura

5.3 vemos que o sinal devido ao não filtro da tensão no capacitor é prejudicado, mas

não é absurdo. Em média é possível olhar e dizer por volta de quanto estava passando

a temperatura em cada momento determinado. Sendo que o comportamento do

gráfico foi mantido. O que de fato deveria ocorrer, pois o sistema de funcionamento

não foi alterado, então tudo está dentro do esperado.

Em acréscimo, temos que olhar para a figura 5.4 para perceber que todo o

projeto teria falhado se não tivesse sido encontrada a origem do problema no sinal

(indução de corrente devido à interferência eletromagnética) e feito a devida

blindagem ligando-a a terra para dissipar essa corrente. De fato, ao olharmos para a o

gráfico vemos picos que impossibilitam a leitura. Isso mostra que a origem de fato era

a indução de corrente, pois o sentido da corrente induzida deve ser alternado, pois o

campo que o gera altera seu sentido a medida que a corrente que o gerou ascende ou

descende. Desta maneira surgem picos tão distantes e opostos. Mas felizmente o uso

da blindagem permitiu ao projeto ser finalizado com o sistema em funcionamento

pleno.

Page 32: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

Figura 5.3 – Gráfico de histórico controle do sistema sem o uso dos capacitores como filtro no sensor.

Figura 54 – Gráfico de histórico controle do sistema sem o uso da blindagem dos fios do sensor.

6. Conclusão

Toda a análise de um experimento é feita a partir de aproximações e hipóteses e na

hora em que se cria o protótipo e para se por em prática o projeto surgem complicações e

obstáculos. Estes podem ou não ser fáceis de ultrapassar, dependendo do quão bem feito foi o

planejamento e da habilidade de resolver problemas do condutor do projeto. Neste sistema de

Page 33: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

controle foram identificados alguns obstáculos como o isolamento do sensor e a vazão da

válvula.

Com vista nestes obstáculos cabe agora avaliar se os resultados demonstraram que

estes obstáculos foram ultrapassados. Tendo em vista a análise anteriormente feita, podemos

dizer que o sistema de controle alcançou o sucesso, isso porque a temperatura obtida durante

os controles eram até certo ponto constantes e, além disso, o tempo de controle não era

demasiado longo. Se pensarmos bem, um ar condicionado, por exemplo, leva certo tempo

para refrigerar um ambiente, então é cabível que o sistema de aquecimento também leve um

tempo para alcançar a temperatura desejada e estabilizá-la. Além disso, a vazão da válvula

mostrou-se boa após a implantação de certa altura ao recipiente que fornecia a água. E, além

disso, as leituras do sensor estavam bastante precisas, não sendo prejudicadas por campos

magnéticos e cargas externas.

Dentro do objetivo deste artigo, que era o de mostrar a interação entre

Arduino e MATLAB e, em acréscimo, de mostrar a capacidade desta união em

controlar um sistema físico com precisão, concluímos que a missão foi terminada com

êxito. Com ferramentas práticas e não muito caras é possível criar uma grande gama

de aplicações, que se expandem desde o meio prático comercial industrial, até o meio

acadêmico. Por exemplo, com o número de experimentos de medidas de tensões e

que poderiam ser realizados com o uso desta ligando, tornando laboratórios mais

eficazes com menor custo.

Referências Bibliográficas

<http://www.mathworks.com/company/aboutus/founders/> 27/07/13 – 15:45

<http://www.mathworks.com/products/compiler/mcr/> 27/07/13 – 16:00

<http://www.mathworks.com/discovery/matlab-gui.html> 27/07/13 – 16:05

<http://www.arduino.cc/> 27/07/13 – 17:00

<http://arduino.cc/en/Main/Software> 27/07/13 – 17:15

<http://pt.wikipedia.org/wiki/Arduino> 27/07/13 – 17:45

BOYLESTAD, R. NASHELSKY, L. “Dispositivos Eletrônicos e Teoria de Circuitos”, Sexta Edição.

Editora LTC.

GILAT, A. “MATLAB com Aplicações em Engenharia”, Segunda Edição. Editora Bookman.

GUSSOW, M. “Eletricidade Básica”, Segunda Edição. Editora Makron Books.

Page 34: Artigo - Integração Entre Arduino e Matlab - Sistema de Aquecimento

YOUNG, HUGH D. e FREEDMAN, ROGER A., “Física III - Eletromagnestimo”, Décima Segunda

Edição. Editora Pearson.