آموزش ساخت پیانو با آردوینو | آموزش ساخت پیانوی کوچک با استفاده از آردوینو
آموزش ساخت پیانو با آردوینو | در این راهنمای جامع از خانه رباتیک ایران، نحوه ساخت یک پیانوی دیجیتال کوچک با بهرهگیری از تکنولوژیهای آردوینو، بازر، و کلیدهای فشاری شرح داده میشود. این پروژه نمونهای عالی برای تمرین مدارهای دیجیتال و برنامهنویسی میباشد. در ادامه با خانه رباتیک ایران همراه باشید.
قطعات و تجهیزات مورد نیاز برای ساخت پیانو
قطعه | توضیحات |
---|---|
آردوینو UNO | برد میکروکنترلر مبتنی بر معماری ATMega328P، به عنوان مرکز کنترل پروژه. وظیفه دریافت ورودیهای کلیدها، تولید نوتهای موسیقی و کنترل خروجیها را بر عهده دارد. |
بازر (Piezo Buzzer) | قطعهای است که در صورت دریافت سیگنالهای صوتی، نوتهای موسیقی را پخش میکند. در این پروژه، نوتهای موسیقی بر اساس فرکانسهای متفاوت تولید میشود. |
کلیدهای فشاری (Button Switches) | دکمههایی که کاربر با فشار دادن آنها، نت مورد نظر را فعال میکند. در این پروژه، ۷ عدد کلید برای نوتهای موسیقی در نظر گرفته شده است. |
سیم جامپر (Jumper Wires) | سیمهای رابط برای اتصالات بین قطعات مختلف به پینهای آردوینو. این سیمها نقش مهمی در مونتاژ سریع و صحیح مدار دارند. |
برد بورد (Breadboard) | برد آزمایشگاهی بدون نیاز به لحیمکاری، برای اتصال اجزاء به صورت آزمایشی و سریع. |
نحوه اتصال مدار
مرحله ۱: اتصال کلیدهای فشاری
هر کلید فشاری یکی از پینهای دیجیتال آردوینو را به عنوان ورودی دریافت میکند.
پینهای کلیدهای فشاری به ترتیب به پینهای D4 تا D10 متصل میشوند.
یک طرف هر کلید به پین مربوطه و طرف دیگر آن به +۵V (ولتاژ تغذیه) وصل شده است، و برای اطمینان از فعال بودن حالت HIGH، از مقاومتهای داخلی (پول-اپ) استفاده میشود یا به صورت دستی مقاومت pull-down اضافه میشود.
مرحله ۲: اتصال بازر
پایه مثبت بازر به پین دیجیتال D11 آردوینو وصل میشود.
پایه منفی بازر به زمین (GND) متصل است؛ یا از طریق پین GND آردوینو، یا به صورت مستقیم به منفی منبع تغذیه نمونه. اما در اغلب پروژهها، پایه منفی به GND متصل میشود.
مرحله ۳: اتصال منبع تغذیه
آردوینو به صورت مستقیم از طریق کابل USB یا منبع تغذیه خارجی تغذیه میشود.
اطمینان حاصل کنید که ارتباطات درست و محکم است و قطعات آسیبپذیر به دقت وصل شده باشند.
توضیحات جامع درباره کد برنامه
در کد، از کتابخانه Tone استفاده میشود؛ این کتابخانه اجازه میدهد نوتهای موسیقی با فرکانسهای مشخص تولید شوند. قبل از شروع برنامه، لازم است این کتابخانه روی Arduino IDE نصب شود:
به منوی Sketch (اسکچ) بروید.
گزینه Include Library (در نظر گرفتن کتابخانه) > Manage Libraries (مدیریت کتابخانهها).
در قسمت جستجو، Tone را تایپ کنید و نصب کنید.
ساختار کلی کد:
تعریف مقادیر فرکانس برای هفت نت موسیقی.
تعیین پینهای مربوط به کلیدهای فشاری و بازر.
پیکربندی ورودی/خروجیها در تابع setup().
در حلقه loop(): بررسی حالت کلیدهای فشاری، و در صورت فشرده شدن، نوت مربوط را پخش میکند و چراغ LED (در صورت استفاده) روشن میشود.
توصیف عملکرد مدار و کد
با فشردن هر کلید، برنامه نوت مربوط به آن کلید را تولید میکند و صدای آن نوت از طریق بازر اجرا میشود. همزمان، یک LED روشن میشود تا عملیات فعال بودن نوت به کاربر نشان داده شود. زمانی که هیچ کلیدی فشرده نباشد، پخش صدا متوقف میشود و LED خاموش میگردد.
نکات مهم
دقت کنید تماسهای اتصالات محکم باشد تا از ایجاد خطاهای تماس جلوگیری شود.
برای تنظیم دقیقتر نتها، میتوانید نتهای موسیقی را بر اساس نیاز خود تغییر دهید.
از مقاومتهای داخلی پینهای کلید استفاده کنید یا مقاومتهای Pull-down خارجی برای جلوگیری از نوسانهای نامطلوب بهره ببرید.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ ۹۸ ۹۹ ۱۰۰ ۱۰۱ ۱۰۲ ۱۰۳ ۱۰۴ ۱۰۵ ۱۰۶ ۱۰۷ ۱۰۸ ۱۰۹ ۱۱۰ ۱۱۱ ۱۱۲ ۱۱۳ |
#define T_C 262 #define T_D 294 #define T_E 330 #define T_F 349 #define T_G ۳۹۲ #define T_A 440 #define T_B 493 const int C = ۱۰; const int D = ۹; const int E = ۸; const int F = ۷; const int G = ۶; const int A = ۵; const int B = ۴; const int Buzz = ۱۱; const int LED = ۱۳; void setup() { pinMode(LED, OUTPUT); pinMode(C, INPUT); digitalWrite(C,HIGH); pinMode(D, INPUT); digitalWrite(D,HIGH); pinMode(E, INPUT); digitalWrite(E,HIGH); pinMode(F, INPUT); digitalWrite(F,HIGH); pinMode(G, INPUT); digitalWrite(G,HIGH); pinMode(A, INPUT); digitalWrite(A,HIGH); pinMode(B, INPUT); digitalWrite(B,HIGH); digitalWrite(LED,LOW); } void loop() { while(digitalRead(C) == LOW) { tone(Buzz,T_C); digitalWrite(LED,HIGH); } while(digitalRead(D) == LOW) { tone(Buzz,T_D); digitalWrite(LED,HIGH); } while(digitalRead(E) == LOW) { tone(Buzz,T_E); digitalWrite(LED,HIGH); } while(digitalRead(F) == LOW) { tone(Buzz,T_F); digitalWrite(LED,HIGH); } while(digitalRead(G) == LOW) { tone(Buzz,T_G); digitalWrite(LED,HIGH); } while(digitalRead(A) == LOW) { tone(Buzz,T_A); digitalWrite(LED,HIGH); } while(digitalRead(B) == LOW) { tone(Buzz,T_B); digitalWrite(LED,HIGH); } noTone(Buzz); digitalWrite(LED,LOW); } |
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
#define T_C 262 #define T_D 294 #define T_E 330 #define T_F 349 #define T_G 392 #define T_A 440 #define T_B 493 |
توضیح: این قسمت، تعریف فرکانسهای نتهای موسیقی (به هرتز) است. هر #define مقدار ثابت مربوط به فرکانس نوت موسیقی خاص را نگهداری میکند.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ |
const int C = ۱۰; const int D = ۹; const int E = ۸; const int F = ۷; const int G = ۶; const int A = ۵; const int B = ۴; const int Buzz = ۱۱; const int LED = ۱۳; |
توضیح: این قسمت، تعریف پینهای Arduino است:
کلیدهای فشاری (کلیه دکمهها: ۱۰، ۹، ۸، ۷، ۶، ۵، ۴)
Buzz برای بوزر در پین ۱۱
LED برای نشانگر LED در پین ۱۳
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ |
void setup() { pinMode(LED, OUTPUT); pinMode(C, INPUT); digitalWrite(C,HIGH); pinMode(D, INPUT); digitalWrite(D,HIGH); pinMode(E, INPUT); digitalWrite(E,HIGH); pinMode(F, INPUT); digitalWrite(F,HIGH); pinMode(G, INPUT); digitalWrite(G,HIGH); pinMode(A, INPUT); digitalWrite(A,HIGH); pinMode(B, INPUT); digitalWrite(B,HIGH); digitalWrite(LED,LOW); } |
توضیح: توابع راهاندازی پینها:
پینهای کلید به عنوان ورودی تنظیم شدند.
digitalWrite(PIN, HIGH) برای پینهای کلید به منظور فعالسازی مقاومتهای داخلی pull-up استفاده شده است.
پین LED به عنوان خروجی تنظیم شده و در ابتدا خاموش (LOW) است.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ |
void loop() { while(digitalRead(C) == LOW) { tone(Buzz,T_C); digitalWrite(LED,HIGH); } while(digitalRead(D) == LOW) { tone(Buzz,T_D); digitalWrite(LED,HIGH); } while(digitalRead(E) == LOW) { tone(Buzz,T_E); digitalWrite(LED,HIGH); } while(digitalRead(F) == LOW) { tone(Buzz,T_F); digitalWrite(LED,HIGH); } while(digitalRead(G) == LOW) { tone(Buzz,T_G); digitalWrite(LED,HIGH); } while(digitalRead(A) == LOW) { tone(Buzz,T_A); digitalWrite(LED,HIGH); } while(digitalRead(B) == LOW) { tone(Buzz,T_B); digitalWrite(LED,HIGH); } noTone(Buzz); digitalWrite(LED,LOW); } |
توضیح: این حلقه اصلی برنامه است و برای هر کلید، اگر فشرده شد (ورودی LOW است، چون pull-up فعال است)،:
تابع tone() و فرکانس نت مربوطه را پخش میکند روی بازر.
LED را روشن میکند.
وقتی کلیدی فشرده نیست، حلقه مربوطه خارج میشود، و در پایان noTone() با توقف صدای بوزر و خاموش کردن LED اجرا میشود.
مرحله ۴: بازی!
و این کافی است! حالا باید بتوانید روی کلیدها ضربه بزنید و نت مربوطه را که از طریق بازر پخش میشود، بشنوید. اگر نت دقیق نباشد، میتوانید مقدار نت در اسکچ Arduino را تنظیم کنید تا گام مورد نظر را ایجاد کنید. همچنین میتوانید مقیاسهایی را که پخش میشود تغییر دهید یا مقیاس اختصاصی خود را بسازید! اگر پیانوی خودتان را ساختید، لطفاً نظر بدهید و چند عکس و ویدیو به نمایش بگذارید. دوست داریم سازهای خلاقانه ببینیم!
ممنونم که مطالعه کردید!