Lógica Fuzzy utilizando a IDE MPLABX

Neste artigo apresentamos o funcionamento de um sistema de controle multivariável, através da implementação de uma lógica FUZZY utilizando a IDE MPLABX da Microchip em modo simulação.

Excelentes referências sobre esse assunto podem ser encontradas neste site, mais especificamente nos artigos "lógica fuzzy aplicada às engenharias" e "uma introdução à lógica fuzzy".

A biblioteca Fuzzy, composta pelos arquivos FuzzyHead.h e FuzzyLib.c, foi desenvolvida para trabalhar com duas variáveis de entrada e uma variável de saída, implementando cinco funções de pertinência de formato triangular. Os limites de cada subconjunto e as regras podem ser definidos pelo usuário da biblioteca, porém, conhecendo o funcionamento da biblioteca, é possível modificar tanto o número de variáveis quanto o número de subconjuntos de acordo com a sua necessidade.

Como cada subconjunto desse sistema apresenta formato triangular, tanto para as variáveis de entrada quanto para a variável de saída, o valor do grau de pertinência é calculado baseado na teoria de semelhança de triângulos. Seu cálculo ocorre dentro da função ‘Fuzzyphy’.

No programa Fuzzy.c, definimos os cinco subconjuntos das variáveis de entrada e de saída conforme a atribuição dos seguintes valores:

A Definição acima equivale à representação dos subconjuntos para a variável de entrada A, conforme a Figura 1.

Representação gráfica dos subconjuntos para a entrada A
Figura 1: Representação gráfica dos subconjuntos para a entrada A

A entrada B e a saída do sistema foram parametrizadas com os mesmos valores de A e, portanto apresentam a mesma representação da Figura 1.

O grau de pertinência é calculado dentro da função ‘Fuzzyphy’ utilizando a teoria de semelhança de triângulos. No exemplo abaixo podemos observar que para um valor analógico igual a 24, aplicado à entrada A, é possível encontrar o valor de grau de pertinência 0.4 no subconjunto ‘function4’ rotulado como ‘SubAlto’ na aplicação, e o valor de grau de pertinência 0.6 para o subconjunto ‘function3’ rotulado como ‘SubNeutro’ na aplicação, conforme a Figura 2.

Definição dos graus de pertinência para a entrada A
Figura 2: Definição dos graus de pertinência para a entrada A

Já a Função ‘Rulebase’ calcula a intersecção entre os graus de pertinência para as duas entradas do sistema, baseado em uma lista de regras previamente definidas (modelo de Mamdani). A intersecção entre dois subconjuntos é igual ao valor do menor deles (mínimo). Para entender essa função imagine que um valor analógico de aproximadamente 22 foi aplicado a entrada B, Figura 3.

Definição dos graus de pertinência para a entrada B
Figura 3: Definição dos graus de pertinência para a entrada B

Neste caso os graus de pertinência calculados para essa entrada são de 0.2 para o subconjunto ‘function4’ e de 0.8 para o subconjunto ‘function3’.  Assim, supondo que exista a seguinte regra, (Para A=function3 & B=function3 ENTÃO C=function3), então o valor mínimo escolhido para o grau de pertinência, resultante desta regra, será de 0.6, que representa o valor mínimo obtido através da função ‘Fuzzyphy’ para os subconjuntos ‘function3’ quando o valor analógico da entrada A for igual a 24 e da entrada B igual a 22. Supondo outra regra, (Para A=function3 & B=function4 ENTÃO C=function3), o valor mínimo será de 0.2 que é o valor do grau de pertinência encontrado para o subconjunto ‘function4’ da entrada B quando esta receber valor analógico igual a 22.

Já na função de defuzzificação, representada pela função ‘Defuzzy’, foi utilizado o método do centro de gravidade (centroide) para calcular o valor de saída do controlador. Neste método o valor resultante do grau de pertinência, obtido através da função ‘Rulebase’, é multiplicado pelo valor central do subconjunto escolhido regra a regra. É feita uma somatória deste valor obtido em cada uma das regras, e o total é dividido pela somatória dos graus de pertinência.

Utilizando a IDE MPLABX em modo de simulação e o software Matlab, foi realizada a comparação entre os dois sistemas, com regras e subconjuntos idênticos, obtendo os seguintes resultados.

  • Teste 1: Entrada A = 11.6 e Entrada B = 12.5
Teste 1 - Comparação saída Lógica Fuzzy MPLABX e MATLAB
Figura 4: Teste 1 - Comparação saída Lógica Fuzzy MPLABX e MATLAB
  • Teste 2: Entrada A = 26.5 e Entrada B = 35.0
Teste 2 - Comparação saída Lógica Fuzzy MPLABX e MATLAB
Figura 5: Teste 2 - Comparação saída Lógica Fuzzy MPLABX e MATLAB

  • Teste 3: Entrada A = 16.9 e Entrada B = 6.6
Teste 3 - Comparação saída Lógica Fuzzy MPLABX e MATLAB
Figura 6: Teste 3 - Comparação saída Lógica Fuzzy MPLABX e MATLAB

O Funcionamento da biblioteca Fuzzy, desenvolvida e testada na IDE MPLABX, foi satisfatório conforme os resultados dos testes comparativos com o software Matlab.

Baixe os arquivos de exemplo de Lógica Fuzzy

[wpfilebase tag=fileurl path='posts/Fuzzy.zip' linktext='Download dos arquivos de exemplo' /]

Os arquivos FuzzyHead.h e FuzzyLib.c são os arquivos cabeçalho e fonte da biblioteca desenvolvida para implementar a lógica fuzzy proposta neste artigo. O arquivo Fuzzy.c é o arquivo principal onde são definidos os valores e regras para testes da biblioteca fuzzy. Já o arquivo FuzzyMatlab.fis é a implementação da lógica fuzzy com os mesmos valores e regras atribuídos no arquivo Fuzzy.c.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Software » Lógica Fuzzy utilizando a IDE MPLABX
Comentários:
Notificações
Notificar
guest
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Pedro César Da Costa
22/10/2018 19:54

Olá Flávio,

Também não consegui baixar a biblioteca, poderia nos disponibilizar por gentileza?

Bruno Guimarães
15/10/2018 00:54

Olá Flávio. Muito bom o artigo, porém não consigo baixar os exemplos. Poderia me mandar?

William Lucas
William Lucas
23/02/2017 11:00

Excelente artigo.
A lógica fuzzy é uma poderosa ferramenta que pode ser utilizada em diversas áreas.
Faço Engenharia de Controle e Automação e gostaria muito de ver um post sobre
uma aplicação simples de Controle. Há muito material por ai mas com pouca didática e nada muito detalhado.

Flávio Cavalieri
Flávio Cavalieri
Reply to  William Lucas
02/03/2017 17:59

Muito obrigado pelo comentário William,
Uma aplicação interessante e bem simples de ser implementada é no controle de temperatura de um chuveiro elétrico. Você pode utilizar a vazão e a temperatura da água como variáveis de entrada, a variável de saída pode ser usada para o controle da potência aplicada a resistência elétrica do chuveiro (atuador).

Talvez você goste:

Séries

Menu

WEBINAR
 

Soluções inteligentes para acionamento de MOSFETs/IGBTs com família STDRIVE

Data: 08/10 às 15:00h - Apoio: STMicroelectronics
 
INSCREVA-SE AGORA »



 
close-link