Πίνακας περιεχομένων:

Arduino Metronome: 4 βήματα
Arduino Metronome: 4 βήματα

Βίντεο: Arduino Metronome: 4 βήματα

Βίντεο: Arduino Metronome: 4 βήματα
Βίντεο: Метроном на ардуино! #arduino #электроника #метроном 2024, Ιούλιος
Anonim
Image
Image

Όταν μαθαίνετε ένα νέο μουσικό όργανο ως παιδί, υπάρχουν τόσα πολλά νέα πράγματα στα οποία πρέπει να εστιάσετε. Η διατήρηση του ρυθμού στο σωστό τέμπο είναι ένα από αυτά. Η μη εύρεση ενός λειτουργικά πλήρους και βολικού μετρονόμου σήμαινε την καλύτερη δικαιολογία για να ξεκινήσω να χτίζω ξανά με τα παιδιά μου. Σε αυτήν την ανάρτηση Instructables θα βρείτε τη λειτουργική περιγραφή, τη λίστα εξαρτημάτων με συνδέσμους και τιμές στο κατάστημα, το διάγραμμα καλωδίωσης για τη συναρμολόγηση και τον πλήρη πηγαίο κώδικα Arduino.

Βήμα 1: Λειτουργική περιγραφή

Λίστα μερών
Λίστα μερών

Θα ήταν ωραίο να έχετε μια συσκευή μετρονόμου με τις ακόλουθες λειτουργίες για να τη χρησιμοποιείτε στο σπίτι ή στο μουσικό σχολείο βολικά.

  • Συμπαγής συντελεστής μορφής για να ταιριάζει σε μικρά μέρη πάνω ή δίπλα σε μουσικά όργανα,
  • Λειτουργεί με μπαταρία, στιβαρό και φορητό για μεταφορά,
  • Εύκολη ρύθμιση ακόμη και για παιδιά, η τιμή BPM εμφανίζεται πάντα,
  • Ρυθμιζόμενοι ρυθμοί ανά λεπτό με περιστροφικό κουμπί, έως 240 BPM
  • Ακουστικό τακτ με έλεγχο έντασης,
  • Αθόρυβη λειτουργία για ολονύκτια εξάσκηση ακουστικών,
  • Οπτική ανατροφοδότηση των παλμών (1/4, 2/4, 3/3, 4/4, 6/8 κ.λπ.) έως 8 LED,
  • Με ή χωρίς κύρια προφορά, με οπτική και ηχητική ανατροφοδότηση.

Ενεργοποιώντας, η λειτουργία μετρονόμου θα ξεκινήσει στα 60 BPM που εμφανίζεται στη μικρή οθόνη και αφήνει τον ρυθμό να ρυθμιστεί από το περιστροφικό κουμπί μεταξύ 10 και 240. Τα νεοπίξελ δείχνουν τον ρυθμό με μπλε LED ενώ ο βομβητής χτυπά. Πατώντας το κουμπί θα μεταβείτε στη λειτουργία ρύθμισης του ρυθμού και οι πράσινες λυχνίες LED θα δείξουν τη ρυθμισμένη δομή του ρυθμού. Το περιστροφικό κουμπί αυξάνει ή μειώνει τη δομή του χτυπήματος (2/2, 3/3, 4/4, 6/8 κ.λπ.). Πάνω από 8 LED, που περιστρέφονται δεξιόστροφα, η κύρια προφορά θα ενεργοποιηθεί και η πρώτη λυχνία LED θα το δείξει με κόκκινο χρώμα. Η κύρια προφορά θα έχει επίσης ηχητική ανατροφοδότηση. Μπορεί να απενεργοποιηθεί περιστρέφοντας αριστερόστροφα. Πατώντας το κουμπί θα μεταβείτε πίσω από τη λειτουργία ρύθμισης ρυθμού στη λειτουργία μετρονόμου.

Βήμα 2: Λίστα μερών

Θα χρειαστείτε θήκη. Μπορείτε να αγοράσετε οποιοδήποτε σχήμα ή μέγεθος, αλλά είχαμε μια ωραία μαύρη μεταλλική θήκη ενός παλιού χειροκίνητου διακόπτη VGA που απορρίφθηκε από έναν φίλο. Τα υπόλοιπα μέρη παρατίθενται παρακάτω.

  • Μπαταρία 9V, 1,50 USD
  • Καλώδιο σύνδεσης μπαταρίας, 0 USD, 16 USD
  • Arduino Nano με κεφαλίδες pin, 2,05 USD
  • Nano IO Extension Shield, 1 USD, 05
  • Μίνι διακόπτης τροφοδοσίας, 0,15 USD
  • Piezo buzzer, 0 USD, 86
  • Adafruit Neopixel WS2812 8-bit, 1 USD, 01
  • Οθόνη OLED 128x64, USD 1, 53
  • Περιστροφικός κωδικοποιητής, 0, 50 USD
  • Καλώδια Dupont F/F, USD 0, 49

Η συνολική τιμή των εξαρτημάτων είναι μικρότερη από 10 USD, -

Βήμα 3: Διάγραμμα καλωδίωσης

Διάγραμμα συνδεσμολογίας
Διάγραμμα συνδεσμολογίας

Χρησιμοποιήστε τον πίνακα επέκτασης Nano IO για να μην ενοχλείτε με τη συγκόλληση πολλαπλών συνδέσεων GND και VCC. Θα χρειαστεί ελάχιστη συγκόλληση για τις κεφαλίδες Nano pin και για τους συνδετήρες μονάδας Neopixel. Η χρήση καλωδίων Dupont επιτρέπει σταθερές συνδέσεις για την υπόλοιπη καλωδίωση όπως φαίνεται στο διάγραμμα. Η μπαταρία 9V συνδέεται με GND και VIN, η τελευταία μέσω του διακόπτη ρυθμιστικού τροφοδοσίας. Η μονάδα περιστροφικού κωδικοποιητή διαθέτει ένα ενσωματωμένο κουμπί διακόπτη, το οποίο εμφανίζεται ξεχωριστά στο διάγραμμα για ευκολότερη κατανόηση του τρόπου σύνδεσής τους. Το περιστροφικό μέρος (CLK και DT) είναι συνδεδεμένο με PIN2 και PIN3 αντίστοιχα, επειδή είναι οι μόνοι ακροδέκτες NANO που μπορούν να διακόψουν τον χειρισμό. Το Rotary GND συνδέεται φυσικά με το PIN του GND του Nano. Το ενσωματωμένο κουμπί διακόπτη είναι συνδεδεμένο στο PIN4. Ο βομβητής Piezo είναι συνδεδεμένος με PIN5 και GND. Η μονάδα Adafruit Neopixel συνδέεται με το PIN7 και το VIN και GND του με τα 5V και GND του Nano αντίστοιχα. Μικρή οθόνη OLED είναι συνδεδεμένη στη διεπαφή διαύλου I2C, η οποία είναι PIN A4 και A5 για SDA και SDL. Το VCC και το GND πηγαίνουν στο 5V του Nano και φυσικά στο GND. Αυτό ολοκληρώνει την καλωδίωση του Dupont.

Βήμα 4: Πηγαίος κώδικας Arduino

Πηγαίος κώδικας Arduino
Πηγαίος κώδικας Arduino

// Metronome, Leading Accent, Visual & Audible Tact - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // Reset pin #(or -1 if sharing Arduino reset reset) Adafruit_SSD1306 display, SCREEN_ & Wire, 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 bpmFirst = 0; // LED αναμμένο στην αρχή, σβηστό στα υπόλοιπα… int tack = 4; bool leaderTack = false; int pos = 0; int curVal = 0; int prevVal = 0; void setup () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); Χρονόμετρο 1. αρχικοποιήστε (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), rotaryDT, CHANGE); εάν (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// Διεύθυνση 0x3D για 128x64 για (;;); // Μην προχωρήσετε, κάντε βρόχο για πάντα} display.clearDisplay (); display.display (); } void loop () {if (digitalRead (pin_switch) == LOW) {καθυστέρηση (100); while (digitalRead (pin_switch) == LOW); καθυστέρηση (100)? Timer1.detachInterrupt (); showGreenTacks (); while (digitalRead (pin_switch) == HIGH) {if (curVal> prevVal) {tack+= 1; if (tack> 8) {if (leaderTack) tack = 8; else {leaderTack = true; προσφορά = 1; }}} else if (curValprevVal) {bpm+= 2; εάν (bpm> 240) bpm = 240? } else if (curVal = 100) display.print (""); else display.print (""); display.print (bpm); display.display (); } void buzztick () {if (bpmFirst == 0) {int τόμος = 4; εάν (LeadTack && pos == 0) τόμος = 8; για (int i = 0; i

Συνιστάται: