Índice:
- Etapa 1: as coisas do computador
- Etapa 2: o piano
- Etapa 3: Montagem
- Etapa 4: Desafios técnicos e considerações futuras
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
Este piano reprodutor toca música usando uma roda de cores e uma câmera! As imagens são capturadas pela câmera, processadas e interpretadas como notas musicais. No momento, ele está programado para tocar rimas infantis que podem ser alteradas carregando um novo esboço do Arduino que especifica quais notas devem ser tocadas (quais cores devem ser mostradas para a câmera).
O PC Linux integrado inicia um serviço na inicialização que tira uma foto com uma câmera, calcula uma função dos valores RGB na imagem e produz um som com base no valor de retorno da função. Antes de tocar o som, ele envia um sinal dizendo a um Arduino para girar um servo, apresentando a cor correspondente à próxima nota a ser tocada. Em seguida, o loop começa novamente, uma foto é tirada, a roda de cores é girada e um som é reproduzido ad infinitum.
Este projeto é uma maneira divertida de integrar música, programação de sistemas Linux modernos, programação de microcontroladores, rabiscos no Inkscape, corte a laser e reaproveitamento de algumas caixas de papelão.
Todo o código e SVGs do inkscape estão disponíveis no github em:
github.com/melvyniandrag/pyMusic
Materiais utilizados:
- Rótulos brancos em branco
- Caixa de papelão
- Webcam
- Giz de cera
- Arduino
- Beagleboard-xM
- Fios
- Cabo Serial
- Conhecimentos básicos de processamento de imagem e música
Etapa 1: as coisas do computador
A bordo, você precisará de um pequeno computador compatível com Linux, como um Raspberry Pi. Usei um BeagleBoard-xM antigo porque aconteceu de eu tê-lo disponível e já tinha um sistema operacional no cartão SD. Você pode usar qualquer coisa, desde que possa lidar com uma webcam, possa executar OpenCV (a biblioteca de visão computacional usada para tirar e processar imagens da roda de cores) e ter uma saída de áudio.
Eu configurei o sistema operacional para executar o código python que captura imagens na inicialização seguindo um tutorial do systemd. Para que o script execute, você precisará sudo apt-get install python-pyaudio python-opencv para obter as bibliotecas indicadas. Você também precisará instalar o numpy pyserial para obter essas bibliotecas. pyaudio é usado para reproduzir sons, opencv é usado para tirar e processar imagens, numpy também é usado para processamento de imagens e pyserial é necessário para se comunicar com o Arduino.
O Arduino é usado para girar o servo motor no qual a roda de cores está montada. Se você tivesse um Raspberry Pi, poderia usar os pinos GPIO existentes e deixar de fora o Arduino, mas seria necessário modificar o código Python.
Nas imagens você pode ver as entranhas tecnológicas da operação e alguns trechos de código.
Etapa 2: o piano
Fiz o piano de papelão com algumas caixas velhas que tinha. Tenho a sorte de morar perto de um makerpace que possui um cortador a laser. Por um ano inteiro estive me perguntando para que diabos alguém iria querer um cortador a laser, e finalmente descobri um uso para ele.
Medi o computador, o arduino e o servo para saber quanto espaço seria necessário, desenhei as partes do piano no inkscape e as recortei no cortador a laser. (Editar: eu fiquei sem papelão para fazer a caixa conter o computador e o arduino e por isso não os coloquei. Eles estão do lado de fora da caixa. Não importa, poderia ter pegado outra caixa em algum lugar, mas não não importa no final.)
As peças foram montadas com epóxi.
Etapa 3: Montagem
Aqui estão algumas imagens do piano sendo montado e colorido. A impressora estava sem tinta, então não pude imprimir as cores nas etiquetas brancas como havia planejado. Usei os lápis de cera da minha filha. E não consegui encontrar uma faca xacto para cortar o rótulo no formato do papelão, então usei uma faca e coloquei algo de proteção no balcão da cozinha. Use o que você tem!
Etapa 4: Desafios técnicos e considerações futuras
Uma parte desafiadora deste projeto foi obter os valores RGB adequados para serem lidos pela câmera. A webcam que tenho tem alguns LEDs incrivelmente brilhantes que não sei como desligar no Linux. Acho que existe um driver do Windows que permite ligá-los e desligá-los. Eu experimentei prender os LEDs com fita isolante e deixá-los ligados. Também testei a robustez do software, não só mostrando papel colorido, mas também escrevendo um pequeno site que mostra cores.
Os sons produzidos pelo computador às vezes têm estalos e estalos, e isso vem do fato de que tenho muito pouca experiência em programação de áudio em Linux. A biblioteca pyaudio cuspiu um monte de reclamações sobre o JACK não estar instalado no PC, mas por padrão o JACK não quer rodar sem interface (sem um desktop gui e um monitor). Esta é uma tarefa de programação que achei ser um refinamento, mas não era necessária para expressar a essência do piano de mesa que eu tinha em mente.
Pensei em usar uma manivela para mudar as cores, e talvez colocá-las em um rolo de massa, mas isso apresenta suas próprias complicações. O servo é um pouco barulhento, mas funciona bem por enquanto.
O piano mecânico está atualmente programado para tocar apenas 4 notas. Isso ocorre porque o servo só se move 180 graus, a maioria das canções infantis podem ser tocadas com apenas 3-4 notas e eu não queria que a roda de cores ficasse cheia de regiões de cores, possivelmente confundindo a câmera. Então, por meio de uma combinação de sorte musical e restrições técnicas, 4 notas é o suficiente.
Recomendado:
Escolha um jogador: 4 etapas
Pick-a-Player: Este instrutível irá guiá-lo através de como fazer um Arduino decisor. Com o pressionar de um botão, os LEDs acenderão em um padrão aleatório. Após alguns segundos, um único LED acenderá. Esta é a decisão final tomada pelo Arduino
Arduino "Primeiro jogador" para jogos de tabuleiro: 4 etapas
Arduino "Primeiro jogador" para jogos de tabuleiro: Este projeto foi inspirado no modelo " primeiro jogador " aplicativos que meu marido e eu usamos em nossos telefones. Adoramos jogar jogos de tabuleiro e usar o " primeiro jogador " aplicativos para decidir quem vai primeiro. Decidi tentar fazer minha própria versão do Arduino
Temporizador de reação de jogador único (com Arduino): 5 etapas
Temporizador de reação de jogador único (com Arduino): neste projeto, você construirá um temporizador de reação que é alimentado por um Arduino. Ele funciona em uma função millis () do Arduino, em que o processador registra o tempo desde que o programa começou a ser executado. Você pode usá-lo para encontrar a diferença de fuso horário entre
8x16 LED Matrix Pong Game (2 pás por versão do jogador): 3 etapas
Jogo 8x16 LED Matrix Pong (2 pás por versão de jogador): Eu fui inspirado por muitas variações do clássico jogo Pong implementado no Arduino utilizando uma matriz LED 8x8. Neste instrutivo, vou mostrar como construir minha versão favorita de Pong, que tem duas raquetes - atacante e goleiro - por jogador
Arcade para um jogador MAME Box: 7 etapas
Single Player Arcade MAME Box: Hoje vamos construir um mini-console MAME usando Raspberry Pi. Este é um console para um único jogador, mas como as portas USB do pi são acessíveis, é fácil conectar outro console ou joystick USB para ter alguma ação multijogador se o clima for