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:
fzm.EntradaSinal = variavelAnalogica_a; fzm.SubMtoBaixo[0] = 0; fzm.SubMtoBaixo[1] = 10; fzm.SubBaixo[0] = 0; fzm.SubBaixo[1] = 20; fzm.SubNeutro[0] = 10; fzm.SubNeutro[1] = 30; fzm.SubAlto[0] = 20; fzm.SubAlto[1] = 40; fzm.SubMtoAlto[0] = 30; fzm.SubMtoAlto[1] = 40;
A Definição acima equivale à representação dos subconjuntos para a variável de entrada A, conforme a Figura 1.
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.
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.
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 2: Entrada A = 26.5 e Entrada B = 35.0
- Teste 3: Entrada A = 16.9 e Entrada B = 6.6
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
[wpdm_asset id=’6′]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.













Olá Flávio,
Também não consegui baixar a biblioteca, poderia nos disponibilizar por gentileza?
Olá Flávio. Muito bom o artigo, porém não consigo baixar os exemplos. Poderia me mandar?
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.
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).