Índice:

O Holi-Tie: 8 etapas (com fotos)
O Holi-Tie: 8 etapas (com fotos)

Vídeo: O Holi-Tie: 8 etapas (com fotos)

Vídeo: O Holi-Tie: 8 etapas (com fotos)
Vídeo: НОЧЬЮ САМО ЗЛО ПРИХОДИТ В ЭТОТ ДОМ / AT NIGHT, EVIL ITSELF COMES TO THIS HOUSE 2024, Novembro
Anonim
Image
Image

Por gwfongMonkey PatchingFollow Mais do autor:

Rampa para cães iluminando
Rampa para cães iluminando
Escultura em Coração de Aço e Vidro Fundido
Escultura em Coração de Aço e Vidro Fundido
Escultura em Coração de Aço e Vidro Fundido
Escultura em Coração de Aço e Vidro Fundido
Borboleta de Fio de Cobre e Vidro Fundido
Borboleta de Fio de Cobre e Vidro Fundido
Fio de cobre e borboleta de vidro fundido
Fio de cobre e borboleta de vidro fundido

Sobre: apenas um cara querendo fazer coisas legais Mais sobre gwfong »

Esta é a Holi-Tie, uma gravata festiva desenhada para ser usada nas férias. Vagamente baseado no Ampli-Tie de Becky Stern que usa uma placa Flora, o Holi-Tie usa um microcontrolador Circuit Python Express (CPX) para conduzir as animações NeoPixel e a música. Um botão muda entre 2 animações NeoPixel diferentes. Os touchpads capacitivos alteram as cores do NeoPixel e as velocidades de animação. O outro botão muda entre animações LED e música. O microfone integrado é usado para medir o ruído ambiente para a animação do medidor VU. E o alto-falante CPX emite melodias de chip de férias.

Tudo é codificado usando a linguagem de programação Python em execução no sistema CircuitPython. Ele é alimentado por uma bateria LiPo de 3,7 V, 500 mAH que foi modificada para ter um botão liga / desliga.

Existem dois videoclipes que mostram o Holi-Tie:

  • Holi-Tie concluído
  • Por dentro do Holi-Tie

Etapa 1: Peças e Ferramentas

Peças

  • Circuito Playground Express
  • 15x Flora Neopixels
  • Fio magnético
  • Fita adesiva de gancho e loop
  • Bateria lipo 500mAH com conector JST
  • Gravata Candy Cane
  • Mini interruptor deslizante, SPDT
  • Tubulação termorretrátil

Ao adquirir as peças, é aconselhável comprar extras. Eu tinha um total de 20 NeoPixels, um dos quais estava quebrado desde o início e o outro que estraguei. A gravata Candy Cane era tão barata que comprei uma segunda para o caso de estragar a primeira.

Ferramentas

  • Pistola de cola quente
  • Estação de solda
  • Cortadores de arame
  • Faca pequena
  • Multímetro
  • Computador
  • Isqueiro ou pistola de calor
  • Linha e agulha

Etapa 2: Preparando o Empate

Preparando o Empate
Preparando o Empate
Preparando o Empate
Preparando o Empate
Preparando o Empate
Preparando o Empate

O objetivo principal é obter acesso ao núcleo da amarração interna e demarcar as linhas que indicam onde os LEDs devem ser posicionados.

Etapa 1: amarre a gravata na posição

Será difícil amarrar a gravata quando os componentes eletrônicos estiverem no lugar. Então, amarre a gravata para que fique bem e o nó fique bem firme e não se desfaça. Em seguida, puxe com cuidado a ponta pequena da gravata para abrir o buraco e passar a gravata sobre a cabeça. Esta é a posição em que o empate será trabalhado.

Existem todos os tipos de nós de gravata diferentes. Só conheço aquele que aprendi quando criança, o Windsor. Não deve importar qual nó é usado.

Etapa 2: abra a parte de trás da gravata

Abra as costuras de um lado do laço da gravata e do logotipo e, em seguida, desça no centro da gravata. Cuidado porque tem que ser costurado de volta no final.

Etapa 3: desenhe linhas onde os LEDs devem ser colocados

Para que os LEDs apareçam nas seções de listra branca da gravata, é mais fácil encontrar a linha central para cada seção de listra branca na parte de trás do núcleo da gravata e, em seguida, mapeá-la para a frente do núcleo da gravata. Verifique e verifique se a linha central está 1) no centro e 2) paralela à listra. O ajuste fino das posições dos LEDs será possível se eles estiverem um pouco apagados. Mas é melhor chegar o mais próximo da exatidão agora, em vez de mais tarde.

Teste a centralização das linhas colocando LEDs nas linhas e colocando o tecido da listra por cima. Ajuste onde for necessário.

Etapa 3: anexando os NeoPixels

Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels
Anexando os NeoPixels

Basicamente, estamos fazendo nossa própria faixa de LED. Simplesmente montamos os LEDs no núcleo de amarração e, em seguida, os conectamos uns aos outros.

Etapa 1: aderir os NeoPixels ao núcleo de amarração

Coloque um pouco de cola quente na parte de trás do NeoPixel e coloque-o nas linhas centrais. Para as seções com 3 NeoPixels, alinhe verticalmente o NeoPixel central e cole-os primeiro. Isso tornará mais fácil posicionar o NeoPixel esquerdo e direito em relação ao centro, especialmente considerando que a largura da gravata aumenta de cima para baixo.

Certifique-se de orientar todos os NeoPixels na mesma direção, indo da parte inferior esquerda para a direita superior. Se isso não estiver correto, a faixa não funcionará.

Uma nota sobre a cola quente. Será o suficiente para concluir o projeto. Quanto a se isso vai durar por muitos anos, é preciso ver.

Etapa 3: Soldar os NeoPixels uns aos outros

Como decidi soldar os NeoPixels juntos em vez de usar rosca condutiva, o orifício nas almofadas do NeoPixel trabalha contra nós. Basta encontrar um bom lugar na almofada para soldar o fio. Não tente preencher o orifício com solda, mas se isso acontecer, ficará tudo bem.

O fio magnético tem uma fina camada de isolamento em torno de um núcleo de cobre. Com uma faca, raspe o isolamento apenas nas pontas onde serão soldados. É melhor raspar toda a circunferência do fio.

Etapa 4: teste a conectividade

Use um multímetro para testar a conectividade de:

  1. Conexões positivas. Deve haver conectividade da ponta à cauda. Certifique-se de testar a conectividade nas almofadas e não no fio.
  2. Conexões de aterramento. Execute o mesmo teste, mas com as almofadas de aterramento.
  3. Cada linha de dados. De um data pad para o outro, verifique se há conectividade.

Etapa 4: Anexar o Circuit Playground Express

Anexando o Circuit Playground Express
Anexando o Circuit Playground Express

O Circuit Playground Express (CPX) é o coração do sistema. Adafruit tem vários tutoriais para este controlador. Posteriormente neste instrutível, destacarei alguns dos recursos do MCU.

Etapa 1: Solde o CPX ao NeoPixel de ponta inferior

Corte os comprimentos apropriados do fio magnético para alimentação, aterramento e dados. Empurre-os através do tecido do núcleo de amarração para que eles toquem os blocos de alimentação, aterramento e dados do NeoPixel. Solde-os certificando-se de que os fios existentes nas almofadas ainda estejam fazendo uma boa conectividade.

Em seguida, vire o núcleo da amarração e coloque o CPX na posição desejada. Alimente o fio de alimentação para o bloco de VOUT, o fio de aterramento para qualquer bloco de aterramento e o fio de dados para qualquer bloco de E / S diferente de A0. O código que escrevi usa A3.

Teste a conectividade.

Etapa 2: Amarre o CPX

Usando uma linha e agulha, escolha quatro almofadas equidistantes e costure-as no centro da gravata.

Etapa 5: Ligar o CPX

Alimentando o CPX
Alimentando o CPX
Alimentando o CPX
Alimentando o CPX
Alimentando o CPX
Alimentando o CPX

O CPX não possui botão liga / desliga. Isso significa que, no momento em que a bateria for conectada, a gravata será ativada. Isso também significa que a única maneira de desligá-lo é desconectando a bateria, o que é um grande aborrecimento. Uma solução simples é colocar um botão liga / desliga na bateria.

Etapa 1: corte o terceiro pino da chave

Um dos pinos não centrais não é necessário. Corte-o rente ao corpo do interruptor.

Etapa 2: solde o interruptor em linha em um cabo de bateria

Corte o fio terra da bateria em algum lugar no meio. Deslize um pedaço de tubo termorretrátil em cada um dos fios terra. Solde um fio terra em um dos pinos e o outro fio terra no outro pino. Certifique-se de que eles não se tocam ou que a solda toque o corpo de metal.

Verifique se eles não estão conectados usando um multímetro. Deslize o tubo sobre as conexões soldadas e encolha-o. Adicione um pouco de fita isolante a qualquer parte que possa falhar devido à fadiga de flexão.

Etapa 3: verifique se a bateria funciona

Neste ponto, a bateria pode ser conectada ao CPX. Se tudo correr bem, o switch deve conseguir ligar e desligar o CPX.

Etapa 4: monte a bateria

Coloque um pouco de fita adesiva e fita adesiva na parte de trás da bateria e no núcleo da amarração. Isso irá mantê-lo no lugar se a gravata não for manuseada demais.

Etapa 6: Configurando o Circuit Playground Express

Não vou entrar em detalhes sobre como configurar o CPX. Adafruit faz isso e mais um pouco. Fornecerei algumas dicas para problemas que encontro com frequência.

CPX congela

Provavelmente devido a problemas de memória de tempo de execução, o CPX travava com frequência. A solução rápida é apagar e piscar novamente. Procure por "Old Way" nestas instruções. Basicamente, são pressionados alguns botões, arrastar e soltar para apagar e depois arrastar e soltar para piscar novamente.

Aviso: isso apaga tudo. Todos os códigos do CPX serão perdidos.

Salvar alterações no CPX pode causar problemas

Descobri que às vezes, depois de salvar um arquivo no CPX, o tempo de execução do python ficava em mau estado. A correção foi reiniciar o tempo de execução do python pressionando o botão de reinicialização. Pressione apenas uma vez. Pressioná-lo duas vezes iniciará o processo de re-flash.

Salvar diretamente no CPX é arriscado

Devido à possibilidade de o CPX ter que ser atualizado novamente, corre-se o risco de perder todo o seu código. Depois de ter perdido meu código duas vezes, criei um fluxo de trabalho simples. Gostaria de salvar meu código no disco rígido local. Quando ele estivesse pronto para ser testado no CPX, eu simplesmente o copiaria executando um script de implantação simples.

Etapa 7: Codificando o Circuit Playground Express

Neste ponto, o CPX e os NeoPixels estão praticamente completos. Nenhum outro trabalho mecânico ou elétrico precisa ser feito com eles. O resto é todo software.

O código pode ser encontrado em minha conta no github. O código python principal deve funcionar sem nenhuma alteração em todos os sistemas operacionais. Não instale as bibliotecas Adafruit CircuitPython externas. Eles não são usados.

Aqui está um resumo de alto nível do que está acontecendo no código.

Que entrada faz o quê?

  • Botão A: percorre as animações de LED
  • Botão B: percorre as músicas
  • Touch pad capacitivo A1: altera as cores das animações de LED
  • Touch Pad capacitivo A6: Altera a velocidade das animações de LED

Existem 3 animações, mas apenas 2 estão em vigor

code.py

importar pixels off

#import vumeter importar escadas import twinkle… led_animations = [pixelsoff. PixelsOff (pixels), # vumeter. VuMeter (pixels, 100, 400) escadas. Escadas (pixels), twinkle. Twinkle (pixels)]

Transferi o código de estilo do medidor Ampli-Tie VU. Ele usa o microfone CPX para captar o som e iluminar os NeoPixels com base na amplitude do som. No entanto, eu queria mais animações. Devido a restrições de memória de tempo de execução, tive que escolher quais animações eu queria. Portanto, por padrão, os outros dois, Stairs e Twinkle, serão executados sem a necessidade de fazer alterações no código. Para executar a animação do medidor VU, uma ou ambas as outras animações devem ser comentadas e o medidor VU descomentado.

Gerenciador de música e codificação off-line

frosty_the_snowman.py

importar notas_ musicais como mn

# Frosty the Snowman # Walter E. Rollins song = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …

convert_to_binary.py

canções = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] para música em músicas: dados = música [0] arquivo = música [1] com abrir (arquivo, "wb") como bin_file: para entrada em dados: print ("writing:" + str (entry)) note = entry [0] dur = entry [1] bin_file.write (struct.pack ("<HH", note, dur))

Eu queria música natalina. O CPX suporta WAV e tons. Os arquivos WAV acabaram sendo muito grandes em termos de tamanho de arquivo e memória de tempo de execução. Usar estruturas de dados python para manter tons e sua duração também acabou por usar muita memória de tempo de execução. Portanto, modifiquei o código Holi-Tie para ler um arquivo binário compactado que continha apenas os dados de música necessários em um formato binário compactado. Eu escrevi um script que lê uma música mantida em uma estrutura de dados python e a grava no formato binário. Ter a música codificada como dados binários em um arquivo torna a música pequena e dinâmica. Assim que a música terminar de tocar, a memória será liberada.

É trivial adicionar mais músicas. Para obter detalhes, consulte o README.md nas músicas.

O botão A anima NeoPixels, B reproduz música, mas não simultaneamente

code.py

def button_a_pressed ():

if music.is_playing (): # Pare a música se estiver tocando music.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Executar animação sem operação next_led_animation (0) if music.is_playing (): # Toggle música ligada ou desligada music.stop () else: music.play ()

Mesmo com o sistema de gerenciamento de música mais eficiente em termos de memória, não consegui manter na memória de tempo de execução 2 animações, enquanto reproduzia uma delas e também reproduzia uma música ao mesmo tempo. Como eu já optei por não ter o medidor VU na memória de tempo de execução, não queria reduzir o número de animações para apenas 1. Então escrevi o código para que a animação ou a música sejam reproduzidas, mas não Ambas. Outra opção era reduzir o número de NeoPixels, mas isso perderia um pouco do frescor da animação.

Funkiness do código Python

Embora eu seja um desenvolvedor de software veterano, nunca escrevi Python. Depois que peguei o jeito e comecei a aplicar boas práticas de codificação, como encapsulamento e modularização, descobri rapidamente que estava usando muita memória de tempo de execução. Portanto, há um pouco de código não-DRY. Eu também tive que usar algumas técnicas MicroPython, como const () para reduzir ainda mais os problemas de memória de tempo de execução.

Módulos Compilados

compilar

#! / bin / bash

compiler = ~ / development / circuitpython / mpy-cross-3.x-windows.exe músicas do cd python3./convert_to_binary.py cd.. para f em *.py; faça se

No início do projeto, segui o conselho de Adafruit e armazenei todas as bibliotecas Adafruit CircuitPython em flash. Isso, no entanto, deixou pouco espaço para meu projeto. Para conseguir colocar meu código no CPX, comecei a compilar os módulos e colocá-los no MCU. Acontece que o Holi-Tie não precisa de nenhuma das bibliotecas externas. As bibliotecas existentes na UF2 eram suficientes para este projeto. A execução de arquivos *.mpy é um pouco mais eficiente, então mantive o processo de implantação dos módulos compilados.

Como fica evidente no script de compilação acima, estou trabalhando em uma máquina Windows, mas usando utilitários Unix, como bash e python3. Eu uso o Cygwin para fazer isso. Este script pode ser facilmente traduzido para lote DOS e uma implementação Python3 nativa do Windows.

Etapa 8: Abotoar a gravata

Abotoando a Gravata
Abotoando a Gravata
Abotoando a Gravata
Abotoando a Gravata

A etapa final é colocar o núcleo da gravata de volta no lugar, remontar a gravata e costurá-la novamente. Certifique-se de tornar o CPX acessível. Você precisará dele ao substituir a bateria ou fazer alterações no código.

Recomendado: