Table des matières:

Métronome Arduino : 4 étapes
Métronome Arduino : 4 étapes

Vidéo: Métronome Arduino : 4 étapes

Vidéo: Métronome Arduino : 4 étapes
Vidéo: Метроном на Arduino 2024, Juillet
Anonim
Image
Image

Lorsque vous apprenez un nouvel instrument de musique quand vous êtes enfant, il y a tellement de nouvelles choses sur lesquelles vous concentrer. Garder le rythme dans le bon tempo en fait partie. Ne pas trouver un métronome fonctionnellement complet et pratique était la meilleure excuse pour recommencer à construire avec mes enfants. Dans cet article Instructables, vous trouverez la description fonctionnelle, la liste des pièces avec les liens et les prix de la boutique en ligne, le schéma de câblage pour l'assemblage et le code source complet d'Arduino.

Étape 1: Description fonctionnelle

Liste des pièces
Liste des pièces

Ce serait bien d'avoir un appareil de métronome avec les fonctions suivantes pour l'utiliser à la maison ou à l'école de musique de manière pratique.

  • Facteur de forme compact pour s'adapter à de petits endroits sur ou à côté d'instruments de musique,
  • Fonctionne sur batterie, robuste et portable à transporter,
  • Configuration facile même pour les enfants, valeur BPM toujours affichée,
  • Battements par minute réglables avec un bouton rotatif, jusqu'à 240 BPM
  • Tact audible avec contrôle du volume,
  • Mode silencieux pour la pratique du casque pendant la nuit,
  • Retour visuel des battements (1/4, 2/4, 3/3, 4/4, 6/8, etc.) jusqu'à 8 LED,
  • Avec ou sans accent principal, avec retour visuel et sonore.

En allumant, le mode métronome commencera à 60 BPM et s'affichera sur le petit écran et laissera le rythme être réglé par le bouton rotatif entre 10 et 240. Les néopixels affichent le rythme dans les LED bleues pendant que le buzzer sonne. Appuyez sur le bouton pour passer en mode de réglage des battements et les LED vertes indiqueront la structure de battement définie. Le bouton rotatif incrémentera ou décrémentera la structure des battements (2/2, 3/3, 4/4, 6/8, etc.). Au-dessus de 8 LED, en tournant davantage dans le sens des aiguilles d'une montre, l'accent principal sera allumé et la première LED l'indiquera en rouge. L'accent principal aura également un retour audible. Il peut être désactivé en tournant dans le sens inverse des aiguilles d'une montre. Appuyez sur le bouton pour passer du mode de réglage du temps au mode métronome.

Étape 2: Liste des pièces

Vous aurez besoin d'un étui. N'importe quelle forme ou taille peut être achetée, mais nous avions un joli boîtier en métal noir d'un ancien commutateur VGA manuel mis au rebut par un ami. Les autres pièces sont listées ci-dessous.

  • Batterie 9V, 1,50 USD
  • Câble de connecteur de batterie, USD 0, 16
  • Arduino Nano avec en-têtes de broches, 2,05 USD
  • Bouclier d'extension Nano IO, USD 1, 05
  • Mini interrupteur à glissière pour l'alimentation, 0,15 USD
  • Buzzer piézo, 0, 86 USD
  • Adafruit Neopixel WS2812 8 bits, 1 USD
  • Écran OLED 128x64, 1 53 USD
  • Encodeur rotatif, USD 0, 50
  • Câbles Dupont F/F, USD 0, 49

Le prix total des composants est inférieur à 10 USD, -

Étape 3: Schéma de câblage

Schéma de câblage
Schéma de câblage

Utilisez la carte d'extension Nano IO pour ne pas vous soucier de souder plusieurs connexions GND et VCC. Une soudure minimale sera nécessaire pour les en-têtes à broches Nano et pour les connecteurs du module Neopixel. L'utilisation de fils Dupont permet des connexions stables pour le reste du câblage comme indiqué sur le schéma. La batterie 9V est connectée à GND et VIN, ce dernier via l'interrupteur coulissant d'alimentation. Le module d'encodeur rotatif dispose d'un bouton de commutation intégré, qui est représenté séparément dans le schéma pour une meilleure compréhension de la façon de les connecter. La partie rotative (CLK et DT) est connectée respectivement à PIN2 et PIN3, car ce sont les seules broches NANO capables de gérer les interruptions. Le GND rotatif est bien sûr connecté au PIN GND de Nano. Le bouton de commutation intégré est connecté à PIN4. Le buzzer piézo est connecté à PIN5 et GND. Le module Adafruit Neopixel est connecté à PIN7 et son VIN et GND aux 5V et GND de Nano respectivement. Le petit écran OLED est connecté à l'interface de bus I2C, qui est PIN A4 et A5 pour SDA et SDL. VCC et GND vont bien sûr au 5V et au GND de Nano. Voilà qui conclut notre câblage Dupont.

Étape 4: code source Arduino

Code source Arduino
Code source Arduino

// Métronome, accent principal, tact visuel et sonore - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Réinitialiser la broche # (ou -1 en cas de partage de la broche de réinitialisation Arduino) Affichage Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &Fil, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, pin_neopixel, NEO_GRB + NEO_KHZ800); #define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11; #define CLK 2 #define DT 3 #define pin_switch 4 #define pin_buzzer 5 int bpm = 60; int bpmPremier = 0; // LED allumée au début, éteinte au reste… int tack = 4; bool leaderTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup() { pixels.begin(); pinMode(pin_buzzer, SORTIE); Timer1.initialize(1000000*60/bpm/2); Timer1.attachInterrupt(buzztick); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); pinMode(pin_switch, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (CLK), RotaryCLK, CHANGE); attachInterrupt(digitalPinToInterrupt(DT),rotatingDT, CHANGE); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Adresse 0x3D pour 128x64 pour(;;); // Ne continue pas, boucle indéfiniment } display.clearDisplay(); display.display(); } void loop() { if (digitalRead(pin_switch)==LOW) { delay(100); while(digitalRead(pin_switch)==LOW); retard (100); Timer1.detachInterrupt(); showGreenTacks(); while(digitalRead(pin_switch)==HIGH) { if (curVal>prevVal) { tack+=1; if (tack>8) { if (leaderTack) tack = 8; else { leaderTack = vrai; pointe = 1; } } } else if (curValprevVal) { bpm+=2; si (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); sinon display.print(" "); display.print(bpm); display.display(); } annuler buzztick() { if (bpmFirst==0) { int volume = 4; si (leaderTack && pos==0) volume = 8; pour (int i=0; i

Conseillé: