สารบัญ:

Arduino Metronome: 4 ขั้นตอน
Arduino Metronome: 4 ขั้นตอน

วีดีโอ: Arduino Metronome: 4 ขั้นตอน

วีดีโอ: Arduino Metronome: 4 ขั้นตอน
วีดีโอ: Electronic Basics #30: Microcontroller (Arduino) Timers 2024, กรกฎาคม
Anonim
Image
Image

เมื่อเรียนรู้เครื่องดนตรีใหม่ตั้งแต่ยังเป็นเด็ก มีสิ่งใหม่ๆ มากมายให้จดจ่อ การรักษาจังหวะให้เหมาะสมเป็นหนึ่งในนั้น การไม่พบเครื่องเมตรอนอมที่ใช้งานได้จริงและสะดวกหมายถึงข้อแก้ตัวที่ดีที่สุดที่จะเริ่มสร้างอีกครั้งกับลูกๆ ของฉัน ในโพสต์ Instructables นี้ คุณจะพบคำอธิบายการทำงาน รายการชิ้นส่วนพร้อมลิงก์และราคาจากเว็บช็อป แผนภาพการเดินสายไฟสำหรับการประกอบ และซอร์สโค้ด Arduino ที่สมบูรณ์

ขั้นตอนที่ 1: คำอธิบายการทำงาน

ส่วนรายการ
ส่วนรายการ

คงจะดีถ้ามีเครื่องเมตรอนอมที่มีฟังก์ชั่นต่อไปนี้เพื่อใช้ที่บ้านหรือที่โรงเรียนดนตรีอย่างสะดวก

  • ฟอร์มแฟกเตอร์ขนาดกะทัดรัดเพื่อให้พอดีกับที่เล็กๆ ด้านบนหรือข้างเครื่องดนตรี
  • ใช้งานแบตเตอรี่ ทนทาน และพกพาไปได้ทุกที่
  • ตั้งค่าได้ง่ายแม้สำหรับเด็ก ค่า BPM แสดงเสมอ
  • ปรับจังหวะต่อนาทีด้วยปุ่มหมุน สูงสุด 240 BPM
  • ชั้นเชิงเสียงพร้อมการควบคุมระดับเสียง
  • โหมดเงียบสำหรับการฝึกซ้อมหูฟังข้ามคืน
  • การแสดงภาพสะท้อนของจังหวะ (1/4, 2/4, 3/3, 4/4, 6/8, ฯลฯ) มากถึง 8 LEDs,
  • มีหรือไม่มีสำเนียงนำ พร้อมการตอบสนองด้วยภาพและเสียง

เมื่อเปิดเครื่อง โหมดเครื่องเมตรอนอมจะเริ่มที่ 60 BPM ซึ่งแสดงบนจอแสดงผลขนาดเล็ก และปล่อยให้ปรับจังหวะโดยปุ่มหมุนระหว่าง 10 ถึง 240 พิกเซลนีโอพิกเซลแสดงจังหวะในไฟ LED สีฟ้าในขณะที่เสียงกริ่งดังขึ้น การกดปุ่มจะเปลี่ยนเป็นโหมดการปรับจังหวะและไฟ LED สีเขียวจะแสดงโครงสร้างจังหวะที่ตั้งไว้ ปุ่มหมุนจะเพิ่มหรือลดโครงสร้างจังหวะ (2/2, 3/3, 4/4, 6/8 เป็นต้น) ไฟ LED ที่สูงกว่า 8 ดวง หมุนตามเข็มนาฬิกาเพิ่มเติม เน้นนำจะเปิดขึ้น และ LED แรกจะแสดงเป็นสีแดง สำเนียงชั้นนำจะมีเสียงตอบรับเช่นกัน สามารถปิดได้โดยหมุนทวนเข็มนาฬิกา การกดปุ่มจะเปลี่ยนกลับจากโหมดการปรับจังหวะเป็นโหมดเครื่องเมตรอนอม

ขั้นตอนที่ 2: รายการชิ้นส่วน

คุณจะต้องมีกรณี สามารถซื้อรูปร่างหรือขนาดใดก็ได้ แต่เรามีเคสโลหะสีดำที่สวยงามของสวิตช์ VGA แบบแมนนวลรุ่นเก่าที่ทิ้งเพื่อนไว้ ส่วนอื่นๆ ที่เหลือมีดังต่อไปนี้

  • แบตเตอรี่ 9V, USD 1.50
  • สายต่อแบตเตอรี่ 0, 16. USD
  • Arduino Nano พร้อมหัวเข็ม USD 2.05
  • Nano IO Extension Shield, USD 1, 05
  • มินิสไลด์สวิตช์จ่ายไฟ 0.15 ดอลลาร์สหรัฐ
  • Piezo buzzer, USD 0, 86
  • Adafruit Neopixel WS2812 8 บิต 1 ดอลลาร์สหรัฐ 01
  • จอแสดงผล OLED 128x64 USD 1, 53
  • ตัวเข้ารหัสแบบหมุน USD 0, 50
  • สายดูปองท์ F/F, USD 0, 49

ราคารวมของส่วนประกอบน้อยกว่า USD 10, -

ขั้นตอนที่ 3: แผนภาพการเดินสายไฟ

แผนภาพการเดินสายไฟ
แผนภาพการเดินสายไฟ

ใช้บอร์ดขยาย Nano IO เพื่อไม่ให้รบกวนการบัดกรีการเชื่อมต่อ GND และ VCC หลายจุด จำเป็นต้องมีการบัดกรีขั้นต่ำสำหรับส่วนหัวพินนาโนและสำหรับตัวเชื่อมต่อโมดูล Neopixel การใช้สายดูปองท์ช่วยให้สามารถต่อสายไฟที่เหลือได้อย่างมีเสถียรภาพดังแสดงในแผนภาพ แบตเตอรี่ 9V เชื่อมต่อกับ GND และ VIN โดยผ่านสวิตช์เลื่อนเปิด/ปิด โมดูลตัวเข้ารหัสแบบหมุนมีปุ่มสวิตช์ในตัว ซึ่งแสดงแยกต่างหากในแผนภาพเพื่อให้เข้าใจวิธีเชื่อมต่อได้ง่ายขึ้น ชิ้นส่วนโรตารี (CLK และ DT) เชื่อมต่อกับ PIN2 และ PIN3 ตามลำดับ เนื่องจากเป็นพิน NANO เพียงตัวเดียวที่สามารถจัดการอินเตอร์รัปต์ได้ Rotary GND เชื่อมต่อกับ GND PIN ของ Nano แน่นอน ปุ่มสวิตช์ในตัวเชื่อมต่อกับ PIN4 Piezo buzzer เชื่อมต่อกับ PIN5 และ GND โมดูล Adafruit Neopixel เชื่อมต่อกับ PIN7 และ VIN และ GND กับ 5V และ GND ของ Nano ตามลำดับ จอแสดงผล OLED ขนาดเล็กเชื่อมต่อกับอินเทอร์เฟซบัส I2C ซึ่งเป็น PIN A4 และ A5 สำหรับ SDA และ SDL VCC และ GND ไปที่ 5V และ GND ของ Nano แน่นอน ที่สรุปการเดินสายดูปองท์ของเรา

ขั้นตอนที่ 4: Arduino Source Code

รหัสที่มา Arduino
รหัสที่มา Arduino

// เมโทรนอม, สำเนียงชั้นนำ, ชั้นเชิงภาพและเสียง - 2019 Peter Csurgay

#include #include #include #include #include "TimerOne.h" #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 #define OLED_RESET -1 // รีเซ็ตพิน # (หรือ -1 หากแชร์พินรีเซ็ต Arduino) แสดงผล Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, &สายไฟ, OLED_RESET); #define pin_neopixel 7 #define NUMPIXELS 8 #define BRIGHTNESS 32 Adafruit_NeoPixel พิกเซล = 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; บูลชั้นนำแทค = เท็จ; int pos = 0; int curVal = 0; int prevVal = 0; การตั้งค่าเป็นโมฆะ () { pixels.begin (); pinMode(pin_buzzer, เอาต์พุต); Timer1.initialize (1000000*60/bpm/2); Timer1.attachInterrupt (เสียงกระหึ่ม); โหมดพิน (CLK, INPUT_PULLUP); โหมดพิน (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(); } วงเป็นโมฆะ () { ถ้า (digitalRead (pin_switch) == ต่ำ) { ล่าช้า (100); ในขณะที่(digitalRead(pin_switch)==LOW); ล่าช้า (100); Timer1.detachInterrupt (); showGreenTacks(); ในขณะที่ (digitalRead (pin_switch)==HIGH) { if (curVal>prevVal) { tack+=1; if (tack>8) { if (leadingTack) แทค = 8; อื่น ๆ {leadTack = true; แทค = 1; } } } else if (curValprevVal) { bpm+=2; ถ้า (bpm>240) bpm = 240; } else if (curVal=100) display.print(" "); อื่น display.print(" "); display.print(bpm); display.display(); } โมฆะ buzztick () { ถ้า (bpmFirst == 0) { ปริมาณ int = 4; ถ้า (ชั้นนำแทค && pos==0) ปริมาณ = 8; สำหรับ (int i=0; i

แนะนำ: