Índice:
- Etapa 1: Peças e Ferramentas
- Etapa 2: Preparando o Empate
- Etapa 3: anexando os NeoPixels
- Etapa 4: Anexar o Circuit Playground Express
- Etapa 5: Ligar o CPX
- Etapa 6: Configurando o Circuit Playground Express
- Etapa 7: Codificando o Circuit Playground Express
- Etapa 8: Abotoar a gravata
Vídeo: O Holi-Tie: 8 etapas (com fotos)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Por gwfongMonkey PatchingFollow Mais do autor:
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
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
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:
- Conexões positivas. Deve haver conectividade da ponta à cauda. Certifique-se de testar a conectividade nas almofadas e não no fio.
- Conexões de aterramento. Execute o mesmo teste, mas com as almofadas de aterramento.
- Cada linha de dados. De um data pad para o outro, verifique se há conectividade.
Etapa 4: Anexar 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
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
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:
Tire ótimas fotos com um iPhone: 9 etapas (com fotos)
Tire ótimas fotos com um IPhone: a maioria de nós carrega um smartphone conosco para todos os lugares atualmente, por isso é importante saber como usar a câmera do smartphone para tirar ótimas fotos! Só tenho um smartphone há alguns anos e adoro ter uma câmera decente para documentar coisas que eu
Cabine de fotos de casamento Arduino - peças impressas em 3D, automatizadas e de baixo orçamento: 22 etapas (com fotos)
Arduino Wedding Photo Booth - peças impressas em 3D, automatizadas e de baixo orçamento: Recentemente fui convidado para o casamento do irmão do meu parceiro e eles perguntaram se poderíamos construir uma cabine fotográfica para eles, pois seu aluguel é muito caro. Isso é o que nós pensamos e depois de vários elogios, decidi transformá-lo em um instrutivo
Lance sua apresentação de slides de fotos de férias com um toque de mágica!: 9 etapas (com fotos)
Lance sua apresentação de slides de fotos de férias com um toque de magia! Ao longo dos anos, desenvolvi o hábito de levar uma pequena estatueta comigo quando viajava: geralmente compro um pequeno objeto em branco (como o da foto) e pinto para combinar com a bandeira e o tema do país que estou visitando (neste caso, a Sicília). T
Transferência de fotos para lata de refrigerante: 7 etapas (com fotos)
Transferência de fotos para uma lata de refrigerante: Este manual mostra uma maneira fácil e rápida de como transferir fotos para uma lata de refrigerante. O processo básico é copiar a foto primeiro em um papel comum. Em seguida, você transfere a foto para um filme autoadesivo. Depois disso, você limita o filme a
Cabine de fotos para casamento / evento: 6 etapas (com fotos)
Casamento / Evento Photobooth: Olá a todos, casei-me no ano passado, quando procurávamos a preparação do dia D, participámos em várias convenções de casamento. Em todas as convenções há um aluguer de Photobooth, pensei que fosse um photobooth foi uma ótima ideia para um casamento, cada convidado c