عناوين الدرس

عمل بيانو بسيط باستخدام اردوينو

مبتدئ

الهدف من المشروع هو عمل بيانو بسيط باستخدام الاردوينو يقوم باصدار الاصوات و النغمات بالضغط على المفاتيح

عمل-بيانو-بسيط-باستخدام-اردوينو

المكونات المطلوبة

 

arduino uno r3

Arduino Uno

10k Ω Resistors 1/2 w 1%

K Ohm Resistor 10

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

Piezo sounder

Piezo Sounder

Tactile Push Button Switch

Push Buttons

السماعه Piezo

 هي عبارة عن كريستال تسمى بيزوكريستال عند تعريضها لجهد كهربائي تقوم باصدار صوت، سنستخدمها في هذا المشروع لاصدر نغمات مختلفة كالبيانو

عمل-بيانو-بسيط-باستخدام-اردوينو

شرح الدارة

قم بتوصيل الدائرة كما هو موضح بالصورة :

عمل-بيانو-بسيط-باستخدام-اردوينو

سنقوم بعمل بيانو بسيط بإستخدام 8 مفاتيح من النوع PushButton، سيتم توليد النغمات المختلفة باستخدام الأردوينو وسماعة البيزو .  كل مفتاح يصدر صوت بنغمة ذو تردد مختلف.

عمل-بيانو-بسيط-باستخدام-اردوينو

الكود البرمجى

// butt_c --> pin 2
#define BUTT_C  2
// butt_d --> pin 3
#define BUTT_D  3
// butt_e --> pin 4
#define BUTT_E  4
// butt_f --> pin 5
#define BUTT_F  5
// butt_g --> pin 6
#define BUTT_G  6
// butt_a --> pin 7
#define BUTT_A  7
// butt_b --> pin 8
#define BUTT_B  8
// butt_h --> pin 9
#define BUTT_H  9
// speaker --> pin 13
#define SPEAKER  13

// variables to store the state of the buttons
int C = 0, D = 0, E = 0, F = 0, G = 0, A = 0, B = 0, H = 0;

//NOTES         'c'  , 'd',  'e',  'f',  'g', 'a',  'b',  'h'
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; //freq

int Cur_tone = 0;

void setup()
{
  pinMode(BUTT_C, INPUT);
  pinMode(BUTT_D, INPUT);
  pinMode(BUTT_E, INPUT);
  pinMode(BUTT_F, INPUT);
  pinMode(BUTT_G, INPUT);
  pinMode(BUTT_A, INPUT);
  pinMode(BUTT_B, INPUT);
  pinMode(BUTT_H, INPUT);
  pinMode(SPEAKER, OUTPUT);
}

void loop()
{
	C = digitalRead(BUTT_C);
	D = digitalRead(BUTT_D);
	E = digitalRead(BUTT_E);
	F = digitalRead(BUTT_F);
	G = digitalRead(BUTT_G);
	A = digitalRead(BUTT_A);
	B = digitalRead(BUTT_B);
	H = digitalRead(BUTT_H);

       // check if any button is being pressed
	if((C == HIGH) || (E == HIGH) || (G == HIGH) || (D == HIGH) || 
	   (F == HIGH) || (A == HIGH) || (B == HIGH) || (H == HIGH) )
	{ 
        // if a button is being pressed, check which one
		if (C == HIGH){
			Cur_tone = tones[0];
		} 

		if (E == HIGH){
			Cur_tone = tones[1];
		}

		if (G == HIGH){
			Cur_tone = tones[2];
		}

		if (D == HIGH){
			Cur_tone = tones[3];
		}

		if (F == HIGH){
			Cur_tone = tones[4];
		}

		if (A == HIGH){
			Cur_tone = tones[5];
		}

		if (B == HIGH){
			Cur_tone = tones[6];
		}

		if (H == HIGH){
			Cur_tone = tones[7];
		}

		digitalWrite(SPEAKER, HIGH);
		delayMicroseconds(Cur_tone);
		digitalWrite(SPEAKER, LOW);
		delayMicroseconds(Cur_tone);
	}
	else{                //switch off the speaker if no button is being pressed
	  digitalWrite(SPEAKER, LOW);
	}
}

شرح الكود:

في البداية نقوم بتعريف متغيرات لإستخدامها في تسجيل حالة الـ Push Buttons . ونقوم بالاعلان عن مصفوفة tones[] ، والتي سيتم تسجيل قيم الترددات عليها  لإستخدامها في توليد النغمات المختلفة عن طريق الـ Buzzer .

في الدالة setup() قمنا بتفعيل المنافذ الموصله مع المفاتيح كمدخل، والمنفذ الموصل مع الـ Buzzer كمخرج.

// variables to store the state of the buttons
int C = 0, D = 0, E = 0, F = 0, G = 0, A = 0, B = 0, H = 0;

//NOTES         'c'  , 'd',  'e',  'f',  'g', 'a',  'b',  'h'
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; //freq

int Cur_tone = 0;

void setup()
{
  pinMode(BUTT_C, INPUT);
  pinMode(BUTT_D, INPUT);
  pinMode(BUTT_E, INPUT);
  pinMode(BUTT_F, INPUT);
  pinMode(BUTT_G, INPUT);
  pinMode(BUTT_A, INPUT);
  pinMode(BUTT_B, INPUT);
  pinMode(BUTT_H, INPUT);
  pinMode(SPEAKER, OUTPUT);
}

ثم نقوم بقراءة حالة الـ Push Buttons وتخزينها، وتخزينها في المتغيرات التي تم الاعلان عنها سابقا :

void loop()
{
	C = digitalRead(BUTT_C);
	D = digitalRead(BUTT_D);
	E = digitalRead(BUTT_E);
	F = digitalRead(BUTT_F);
	G = digitalRead(BUTT_G);
	A = digitalRead(BUTT_A);
	B = digitalRead(BUTT_B);
	H = digitalRead(BUTT_H);

 نقوم بعملية التحقق من المفتاح الذي تم الضغط عليه. بعد ذلك يتم تسجيل قيمة معينة في متغير Cur_tone حسب المفتاح المضغوط عليه. ثم نقوم بتشغيل الـ Buzzer بتأخير زمني يعتمد على قيمة المتغير Cur_tone :

// check if any button is being pressed
	if((C == HIGH) || (E == HIGH) || (G == HIGH) || (D == HIGH) || 
	   (F == HIGH) || (A == HIGH) || (B == HIGH) || (H == HIGH) )
	{ 
        // if a button is being pressed, check which one
		if (C == HIGH){
			Cur_tone = tones[0];
		} 

		if (E == HIGH){
			Cur_tone = tones[1];
		}

		if (G == HIGH){
			Cur_tone = tones[2];
		}

		if (D == HIGH){
			Cur_tone = tones[3];
		}

		if (F == HIGH){
			Cur_tone = tones[4];
		}

		if (A == HIGH){
			Cur_tone = tones[5];
		}

		if (B == HIGH){
			Cur_tone = tones[6];
		}

		if (H == HIGH){
			Cur_tone = tones[7];
		}

		digitalWrite(SPEAKER, HIGH);
		delayMicroseconds(Cur_tone);
		digitalWrite(SPEAKER, LOW);
		delayMicroseconds(Cur_tone);
	}
	else{                //switch off the speaker if no button is being pressed
	  digitalWrite(SPEAKER, LOW);
	}

استخدم مفاتيح أخرى لإصدار نغمات مختلفة .