Escrito por: Newton C. Braga e David Alan de Oliveira Ferreira

A utilização de microcontroladores no controle de processos, monitoramento de eventos, níveis, posições e muito mais oferece possibilidades ilimitadas em aplicações industriais, meio ambiente, saúde, e tudo mais em que a eletrônica possa estar presente.

Hoje os microcontroladores podem ser encontrados em uma infinidade de configurações com recursos de todos os tipos, de aplicações diretas, via internet (IoT), vestíveis, embarcadas e muito mais. Assim, com imaginação e a utilização das configurações corretas pode-se fazer tudo.

Newton C. Braga

O artigo que vamos apresentar a seguir de nosso colaborador David Alan de Oliveira Ferreira é um exemplo disso.

A ideia vem da física, mais propriamente da hidráulica, merecendo uma introdução teórica que, como professor de física, podemos fazer com propriedade.

Começamos com o princípio de Arquimedes que nos diz que o empuxo de um corpo imerso em água é igual ao peso da massa de água que ele desloca.

Assim, se tivermos um corpo cuja densidade seja menor do que a da água, ele flutua, pois a massa de água deslocada é menor que sua massa. Por outro lado, um corpo com densidade maior do que a da água, afunda.

 

Figura 1 – se o peso é menor que o empuxo o corpo flutua, se maior que o empuxo ele afunda.
Figura 1 – se o peso é menor que o empuxo o corpo flutua, se maior que o empuxo ele afunda.

 

É claro que podemos aplicar isso a outros líquidos.

Sabemos que se colocarmos água e óleo num recipiente, eles não se misturam, e como a densidade do óleo é menor do que a da água ele fica distribuído sobre a água, conforme mostra a figura 2.

 

Figura 2 – Observe que um corpo que tenha uma densidade intermediária entre a água e o óleo flutuará entre os dois, ou seja, na superfície de separação.
Figura 2 – Observe que um corpo que tenha uma densidade intermediária entre a água e o óleo flutuará entre os dois, ou seja, na superfície de separação.

 

Assim, se tivermos uma boia cuja densidade seja maior que a do óleo e menor do que a da água ela flutuará nessa superfície de separação (ou seja na água), enquanto uma boia com densidade menor que a do óleo flutuará na superfície do óleo.

É claro que podemos ir além de ter mais de duas substâncias, o que nos permite, com a escolha apropriada das boias monitorar o nível de cada uma.

A figura 3 nos dá uma ideia do que se pode fazer.

 

Figura 3 – Substancias que não se misturam, e têm densidades diferentes.
Figura 3 – Substancias que não se misturam, e têm densidades diferentes.

 

Para os leitores interessados, o projeto de nosso colaborador que envolve apenas dois líquidos imiscíveis com densidades diferentes serve perfeitamente de base para projetos mais avançados.

Na reciclagem de materiais, na industria e mesmo em aplicações comuns a possibilidade de se fazer o controle se separação desses materiais de propriedades diferentes abre um leque ilimitado para projetos com microcontroladores.

 

 

 

Comunicação Serial: Lógica Fuzzy com MATLAB + Arduino

David Alan de Oliveira Ferreira

O tanque deverá ser composto por dois sensores para medição dos níveis em centímetros, cada um é formado por uma boia fixada na ponta de uma haste que possui um potenciômetro na outra ponta. Observando a densidade de cada elemento, as boias foram preenchidas por óleo e ar para que se posicionem na região entre os dois fluidos e sobre o óleo, respectivamente. São responsáveis pelo giro do eixo de cada potenciômetro conforme a variação dos níveis.

 


 

 

A altura da água (waterHeight) é medida pela boia que está posicionada entre os dois fluidos e a altura do óleo (oilHeight) é medida pela boia que está sobre o óleo. O nível da água (waterLevel) e o nível do óleo (oilLevel) são obtidos da seguinte forma:

waterLevel = waterHeight

oilLevel = oilHeight - waterHeight

 


 

 

As variações são diferenças entre os níveis dos fluidos com relação as alturas de 5 e 6cm, ponto médio da margem de segurança entre as válvulas e altura mínima da válvula do óleo, respectivamente. São calculadas da seguinte forma:

waterVariation = waterLevel - 5

oilVariation = oilLevel + waterLevel - 6

Neste projeto, o nível máximo é indicado pela altura de 50cm. O tanque deve possuir lados com largura superior a 50cm, para facilitar o movimento das boias na medição deste nível.

O sistema de separação apresentado neste trabalho trata-se de um protótipo, e como produto final pode ser aplicado em diversos ambientes, como cozinhas residenciais, instalações para lavagem e manutenção de veículos, estacionamentos e em depósitos de petróleo e similares.

Ao iniciar o sistema, é esperado um tempo antes do processo de separação, garantindo que a mistura heterogênea despejada se estabilize, ficando o óleo acima da água no interior do tanque. Este tempo também é necessário para que os sensores se posicionem adequadamente. Os sensores fornecem os valores das medições para o sistema, o controlador Fuzzy analisa os sinais para decidir a próxima tarefa, e as válvulas solenóides são tratadas discretamente pelo sistema para o escoamento dos fluidos.

 

 

 


 

 

 

Este tutorial explica como enviar e receber dados através de uma comunicação serial para simulações com lógica Fuzzy.

A explicação do controlador Fuzzy do projeto “Sistema de Separação Automática de Água e Óleo Usando Controle Fuzzy” pode ser vista em https://youtu.be/Bj48FlfI2Mg .

As regras de inferência são exibidas abaixo

>> showrule(fis)

ans =

1. If (waterVariation is positive) and (oilVariation is positive) then (valves is openWater) (1)

2. If (waterVariation is positive) and (oilVariation is zero) then (valves is openWater) (1)

3. If (waterVariation is positive) and (oilVariation is negative) then (valves is openWater) (1)

4. If (waterVariation is zero) and (oilVariation is positive) then (valves is openOil) (1)

5. If (waterVariation is zero) and (oilVariation is zero) then (valves is closeAll) (1)

6. If (waterVariation is zero) and (oilVariation is negative) then (valves is closeAll) (1)

7. If (waterVariation is negative) and (oilVariation is positive) then (valves is openOil) (1)

8. If (waterVariation is negative) and (oilVariation is zero) then (valves is closeAll) (1)

9. If (waterVariation is negative) and (oilVariation is negative) then (valves is closeAll) (1)

 

Funcionamento do Hardware:

O Arduino Mega é uma placa de micro-controlador baseada no Atmega1280, bastante utilizada no meio acadêmico e de código aberto. Possui 54 pinos digitais de entrada/saída (dos quais 14 podem ser utilizados como saídas PWM) e 16 entradas analógicas. A versão do Arduino opera com tensão de 5V e com velocidade de 16 MHz (Arduino, 2017).

Neste sistema, o Arduino processa os valores de nível, envia informações via comunicação serial ao controlador simulado e trata as válvulas de acordo com as regras fuzzy. A conexão do Arduino com o MATLAB é baseada na Comunicação Serial (UART) via USB com taxa de velocidade em 9600 bits por segundo (baud rate).

Código embarcado no Arduino Mega

 


 

 

 

O código possui 3 rotinas: A rotina “enviaQuadroMatlab()” é responsável pela leitura dos sensores de nível e envio das informação inseridas em um quadro que inclui o valor de início do quadro e a soma dos valores de nível em checksum para verificação da integridade do pacote.

Quadro transmitido pelo Arduino

start waterVariation oilVariation checksum

 

A rotina “recebeDadoMatlab()” faz a leitura do valor calculado e enviado pelo MATLAB, e atribui este valor a variável valves em float.

E por último, a rotina “trataValvulas()” verifica o valor de valves e aciona as válvulas de acordo com o valor recebido. Visto que a saída do controlador resulta em apenas três valores, tais valores foram inseridos no código para comparação e tratamento das válvulas.

Código implementado no MATLAB

 

 


 

 

Uma porta serial com o nome arduino_serial foi criada para comunicação com o Arduino. A função “evalfis” faz o cálculo difuso e o resultado é armazenado em valves. A função “num2str” converte o valor calculado em uma String com apenas duas casas decimais para envio na função fprintf.

 

Conclusão

Dado valores de variação da água e do óleo, tem-se como resultado a inferência de um valor, no intervalo [0, 1] que representa um dos três subconjuntos de valves e dá suporte a tomada de decisão. Com isso, é possível defuzzificar e interpretar as condições para o acionamento das válvulas. Com o uso dos códigos exemplos supracitados, pode-se manusear valores reais de sensoriamento e cálculos para diversas aplicações.

Mais detalhes sobre a programação em https://www.arduino.cc  e https://www.mathworks.com/products/matlab.html 

 

 

 

 

col0017 David Alan de Oliveira Ferreira

 

Mestrando em Engenharia Elétrica pela Universidade Federal do Amazonas (UFAM). Possui graduação em Sistemas de Telecomunicações pelo Instituto Federal do Amazonas (IFAM, 2015).

Atualmente realiza pesquisas científicas no CETELI/UFAM nas áreas de Redes de Sensores sem Fio e Internet das Coisas.

Email: Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.