مشروع SOS Morse Code بالاردوينو

مشروع اردوينو إشارة الاستغاثة بإستخدام شفرة مورس SOS Morse code

مشروعنا اليوم هو عن برمجة الاردوينو ليقوم بتنفيذ إشارة الاستغاثة بإستخدام شفرة مورس SOS Morse code وتطبيقها صوتياً وضوئياً. الهدف من المشروع هي التعرف على اكواد جديدة تمكنك من تنفيذ أفكار رائعة ومختلفة باستخدام الأردوينو. وهذا المشروع هو رقم 4 فى “سلسلة تعلم الأردوينو للمبتدئين” التي أطلقها موقع “الكترونيك بابل Electronic Bubble” وتستطيع متابعتها من دليل الأردوينو من هنا .

 

اولاً: ما هي شفرة مورس Morse؟

هي شفرة حرفية يتم استخدامها لإرسال المعلومات التلغرافية. وفكرتها تقوم على رمزين؛ داش dash (-) و دوت dot (.) وكل حرف ورقم له ترميز بالداش والدوت، مع استخدام المسافات بين الحروف والكلمات والجمل. وذلك للتأكيد على اكتمال الكلمة أو الجملة.  كما موضح في الصورة التالية ولمزيد عن شفرة مورس شاهد المقال ده على ويكيبيديا

شفرة مورس Morse code

 

 

تمام.. ولكن كيف سنقوم بتنفيذ إشارة الاستغاثة باستخدام هذه الشفرة؟ شفرة الاستغاثة يتم التعبير عنها بثلاث حروف  SOS وهي اختصار للجملة الانجليزية ( Save Our Souls) وتعني بالعربية (انقذوا ارواحنا). وهي إشارة معروفة عالمياً يتم استخدامها بين السفن لطلب الإستغاثة في حالة الطوارئ،.. أو في حالة وجود عطل في احد السفن.

 

إشارة الاستغاثة في شفرة مورس

وفي مشروعنا اليوم سنقوم بتنفيذ اشارة الاستغاثة باستخدام هذه الطريقة.

SOS في شفرة مورس يتم ترجمتها الى هذا المقطع (…  – – –  …) حيث (S) في شفرة مورس يتم التعبير عنه بـ () وهي ثلاثة dots وحرف( O) يتم التعبير عنه بـ (– – –) وهي ثلاثة dash..

وهذا المقطع نستطيع تطبيقه من خلال إخراج اشارة رقمية على مصدر ضوئي (مثل الـ LED) او اخراجه على هيئة نغمة على مصدر صوتي (مثل الـ Speaker او Buzzer).

 

كيفية التنفيذ

فكرة تنفيذ الإشارة تعتمد على أن  النقطة (dot) سوف تكون عبارة تشغيل الليد لمدة 150 ملي ثانية ويفصل. والشرطة (dash) سوف تكون عبارة عن تشغيل الليد لمدة 400 ملي ثانية (فترة اكبر من  dot) ثم يفصل. ألقي نظرة على شكل الإشارة الرقمية النهائي الذي سوف يتم إخراجها على الليد.

إشارة رقمية لإشارة الاستغاثة sos بشفرة مورس

 

دعنا نبدأ .. مشروعنا

سوف اقوم بتقسيم المشروع الى مرحلتين؛ في المرحلة الأولى سوف اقوم معك ببرمجة الأردوينو لتنفيذ “إشارة الاستغاثة” بشكل ضوئي فقط. ثم بعد ذلك.. في المرحلة الثانية سوف اقوم بإضافة مصدر صوتي (مثل: Buzzer) وسوف اعدل معك على الكود .. لتصبح معانا الإشارة بعد ذلك منفذة ضوئياً وصوتياً.

نبدأ بالمرحلة الأولى: تنفيذ اشارة الاستغاثة على مصدر ضوئي فقط

جزء التوصيلات Hardware

إمشروع اردوينو إشارة الاستغاثة بإستخدام شفرة مورس SOS Morse code

 

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

Arduino UNO
Breadboard
Jumper wires
Red LED
Buzzer or Speaker 8Ω
2*220‎Ω Resistors

 

شرح التوصيلات

قمت بتوصيل طرف الليد الموجب مع مقاومة 220 اوم ثم بالـ pin 8 بالاردوينو. وقمت بتوصيل الطرف السالب له بالـ GND/ Ground. إذا واجهتك مشكلة في توصيل الليد شاهد مشروع Blinking بالاردوينو حيث قمت بتوضيح فيه خطوات التوصيل.

بعد ذلك.. قم بتوصيل لوحة الاردوينو بجهاز الكمبيوتر  لنبدأ عملية البرمجة

 

جزء البرمجة Programming

في المشاريع السابقة عودتك بأني بعرض لك الكود ثم اقوم بشرحه .. هذه المرة.. عايزك تحاول تفكر كيف سوف يكون شكل البرنامج بعد ما وضحت لك شكل الإشارة الرقمية في الصورة السابقة اللي هتخرج على الليد.
انا وضحت لك ان اشارة الاستغاثة تتكون من ثلاث مقاطع … صحيح ؟

 

المقطع الأول

يتكون من ثلاثة Dots والـ dots سوف تكون عبارة عن إشارة رقمية تتكون من High وتأخير لمدة 150ms ثم LOW وتأخير لمدة 100ms.

إذاً.. الـ dot في البرنامج سوف تكون بهذا الشكل:

 digitalWrite(Led, HIGH);
 delay(150);
 digitalWrite(Led, LOW);
 delay(100);

 

تمام.. ولكن في المقطع الأول سوف احتاج الى تكرار هذه الأوامر ثلاث مرات لتنفيذ ثلاث dots… في الحالة ده عندك طريقتين .. الأولى هي التي تشغل ذهنك الأن.. وهي كتابة هذه الأوامر ثلاث مرات متتالية.. هذه الطريقة سوف تعمل ولا يوجد بها مشاكل، ولكن لا تستخدمها؛ وذلك لأنه يوجد أمر يغنيك عن كتابة الأوامر بهذا الشكل، وهذه هي الطريقة الثانية والأمر الذي نتحدث عنه هو أمر for .

 for (int i=0; i<3; i++) {  }

 

كل ما عليك هو كتابة الأوامر التي تريد تكرارها داخل القوسين { }. أما في بداية الأمر بعد for سوف تجد قوسين بهذا الشكل () ، هذه الأقواس يتم كتابة فيها شروط عملية التكرار وتحدد من خلالها .. انت محتاج تكرر الأوامر كم مرة..

كل ما عليك هو كتابة الأوامر التي تريد تكرارها داخل القوسين { }. أما في بداية الأمر بعد for سوف تجد قوسين بهذا الشكل ( ) ، هذه الأقواس يتم كتابة فيها شروط عملية التكرار وتحدد من خلالها .. انت محتاج تكرر الأوامر كم مرة..

int هي لتعريف متغير اسمه y.

;i=0 هو قيمة البداية .. بمعنى انه هيبدأ يكرر الأوامر من الصفر ثم 1 ثم 2 .. الخ.

;i<3 هي عدد التكرار الذي سوف يصل له .. ثم يتوقف عن عملية التكرار.

++i هي لتحديد نوع التكرار تصاعدي او تنازلي.

 

لو فيه اي جزئية ليست مفهومة بالنسبة لك من فضلك اترك لي بها تعليق بالأسفل وسوف اقوم بالرد عليك.

بعد الأنتهاء من آمر for سوف يكون بهذا الشكل:

for (int y=0; y<3; y++) { 
 digitalWrite(Led, HIGH);
 delay(150);
 digitalWrite(Led, LOW);
 delay(100);
 }

إذا أمر for ومجموعة الأوامر التي بداخله سوف يحقق لي الثلاث dots،… بعد كتابة أوامر المقطع الأول من إشارة الاستغاثة..

المقطع الاول من اشارة الاستغاثة بشفرة مورس

 

 

الآن انتقل معك إلى المقطع الثاني. ولكن قبل ذلك سوف اقوم بعمل تأخير 100 ملي ثانية في الكود قبل الانتقال إلى المقطع الثاني،.. ليكون انتهاء المقطع الأول وبداية الثاني واضحة بالنسبة لنا.

 

المقطع الثاني
يتكون المقطع الثاني من إشارة الاستغاثة من ثلاث dash، وسوف نقوم بتمثيلها بإضاءة ليد لمدة أطول من dots. بمعنى ان إضاءة الليد في dots كان يستمر لـ 150 ملي ثانية اما في dash هنخليها 400 ملي ثانية ثم تطفئ لمدة 100 ملي ثانية، والبرنامج هيكون شكله كالتالي:

digitalWrite(Led, HIGH);
delay(400);
digitalWrite(Led, LOW);
delay(100);

ولاني سوف احتاج الى تكرارها ثلاث مرات لتحقق لي ثلاث dashes فسوف أقوم بوضع هذه الأوامر في أمر for:

For (int i=0; i<3; i++){
	digitalWrite(Led, HIGH);
delay(400);
digitalWrite(Led, LOW);
delay(100);
	}

و سوف يكون شكلها النهائي كما موضح في الصورة التالية، وسوف ضيف ليها ايضاً تأخير بين المقطع الثاني والثالث,, ليكون لديك فرصة انك تلاحظ المقاطع بشكل واضح أثناء تطبيقها على الليد.

المقطع الثاني من اشارة الاستغاثة بشفرة مورس

 

المقطع الثالث
لأن المقطع الثالث هو نفس المقطع الأول فسوف اقوم بكتابة أوامر المقطع الأول مرة ثانية. ليصبح في النهاية الإشارة كما في الصورة التالية

 

إشارة رقمية لإشارة الاستغاثة sos بشفرة مورس

ملحوظة: انا قمت في الكود بعمل تأخير 5000 ملي ثانية اي 5 ثواني في نهايته، وذلك لأن الكود سوف يتم تنفيذه بشكل متكرر داخل دالة ()Void loop.. و سوف يجعل إشارة الاستغاثة تتكرر بشكل دائم .. فوضعت تأخير 5000 ملي ثانية في نهاية الكود ليصبح كفاصل بين كل إشارة والأخرى.

شكل الكود كاملاً..

الكود

const int Led = 8;

void setup(){
 pinMode(Led, OUTPUT);
}

void loop(){
 // 3 dots
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 delay(150);
 digitalWrite(Led, LOW);
 delay(100); 
 }
 delay(100);
 
 // 3 dashes
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 delay(400);
 digitalWrite(Led, LOW);
 delay(100);
 }
 delay(100);

 // 3 dots again
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 delay(150);
 digitalWrite(Led, LOW);
 delay(100);
 }
 delay(5000);
}

 

المرحلة الثانية

في المرحلة الأولى قمت بتنفيذ اشارة الاستغاثة ضوئياً فقط، في المرحلة الثانية سوف نقوم بإضافة المصدر الصوتي لتنفيذها ضوئياً وصوتياً..
ولإضافة مصدر صوتي سوف اقوم باستخدام Buzzer او سماعة Speaker 8Ω. تابع رسم التوصيلات في الصورة التالية

مشروع اردوينو إشارة الاستغاثة بإستخدام شفرة مورس SOS Morse code

 

شرح التوصيلات

توصيلات الليد هي نفس توصيلاته بالمرحلة الأولى أما بالنسبة لتوصيلات الـ Buzzer / Speaker فسوف تكون كالتالي:

قمت بتوصيل أحد اطراف السماعة او الـ Buzzer بمقاومة 220 اوم ثم بالpin رقم 9 بالاردوينو. وقمت بتوصيل الطرف الأخر له/ لها بالـ ground.

 

التعديل على الكود

const int Led = 8;
 const int buzzer = 9;

void setup()
{
 pinMode(Led, OUTPUT);
 pinMode(buzzer, OUTPUT);
}

void loop()
{
 // 3 dots
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 tone(buzzer, 1200);
 delay(150);
 digitalWrite(Led, LOW);
 noTone(buzzer);
 delay(100); 
 }
 delay(100);
 
 // 3 dahs
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 tone(buzzer, 1200);
 delay(400);
 digitalWrite(Led, LOW);
 noTone(buzzer);
 delay(100);
 }
 delay(100);

 // 3 dots again
 for (int x=0; x<3; x++) {
 digitalWrite(Led, HIGH);
 tone(buzzer, 1200);
 delay(150);
 digitalWrite(Led, LOW);
 noTone(buzzer);
 delay(100);
 }
 delay(5000);
}

قمت بتعديل الكود .. والغرض هو إخراج نغمة على Buzzer / Speaker تعمل بنفس الـ Sequence اي تسلسل إشارة الاستغاثة. حيث قمت بإخراج نعمة ترددها 1200Hz وذلك من خلال أمر tone() الذي يتيح لي ذلك.

امر tone(pin, frequency) يتم في داخله كتابة:
pin وهو الطرف الي هطبق عليه الخرج، وفي حالتنا كتابنا buzzer وهو يعبر عن الطرف او pin رقم 9.
frequency وهو التردد الذي تريد إخراجه على pin.

ملحوظة

  • أمر tone() يستخدم مع مخارج PWM، وهي 3, 5, 6, 9, 10 و 11 باردوينو اونو. ويمكنك التعرف عليها من خلال التكوين الداخلي للإردوينو اونو من هنا.
  • لوقف الأمر tone فانه يتم استخدام معه الأمر noTone ويتم تحديد داخله الطرف، مثلما قمت في الكود الخاص بمشروعنا اليوم.

اتركك مع التجربة العملية للمشروع من خلال الفيديو التالي، لو واجهت اي صعوبه في فهم اي جزئية من فضلك اترك تعليق بالاسفل وسوف اقوم بالرد عليك.  وانتظروني ان شاء الله في المشروع القادم.. في سلسلة تعلم الأردوينو للمبتدئين. مشاهدة ممتعة ?

 

فيديو: للتجربة العملية لمشروع SOS morse code بالاردوينو

التعليقات

أترك تعليق..

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.