Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Crie Menus LCD Personalizados no Arduino com XOD – Sem Programação Necessária

Componentes e Materiais

Arduino UNO 1
Shield LCD/Keypad DFRobot para Arduino 1

Aplicativos e Serviços Online

Sobre o Projeto

Os processadores que alimentam as placas de desenvolvimento Arduino não são os microcontroladores do seu avô - eles têm poder de processamento sério e podem ser usados para monitorar e controlar muitos tipos de hardware físico e sensores simultaneamente. O IDE de programação gráfica XOD para Arduino pode simplificar a tarefa de prototipagem rápida de designs de hardware, mas à medida que um sistema cresce em complexidade, surge a questão do controle do usuário e gerenciamento de informações - como organizar informações sobre o processo controlado para exibição e permitir que o usuário o controle de maneira lógica. Botões e interruptores dedicados funcionam para projetos simples, mas logo se esgotam maneiras lógicas de organizá-los (ou lugares para colocá-los em um gabinete.) Muitos designs usam um display de algum tipo para fornecer esse tipo de feedback, até mesmo um forno de micro-ondas geralmente tem uma pequena tela que permite editar configurações e inserir tempos de cozimento, e embora muito "navegação em menus" para acessar configurações obscuras possa comprometer a experiência do usuário, interfaces orientadas a menus são uma realidade para projetos de todos os tipos.

Frameworks de software para desenvolvimento de interfaces baseadas em menus em C ou C++ para microcontroladores frequentemente têm uma curva de aprendizado íngreme e podem ser difíceis de fazer alterações rápidas de design, pois muitas vezes tudo interage com tudo. O objetivo deste projeto foi usar o ambiente de programação gráfica XOD para fornecer a capacidade de prototipar rapidamente interfaces orientadas a menus para projetos de microcontroladores compatíveis com Arduino usando um estilo de interface drag-and-drop/WYSIWYG. Os parâmetros de entrada e saída da estrutura de menu gerada são modulares e genéricos e devem poder ser usados com uma ampla variedade de fontes de entrada (interruptores, botões, encoders) e produz uma sequência de saídas de texto simples que podem ser alimentadas a uma ampla variedade de tipos de display suportados pelo XOD, incluindo módulos LCD de texto multi-linha como usado neste exemplo.

Se você não está familiarizado com o ambiente XOD que este projeto usa, por favor, confira os tutoriais para esse projeto primeiro em xod.io.

Uma captura de tela de um exemplo motivacional simples segue. Passaremos por este diagrama de patch XOD seção por seção para explicar como tudo se encaixa.

Crie Menus LCD Personalizados no Arduino com XOD – Sem Programação Necessária

Seção da Interface do Controlador de Menu

À direita da tela de edição de patch no XOD estão quatro nós conectados de forma descendente. De cima para baixo, há primeiro um nó do tipo entrada analógica, selecionado para ser conectado a uma das portas de entrada analógica do Arduino. Nos meus testes, usei um Arduino Uno com processador ATMega328 de 8 bits, com um shield LCD/keypad 16x2 conectado sobre ele. O keypad no shield é conectado via pinos do shield à entrada analógica "A0" do Arduino, e o hardware gera níveis de tensão diferentes para sinalizar ao Arduino quais botões no pad estão pressionados.

Além do botão "reset" no keypad que não faz interface diretamente com o sketch do Arduino, este tipo de shield de display fornece quatro botões direcionais - cima, baixo, esquerda e direita, e um botão "select". O segundo nó abaixo, alimentado pelo nó de entrada analógica, contém código que decodifica as diferentes tensões correspondentes a teclas individuais, e gera gatilhos do tipo pulso dependendo de qual botão é pressionado. Uma entrada "timeout" é fornecida para que um desenvolvedor XOD possa ajustar o timeout de debounce do keypad do shield LCD para evitar gatilhos falsos, ajustado a um tipo particular de botão ou interruptor da aplicação.

O terceiro nó abaixo é um nó do tipo controlador de menu, que contém código para aceitar gatilhos do tipo pulso do painel de controle e lidar com a lógica do usuário navegando pela árvore de menus e fazendo seleções que geram atualizações de estado da árvore de menus.

Como implementado atualmente, ele aceita uma única entrada do tipo Número que pode ser qualquer parâmetro que o usuário possa alterar a partir de um controle externo, digamos um potenciômetro ou dial em um painel de controle que representa algum parâmetro que pode ser alterado. Quando um menu do tipo folha é selecionado pelo controlador de menu recebendo um pulso em sua entrada "Invoke", lá na árvore de menus à esquerda, o nó da tela que o usuário está olhando no momento emitirá um pulso em sua própria saída, e também enviará uma alteração de parâmetro. Há também duas entradas do tipo String que podem ser usadas para gerar uma tela inicial no display quando o Arduino liga.

Após esse nó, há um módulo controlador LCD 16x2 padrão da biblioteca padrão do ambiente XOD, mas qualquer tipo de display para o qual um módulo esteja disponível pode ser usado para exibir o texto de saída aqui.

Seção da Árvore de Menus

No topo da captura de tela do sketch há uma estrutura semelhante a uma árvore que, quando compilada e a "raiz" final da árvore é roteada para a entrada do controlador de menu que a aceita, gerará automaticamente um menu navegável exatamente como mostrado no designer gráfico. Atualmente implementados são três tipos de nós de árvore de menus, um menu do tipo "folha" - um submenu final, sem portas de entrada coloridas de laranja - isso representa alguma ação ou parâmetro que o usuário pode controlar, um menu do tipo "ramo" com ambas uma entrada e saída, onde o usuário pode selecionar entre vários submenus filhos, e um menu do tipo "concat" onde submenus são agrupados e alimentados na entrada de um menu do tipo ramo, para fazer um grupo de opções. Espera-se que seja autoexplicativo pelo diagrama como conectar este conjunto de nós.

Selecionar "invoke" quando um menu do tipo "ramo" é exibido desce para o grupo de submenus associado, em vez de gerar uma saída como um menu do tipo folha faz. Sub-submenus, sub-sub-submenus, etc. são possíveis! Estruturas complexas podem ser implementadas, limitadas principalmente pelos recursos de RAM e memória Flash do processador de um modelo particular de Arduino.

Seção de Saída

Neste exemplo, a seção de saída é onde os menus do tipo folha fazem interface com hardware externo através dos pinos de saída do Arduino. Cada menu do tipo folha tem uma saída do tipo Pulso que se conecta a um flip-flop respectivo via barramento, para alternar seu pino de saída digital associado ligado e desligado. Este tipo de arranjo pode ser usado para controlar relés ou LEDs externos, mas saídas de Pulso são muito gerais, e o pulso de saída gerado ao selecionar "Invoke" ao acessar a tela de um menu do tipo folha pode ser usado para fazer muitas tarefas, como atualizar um nó do tipo buffer XOD interno onde dados de parâmetro da porta de entrada do tipo parâmetro do controlador de menu são retidos para uso futuro.

Problemas Conhecidos Atuais

Este conjunto de nós foi testado e deve funcionar OK com o Arduino Uno como está, mas alguns problemas permanecem que não foram resolvidos até o prazo deste projeto. Atualmente, deve haver um menu do tipo ramo na árvore em algum lugar para que um sketch compile, embora a maioria dos projetos provavelmente queira ter pelo menos um. A entrada de menu "topo" para o controlador de menu, destinada a retornar todo o caminho de volta à tela de título da interface, não está implementada atualmente, mas deve ser um recurso fácil para a próxima revisão.

Displays de quatro linhas são suportados pelo nó controlador de menu, mas a interface do menu do tipo folha com quatro linhas de entrada de texto ainda não foi escrita. Uma boa quantidade de esforço foi dedicada a reduzir a sobrecarga de memória deste utilitário, mas a forma como o transpilador XOD atualmente armazena strings constantes não é ideal para sobrecarga de RAM muito baixa, e interfaces baseadas em menus tendem a ter muito texto. Para este projeto, uma solução alternativa foi desenvolvida e um conjunto de nós do tipo flash-string adicionados no patch para garantir que strings mais longas não consumissem a preciosa RAM do programa. Espera-se que isso seja abordado em uma atualização do ambiente XOD, mas a solução alternativa funciona bem por enquanto.

Usar os nós do tipo flash-string não é muito doloroso, mas requer duplicar o patch e o código para cada nova string armazenada na memória do programa, e clicar no código C++ contido dentro do próprio nó para editar a string de saída:

Crie Menus LCD Personalizados no Arduino com XOD – Sem Programação Necessária

A entrada "ID" dos nós folha e ramo não tem função, ainda. A ideia é que seria bom para cada conjunto de submenus ter números de ID associados organizados em ordem para que o usuário possa acompanhar sua posição em um conjunto de exibições, mas exigirá mais reflexão sobre como codificar isso em C++ para acontecer automaticamente.

Trabalho Contínuo

Mais testes de bugs e testes em outros dispositivos Arduino além de dispositivos AVR/ATmega, como ARM, devem ser feitos. O conjunto atual de tipos de nós de menu é um pouco limitante, deveria haver mais variedade de entrada e saída. Trabalho contínuo na redução da sobrecarga de RAM, talvez usando mais metaprogramação em tempo de compilação e armazenando o máximo de dados na memória Flash em vez de interconectar/concatenar os componentes da árvore em tempo de execução.

19/02/2019 - Um Segundo Exemplo

Esta segunda captura de tela do sketch mostra como usar o controlador de menu para tomar um valor externo ou interno como entrada para o controlador, exibir os valores atual e anterior em uma página de menu desejada, e selecionar um novo valor e armazená-lo em um buffer.

Crie Menus LCD Personalizados no Arduino com XOD – Sem Programação Necessária

À direita, o nó controlador de menu está sendo alimentado com a saída de um contador, alimentado por um nó "clock". Mas isso pode ser qualquer tipo de valor de dados interno, ou um valor externo de, digamos, um potenciômetro conectado a uma entrada analógica. A saída do contador também é enviada a um nó de formatação de string, e concatenada com algum texto de exibição para mostrar o valor atual sendo recebido pelo controlador na segunda linha do LCD, quando aquela página de menu é trazida.

As saídas "invoked" e "param" do menu folha "A" são enviadas a um nó "buffer" da biblioteca padrão XOD. A saída do buffer é então roteada de volta a um arranjo semelhante ao anterior, exceto pelo nó "defer", que são necessários para quebrar quaisquer loops de feedback em sketches XOD. O valor armazenado no buffer é exibido na primeira linha do LCD.

Quando o nó controlador de menu recebe um pulso de gatilho "invoke" do controlador do keypad, o nó A-out emite o valor de parâmetro de entrada do controlador de menu lá, neste caso o valor atual do contador, e um pulso de gatilho "invoked" que ativa a rotina de atualização do buffer e armazena o novo parâmetro no buffer. O display então atualiza automaticamente para refletir o novo valor armazenado.

A porta de saída do buffer pode então ser roteada para qualquer número de outros nós para alterar seu comportamento para refletir o novo valor de dados que o usuário selecionou:

Crie Menus LCD Personalizados no Arduino com XOD – Sem Programação Necessária

Código

Biblioteca XOD Menu System

https://xod.io/libs/bitrex/xod-menu-system-11

Adicione bitrex/xod-menu-system ao navegador de bibliotecas do sketch a partir da opção Arquivo -> Adicionar Bibliotecas... dentro do ambiente XOD.

Sem prévia (apenas download).

Esquemáticos

Abra diretamente usando o IDE XOD: xodmenusystemrev1_1_4-1-19_fLVYrcSgbX.xodball

Processo de manufatura

  1. Construa um Decodificador DTMF Usando Apenas um Arduino – Sem CIs Externos
  2. Crie um Sistema Ambilight Impressionante para Monitor com Arduino
  3. Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
  4. Crie Animações e Jogos Envolventes em LCD com Arduino UNO
  5. Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
  6. Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
  7. Servidor Web Arduino Uno WiFi: Controle LED via Navegador
  8. Contador Inteligente de Vagas: Rastreamento de Veículos em Tempo Real com Arduino, Processing e PHP
  9. Automatize o Jogo do Dinossauro do Chrome com Arduino e LDR
  10. Construa um Rádio FM Compacto com Arduino Nano e RDA5807M