في هذا المشروع سنقوم بتعلم كيفية استخدام الأردوينو لقياس مستوى الصوت، وسيتم توضيح مستوى الصوت على مجموعة من الـ LEDs.
المكونات المطلوبة
LM386 :
هو عبارة عن دارة متكاملة تحتوي على مكبر عمليات (Operational Amplifier) ،يقوم بتكبير الاشارة الصوتية القادمة اليه من المايكروفون
نقوم بقراءة هذه الإشارة الصوتية بعد تكبيرها عن طريق الأردوينو، الذي بدوره يقوم بتشغيل الـ LEDs حسب شدة الإشارة الصوتية.
توصيل الدارة
قم بتوصيل الدارة كما هو موضح بالصورة التالية :
سنقوم ببرمجة الأردوينو بحيث يقوم بقراءة الإشارة الصوتية التي يلتقطها المايكروفون بعد تكبيرها من خلال LM386، ثم يوضح شدة الصوت على مجموعة من الـ LEDs.
الكود البرمجي
#define LED1 3 #define LED2 4 #define LED3 5 #define LED4 6 #define LED5 7 #define LED6 8 int value; void setup() { //set pins attached to LEDs as outputs pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); } void loop() { value = analogRead(5); //glow the LEDs depending on the ammount of sound detected by the electret if (value > 455 && value <555) {//glow first LED Clear(4); Glow(4); } else if (value > 378 && value < 624) {//glow 2nd LED Clear(5); Glow(5); } else if (value > 311 && value < 693) {//glow 3rd LED Clear(6); Glow(6); } else if (value > 244 && value < 762) {//glow 4th LED Clear(7); Glow(7); } else if (value > 177 && value < 831) {//glow 5th LED Clear(8); Glow(8); } else if (value < 177 || value > 831) {//glow 6th LED Clear(9); Glow(9); } } void Glow(int initial)//function to glow LEDs { for(int i=3;i<initial;i++) digitalWrite(i,HIGH); } void Clear(int initial)//function to clear LEDs { for(int i=initial;i<9;i++) digitalWrite(i,LOW); }
شرح الكود :
في البداية نقوم بتسمية منافذ الأردوينو المستخدمة في المشروع. ونقوم بالإعلان عن المتغير value الذي سيستخدم في تخزين قيمة قراءة الإشارة الصوتية :
#define LED1 3 #define LED2 4 #define LED3 5 #define LED4 6 #define LED5 7 #define LED6 8 int value;
في الدلة ()setup ، نقوم بضبط الإعدادات اللازمة مثل ضبط المنافذ الموصله مع الـ LEDs كمخرج :
void setup() { //set pins attached to LEDs as outputs pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); }
في الدالة ()loop ، نقوم بقراءة الإشارة الصوتية الناتجة عن المايكروفون بعد تكبيرها بواسطة LM386 :
value = analogRead(5);
بعد ذلك نقوم بإختبار القيمة المقاسه وإعتمادا على هذه القيمة نقوم بإضاءة الـ LEDs بإستخدام الدالتين Clear وGlow للتعبر عن مدى ارتفاع أو انخفاض شدة الإشارة الصوتية :
if (value > 455 && value <555) {//glow first LED Clear(4); Glow(4); } else if (value > 378 && value < 624) {//glow 2nd LED Clear(5); Glow(5); } else if (value > 311 && value < 693) {//glow 3rd LED Clear(6); Glow(6); } else if (value > 244 && value < 762) {//glow 4th LED Clear(7); Glow(7); } else if (value > 177 && value < 831) {//glow 5th LED Clear(8); Glow(8); } else if (value < 177 || value > 831) {//glow 6th LED Clear(9); Glow(9); }
نستخدم الدالة Glow لإضاءة الـ LEDs تدريجيا حسب قيمة شدة الصوت :
void Glow(int initial)//function to glow LEDs { for(int i=3;i<initial;i++) digitalWrite(i,HIGH); }
نستخدم الدالة Clear لإطفاء الـ LEDs تدريجيا حسب قيمة شدة الصوت :
void Clear(int initial)//function to clear LEDs { for(int i=initial;i<9;i++) digitalWrite(i,LOW); }