Índice:

LED POVstick com Bluetooth de baixa energia: 10 etapas (com imagens)
LED POVstick com Bluetooth de baixa energia: 10 etapas (com imagens)

Vídeo: LED POVstick com Bluetooth de baixa energia: 10 etapas (com imagens)

Vídeo: LED POVstick com Bluetooth de baixa energia: 10 etapas (com imagens)
Vídeo: NR-12 Acidente em torno 2024, Novembro
Anonim
LED POVstick com Bluetooth de baixa energia
LED POVstick com Bluetooth de baixa energia

Este instrutível mostra como construir uma vara lightwriter com LEDs RGB que é controlável via BLE de seu telefone!

Agora que a temporada negra começa e você precisa tirar fotos de longa exposição: Com este stick, você pode escrever sua assinatura na foto, ou uma frase motivacional, ou uma declaração de amor, um código QR, um endereço da web ou muitos outras coisas …

Abrange vários tópicos de desenvolvimento:

  • construindo o hardware
  • programação do chipset Cypress BLE com C
  • faça seu próprio aplicativo para controlá-lo.

Etapa 1: Hardware para o BLE-LED-Stick

Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick
Hardware para o BLE-LED-Stick

Para o stick, você precisa do seguinte:

  • Um módulo BLE cipreste (CY8C4247LQI-BL583)
  • um WS2812b RGB-LED-Strip (64LEDs de uma tira de 144Led por metro)
  • uma bateria de íons de lítio com um suporte adequado (18650)
  • um botão de pressão
  • um pedaço de placa de ensaio

O hardware do stick em si é bastante simples.

O módulo Cypress BLE é montado em um pedaço de placa de ensaio e os LEDs, o botão e a fonte de alimentação são apenas conectados a esta placa de ensaio.

Tudo é montado, colado ou aparafusado a um pequeno pedaço de tira de madeira, que é parcialmente inserido em um tubo de poliacril transparente. Mas isso não é obrigatório. Queria montar tudo dentro de um tubo, mas não achei um adequado para o módulo BLE e a bateria que são bem grandes, comparados aos LEDs. Para uma primeira foto, você não precisa do tubo de acrílico.

Etapa 2: Montagem de eletrônicos

Montagem Eletrônica
Montagem Eletrônica
Montagem Eletrônica
Montagem Eletrônica

Esta etapa mostra como o módulo BLE é montado e quais pinos são usados para cada propósito.

Como em vários de meus Instructables, usei o Cypress BLE Development Kit. CY8CKIT-042-BLE Guia de início rápido

Se você quiser operar o módulo por conta própria, tudo que você precisa conectar são as fontes de alimentação e os pinos usados.

Para o nosso projeto, usamos apenas o pino 3.5 para acionar o LED-Strip. Mas é claro que você pode mudar isso com o PSoC Creator.

Como você pode ver na imagem do PCB, adicionei pontas de alfinetes em todos os cantos do chip, mas pulei o pino VREF.

Desta forma, o módulo é montado corretamente e é impossível desconectar o módulo.

Etapa 3: como gerar as fontes?

Como gerar as fontes?
Como gerar as fontes?

Bem, acho que este foi um dos problemas mais interessantes que resolvi durante este projeto.

É claro que alguém poderia apenas projetar uma nova fonte e escrevê-la em um array, mas isso realmente dá muito trabalho!

Então o que eu fiz?

Eu sabia que precisava de algum tipo de conversão ASCII para hex-bitmap. E tive sorte, pois não fui o primeiro com esse problema!:-)

O software "GLCD Font Generator" fez a coisa certa:

Como eu queria tirar o máximo proveito do stick de LED, importei a fonte em um tamanho bastante grande (~ 32 pixels). Se você usar apenas letras maiúsculas, não precisará se preocupar com ascendentes, o que aumentará o tamanho da fonte visível em mais alguns pixels. Mas optei por usar letras maiúsculas e minúsculas. (https://en.wikipedia.org/wiki/Ascender_%28typography%29)

Depois de importar uma fonte para o gerador de fontes GLCD, você pode escolher exportá-la em diferentes formatos.

Tentei exportá-lo diretamente para os cabeçalhos, o que foi bom, mas não perfeito. A exportação resultante é uma matriz de curtos (16 bits) com valores hexadecimais de bytes para as colunas de cada caractere do primeiro caractere 128-ascii. Não é bem o que eu queria ou precisava …

Então, importei o array para uma planilha de cálculo de escritório aberta. Em seguida, removi o "0x" em três dos quatro valores e concatenei-os em um valor de 32 bits. Eu também consertei o endianess errado dos bytes individuais.

A matriz resultante é uma matriz N * M de valores de 32 bits. M é o respectivo caractere e N são as colunas que compõem a exibição desta letra. Neste primeiro rascunho todos os personagens têm o mesmo número de colunas, ou seja, todas as letras são igualmente largas, como na conhecida fonte Courier. Pequenos caracteres como "i" ou "t" parecem estar perdidos no espaço.

Portanto, adicionei um novo parâmetro no início de cada personagem para dizer quantas colunas esse personagem tem ou quão largo é esse personagem. Isso economiza memória e melhora a aparência do texto!

Etapa 4: Software de controle BLE

Software de controle BLE
Software de controle BLE

O princípio do software BLE é muito fácil:

  • No início, simplesmente não faz nada.
  • Através do BLE você pode definir diferentes animações ou textos a serem exibidos.
  • Depois de pressionar o botão, as colunas individuais da animação ou do texto são exibidas.
  • Depois que o texto é exibido, ele continua aguardando novamente.

Basta importar o projeto cipreste para o seu PSoC-Creator e modificá-lo se desejar.

O PSoC-4 não tem muita RAM e flash para ser capaz de armazenar imagens RGB completas das fontes. Portanto, eu precisava de uma maneira de gerar o conteúdo do LED dinamicamente a partir do texto. Isso é bastante simples, nada de especial até agora. De um texto com muitas letras, o algoritmo pega uma letra e a converte em uma matriz de bitmap preto-branco. Em seguida, ele pega cada coluna desse bitmap de uma letra e, em vez de branco, grava a cor RGB atual no array de LED. Desta forma, você pode gerar textos de uma única cor ou por uma função adicional alterar a cor após cada coluna, cada letra ou mesmo após cada pixel.

Uma "letra" pode ser armazenada em uma única variável de byte, enquanto um bitmap em preto e branco precisa ser armazenado em algum tipo de array.

A estrutura de dados é esta:

String: newtext = "Olá";

Fonte: uint32 caracteres = {FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn,… SecondCharacter_ColumnCount, SecondCharacter_FirstColumn,…… LastCharacter_ColumnCount,… LastCharacter_LastColumn}; Cor: uint32 rgbcolor = 0xHHBBGGRR; // Brilho, Azul, Verde, Vermelho, cada um com um valor de 8 bits

Para converter uma string para exibição, fazemos o seguinte:

getCharacter (): H (8 bits)

getColumn (int i): coluna (32 bits) (i começa com a primeira coluna, vai até a última.) se (o bit na coluna é 1) o LED na faixa está definido como colorido. A matriz de tira de LED tem 64 LEDs com cores de 32 bits cada!

E se esta coluna for exibida, continuamos com a próxima.

É tão fácil.

Etapa 5: primeiro teste

Primeiro teste
Primeiro teste
Primeiro teste
Primeiro teste
Primeiro teste
Primeiro teste

Agora que o software está em execução, estamos prontos para os primeiros testes.

A maneira mais fácil de testar a função incorporada é com um aplicativo de teste de baixo consumo de energia Bluetooth. Como o Nordic ou Cypress Apps.

Nórdico: nRF Connect for Mobile

Cypress: CySmart

Inicie o Pov-Stick e observe como a seqüência de demonstração será exibida. Assim que terminar, é hora de iniciar o aplicativo. Procure o dispositivo Povstick e clique em conectar.

Assim que a conexão for estabelecida, o aplicativo descobrirá automaticamente todos os serviços e características definidos.

Procure o primeiro serviço (deve começar com 0000ccce…). Clique nele para abri-lo e exibir a primeira característica (começa com 0000ccc1). Em seguida, aperte o botão de gravação (ou upload) e escreva 01 para esta característica.

Depois de clicar em enviar, o POVstick iniciará a animação Color-Knight-rider, também conhecida como Larson Scanner, com a mudança de cores.

Parabéns, você enviou seu primeiro valor via BLE!

Etapa 6: selecione as animações

Selecione as animações
Selecione as animações
Selecione as animações
Selecione as animações
Selecione as animações
Selecione as animações
Selecione as animações
Selecione as animações

No software, definimos um enum "e_Animation" com os seguintes valores:

typedef enum {Knightrider = 0, ColorKnightRider, Rainbowswirl, Valueswirl, WS_CandyCane, WS_CandyCane_2, WS_CandyCane_3, WS_Twinkle, WS_Icicle, WS_ColorWheel, RGB_Control, TextAnimation, Animation_Max} e_Animation;

Esses são os valores válidos para a característica ccc1. Se você gostaria de ver o CandyCane-Animation, você deve escrever 4, 5 ou 6 para esta característica. Eles diferem nas cores.

Duas animações especiais são RGB_Control e TextAnimation. Se você escolheu ativá-los, o stick obviamente não mostrará nada a princípio. Mas oferece opções adicionais para controlar o stick com os outros serviços.

Etapa 7: Controle RGB

Controle RGB
Controle RGB
Controle RGB
Controle RGB
Controle RGB
Controle RGB
Controle RGB
Controle RGB

O RGB-Control pode ser facilmente testado com o aplicativo CySmart porque usei o mesmo UUID para esta característica do Cypress Demo.

Inicie o aplicativo CySmart e conecte-se ao Povstick. Primeiro você deve escrever um "0x0A" para a característica ccc1.

0x0A é o valor hexadecimal para 10, que é a animação RGB-Control no enum.

Em seguida, você pode alternar para o painel de controle RGB-LED no aplicativo CySmart. Talvez você precise reiniciar o aplicativo para chegar a esta tela. Então você pode controlar a cor de todos os LEDs com este diagrama RGB.

Claro, você também pode escrever os valores diretamente na característica.

Etapa 8: serviço Text_Animation e serviço de armazenamento persistente

Serviço Text_Animation e Serviço de Armazenamento Persistente
Serviço Text_Animation e Serviço de Armazenamento Persistente

Esses serviços não são tão fáceis de testar.

Tecnicamente, você também pode usar o aplicativo nórdico para isso, mas precisa saber quais valores escrever em quais características.

Então, se você quiser testá-los, deve dar uma olhada no projeto PSoC, que característica tem qual UUID.

Um ponto importante é a característica "Set-Speed". Com esta característica você pode controlar a velocidade das animações.

Com a característica "Set_Animation" do PersistentStorageService você pode controlar as fontes e as cores da string de texto. Os valores válidos são definidos em "povanimation.h", duas fontes "mono" e "serif" e de cor única e cor do arco-íris. Os valores 0 e 1 exibem o texto com uma cor fixa, controlável através da característica RGB_Control. Os valores 2 e 3 mudam a cor de cada coluna e dão à string um belo arco-íris.

O "Write_Text_Service" é um pouco diferente. Você pode escrever uma nova string no dispositivo escrevendo caracteres individuais na característica "Set_Character". Em cada gravação, você receberá uma notificação do comprimento atual da string.

Para iniciar uma nova string, escreva "true" em "Clear_String".

Esta não é a melhor implementação, mas funciona para qualquer string de até 250 caracteres sem alterar o tamanho da MTU.

A exibição de uma nova string com início quando o botão no Povstick é pressionado.

Etapa 9: iniciar o aplicativo Android

Este é um passo importante, mas muito além do escopo deste instrutível. Desculpe por isso!

Talvez eu possa fazer o upload do meu aplicativo de teste para a Play Store, mas ele ainda não está concluído ou pode ser lançado.

Etapa 10: Escreva mensagens em imagens

Escreva mensagens em fotos
Escreva mensagens em fotos
Escreva mensagens em fotos
Escreva mensagens em fotos
Escreva mensagens em fotos
Escreva mensagens em fotos

Bem, é por isso que eu construo este povstick em primeiro lugar: Para escrever mensagens em imagens.

Você precisa de um tripé, uma câmera com função de longa exposição e uma boa localização.

Configure a câmera e ajuste o tempo de exposição para 10s para um primeiro teste.

Acione a liberação e comece a percorrer a imagem, iniciando a exibição de texto no stick.

Et Voila, aí estamos!

Com a combinação certa de brilho do LED, abertura e tempo de exposição, é até possível tirar fotos de madrugada.

As três imagens nesta etapa mostram o espectro completo de possibilidades.

No primeiro, os LEDs são superexpostos e criam um brilho mágico. Mas é por isso que os reflexos no solo são visíveis e o fundo é bastante bom.

A segunda imagem é exposta para os LEDs, mas isso deixa o fundo completamente preto.

E o terceiro mostra LEDs bastante fracos logo após o pôr do sol. Os LEDs são tão brilhantes quanto nas outras fotos, mas o ambiente estava tão claro que tive que usar uma abertura baixa e um ISO baixo para que os LEDs parecessem bem escuros.

Concurso Make it Glow 2018
Concurso Make it Glow 2018
Concurso Make it Glow 2018
Concurso Make it Glow 2018

Segundo prêmio no Make it Glow Contest 2018

Recomendado: