Índice:

Pi Piano ultrassônico com controles por gestos !: 10 etapas (com imagens)
Pi Piano ultrassônico com controles por gestos !: 10 etapas (com imagens)

Vídeo: Pi Piano ultrassônico com controles por gestos !: 10 etapas (com imagens)

Vídeo: Pi Piano ultrassônico com controles por gestos !: 10 etapas (com imagens)
Vídeo: Palestra: "IoT On The Beat Utilizando microcontroladores em experimentos artísticos e musicais" 2024, Novembro
Anonim
Image
Image
Pi Piano ultrassônico com controles por gestos!
Pi Piano ultrassônico com controles por gestos!

Este projeto usa sensores ultrassônicos HC-SR04 baratos como entradas e gera notas MIDI que podem ser tocadas por meio de um sintetizador no Raspberry Pi para um som de alta qualidade.

O projeto também usa uma forma básica de controle por gestos, onde o instrumento musical pode ser alterado segurando as mãos sobre os dois sensores externos por alguns segundos. Outro gesto pode ser usado para desligar o Raspberry Pi quando terminar.

O vídeo acima mostra o produto acabado em um gabinete simples cortado a laser. Há um vídeo mais detalhado posteriormente neste instrutível que explica como o projeto funciona.

Eu criei este projeto em conjunto com o The Gizmo Dojo (meu makerpace local em Broomfield, CO) para fazer algumas exibições interativas que podemos levar para eventos locais STEM / STEAM e Maker Faires.

Verifique também a documentação e os tutoriais mais recentes em https://theotherandygrove.com/octasonic/, que agora inclui informações sobre uma versão Python deste projeto (este instrutível foi escrito para a versão Rust).

Etapa 1: Ingredientes

Para este instrutível, você precisará dos seguintes ingredientes:

  • Raspberry Pi (2 ou 3) com cartão SD
  • 8 sensores ultrassônicos HC-SR04
  • Octasonic Breakout Board
  • Conversor de nível lógico bidirecional
  • Fios de ligação fêmea-fêmea de 32 x 12 "para conectar os sensores ultrassônicos
  • Fios de jumper fêmea-fêmea 13 x 6 "para conectar o Raspberry Pi, Octasonic e o conversor de nível lógico
  • Fonte de alimentação adequada para o Raspberry Pi
  • Alto-falantes de PC ou similar

Eu recomendaria usar um Raspberry Pi 3 se possível, pois ele tem mais poder de computação, resultando em um som mais responsivo e agradável. Ele pode funcionar bem com um Raspberry Pi 2 com um pequeno ajuste, mas eu não tentaria usar o Raspberry Pi original para este projeto.

Os sensores ultrassônicos HC-SR04 têm 4 conexões - 5V, GND, Trigger e Echo. Normalmente, o Trigger e o Echo são conectados a pinos separados em um microcontrolador ou Raspberry Pi, mas isso significa que você precisaria utilizar 16 pinos para conectar 8 sensores, e isso não é prático. É aqui que entra a placa de breakout Octasonic. Essa placa se conecta a todos os sensores e tem um microcontrolador dedicado que monitora os sensores e se comunica com o Raspberry Pi pelo SPI.

O HC-SR04 requer 5 V e o Raspberry Pi tem apenas 3,3 V, então é por isso que também precisamos do conversor de nível lógico que conectará o Raspberry Pi à placa de breakout Octasonic.

Etapa 2: conectar os sensores ultrassônicos à placa Octasonic

Conecte os sensores ultrassônicos à placa Octasonic
Conecte os sensores ultrassônicos à placa Octasonic
Conecte os sensores ultrassônicos à placa Octasonic
Conecte os sensores ultrassônicos à placa Octasonic

Use 4 fios jumper fêmea para conectar cada sensor ultrassônico à placa, tendo o cuidado de conectá-los da maneira correta. A placa é projetada de forma que os pinos fiquem na mesma ordem dos pinos do sensor ultrassônico. Da esquerda para a direita na placa, os pinos são GND, Trigger, Echo, 5V.

Etapa 3: Conecte o conversor de nível lógico à placa Octasonic

Conecte o conversor de nível lógico à placa Octasonic
Conecte o conversor de nível lógico à placa Octasonic

O Raspberry Pi e o Octasonic Board comunicam-se através do SPI. SPI usa 4 fios:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Relógio serial (SCK)
  • Slave Select (SS)

Além disso, precisamos conectar a energia (5V e GND).

O conversor de nível lógico tem dois lados - uma baixa tensão (LV) e uma alta tensão (HV). O Raspberry se conectará ao lado LV, pois é 3,3V. O Octasonic se conectará ao lado HV, pois é 5V.

Esta etapa é para conectar o Octasonic ao lado HV do conversor de nível lógico

Veja a foto anexada a esta etapa mostrando quais pinos devem ser conectados ao conversor de nível lógico.

As conexões do Octasonic para o conversor de nível lógico devem ser as seguintes:

  • 5V para HV
  • SCK para HV4
  • MISO para HV3
  • MOSI para HV2
  • SS para HV1
  • GND para GND

Etapa 4: conecte o conversor de nível lógico ao Raspberry Pi

Conecte o conversor de nível lógico ao Raspberry Pi
Conecte o conversor de nível lógico ao Raspberry Pi

O Raspberry Pi e o Octasonic Board comunicam-se através do SPI. SPI usa 4 fios:

  • Master In, Slave Out (MISO)
  • Master Out, Slave In (MOSI)
  • Relógio serial (SCK)
  • Slave Select (SS)

Além disso, precisamos conectar a energia (3,3 V e GND). O conversor de nível lógico tem dois lados - uma baixa tensão (LV) e uma alta tensão (HV). O Raspberry se conectará ao lado LV, pois é 3,3V. O Octasonic se conectará ao lado HV, pois é 5V.

Esta etapa é para conectar o Raspberry Pi ao lado LV do conversor de nível lógico

As conexões do Raspbery Pi para o conversor de nível lógico devem ser as seguintes:

  • 3,3 V a LV
  • GPIO11 (SPI_SCLK) para LV4
  • GPIO09 (SPI_MISO) para LV3
  • GPIO10 (SPI_MOSI) para LV2
  • GPIO08 (SPI_CE0_N) SS para LV1
  • GND para GND

Use o diagrama anexado a esta etapa para localizar os pinos corretos no Raspberry Pi!

Etapa 5: conecte Raspberry Pi 5V ao Octasonic 5V

Conecte o Raspberry Pi 5V ao Octasonic 5V
Conecte o Raspberry Pi 5V ao Octasonic 5V
Conecte o Raspberry Pi 5V ao Octasonic 5V
Conecte o Raspberry Pi 5V ao Octasonic 5V

Há um fio final a ser adicionado. Precisamos realmente alimentar a placa Octasonic com 5V, então fazemos isso conectando um dos pinos Raspberry Pi 5V ao pino 5V no conector do AVR Octasonic. Este é o pino inferior esquerdo no bloco do cabeçalho AVR (este é o bloco 2 x 3 no canto superior direito da placa). Veja a foto anexada mostrando onde está o bloco AVR.

Veja o outro diagrama anexo para encontrar o pino de 5 V no Raspberry Pi.

Etapa 6: Instale o software

Instale o Raspian

Comece com uma instalação limpa do Raspbian Jessie e, em seguida, atualize-o para a versão mais recente:

sudo apt-get update

sudo apt-get upgrade

Habilitar SPI

Você deve habilitar o SPI no Raspberry Pi para que este projeto funcione! Use o utilitário Raspberry Pi Configuration para fazer isso.

Também é importante reiniciar o Pi após habilitar o SPI para que ele tenha efeito

Instale FluidSynth

Fluidsynth é um incrível software de sintetizador MIDI gratuito. Você pode instalá-lo a partir da linha de comando com este comando:

sudo apt-get install fluidsynth

Instale a linguagem de programação Rust

O Ultrasonic Pi Piano é implementado na Rust Programming Language da Mozilla (é como C ++, mas sem as partes ruins). É o que todas as crianças legais estão usando hoje em dia.

Siga as instruções em https://rustup.rs/ para instalar o Rust. Para economizar seu tempo, as instruções são para executar este comando. Você pode aceitar as respostas padrão para qualquer pergunta durante a instalação.

NOTA: Desde a publicação deste instrutível, existem alguns problemas com a instalação do Rust no Raspberry Pi. Momento ruim: - / mas eu modifiquei o comando abaixo para solucionar o problema. Esperançosamente, eles consertarão isso em breve. Estou trabalhando na criação de uma imagem que as pessoas possam baixar e gravar em um cartão SD. Se você gostaria disso, entre em contato comigo.

export RUSTUP_USE_HYPER = 1curl https://sh.rustup.rs -sSf | sh

Baixe o código-fonte do Ultrasonic Pi Piano

O código-fonte para o código-fonte Ultrasonic Pi Piano está hospedado no github. Existem duas opções para obter o código. Se você estiver familiarizado com git e github, poderá clonar o repo:

git clone [email protected]: TheGizmoDojo / UltrasonicPiPiano.git

Como alternativa, você pode baixar um arquivo zip com o código mais recente.

Compile o código fonte

cd UltrasonicPiPiano

construção de carga - liberação

Teste o código

Antes de passarmos a fazer música na próxima etapa, vamos nos certificar de que o software seja executado e que possamos ler dados válidos dos sensores.

Use o seguinte comando para executar o aplicativo. Isso lerá os dados dos sensores e os traduzirá em notas MIDI que são impressas no console. Conforme você move sua mão sobre os sensores, você deve ver os dados sendo gerados. Caso contrário, vá para a seção de solução de problemas no final deste manual.

carga - liberação

Se você estiver curioso, o sinalizador "--release" diz ao Rust para compilar o código da forma mais eficiente possível, ao contrário da configuração padrão "--debug".

Etapa 7: Faça alguma música

Certifique-se de ainda estar no diretório onde baixou o código-fonte e execute o seguinte comando.

Este script "run.sh" garante que o código foi compilado e, em seguida, executa o código, canalizando a saída para o fluidsynth.

./run.sh

Certifique-se de ter alto-falantes amplificados conectados ao conector de áudio de 3,5 mm no Raspberry Pi e de ouvir música ao mover as mãos sobre os sensores.

Se você não ouve música e tem um monitor HDMI conectado, a saída de áudio provavelmente está indo para lá. Para corrigir isso, basta executar este comando e reiniciar o Pi Piano:

sudo amixer cset numid = 3 1

Mudando o volume

O volume (ou "ganho") é especificado com o parâmetro "-g" para fluidsynth. Você pode modificar o script run.sh e alterar esse valor. Observe que pequenas alterações neste parâmetro resultam em uma grande mudança no volume, então tente aumentá-lo em pequenas quantidades (como 0,1 ou 0,2).

Etapa 8: controle de gestos

Veja o vídeo anexado a esta etapa para uma demonstração completa do projeto, incluindo como funcionam os controles de gestos.

O conceito é muito simples. O software mantém registro de quais sensores são cobertos (dentro de 10 cm) e quais não são. Isso se traduz em 8 números binários (1 ou 0). Isso é muito conveniente, uma vez que uma sequência de 8 números binários forma um "byte" que pode representar números entre 0 e 255. Se você ainda não conhece os números binários, recomendo procurar um tutorial. Os números binários são uma habilidade fundamental para aprender se você deseja aprender mais sobre programação.

O software mapeia o estado atual dos sensores em um único byte que representa o gesto atual. Se esse número permanecer o mesmo por vários ciclos, o software atua com base nesse gesto.

Como os sensores ultrassônicos não são muito confiáveis e pode haver interferência entre os sensores, você precisará ter um pouco de paciência ao usar os gestos. Tente variar a distância que você mantém suas mãos dos sensores, bem como o ângulo em que você segura suas mãos. Você também pode tentar segurar algo plano e sólido sobre os sensores para refletir melhor o som.

Etapa 9: fazer um gabinete

Se você deseja fazer desta uma exposição permanente e ser capaz de mostrá-la às pessoas, provavelmente desejará fazer algum tipo de recinto. Isso pode ser feito de madeira, papelão ou muitos outros materiais. Aqui está um vídeo mostrando o gabinete em que estamos trabalhando para este projeto. Isso é feito de madeira, com orifícios perfurados para manter os sensores ultrassônicos no lugar.

Etapa 10: Solução de problemas e próximas etapas

Solução de problemas

Se o projeto não está funcionando, geralmente é um erro de fiação. Leve o seu tempo para verificar todas as conexões.

Outro problema comum é não habilitar o SPI e reiniciar o pi.

Visite https://theotherandygrove.com/octasonic/ para obter a documentação completa, incluindo dicas para solução de problemas, artigos específicos de Rust e Python e também informações sobre como obter suporte.

Próximos passos

Depois de ter o projeto funcionando, recomendo experimentar o código e experimentar diferentes instrumentos musicais. Os códigos de instrumentos MIDI estão entre 1 e 127 e são documentados aqui.

Você quer um único instrumento musical com cada sensor tocando uma oitava diferente? Talvez você queira que cada sensor seja um instrumento separado? As possibilidades são quase ilimitadas!

Espero que você tenha gostado deste instrutível. Por favor, goste se você gostou, e certifique-se de se inscrever aqui e no meu canal no YouTube para ver projetos futuros.

Recomendado: