Índice:

Weather Based Music Generator (ESP8266 Midi Generator): 4 etapas (com imagens)
Weather Based Music Generator (ESP8266 Midi Generator): 4 etapas (com imagens)

Vídeo: Weather Based Music Generator (ESP8266 Midi Generator): 4 etapas (com imagens)

Vídeo: Weather Based Music Generator (ESP8266 Midi Generator): 4 etapas (com imagens)
Vídeo: NinjaHang #6: Arduino, Netduino, Galileo y el Internet de las Cosas (IoT) 2024, Julho
Anonim
Weather Based Music Generator (ESP8266 Midi Generator)
Weather Based Music Generator (ESP8266 Midi Generator)
Weather Based Music Generator (ESP8266 Midi Generator)
Weather Based Music Generator (ESP8266 Midi Generator)

Olá, hoje vou explicar como fazer seu próprio pequeno gerador de música baseado no clima.

É baseado em um ESP8266, que é como um Arduino, e responde à temperatura, chuva e intensidade da luz.

Não espere que ele crie músicas inteiras ou progressões de acordes. É mais como música generativa que as pessoas às vezes fazem com sintetizadores modulares. Mas é um pouco menos aleatório do que isso, ele se aplica a certas escalas, por exemplo.

Suprimentos

ESP8266 (estou usando o Feather Huzzah ESP8266 da Adafruit)

Sensor de temperatura, umidade e pressão barométrica BME280 (versão I2C)

Sensor de chuva Arduino

25K LDR (resistor dependente de luz)

Alguns resistores (dois 47, um 100, um 220 e um 1k Ohm)

Conector Midi Fêmea (5 Pinos Din) adequado para montagem em PCB

Jumper Wires

Placa de ensaio ou algum tipo de placa de prototipagem

Computador, estarei usando um com Windows 8.1, mas deve funcionar em qualquer sistema operacional, até onde eu sei.

Opcional: bateria LiPo de 1250 mAh com conector JST da Adafruit (compatível apenas com alguns ESP)

Etapa 1: Etapa 1: Software

Em primeiro lugar, você precisa do IDE do Arduino.

Então você precisa do driver SiLabs CP2104 e do pacote de placa ESP8266.

Isso permite que seu computador programe o ESP por meio do UART integrado e permite que o IDE do Arduino programe o ESP.

Você pode encontrar todas as informações sobre o IDE, Driver e Pacote de Placa nesta página no site da Adafruit.

Você também precisará da Arduino Midi Library para enviar dados Midi. Isso pode ser feito sem, mas isso torna tudo muito mais fácil.

Para me comunicar com o BME280, usei esta biblioteca BME280-I2C-ESP32. (Isso é para a versão I2C do BME280)

E essa biblioteca, por sua vez, requer o Adafruit Unified Sensor Driver. Esta não é a primeira vez que preciso desta biblioteca para usar uma biblioteca diferente sem problemas, então sempre tenho esta biblioteca marcada em algum lugar.

Etapa 2: Etapa 2: Hardware

Etapa 2: Hardware
Etapa 2: Hardware
Etapa 2: Hardware
Etapa 2: Hardware
Etapa 2: Hardware
Etapa 2: Hardware

Tudo bem, então finalmente chegamos às coisas boas, o hardware.

Como mencionei, usei este Adafruit ESP, mas deve funcionar bem com um NodeMCU. Eu recomendo a versão V2, pois acredito que ela se encaixa muito melhor em uma placa de ensaio e você pode obtê-la muito barato no eBay ou AliExpress. Eu gosto do fato de que o Adafruit ESP tem uma CPU mais rápida, vem com um conector JST fêmea para um LiPo e um circuito de carga. Também é um pouco mais fácil descobrir qual Pin você está usando. Eu acredito que em um NodeMCU o pino rotulado D1 é na verdade GPIO5, por exemplo, então você sempre precisa de um gráfico de pinagem à mão. Não é um grande problema, mas apenas conveniente para iniciantes que rotularam o Adafruit de forma tão clara.

Primeiro, vamos conectar o BME280, porque existem algumas variações neste modelo. Como você pode ver pelas fotos, o meu tem um buraco grande, mas também há alguns com 2 buracos. Você pode ver que tem 4 entradas e saídas, 1 para alimentação, uma para aterramento e um SCL e SDA. Isso significa que ele se comunica via I2C. Acredito que outros modelos se comunicam via SPI. E em alguns você pode escolher SPI ou I2C. O SPI pode exigir uma biblioteca diferente ou, pelo menos, um código diferente e uma fiação diferente. Eu também acredito que o S em SPI significa Serial e não posso dizer se isso vai interferir com a parte Midi deste projeto, já que também está funcionando via conexão Serial.

Conectar este BME é bastante simples. No ESP8266 você pode ver os pinos 4 e 5 sendo rotulados como SDA e SCL, respectivamente. Basta conectar esses pinos diretamente ao pino SDA e SCL no BME. É claro que também conecte o VIN ao trilho positivo da placa de ensaio e o GND ao trilho negativo. Esses, por sua vez, são conectados ao pino 3V3 e GND do ESP.

A seguir, conectaremos o LDR. No exemplo do Fritzing você pode ver os 3,3 volts passando por um resistor, em seguida, é dividido para o LDR e outro resistor. Então, após o LDR, ele é dividido novamente em um resistor e no ADC.

Isso é para proteger o ESP de obter tensões muito altas e para garantir que esteja obtendo valores legíveis. O ADC pode lidar com 0-1 Volts, mas o 3V3 fornece 3,3 volts. Provavelmente não explodirá nada se você passar de 1 volt, mas não vai funcionar bem.

Portanto, primeiro usamos um divisor de tensão usando resistores de 220 e 100 ohms para reduzir a tensão de 3,3 para 1,031 volts. Então, o LDR de 25k ohm e o resistor de 1k ohm formam outro Devedor de Voltagem que reduz a voltagem de qualquer lugar entre 1,031 e 0 volts, dependendo da quantidade de luz que o LDR recebe.

Então temos o Sensor de chuva. Uma parte diz FC-37, a outra parte diz HW-103. Acabei de comprar o primeiro que encontrei no Ebay que dizia que aguenta 3,3 e 5 volts. (Eu acho que todos eles podem).

Isso é muito simples, poderíamos usar uma saída analógica, mas podemos apenas girar o pequeno Trimpot para tornar o sensor tão sensível quanto quisermos (e já usamos nosso único pino analógico no ESP). Como com os outros sensores, temos que fornecer energia do trilho positivo e conectá-lo ao trilho de aterramento. Às vezes, a ordem dos pinos varia. No meu é VCC, Ground, Digital, Analog, mas na imagem do Fritzing é diferente. Mas se você apenas prestar atenção, isso deve ser fácil de acertar.

E, finalmente, o Midi Jack. Na minha placa de ensaio, ele não pode ficar na borda da placa de ensaio, pois nem todos os pinos se alinham. Se isso incomoda você, eu tentaria comprar uma placa de ensaio em uma loja física. Ou inspecione muito bem as fotos.

Como você pode ver no esquema, a tensão positiva e o sinal serial passam por um resistor de 47 ohms.

Se você fizer este projeto com um Arduino Uno, por exemplo, certifique-se de usar resistores de 220 ohms !! Esses ESPs funcionam com lógica de 3,3 V, mas a maioria dos Arduino usa 5,0 V, então você tem que limitar mais a corrente que passa pelo cabo Midi.

E, finalmente, conecte o pino do meio ao trilho de aterramento. Os outros 2 pinos do 5 Pin Din não são usados.

Etapa 3: Etapa 3: Código

E finalmente temos o código!

Neste arquivo Zip coloquei 2 esboços. 'LightRainTemp' simplesmente testa todos os sensores e envia de volta seus valores. (Certifique-se de abrir a janela do terminal!)

E, claro, temos o esboço LRTGenerativeMidi (LRT significa Luz, Chuva, Temperatura).

Dentro, você pode encontrar um monte de explicações em comentários sobre o que está acontecendo. Não vou entrar em como escrevi a coisa toda, isso levaria horas. Se você quiser saber por onde começar com algo assim, tenho alguns outros projetos em mente. Um pequeno gerador Random Riff com alguns botões e um Sequencer com vários recursos que não consigo encontrar em outros modelos.

Mas eu terei que terminar de projetar e codificar primeiro. Avise-me se quiser se manter atualizado sobre outros projetos. Ainda não decidi se farei mais instrutíveis ou uma série de vídeos.

Etapa 4: Etapa 4: conecte e teste

E agora é hora de testar!

Simplesmente conecte um cabo Midi, certifique-se de configurar seu Sintetizador / Teclado para responder ao canal 1 ou mude o canal no código do Arduino e veja se funciona!

Estou muito curioso para ver e ouvir o que você faz com isso. Se você fizer alterações, atualizações, ajustes (como os valores do sensor de luz e da temperatura. Do lado de fora, pode funcionar melhor ou pior do que o interior).

Também estou curioso para ver se funciona bem com todos os sintetizadores. No meu baixo Volca funciona perfeitamente, mas no meu Neutron o LFO fica preso assim que eu envio uma nota Midi. Tudo bem quando eu reinicio, mas é estranho. Não tenho certeza se há algo na Biblioteca Midi ou no meu código, posso tentar fazer isso sem uma Biblioteca em breve e ver se fica melhor.

Obrigado por ler e assistir e boa sorte !!

Recomendado: