مقدمـــــــة عن المشروع
لقد كان اردوينو نعمة للأشخاص الذين ليسوا من خلفية الإلكترونيات لبناء الأشياء بسهولة . لقد كانت أداة رائعة للنماذج أو لتجربة شيء رائع ، في هذا المشروع سنقوم ببناء بيانو صغير وممتع باستخدام الاردوينو .
هذا البيانو سهل إلى حد كبير مع ثمانية أزرار فقط و جرس . يستخدم وظيفة النغمة من الاردوينو لإنشاء أنواع مختلفة من ملاحظات البيانو على السماعة .
لتوسعة المشروع قليلاً أضفنا ميزة التسجيل في المشروع ، وهذا يتيح لنا تشغيل تسجيل لحن وتشغيله مرة أخرى بشكل متكرر عند الحاجة . صوت حق مثير للاهتمام ! لذلك دعونا نبدأ الان ….
متطلبات المشروع
Materials Required:
- Arduino Uno
- 16*2 LCD Display
- Buzzer
- Trimmer 10k
- SPDT switch
- Push button (8 Nos)
- Resistors (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)
- Breadboard
- Connecting wires
-
جميع المنتجات, مفاتيح وسويتشات
6 × 6 × 5 ملم مفتاح زر الضغط Tactile push button switch
لمحة سريعة
- مثالي للتطبيقات عبر الفتحات.
- تستخدم في مجالات المنتجات الإلكترونية والأجهزة المنزلية وغيرها.
- تصميم آلية عالية الدقة يوفر عملية حادة وعمر خدمة طويل.
- مدمجة وخفيفة الوزن وسهلة الحمل والتفكيك.
- الموصلية الكهربائية الجيدة.
SKU: AC023 -
-
-
-
-
-
-
-
-
-
-
بوردات ولوحات نحاسية, جميع المنتجات
لوح التجارب 830 نقطة لون ابيض Solderless Breadboard
لمحة سريعة
- لوحة التجارب mb102
- 830 نقطة بدون لحام
- مثالي لتجربة تصميم الدوائر في المختبرات
- متوافق مع المقاومة والثنائيات والترانزستورات ومصابيح LED والمكثفات وأنواع أخرى من المكونات الإلكترونية
- إحداثيات ملونة لسهولة وضع المكونات.
- تقبل مجموعة متنوعة من أحجام الأسلاك 20-29 AWG
SKU: AA071 -
مفاتيح وسويتشات, جميع المنتجات
مفتاح تحريك صغير SPDT slide switch 3 Pin
لمحة سريعة
يُعد Mini SPDT 3 Pin Slide Switch مفتاحًا صغير الحجم وموثوقًا، مصممًا للاستخدام في الدوائر الإلكترونية ومشاريع DIY. يتميز بحجمه المدمج وآلية Slide سلسة، مما يجعله مثاليًا للتركيب على الـ PCB، ومشاريع Arduino، والنماذج الأولية (Prototypes)، وتطبيقات التبديل ذات الجهد المنخفض.
مناسب للطلاب، والهواة، ومشاريع تطوير الإلكترونيات.
SKU: AC182
طريقة العمل والتوصيل
يمكن بناء مشروع البيانو الكامل على قمة اللوح مع بعض أسلاك التوصيل . يظهر الرسم التوضيحي للدوائر الذي يعرض طريقة عرض اللوح للمشروع أدناه .

ما عليك سوى اتباع مخطط الدائرة وتوصيل الأسلاك وفقًا لذلك ، وأزرار الضغط والجرس المستخدمة في وحدة PCB ولكن في الأجهزة الفعلية استخدمنا فقط المفتاح والجرس ، لا ينبغي أن يربكك كثيرًا لأنهما يمتلكان نفس نوع الإغلاق . يمكنك أيضًا الرجوع إلى الصورة أدناه للجهاز لإجراء توصيلاتك .

قيمة المقاومات من اليسار بالترتيب التالي ، 10k ، 560R ، 1.5k ، 2.6k ، 3.9 ، 5.6k ، 6.8k ، 8.2k و 10k. إذا لم يكن لديك نفس مفتاح DPST ، فيمكنك استخدام مفتاح التبديل العادي مثل المفتاح الموضح في مخطط الدائرة أعلاه .
عزف نغمات البيانو على اردوينو :
حسنًا ، قبل أن أبدأ في هذا الموضوع ، اسمحوا لي أن أوضح أنني مبتدئ مع النوتات الموسيقية أو البيانو ، لذا يرجى أن تسامحني إذا كان أي شيء مذكور تحت هذا العنوان هو رطانة .
نحن نعرف الآن أنه يمكننا استخدام وظيفة النغمات في الاردوينو لإنتاج بعض الأصوات ، ولكن كيف يمكننا تشغيل نغمات من ملاحظة معينة باستخدام نفس الشيء . من حسن حظنا وجود مكتبة تسمى “pitches.h” كتبها بريت هاجمان . تحتوي هذه المكتبة على جميع المعلومات المتعلقة بالتردد المكافئ لأي ملاحظة على البيانو . لقد فوجئت بمدى قدرة هذه المكتبة على العمل ولعب كل ملاحظة على البيانو تقريبًا ، فقد استخدمت نفس الشيء للعب نغمات البيانو مثل Pirates of Caribbean و Crazy Frog و Mario وحتى تيتانيك وبدا رائعين .
يحتوي مشروعنا على 8 أزرار ضغط فقط ، بحيث يمكن لكل زر تشغيل نوتة موسيقية واحدة فقط ، وبالتالي يمكننا تشغيل 8 نغمات فقط . لقد اخترت أكثر الملاحظات استخدامًا على البيانو ، ولكن يمكنك تحديد أي 8 أو حتى توسيع المشروع باستخدام المزيد من أزرار الضغط وإضافة المزيد من الملاحظات .
الملاحظات المحددة في هذا المشروع هي الملاحظات C4 و D4 و E4 و F4 و G4 و A4 و B4 و C5 والتي يمكن تشغيلها باستخدام الأزرار من 1 إلى 8 على التوالي .
الكــــــــود البرمجي
لتحميل الكود البرمجي اضغط هنا
#include <LiquidCrystal.h>
int notes[] = {262, 294, 330, 349, 392, 440, 494, 523}; // Set frequency for C4, D4, E4, F4, G4, A4, B4, C5
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; //Pins to which LCD is connected
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char button = 0;
int analogVal;
char REC = 0;
int recorded_button[200];
int pev_button;
int recorded_time [200];
char time_index;
char button_index = 0;
unsigned long start_time;
int note_time;
void setup() {
Serial.begin(9600);
pinMode (6, INPUT);
lcd.begin(16, 2); //We are using a 16*2 LCD display
lcd.print("Arduino Piano"); //Display a intro message
lcd.setCursor(0, 1); // set the cursor to column 0, line 1
lcd.print("-CircuitDigest"); //Display a intro message
delay(2000); //Wait for display to show info
lcd.clear(); //Then clean it
}
void loop()
{
while (digitalRead(6) == 0) //If the toggle switch is set in recording mode
{
lcd.setCursor(0, 0); lcd.print("Recording..");
lcd.setCursor(0, 1);
Detect_button();
Play_tone();
}
while (digitalRead(6) == 1) //If the toggle switch is set in Playing mode
{
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Now Playing..");
for (int i = 0; i < sizeof(recorded_button) / 2; i++)
{
delay((recorded_time[i]) * 10); //Wait for before paying next tune
if (recorded_button[i] == 0)
noTone(7); //user dint touch any button
else
tone(7, notes[(recorded_button[i] - 1)]); //play the sound corresponding to the button touched by the user
}
}
}
void Detect_button()
{
analogVal = analogRead(A0); //read the analog voltag on pin A0
pev_button = button; //remember the previous button pressed by the user
if (analogVal < 550)
button = 8;
if (analogVal < 500)
button = 7;
if (analogVal < 450)
button = 6;
if (analogVal < 400)
button = 5;
if (analogVal < 300)
button = 4;
if (analogVal < 250)
button = 3;
if (analogVal < 150)
button = 2;
if (analogVal < 100)
button = 1;
if (analogVal > 1000)
button = 0;
/****Rcord the pressed buttons in a array***/
if (button != pev_button && pev_button != 0)
{
recorded_button[button_index] = pev_button;
button_index++;
recorded_button[button_index] = 0;
button_index++;
}
/**End of Recording program**/
}
void Play_tone()
{
/****Rcord the time delay between each button press in a array***/
if (button != pev_button)
{
lcd.clear(); //Then clean it
note_time = (millis() - start_time) / 10;
recorded_time[time_index] = note_time;
time_index++;
start_time = millis();
}
/**End of Recording program**/
if (button == 0)
{
noTone(7);
lcd.print("0 -> Pause..");
}
if (button == 1)
{
tone(7, notes[0]);
lcd.print("1 -> NOTE_C4");
}
if (button == 2)
{
tone(7, notes[1]);
lcd.print("2 -> NOTE_D4");
}
if (button == 3)
{
tone(7, notes[2]);
lcd.print("3 -> NOTE_E4");
}
if (button == 4)
{
tone(7, notes[3]);
lcd.print("4 -> NOTE_F4");
}
if (button == 5)
{
tone(7, notes[4]);
lcd.print("5 -> NOTE_G4");
}
if (button == 6)
{
tone(7, notes[5]);
lcd.print("6 -> NOTE_A4");
}
if (button == 7)
{
tone(7, notes[6]);
lcd.print("7 -> NOTE_B4");
}
if (button == 8)
{
tone(7, notes[7]);
lcd.print("8 -> NOTE_C5");
}
}
















هل من الممكن أن اعمل بيانوا في جهاز المحاكاة وليس في الواقع