תוכן עניינים:

מטרונום ארדואינו: 4 שלבים
מטרונום ארדואינו: 4 שלבים

וִידֵאוֹ: מטרונום ארדואינו: 4 שלבים

וִידֵאוֹ: מטרונום ארדואינו: 4 שלבים
וִידֵאוֹ: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, יולי
Anonim
Image
Image

כאשר לומדים כלי נגינה חדש כילד, יש כל כך הרבה דברים חדשים שממשיכים להתמקד בהם. שמירה על קצב בקצב הנכון היא אחת מהן. אי מציאת מטרונום שלם ונוח מבחינה תפקודית פירושה התירוץ הטוב ביותר להתחיל לבנות שוב עם הילדים שלי. בפוסט זה ניתן למצוא את התיאור הפונקציונאלי, רשימת החלקים עם קישורים ומחירים של חנות האינטרנט, תרשים חיווט להרכבה וקוד מקור מלא של Arduino.

שלב 1: תיאור פונקציונלי

רשימת חלקים
רשימת חלקים

יהיה נחמד שיהיה לכם מכשיר מטרונום עם הפונקציות הבאות לשימוש בו בבית או בבית הספר למוסיקה בנוחות.

  • גורם צורה קומפקטי שיתאים למקומות קטנים על גבי או ליד כלי נגינה,
  • מופעל באמצעות סוללה, חזק ונייד לנשיאה,
  • הגדרה קלה אפילו לילדים, ערך BPM תמיד מוצג,
  • פעימות מתכווננות לדקה בעזרת כפתור סיבובית, עד 240 BPM
  • טקט נשמע עם שליטה על עוצמת הקול,
  • מצב שקט לתרגול אוזניות בן לילה,
  • משוב חזותי של פעימות (1/4, 2/4, 3/3, 4/4, 6/8 וכו ') עד 8 נוריות LED,
  • עם או בלי מבטא מוביל, עם משוב חזותי ונשמע.

הפעלת מצב המטרונום תתחיל ב -60 BPM המוצגת בתצוגה הקטנה ותאפשר לכוון את הקצב על ידי כפתור הסיבוב בין 10 ל -240. Neopixels מציגים את הפעימה בנורות LED כחולות בזמן שהזמזם מתקתק. לחיצה על הכפתור תעבור למצב התאמת פעימות ונורות נוריות ירוקות יציינו את מבנה הקצב המוגדר. ידית סיבוב תגדיל או תקטין את מבנה הקצב (2/2, 3/3, 4/4, 6/8 וכו '). מעל 8 נוריות LED, עוד סיבוב עם כיוון השעון, מבטא מוביל יופעל, והנורית הראשונה תסמן זאת באדום. למבטא המוביל יהיה גם משוב קולי. ניתן לכבות אותו על ידי סיבוב נגד כיוון השעון. לחיצה על הכפתור תחזור ממצב התאמת פעימות למצב מטרונום.

שלב 2: רשימת חלקים

תזדקק למארז. אפשר לקנות כל צורה או גודל, אבל היה לנו מארז מתכת שחור נחמד של מתג VGA ידני ישן שנפטר מחבר. שאר החלקים מפורטים להלן.

  • סוללה 9V, 1.50 דולר
  • כבל מחבר סוללה, 0 דולר ארה"ב, 16
  • Arduino Nano עם כותרות סיכות, 2.05 דולר
  • מגן הארכה Nano IO, 1 דולר ארה"ב, 05
  • מתג מיני שקופיות לחשמל, 0.15 דולר
  • זמזם פיז'ו, 0, 86 דולר
  • Adafruit Neopixel WS2812 8-bit, 1 דולר ארה"ב, 01
  • תצוגת OLED 128x64, 1 דולר ארה"ב, 53
  • מקודד רוטרי, 0, 50 דולר
  • כבלי Dupont F/F, USD 0, 49

המחיר הכולל של הרכיבים נמוך מ- 10 $, -

שלב 3: תרשים חיווט

תרשים חיווט
תרשים חיווט

השתמש בלוח הארכה של Nano IO על מנת לא להתעסק בהלחמה של חיבורי GND ו- VCC מרובים. יהיה צורך בהלחמה מינימלית לכותרות ה- pin Nano ולמחברי המודולים של Neopixel. שימוש בחוטי Dupont מאפשר חיבורים יציבים לשאר החיווט כפי שמוצג בתרשים. סוללת 9V מחוברת ל- GND ו- VIN, האחרונה דרך מתג המחוון להפעלה. למודול המקודד הסיבובי יש לחצן מתג משולב, שמוצג בנפרד בתרשים להבנה קלה יותר כיצד לחבר אותם. החלק הרוטרי (CLK ו- DT) מחובר ל- PIN2 ול- PIN3 בהתאמה, מכיוון שאלו סיכות ה- NANO היחידות המסוגלות להפריע לטיפול. רוטרי GND מחובר כמובן ל- PIN ה- GND של ננו. כפתור המתג המשולב מחובר ל- PIN4. זמזם Piezo מחובר ל- PIN5 ו- GND. מודול Adafruit Neopixel מחובר ל- PIN7 ו- VIN ו- GND שלו ל- 5V ו- GND של Nano בהתאמה. צג OLED קטן מחובר לממשק האוטובוסים I2C, שהוא PIN A4 ו- A5 עבור SDA ו- SDL. VCC ו- GND עוברים ל- 5V ו- GND של ננו כמובן. בכך מסתיים חיווט הדופונט שלנו.

שלב 4: קוד המקור של Arduino

קוד המקור של ארדואינו
קוד המקור של ארדואינו

// מטרונום, מבטא מוביל, טאקט חזותי ונשמע - פיטר צ'סורגיי 2019

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // אפס סיכה #(או -1 אם משתפים סיכת איפוס Arduino) Adafruit_SSD1306 תצוגה (SCREEN_WIDH, 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); #הגדר IDLE_11 0 #הגדר SCLK_01 1 #הגדר SCLK_00 2 #הגדר SCLK_10 3 #הגדר SDT_10 4 #הגדר SDT_00 5 #הגדר 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 leadingTack = false; int pos = 0; int curVal = 0; int prevVal = 0; הגדרת void () {pixels.begin (); pinMode (pin_buzzer, OUTPUT); טיימר 1. התחל (1000000*60/דקה/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); if (! display.begin (SSD1306_SWITCHCAPVCC, 0x3C)) {// כתובת 0x3D עבור 128x64 עבור (;;); // אל תמשיכו, לולאה לנצח} display.clearDisplay (); display.display (); } לולאת void () {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 (leadingTack) tack = 8; אחרת {leadingTack = true; tack = 1; }}} אחרת אם (curValprevVal) {bpm+= 2; אם (bpm> 240) bpm = 240; } אחרת אם (curVal = 100) display.print (""); אחר display.print (""); display.print (bpm); display.display (); } vozztick void () {if (bpmFirst == 0) {int volume = 4; אם (leadingTack && pos == 0) נפח = 8; עבור (int i = 0; i

מוּמלָץ: