Table des matières:

Construire un contrôleur MIDI Arduino : 9 étapes (avec photos)
Construire un contrôleur MIDI Arduino : 9 étapes (avec photos)

Vidéo: Construire un contrôleur MIDI Arduino : 9 étapes (avec photos)

Vidéo: Construire un contrôleur MIDI Arduino : 9 étapes (avec photos)
Vidéo: # 1 Comment construire un contrôleur midi avec un arduino: Le contrôleur diy midi Workshop 2.0... 2024, Juillet
Anonim

Cette instructable a été initialement publiée sur mon blog le 28 juin 2020

J'aime construire des choses qui incluent de l'électronique, et j'ai toujours voulu construire quelque chose en utilisant Arduino.

L'une des versions les plus courantes pour les débutants que j'ai trouvée était un contrôleur MIDI. Un contrôleur MIDI est tout matériel qui envoie des données MIDI (Musical Instrument Digital Interface) à un appareil pour déclencher des sons et faire de la musique.

J'ai trouvé que de nombreuses implémentations sont compliquées, même celles qui sont destinées aux débutants. C'était très frustrant de découvrir que j'avais besoin d'utiliser des centaines de lignes de code illisible. Ou que j'ai besoin de souder une résistance dans certains cas, entre autres exemples.

Le projet

En construisant mon propre contrôleur MIDI Arduino, mon intention était de faire un projet agréable, en gardant le bruit au plus bas. Quelque chose que tout débutant pourrait suivre. Pour ce faire, j'ai utilisé le MIDI Fighter 3D comme source d'inspiration de base et j'ai supprimé toutes les fonctionnalités non essentielles.

Le coût total de mon projet était inférieur à 30 $ et la liste des matériaux était vraiment courte (liens affiliés):

  • Arduino Leonardo (ou clone): entre 10$ et 20$.
  • 16 x boutons Sanwa 24mm (ou clone): entre 1$ et 2,50$ par bouton.
  • Fer à souder
  • Fil électrique 22 AWG

La carte Arduino

Lorsque j'ai commencé ce projet, j'ai découvert qu'il y avait un tas de nouveaux modèles Arduino (sans compter les centaines de cartes compatibles). Et tous offrent des capacités légèrement différentes.

J'avais besoin d'envoyer des signaux MIDI à un ordinateur et le moyen le plus simple de le faire est via USB. Toute carte Arduino basée sur le microcontrôleur ATmega32u4 dispose d'une communication USB intégrée.

Les cartes Arduino officielles avec prise en charge USB native sont Arduino Due, Arduino Zero, Arduino Leonardo, Arduino Micro. Ces cartes ont un support USB intégré, ce qui signifie qu'elles peuvent agir comme un périphérique MIDI USB.

J'ai décidé d'aller avec un clone de l'Arduino Leonardo. Il a suffisamment d'entrées pour ce projet et il comprend également des en-têtes, ce qui facilite le branchement/débranchement des fils.

Premiers pas

Bien que j'explique pas à pas comment j'ai implémenté le code pour ce projet, vous pouvez télécharger la version finale.

Pour télécharger du code sur la carte, vous devez utiliser l'IDE Arduino. Ils ont également un éditeur Web très utile mais ils ont un quota limité de fois par jour où vous pouvez compiler du code.

Étape 1: Clignotement de la LED intégrée

C'est drôle comme le "Hello World" dans le monde du matériel fait clignoter une LED.

Ce fut une belle surprise pour moi de découvrir qu'Arduino Leonardo a une LED intégrée que vous pouvez faire clignoter pour tester votre code. De cette façon, vous n'avez pas besoin de construire un circuit externe sur une maquette avec une LED et une résistance.

Code:

Étape 2: Clignotement de la LED sur l'entrée manuelle

L'étape logique suivante consistait à faire clignoter la même LED chaque fois que j'envoie un signal. J'ai retiré le couvercle en plastique d'une extrémité de 2 fils Dupont et connecté l'autre extrémité à la carte:

  • Broche numéro 2: Une des entrées numériques (positive). Il peut s'agir de n'importe quelle broche numérique.
  • Broche GND: toute broche de terre (négative).

Maintenant, chaque fois que je joins les extrémités exposées des fils, je ferme le circuit et je peux donc exécuter du code en conséquence

Chacune des 20 broches numériques du Leonardo possède une résistance interne (déconnectée par défaut) qui peut être activée à l'aide de INPUT_PULLUP. Gardez à l'esprit qu'une entrée pull-up signifie que l'état du bouton est inversé:

  • HAUT lorsque le circuit est ouvert (le bouton n'est PAS enfoncé).
  • BAS lorsque le circuit est fermé (le bouton est enfoncé).

Code:

Étape 3: Installation de la bibliothèque MIDIUSB

Cette bibliothèque permet à une carte Arduino avec des capacités USB d'agir comme un instrument MIDI via USB. Consultez la documentation officielle pour plus d'informations.

En utilisant l'IDE Arduino, vous pouvez installer des bibliothèques Arduino supplémentaires à l'aide du gestionnaire de bibliothèque:

  1. Ouvrez l'IDE et cliquez sur le menu "Esquisse", puis "Inclure la bibliothèque", puis "Gérer les bibliothèques".
  2. Recherchez MIDIUSB et cliquez sur Installer.
  3. Une fois terminé, une balise Installed devrait apparaître à côté de la bibliothèque MIDIUSB.
  4. Fermez le gestionnaire de bibliothèque.

Désormais, le Leonardo peut envoyer des messages MIDI via USB ! Mais d'abord, un aperçu du fonctionnement du MIDI est nécessaire.

Comment fonctionne le MIDI

"MIDI (Musical Instrument Digital Interface) est un protocole de communication standard qui connecte des instruments de musique électroniques, des ordinateurs et des appareils audio associés pour jouer de la musique." - Wikipédia

Il gère les messages d'événement avec des données sur la hauteur et la vélocité de la note jouée, entre autres instructions

Dans ce projet spécifique, l'entrée des 16 boutons envoie différents messages via USB. Ces messages peuvent être convertis en son sur un ordinateur à l'aide de n'importe quel logiciel approprié comme GarageBand ou Ableton Live.

Anatomie d'un message MIDI

Pour envoyer un message MIDI, j'ai utilisé la méthode sendMIDI() de la bibliothèque MIDIUSB que j'ai installée à l'étape 3.

Cette méthode peut recevoir 4 paramètres:

  • Type d'événement: Il peut s'agir de 0x09 pour la note activée (jouer la note) ou de 0x08 pour la note désactivée (arrêter de jouer la note).
  • Note On/Off: Le type d'événement combiné avec le canal MIDI (1-16). Je n'utilise que le canal 1 donc c'est soit 0x90 pour la note On ou 0x80 pour la note Off.
  • Numéro de note: Chaque note a une hauteur numérique associée (échelle de fréquence).
  • Vélocité: De 0 (pas de vélocité) à 127 (le plus rapide).

Étape 4: Envoi d'un message MIDI

J'ai inclus la bibliothèque MIDIUSB et au lieu de faire clignoter la LED intégrée, j'ai envoyé une note.

Code:

Important: à partir de cette étape, l'Arduino se transforme en un contrôleur MIDI USB et arrête de recevoir le code via USB.

Lorsque vous êtes bloqué dans une position où l'Arduino ne peut plus être programmé, suivez ces étapes:

  1. Maintenez enfoncé le bouton de réinitialisation arrondi sur la carte Arduino.
  2. Cliquez sur Télécharger sur l'IDE Arduino.
  3. Relâchez le bouton de réinitialisation.
  4. Le code mis à jour sera téléchargé sur le tableau.

Étape 5: Envoi d'un message MIDI à partir de chaque bouton

Envoi d'un message MIDI à partir de chaque bouton
Envoi d'un message MIDI à partir de chaque bouton

La dernière étape consistait à mapper chaque hauteur sur un bouton. Pour les 16 boutons, j'ai défini une gamme de C2 à E3b, qui sont les hauteurs de 36 à 51 dans une séquence de bas en haut et de gauche à droite. Consultez ce fichier des didacticiels Arduino pour voir quelle hauteur correspond à chaque note.

J'ai utilisé des broches numériques de 2 à 12 et des broches analogiques (en les utilisant comme numériques) de A0 à A4.

Et voici à quoi ressemble le code final

Étape 6: Configuration des canaux ou des banques (facultatif)

Configuration des canaux ou des banques (facultatif)
Configuration des canaux ou des banques (facultatif)

Si vous souhaitez ajouter plus de boutons avec la possibilité de changer de canal ou de banque, comme dans le MIDI Fighter 3D (voir image), l'Arduino Leonardo dispose de quatre broches supplémentaires que vous pouvez utiliser. L'Arduino Leonardo dispose de 20 broches d'entrée/sortie numériques, dont seulement 16 sont utilisées pour jouer des notes.

Vous pouvez utiliser ces boutons supplémentaires pour mettre à jour une variable dans le code et envoyer sa valeur en tant que paramètre à la méthode MidiUSB.sendMIDI:

gist.github.com/lean8086/ec8da7486ec3621f9f0b90542a06fcea

Étape 7: Le cas

L'affaire
L'affaire
L'affaire
L'affaire

Pour que ce projet reste simple, j'ai été extrêmement pointilleux sur le choix des fonctionnalités à inclure.

  • Boutons uniquement: 16 boutons d'arcade de type Sanwa, dans une grille 4x4. Pas de boutons, pas de curseurs, pas de faders ou toute autre entrée analogique.
  • Boîtier monocoque: n'utilisez pas de vis, d'écrous, de boulons ou de colle pour le boîtier ou pour maintenir la carte Arduino.
  • Outils de tous les jours: Par exemple, j'ai soudé les fils au lieu d'acheter une pince à fil spécifique pour les boutons d'arcade.

Conception monocoque

L'un des défis auxquels j'ai été confronté était de concevoir un boîtier suffisamment simple pour qu'il ne nécessite pas d'assemblage et puisse être imprimé en 3D en un seul passage.

Pour éviter d'utiliser des vis ou de la colle, j'avais besoin de concevoir un boîtier qui offre le plus petit accès à l'électronique. Ma plus grande inspiration pour le boîtier était le Mac Mini, qui a un trou en forme de cercle en bas. Je voulais aussi concevoir un couvercle vissable pour cela, mais j'ai décidé de le laisser s'ouvrir pour exposer l'électronique.

Téléchargez le boîtier imprimable en 3D (322 Ko). Paramètres recommandés: PLA, couches de 0,15 mm, 20 % de remplissage, supports d'application au moins pour le trou inférieur arrondi, les supports Arduino et le micro USB.

Tenir un Arduino sans vis

Le Leonardo a 4 trous pour visser la carte dans n'importe quel boîtier approprié, mais mon idée était de faciliter l'ajout et le retrait de la carte du boîtier.

Trouver un support de clip pour Arduino sur Thingiverse était facile, et il m'a fallu 5 itérations pour intégrer ce support à la conception monocoque. La partie la plus difficile a été de fabriquer ses pattes pour éviter les trous pour les boutons et de faire en sorte que le micro USB soit aligné au centre du boîtier.

Étape 8: L'Assemblée

L'Assemblée
L'Assemblée
L'Assemblée
L'Assemblée
L'Assemblée
L'Assemblée

Après avoir inséré tous les boutons en place, j'ai soudé de courts fils noirs reliant toutes les pattes négatives des boutons entre eux.

Ensuite, j'ai soudé de longs fils rouges de chaque jambe positive pour les connecter directement à la carte.

Pour connecter les fils à l'Arduino, j'ai coupé et soudé des extrémités Dupont et les ai recouvertes d'une gaine thermorétractable.

J'ai connecté les fils à la carte en suivant le même ordre que dans le MIDI Fighter. De bas en haut et de gauche à droite

Étape 9: Utilisation du contrôleur MIDI

Utilisation du contrôleur MIDI
Utilisation du contrôleur MIDI

Tout logiciel de musique (ou matériel approprié) peut être utilisé pour recevoir du MIDI et faire de la musique. Les plus recommandées sont Garage Band, Ableton Live, et je sais qu'il existe de nombreuses applications à installer sur un téléphone.

Tous ces outils sont utiles pour charger des sons prédéfinis pour la batterie au doigt, mais ils ont été conçus à des fins plus importantes. Ces outils peuvent être difficiles à mettre en place pour les débutants.

MIDI dans le navigateur Web

Pour faire quelque chose de plus aligné avec ce projet et sa simplicité, j'ai construit un outil Web entièrement axé sur les contrôleurs MIDI.

Punchy: Implémentation WebMIDI et WebAudio pour les contrôleurs MIDI.

Il peut lire les messages MIDI sur n'importe quel navigateur prenant en charge l'API JavaScript WebMIDI. Ensuite, il joue des sons dans un synthétiseur (à l'aide de l'API WebAudio) ou dans un échantillonneur, chargeant des sons personnalisés à partir de n'importe quel pack de sons.

Configurer Ableton Live

Pour faire fonctionner le contrôleur MIDI avec Ableton Live, suivez ces étapes simples de leur documentation officielle.

Allez dans Préférences → Link MIDI et assurez-vous que "Input" a "Track" et "Remote" ON et que la sortie a "Remote" ON ainsi que mentionné dans le guide:

Conseillé: