Logo Pisciotta

PISCIOTTA

Soluções Inteligentes

PROJETOS

Listar
Alguns dos projetos que eu desenvolvi e prototipei.

Aproveite, aprenda, relembre, curta, divulgue.

Robô Equilibrista com Lógica Fuzzy


Conceito de controle de um sistema naturalmente instável, baseado no pêndulo invertido, utilizando Lógica Nebulosa (Fuzzy Logic).

555 Views - 3 Curtidas - Dificuldade

postado 24 de Maro de 2019 - atualizado 24 de Junho de 2019

Autor: Alex Pisciotta


Este artigo está em andamento, portanto, ainda inacabado, e demonstra como estou desenvolvendo meu projeto.

O sistema naturalmente instável do Robô Equilibrista se baseia no conceito de pêndulo invertido, geralmente resolvido por técnicas de Controle PID (Proporcional, Integral, Derivativo), mas neste projeto se deseja utilizar a Lógica Fuzzy para a solução desse problema.

O Primeiro Protótipo

O primeiro protótipo construído é apresentado na figura abaixo, construído à partir de palitos plásticos de sorvete encaixados e unidos por cola quente, apenas para validar o conceito e realizar os primeiros testes. A estrutura abriga uma protoboad na qual foi montada o primeiro circuito de controle, composto por um Arduino Mini, um driver de motor L295, um regulador de tensão e um módulo GY-521 que contém o circuito integrado MPU-6050 constituído pelo Acelerômetro e Giroscópio . Um conversor USB/Serial possibilita a leitura dos dados à partir do programa executado no Arduino.

O circuito eletrônico é apresentado a seguir, através do programa CAD Eagle da Autodesk.

EM BREVE

A montagem do circuito é representada a seguir, através do programa Fritzing.

O primeiro protótipo foi fundamental para a determinação e compreensão do funcionamento dos componentes essenciais à solução do problema. O primeiro deles, e talvez o mais importante, é o módulo GY-521 que contém o componente MPU-6050 (um chip da empresa InvenSense - TDK, que contém um acelerômetro e um giroscópio no mesmo encapsulamento).

O componente não é recomendado para novos projetos de hardware, uma vez que já existem componentes superiores no mercado. O link do fabricante, aonde se pode adquirir mais informações é:

https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/

Clique aqui para visitar a página do fabricante.

O MPU-6050

O componente MPU-6050 é um MEMS (Micro Electro-Mechanical System) que possui partes mecânicas dentro da pastilha de silício e permite o sensoriamento de grandezas físicas como a Aceleração linear (Acelerômetro) e a Velocidade Angular (Giroscópio). Serão tratados mais detalhes deste componente em breve.

O L293

O componente L293 é circuito integrado que disponibiliza 4 meias-pontes, ideal para driver de cargas indutivas de até 600mA no caso do L293D, ou até 1A (1,2A de pico) no L293 (sem sufixo). A versão L293D possui diodos de proteção internos contra tensão reversa e contra descargas provenientes de estática, simplificando o circuito. Ambas as versões possuem alimentação lógica separada da tensão de alimentação da carga, que pode ser entre 4,5V e 36V, e possuem um pino de habilitação (Enable) para cada par de "meia-ponte". Podem funcionar chaveando pulsos de até 5kHz.

Os pinos de GND servem também para dissipar o calor do componente e, por isso, devem todos ser ligados à placa do circuito impresso para ajudar a resfriá-lo. A alimentação lógica (VCC1) deve ser entre 2,3V e 7V, danificando o componente se tensões maiores que 7V forem aplicadas. Recomenda-se a aplicação da tensão padrão TTL: 5V.

Fonte: Datasheet L293 Texas Instruments

Seu funcionamento é simples:

Quando o Enable é baixo, as saídas correspondentes são colocadas em alta impedância (ou seja, se comportam como se estivessem desconectadas do circuito). Quando ENABLE é alto, as saídas assumem o estado lógico das entradas, fornecendo a tensão VCC2 para a carga em caso de nível lógico da entrada, ou GND em caso de nível baixo.

Conhecendo o componente, foi realizada a ligação dos motores, sendo o motor esquerdo ligado aos pinos 1Y e 2Y (saídas do L293D), e o motor direito aos pinos 3Y e 4Y. As entradas correspondentes foram ligadas ao Arduino Mini, além dos pinos de Enable e as alimentações do CI. Desse modo, para ligar o motor esquerdo em um sentido, primeiro devo enviar nível lógico alto para o pino 1A e nível lógico baixo ao pino 2A e então nível lógico alto ao pino EN1 para habilitar as saídas. Para inverter o sentido de rotação do motor, deve-se inverter o nível lógico das entradas 1A e 2A, e então habilitar as saídas através de EN1 novamente. Para ativar o motor da direita deve-se realizar o procedimento análogo. Caso sejam enviados Alto e Alto ou Baixo e Baixo, não representa problema ao circuito, mas os motores não serão energizados com diferença de potencial que possa provocam circulação de corrente, permanecendo sem movimento.

Defini, então, que os pinos de controle PWM serão conectados aos pinos de ENABLE do L293D, e os pinos de controle de orientação serão ligados a pinos digitais sem a função PWM.

Projetei o circuito antes da chegada do material e, por não ter certeza se me seria entregue um L293 ou um L293D, eu inserir os diodos na montagem, mas eles não são necessários para o L293D que possuo, então estes diodos foram retirados do circuito para a confecção da placa de circuito impresso.

O Arduino Pro Mini

A placa Arduino Pro Mini é uma redução da placa Arduino Uno, utilizando o mesmo microcontrolador, mas removendo-se alguns componentes periféricos.

Fonte: Arduino Pro Mini

Consultando-se o esquema elétrico do Arduino Pro Mini pode-se observar que essa versão foi desenvolvida pela Spark Fun Electronics baseada na versão Arduino Mini desenvolvida pela própria equipe Arduino.

Essa placa tem um microcontrolador ATMEGA328 SMD, e possui dimensões reduzidas, ideal para sistemas embarcados.

Suas principais diferenças em relação ao Arduino UNO são a ausência de um conversor UART/USB, o que impede ligar a placa diretamente à porta USB do computador para sua programação. Para isso deve-se utilizar um conversor Serial/USB externo ajustando-se a tensão desse conversor para a tensão da placa (vide adiante). Outra diferença importante é que essa placa não possui um auto-reset para a gravação dos programas, exigindo que se pressione o botão de reset quando a IDE do Arduino estiver pronta para descarregar o programa na placa. Caso o reset não seja pressionado, a transferência do programa não ocorre e a IDE apresenta uma mensagem de erro.

Existem duas versões principais, e a diferença está na tensão do regulador de tensão (que pode ser de 5V ou de 3,3V) e no cristal do oscilador, que pode ser 8/16 ou 20MHz. Geralmente a placa possui uma marcação indicando as características da mesma, mas no meu caso, a placa veio sem indicação alguma.

Por definição, as placas com regulador de 3,3V devem possuir cristal de 8MHz, enquanto as placas alimentadas por 5V devem possuir cristal de 16MHz. Para descobrir as características da minha placa, eu alimentei com 9V o pino RAW da placa (pino 1) e medi a tensão no pino VCC (pino 4), e obtive a tensão de 3,3V. Para verificar a frequência de operação, utilizei uma lupa e li a inscrição sobre o ressonador (peça cromada), 80f, indicando 8MHz. Para ter certeza, eu gravei no Arduino Pro Mini uma rotina "Blink" para piscar o LED do pino 13 a cada 10 segundos, e então verificar se o clock está correto.

Mais informações podem ser obtidas no site Oficial do Arduino Pro Mini:

https://store.arduino.cc/usa/arduino-pro-mini

Sabendo-se que minha placa é uma 3,3V e 8MHz, concluo que a ligação com o módulo MPU-6050 pode ser realizada diretamente, sem nenhum tratamento da tensão entre os dispositivos, já que ambos trabalham em 3,3V.



Lógica Fuzzy

O diferencial deste projeto, além do conhecimento do tratamento de sinais do módulo sensor de movimento, é a aplicação da Lógica Fuzzy para a solução do problema: manter o equilíbrio do robô.

Em um sistema equilibrista clássico, a solução seria realizada pela aplicação de um controle realimentado PID (Proporcional, Integral, Derivativo) para o qual se necessita estabelecer uma função de transferência em malha fechada. Para isso, deve-se conhecer o modelo matemático que representa o problema. A Lógica Fuzzy não necessita da FT, mas apenas o raciocínio de um especialista para montar o conjunto de regras.

A Lógica Fuzzy, também conhecida como Lógica Nebulosa ou Lógica Difusa, é aquela que se utiliza de grandezas não exatas, para as quais não se pode apenas dizer "sim" ou "não" (como na lógica booleana), aproximando-se da tratativa humana. Aplica-se um conjunto de regras e funções de pertinência para determinar uma saída numérica de um sistema complexo. As entradas e saídas são definidas por variáveis linguísticas, em faixas de valores (por exemplo baixa, média, alta e muito alta), e o conjunto de regras determina os valores com base na combinação dessas entradas com o conjunto de regras definido.

Lofti Zadeh é considerado o pai da lógica nebulosa pois em 1965 publicou um artigo propondo o conceito de utilização dessa lógica ao invés da lógica clássica ou Booleana para a resolução de sistemas complexos, afirmando que o mundo é nebuloso. Enquanto a lógica booleana aceita apenas dois valores (0 e 1, verdadeiro ou falso), o conceito Fuzzy trabalha com variáveis linguísticas em inúmeras possibilidades de valores linguísticos, como, em caso de um copo, completamente cheio, médio, completamente vazio, em diferentes graus de pertinência, regidos por uma função de pertinência para cada uma das variáveis linguísticas adotadas.

As funções de pertinência podem ser trapezoidais, triangulares, “singleton functions”, funções de Sigmoid ou funções Gaussianas.

Um sistema Fuzzy pode ser dividido em 4 etapas básicas:

  • Fuzzyficação: (variáveis linguísticas, valores linguísticos, funções de pertinência);
  • Regras Fuzzy;
  • Motor de Inferência;
  • Defuzzificação.

As regras Fuzzy são um conjunto de regras Se – Então com uma condição e uma conclusão.

A Inferência Fuzzy é o processo aonde os operadores Fuzzy são calculados, através de operadores como o Complemento Fuzzy, a Intersecção Fuzzy (similar ao E Booleano) e a União Fuzzy (similar ao OU Booleano).

A defuzzificação é o processo de transformação dos valores Fuzzy encontrados em valores de saída, utilizando-se métodos matemáticos, como o cálculo de centro de gravidade através de integrais, a média ponderada ou a mediana dos máximos.

Existem dois métodos para a Defuzzificação: Mandani e Takagi-Sugeno (TS) que propõem métodos diferentes para a defuzzificação. Mandani defende que os resultados das inferências fuzzy devem ser variáveis constantes, enquanto Takagi-Sugeno defende que a saída deve ser uma função da entrada.



CONTINUA...


Este artigo está em construção. Fique de olho. Semanalmente haverão atualizações.


Referências

  • https://www.invensense.com/products/motion-tracking/6-axis/mpu-6050/ - acessado em 25/09/2018
  • CUNHA, Alessandro. A vez dos sensores. Revista Saber Eletrônica n°419 ano 43, páginas 62 a 65. 2007
  • https://playground.arduino.cc/Main/MPU-6050/ - acessado em 07/04/2019
  • RIGNEL, Diego Gabril de Sousa. Uma Introdução à Lógica Fuzzy. Revista Eletrônica de Sistemas de Informação e Gestão Tecnológica, 2011.