Arduino · Dicas & Tutoriais

Fazendo um simples controlador MIDI com Arduino | fácil e rápido

Neste breve tutorial vou explicar como fazer o Arduino funcionar como um controlador MIDI.

Usaremos dois botões, uma protoboard, alguns jumpers e um Arduino. No caso, uso o Mega, mas o UNO e outros deverão funcionar.

O programa DAW, que atenderá aos comandos do Arduino, será o LMMS. É um programa gratuito, por isso a preferência.

O tutorial aqui é super-simples, pois tem mais a finalidade de mostrar como usar a biblioteca MIDI no Arduino e tudo isso usando Linux – uma vez que os tutoriais mais encontrados na internet são em Windows e Mac, e há particularidades com relação ao sistema operacional. No meu caso uso o Linux Mint, mas outras distros também servirão.

No fim do artigo eu postei um vídeo demonstrando o uso do controlador MIDI na prática.

Lista de materiais

  • 1 Arduino (UNO, Mega ou similar);
  • 1 protoboard;
  • 5 jumpers;
  • 2 botões (push button)

Softwares necessários

É preciso ter instalado os seguintes softwares: Arduino IDE, LMMS e o Hairless MIDI<->Serial (para o caso de Windows/Mac) e ttyMIDI (para o caso de Linux).

A Arduino IDE tem instalação simples e manuais de como instalar por aí, e por isso e não vou me alongar aqui quanto a isso.

O LMMS tem instalação simples em Windows e Mac, e para Linux hoje disponibilizam um AppImage que é só baixar e executar que o programa roda. Em todo caso, segue tutorial.

O Hairless tem um princípio similar – eu não testei em Windows e Mac, e no meu Linux Mint 19.1 ele não roda. Por isso, meu foco é no ttyMIDI aqui. Esses programas são usados para fazer com que a comunicação padrão Serial do Arduino seja entendida como MIDI pelo PC. Explicarei mais adiante.

Sketch

O sketch abaixo mostra as conexões com portas digitais e a alimentação do nosso circuito. Usaremos duas portas digitais, a 2 e 3. Fazemos uma conexão com a entrada GND (terra) à protoboard:

Baixando a biblioteca Arduino MIDI

Usaremos essa biblioteca para enviar comandos MIDI do Arduino. Você pode baixar um arquivo ZIP, sem problemas.

Depois de baixada precisamos incluí-la nas bibliotecas do Arduino. Para tal, iniciamos a Arduino IDE, vamos em Sketch | Incluir Biblioteca | Adicionar biblioteca .ZIP.

Localize o arquivo ZIP baixado no seu sistema. Adicionado, verifique se ele está incluso na IDE, indo em Sketch | Incluir Biblioteca. A MIDI deverá aparecer na parte debaixo, em Contribuído bibliotecas 

Se aparecer, está tudo OK 🙂

Nosso código

Abaixo, o código-fonte do nosso sketch, que iremos mandar para o Arduino:

#include <MIDI.h>

#define CHANNEL 1

int bot1 = 2;
int bot2 = 3;

// Created and binds the MIDI interface to the default hardware Serial port
MIDI_CREATE_DEFAULT_INSTANCE();

void setup(){
    pinMode(bot1, INPUT_PULLUP);
    pinMode(bot2, INPUT_PULLUP);  

    MIDI.begin();

    Serial.begin(115200);
}

void loop(){    
    if (digitalRead(bot1) == LOW) {
        MIDI.sendNoteOn(60, 127, CHANNEL);
    }
    else {
        MIDI.sendNoteOn(60, 0, CHANNEL);
    }

    if (digitalRead(bot2) == LOW) {
        MIDI.sendNoteOn(61, 127, CHANNEL);
    }
    else {
        MIDI.sendNoteOn(61, 0, CHANNEL);
    }
}

Não vou me estender muito na explicação aqui, uma vez que o artigo está enorme. O que é mais importante entender aqui é que quando o botão estiver pressionado (LOW), enviamos a nota 60 (equivalente a um dó do meio, no meu teclado) à velocidade 127, ou seja, no mais alto (“velocidade” aqui tem a ver com a velocidade de tecla pressionada. Quando apertamos rapidamente uma tecla no piano o som será mais alto). Quando não estiver apertado o botão, enviamos a mesma nota com valor 0 – tecla não pressionada. Isso é importante para “soltar” a nota; senão, o som fica constante.

LEIA TAMBÉM  Usando SVG através do ActionScript - AS3 SVG Renderer

A constante CHANNEL é o canal MIDI que estamos usando (vamos de 1, padrão).

Baixando o ttymidi (para usuários Linux)

Vamos precisar de um programa que faça a ponte entre os dados em Serial emitidos por padrão e o computador, que deverá entendê-los como MIDI.

Como mencionei, este artigo é focado mais no Linux. Mas ele também é reproduzível no Windows/Mac, por exemplo. No entanto, não testei nesses sistemas, porém acredito ser bem mais fácil do que a realidade do Linux.

No Linux, vamos usar o ttymidi. É gratuito e funciona a partir de linha de comando; ou seja, independentemente da distro, deverá funcionar.

Faça o download dele. É um arquivo descompactado. Descompacte numa pasta. No README dele conterá as instruções.

Dentro da pasta do ttymidi abra um terminal. Vamos fazer a compilação usando make.

Se você não tem ainda o make instalado, instale via  sudo apt-get install build-essential e então execute o comando:

make

Se você tiver algum problema com esse passo, tente adicionar a flag -pthread ao seu arquivo Makefile, que estão na mesma pasta. O ttymidi depende do pacote libasound2-dev. Para instalar, execute:

apt-get install libasound2-dev

Por fim, faça a compilação e a instalação do ttymidi via:

sudo make install

Para Windows/Mac, você pode usar o Hairless MIDI, disponível nesta página. Ele tem interface gráfica. Nele, você define em “Serial port” a porta USB usada pelo Arduino. Defina também o valor de MIDI Out. Eu não testei nesses sistemas (Win/Mac), o foco aqui é o Linux devido à algumas dificuldades que tive para fazer esse trabalho funcionar nele, devido à particularidades.

Executando o ttymidi

Com ele instalado e o sketch já no Arduino, podemos executar o ttymidi.

No UNO/Mega, podemos executar o comando abaixo num terminal, lembrando que é preciso trocar a porta para a  correspondente no seu computador. Por exemplo, na minha máquina o Arduino está conectado na porta USB /dev/ttyACM0:

ttymidi -s /dev/ttyACM0 -v

Você verá que há uma lista de notas sendo listadas. São as notas com volume 0 (nenhum som) que colocamos no nosso código do sketch. Se apertarmos um dos push buttons será possível que o valor da velocidade será alterado para 127 (som alto):

Fazendo a comunicação com o LMMS

Agora a parte mais fácil, caso você já tenha usado algum controlador MIDI com um software DAW.

Para fins de exemplo, vamos usar um piano. Abra o LMMS. Na guia à esquerda, opte por Minhas Amostras (se o seu programa estiver em português), abra instruments e arraste e solte o piano02.ogg (como na tela abaixo) para caixa Editor de Som:

Clique em piano02.ogg, agora na janela Editor de Som. Aparecerá uma nova caixa, com um teclado, na tela:

Com o piano aberto, selecionamos a opção MIDI Settings (1) e depois a opção do nosso controlador MIDI (2):

E agora sim! Já podemos apertar os nossos botões na protoboard que o som do piano será tocado no computador. 🙂

Curtiu? Então aperte o botão: