Índice:

Arduino Portable Workbench - Parte 3: 11 etapas
Arduino Portable Workbench - Parte 3: 11 etapas
Anonim
Arduino Portable Workbench - Parte 3
Arduino Portable Workbench - Parte 3
Arduino Portable Workbench - Parte 3
Arduino Portable Workbench - Parte 3

Se você viu as partes 1, 2 e 2B, então até agora não houve muito Arduino neste projeto, mas apenas alguns fios de placas, etc, não é o que se trata e a parte da infraestrutura deve ser construída antes do resto funciona.

Este é o código eletrônico e do Arduino. A instrução 2B anterior lista os detalhes da fonte de alimentação.

Esta seção prepara a bancada de trabalho portátil com os seguintes recursos

Uma tela de toque TFT fornecendo um display, conduzido por um Arduino Mega para fornecer o seguinte

  1. 8 visores digitais, desligados / ligados / oscilantes
  2. 4 visores de tensão
  3. 3 telas de corrente / tensão
  4. Medidor de resistência E24 (porque não consigo mais ler as faixas coloridas)

Haverá outras coisas que acrescentarei, mas esse era meu objetivo inicial. O código do Arduino também lista um display serial, display I2C, medidor de capacitância, interruptores digitais e osciloscópio que adicionarei com o passar do tempo. Além disso, ainda não decidi se vale a pena adicionar uma fonte de alimentação 3V3, uma fonte de alimentação variável ou monitoramento de tensão / corrente da fonte de alimentação. Até agora, isso foi construído usando o Mega, mas também estou procurando mover algumas das funções para separar circuitos acessados I2C, sejam chips dedicados ou Atmel 328 programados, que acomodarão mais facilmente um controlador diferente.

Suprimentos

5 x 16 tomadas de cabeçalho

5 x 8 tomadas duplas, na verdade feitas de tomadas longas de 40 linhas simples cortadas no comprimento necessário

Tela sensível ao toque ILI9486 TFT de 1 x 3,5"

1 x Arduino Mega 2650

Componentes individuais

De acordo com o texto, o valor de alguns deles não é absolutamente fixo e se você perder uma função não será necessário:)

Entrada digital

16 x 10K resistores

Entrada analógica

1 x TL074 um quad jfet opamp, isso é o que eu tinha como sobressalente, qualquer coisa semelhante serve:)

4 x 68K e 4 x 430k resistores usados como divisores de tensão.

4 x 1N4001 ou similar

Medidor de resistência

1 x TL072 um opamp jfet duplo, isso é o que eu tinha como sobressalente, qualquer coisa semelhante serve:)

1M0, 300k, 100k, 30k, 10k, 3k, 1k, 300R (se esses valores forem alterados, o código do Arduino deve ser atualizado)

Etapa 1: Visão geral dos eletrônicos

Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica
Visão geral da eletrônica

O console cinza foi feito por mim há 30 anos e ainda está em uso regular, mas os tempos mudaram. Ele fornece duas fontes de alimentação à esquerda, um amplificador de áudio central no meio, com alto-falante interno e um oscilador à esquerda. Hoje em dia a maioria dos meus circuitos só precisa da fonte de alimentação e disso, apenas do trilho positivo. Algo diferente era necessário, assim como um rótulo sem o qual vivi, bem, eu o fiz.

Os principais requisitos para os componentes eletrônicos da caixa do projeto eram alimentar circuitos mais novos usando Arduino ou Raspberry PI, então 5V era essencial, assim como os soquetes USB. Interruptores iluminados me dizem se a alimentação está ligada ou não, e quando faço testes regularmente, tenho que construir pequenos circuitos auxiliares para fornecer exibições temporárias de status. Tenho uma caixa de medidores volumosos que ocupam muito espaço na bancada e, acima de tudo, preciso de um visor que possa ler facilmente à medida que minha visão se deteriora, algo com grandes caracteres brilhantes. Portanto, preciso de displays digitais, medidores de tensão, medidores de corrente e, neste caso, um pequeno luxo na forma de um medidor de resistência para identificar rapidamente os resistores da série E24, todos a 15 cm da placa de ensaio do projeto e em uma caixa compacta e portátil.

A PSU principal, descrita em um artigo anterior, fornece energia para a tampa usando um cabo de fita de 40 vias permitindo que os dois sejam conectados enquanto a tampa está fechada. Isso fornece fontes comutadas de 5 V e 12 V para os eletrônicos do painel e para alimentar a placa de ensaio.

Todas as entradas de energia e sinal são fornecidas por soquetes de conector PCB de 2x8 vias em paralelo com um soquete duplo de 8 vias. Isso provavelmente é um exagero, a maioria das placas de ensaio tendo trilhos de energia, mas era fácil de fazer.

Nos soquetes de alimentação, o barramento principal de 0 V da fonte de alimentação é comum a todas as fontes e está disponível. Acima disso está uma fonte de alimentação de 5 V, ligada na unidade base, e acima desta estão duas fontes de + 12V e -12V fornecidas, que estão atualmente fixas, embora eu tenha uma ideia de hackear a fonte para torná-la variável e fornecer um 3,3-20V oferta variável.

Etapa 2: os eletrônicos

A Eletrônica
A Eletrônica
A Eletrônica
A Eletrônica
A Eletrônica
A Eletrônica

Publiquei impressões de tela do layout da placa de ensaio, como o circuito se parece quando construído na placa de matriz, um esquema em PDF e os arquivos Fritzing originais. Esta não é uma eletrônica particularmente complexa e existe para montar resistores limitadores, amplificadores de buffer e conexões fan-out para a placa Arduino. Mas existem várias imagens para mostrar as muitas conexões com um pouco mais de clareza. A maior parte da fiação era composta de comprimentos padrão de cabo de fita duplo pré-crimpado remontado em caixas de múltiplas vias para torná-los mais fáceis de reconectar e mais confiáveis.

O Arduino Mega 2650 é montado na tampa com o soquete USB disponível para programação. Ele dirige a tela de toque TFT usada para exibir todas as saídas e entradas.

8 entradas digitais são disponibilizadas por meio de um cabeçalho de PCB de 2 x 8 vias e seu status é exibido na tela se essa função for selecionada. Este é um display simples liga / desliga, vermelho desligado, verde ligado. Posso adicionar oscilação como uma mudança futura.

4 entradas de tensão também estão disponíveis por meio do cabeçalho do PCB e um divisor de tensão, a tensão exibida na tela. Cada tensão de entrada no painel frontal, com referência ao aterramento comum, é passada para um divisor de tensão dividido por 7 e, em seguida, armazenada em um dos quatro amplificadores operacionais em um TL074 configurado como um amplificador retificador, apenas para evitar acidentes com tensões negativas. Seria bom adicionar uma indicação de polaridade em algum estágio, mas não desta vez. A saída de cada amplificador operacional é para uma das entradas ADC do Arduino.

Um outro cabeçalho PCB expõe as conexões seriais e I2C. Isso foi feito para permitir a implementação de um console de exibição serial e uma função de identificação I2C básica.

As entradas de tensão / digitais podem não ser totalmente necessárias, portanto, podem ser reconfiguradas para fornecer saídas de comutação digital.

O Arduino alimenta uma matriz de resistência em um divisor de tensão para fornecer uma funcionalidade de medidor de resistência. A saída disso é armazenada em buffer por um amplificador operacional (meio TL072) antes de ser lida pelo Arduino e a resistência calculada. O propósito disso não é a medição precisa da resistência, mas identificar os valores da série E24 rapidamente, embora com alguma calibração possa ser usado como um medidor básico. Sua operação é detectar quando uma resistência menor que 9M9 está presente nas duas molas montadas no painel frontal e, em seguida, alternar seletivamente 5V para cada resistor na matriz divisória até que o valor mais próximo de 2,5V seja medido ou o último resistor selecionado, um o cálculo e a comparação são feitos para determinar o valor E24 mais próximo. O 5V é proveniente de saídas digitais 3-10 no Arduino, que são reconfiguradas como entradas de alta impedância entre cada medição para minimizar erros. Os pinos D3-10 do Arduino foram usados deliberadamente como uma adição futura pode ser um medidor de capacitância usando a capacidade PWM dessas saídas, o que poderia ser apenas uma mudança de software.

Uma placa INA3221 modificada fornece medições adicionais de tensão e corrente por meio da interface I2C com entradas do painel frontal. Tudo é conectado com cabos de jumper para que a reatribuição de funções seja fácil no futuro.

Etapa 3: Entrada de Tensão / Corrente INA3221

INA3221 Tensão / entrada de corrente
INA3221 Tensão / entrada de corrente

A intenção era ser uma solução rápida para fornecer medições de tensão / corrente na caixa, mas descobri que, conforme implementado na placa que comprei, destinava-se a monitorar o carregamento da bateria, então teve que ser modificado para fornecer três medições independentes. Se ao construir este projeto você puder adquirir uma placa INA3221 que implementa este chip de acordo com a ficha técnica, então isso não é necessário.

Olhando para a imagem, três cortes devem ser feitos nos traços do PCB para separar os resistores de medição. As almofadas para esses três resistores também devem ser cortadas para separá-los do resto do PCB. Os resistores são então unidos às almofadas soldando fios adicionais como pontes. Estou documentando isso porque esta é uma placa comum e pode ser a única disponível.

As conexões à placa do painel frontal são feitas por meio de cabos de jumper nos resistores de medição.

A alimentação da placa é retirada dos pinos do Arduino 5V e do aterramento, com as conexões I2C indo para a placa de circuito impresso.

Etapa 4: a tela de exibição

A tela de exibição
A tela de exibição

Esta foi uma compra do eBay e está disponível em várias fontes e é um monitor alimentado por ILI9486. Descobri que funcionava melhor com as bibliotecas MCUFRIEND de David Prentice, mas precisa ser calibrado antes do uso, o que apenas exigia que um dos exemplos de biblioteca fornecidos por David fosse executado com a tela conectada, siga as instruções na tela e anote os parâmetros exibidos, inserindo no arquivo de código Arduino_Workstation_v01 se diferente.

Para este projeto, uma tela de toque é essencial, ele gira em torno de não ter interruptores dedicados e a facilidade de apenas adicionar menus e funções no futuro, sem muitos religamentos.

Etapa 5: conectando-os juntos

Conectando-os juntos
Conectando-os juntos
Conectando-os juntos
Conectando-os juntos
Conectando-os juntos
Conectando-os juntos

O Arduino Mega está localizado no LHS da tampa, com suas portas USB e de alimentação acessíveis de fora do gabinete. No RHS próximo ao Arduino estão os componentes eletrônicos montados na placa matriz e acima dela está montada a placa INA3221 na parte traseira da tampa.

Também na parte traseira da tampa do LHS acima do Arduino está uma placa de conexão de aterramento comum à qual todos os aterramentos são conectados.

O maior número possível de ligações foi consolidado em conectores multivias. Isso torna a conexão dos circuitos muito mais fácil e confiável, e o suporte mútuo dos conectores em um invólucro de múltiplas vias oferece maior resistência à soltura. Segue uma lista dessas consolidações.

Todos os conectores foram adicionados de maneira lógica dando maior acesso para fazer conexões com meus dedos desajeitados, deixando as conexões do painel frontal para o final, com as conexões finais do display sendo passadas através do orifício de montagem para serem concluídas por último. A tela foi fixada no lugar com uma moldura impressa em 3D.

Etapa 6: Leads consolidados

Leads consolidados
Leads consolidados
  1. Entradas de tensão e resistência para as portas ADC do Arduino, cinco terminais de 20 cm com conectores machos individuais em uma extremidade consolidados em um invólucro de seis vias com uma lacuna para acomodar a lacuna nos conectores do Arduino.
  2. Cabo de 10 cm de 4 vias de um invólucro de quatro vias para dois invólucros de 2 vias para conectar os pinos de tensão no painel frontal à placa de circuito.
  3. Cabo de 8 vias de 10 cm de um conector macho 2x4 para um conector fêmea de 8 vias
  4. Cabo de 10 cm de 4 vias de alojamento fêmea de 4 vias para alojamento fêmea de 4 vias para conectar Serial e I2C ao painel frontal
  5. Cabo de 10 cm de 4 vias da caixa de 4 vias para quatro conectores simples para conectar INA3221 ao painel frontal
  6. Cabo de 20 cm de 4 vias para conectar o invólucro fêmea de quatro vias ao invólucro macho de quatro vias para levar Serial e I2C do Arduino para o fan-out da placa de circuito.
  7. Cabo de 8 vias de 10 cm de carcaça fêmea de 8 vias para carcaça fêmea de 8 vias para receber entradas digitais do painel frontal para a placa de circuito.
  8. Cabo de 8 vias com 10 cm para levar uma carcaça fêmea de 8 vias a uma carcaça macho de 3 vias e uma carcaça macho de 5 vias para conectar o divisor de resistência à placa de circuito. Os dois invólucros são usados para acomodar a lacuna não padrão nos conectores da placa Arduino.
  9. Cabo de 2 vias de 20 cm para encaixe fêmea de 2 vias para dois conectores macho simples para a fonte de alimentação INA3221.
  10. Cabo de 2 vias de 10 cm para levar alojamento fêmea de 2 vias a dois alojamentos fêmea simples para conectar a terceira conexão de monitor INA3221 ao painel frontal.
  11. Cabo 2 vias de 10 cm para levar alojamento fêmea de 2 vias para alojamento fêmea de 2 vias para conectar o INA3221 às conexões fanout I2C.

Etapa 7: Código Arduino

Código Arduino
Código Arduino
Código Arduino
Código Arduino

Este projeto é baseado no Arduino Mega 2650 pelo simples motivo de eu querer muitas portas de E / S dedicadas a tarefas em um formato simples. As bibliotecas para a tela de toque TFT são padronizadas para suportar o Arduino Uno e devem ser editadas para suportar o Mega. A edição das bibliotecas é suportada pelo autor do código TFT original, é simples e descrita na próxima etapa.

Usar um display touchscreen é a base desta parte do projeto, mas como o display que alguém acaba usando pode ser diferente do que usei, o código apenas coloca funções específicas do hardware em rotinas separadas para que todas as modificações necessárias possam ser identificadas.

Uma versão funcional do código está incluída aqui e será atualizada, mas as atualizações mais recentes estarão no github.

A função principal do código gira em torno da exibição, cada elemento na exibição tendo uma entrada em uma única matriz que contém o tipo de elemento, onde na tela ele exibe, cor e parâmetros adicionais, como fonte de entrada. Uma captura de tela dessa matriz com comentários é mostrada acima. Ele também contém um campo para controlar se ele deve ser exibido na tela ou não. Ao editar esta matriz, novos recursos podem ser adicionados ou removidos. A rotina de 'loop' do código passa por essa matriz em uma base contínua, processando cada elemento elegível sequencialmente e, em seguida, repetindo. Existem atualmente 6 elementos diferentes.

Elementos do menu - estes não exibem informações, mas quando tocados executam uma sub-rotina associada, identificada nos parâmetros do elemento

Elementos digitais - são exibidos como uma caixa na tela em vermelho ou verde, dependendo do status do pino de entrada digital associado. O console de exemplo é conectado para 8 pinos digitais, mas isso pode ser aumentado ou diminuído conforme desejado.

Elementos analógicos - exibem uma tensão aproximada conforme medida no pino analógico associado. Quatro são originalmente especificados.

Elementos de precisão - exibe a entrada de um módulo voltímetro / medidor de corrente de precisão externo. Existem apenas três deles, mas um segundo ou terceiro módulo pode ser adicionado.

Elemento de resistência - é um único elemento que exibe a entrada do medidor de resistência.

Toque - esta é a única rotina que sempre é executada para detectar se a tela foi tocada e então tomar uma decisão com base no que foi tocado. ou seja, se for um item de menu, o que isso implica em ser exibido a seguir.

A tela tem três modos de status, normal, tela grande e tela inteira e todos os elementos mudam sua operação dependendo do status. Os três modos são selecionáveis no menu ao tocar em um elemento e na opção de menu associada.

Modo normal - exibe 8 entradas digitais, quatro entradas analógicas de tensão, três elementos de precisão, o elemento de resistência e quatro elementos de menu. Selecionar Normal no menu coloca o display neste modo.

Modo grande - é selecionado tocando em qualquer um dos elementos na tela seguido por Grande. Quando selecionado, esse tipo de elemento é o único tipo selecionado e os elementos desse tipo são reorganizados para preencher a tela inteira.

Modo de tela inteira - é selecionado ao tocar em qualquer um dos elementos da tela, seguido de Tela inteira. Quando selecionado, esse elemento é o único elemento exibido e é reorganizado para preencher a tela inteira, dando visibilidade máxima daquele item.

Para adicionar funcionalidade adicional, as seguintes rotinas precisam ser adicionadas

rotina 'draw' que é chamada para obter as informações para aquele elemento, chame a rotina de atualização de tela apropriada e registre as informações de toque retornadas

rotina 'lógica' que aceita as informações da rotina de desenho e usa as rotinas de driver de tela apropriadas para colocar as informações na tela e retornar as informações de toque corretas para a área da tela desenhada

rotina de 'configuração' que é chamada como parte da configuração do Arduino

Outras rotinas podem ser incluídas, mas não deve haver qualquer interdependência entre o código do elemento, se um elemento não foi habilitado, o seu código não deve ser executado e a estrutura multifuncional simples mantém sua integridade.

Etapa 8: Editando as Bibliotecas do Arduino

Editando as Bibliotecas do Arduino
Editando as Bibliotecas do Arduino
Editando as Bibliotecas do Arduino
Editando as Bibliotecas do Arduino

O display que usei funciona muito bem com o Arduino Uno e as bibliotecas de base escritas para ele, mas executa lentamente quando transferido diretamente para o Arduino Mega. Para acionar o monitor corretamente, um conjunto diferente de pinos de dados deve ser usado e essa mudança de uso deve ser configurada nas bibliotecas. Esta é uma mudança simples e foi planejada pelo autor. As fotos destacam as alterações feitas.

Os dois arquivos são armazenados na pasta MCUFRIEND_kbv / utility como mcufriend_shield.h e mcufriend_special.h. As alterações necessárias são primeiro para o arquivo de cabeçalho 'escudo' para garantir a leitura da primeira linha

#define USE_SPECIAL

para garantir que o arquivo de cabeçalho 'especial' seja carregado.

O arquivo de cabeçalho 'especial' também deve ser atualizado para garantir que a linha

#define USE_MEGA_8BIT_PROTOSHIELD

é descomentado.

Essas duas mudanças significam que o código de exibição para esta exibição operará usando os pinos 20-29 no Arduino Mega em vez do padrão 3-10 no Uno.

Etapa 9: capturas de tela

Capturas de tela
Capturas de tela
Capturas de tela
Capturas de tela
Capturas de tela
Capturas de tela

Coloquei capturas de tela aqui para que seja fácil ver o que o console deve estar fazendo. A próxima seção se refere ao carregamento do código no Arduino.

A primeira tela mostra a tela 'normal' com menus na parte superior, medições de tensão no LHS, medições de tensão e corrente no RHS e status do pino digital na parte inferior, vermelho para 'falso / baixo', verde para 'verdadeiro / alto '. Finalmente, no centro está a medição da resistência.

A segunda tela mostra as entradas digitais habilitadas no modo Grande, cada entrada exibida claramente.

A terceira tela mostra as entradas de tensão no modo Grande.

Etapa 10: Carregando o código do Arduino

O código está anexado, mas como mencionado anteriormente, será colocado no github em algum momento e o local adicionado aqui. O arquivo de código-fonte principal é Arduino_Workbench_v01.ino e as outras rotinas são para fornecer os vários recursos.

Se as bibliotecas foram modificadas corretamente e o Arduino Mega2650 foi definido como a plataforma de destino no IDE do Arduino, o código deve ser compilado na primeira vez.

As bibliotecas que precisarão ser carregadas são Adafruit GFX e bibliotecas Touchscreen, que devem estar disponíveis no gerenciador de biblioteca do Arduino, uma cópia do MCUFRIEND_kbv para download no github e para o INA3221, a biblioteca SwitchDocLabs SDL_Arduino_INA3221 também pode ser baixada no github, ambos podem ser baixados rapidamente em uma pesquisa no google.

Etapa 11: toques finais

Toques Finais
Toques Finais
Toques Finais
Toques Finais
Toques Finais
Toques Finais
Toques Finais
Toques Finais

A ideia é usá-lo para o trabalho de projeto de forma que um painel removível seja feito com parafusos de montagem para placas Arduino e uma placa de ensaio, todo preso à tampa por velcro para torná-los destacáveis e para que diferentes placas possam ser feitas para conter projetos e que a caixa pode ser reutilizada para diferentes projetos executados simultaneamente.

Espero que esta seja uma fonte para algumas idéias para fazer algo diferente, melhor ou ambos. Eu estarei adicionando os recursos adicionais que mencionei e adicionando-os, mas se isso for de alguma ajuda, por favor, pegue o que quiser e aproveite. Se houver algum problema evidente, por favor, me avise.

Agora vou começar a usá-lo, tenho alguns projetos para trabalhar!

Recomendado: