اهلا بك

الكاتب

مرحبا بكم

البحث فى المدونه

اشترك ليصلك كل جديد

احصل على كل جديد فى عالم التدوين لحظه بلحظه اشترك الان

الاثنين، 23 فبراير 2015

برمجة حساس تحديد الاهتزازات

برمجة حساس تحديد الاهتزازات


 00
س
لسلة برمجة المستشعرات الاليكترونية مهمة جدا في برمجة الروبوتات،
بحيث أنها تمثل الحواس التي من خلالها يمكن للروبوت التفاعل مع محيطه.
يمكن أن تجعل روبوتك يحس بالاهتزازت كالطرق على الباب أو الطاولة أو
أي شي آخر صلب عن طريق مستشعر بسيط جدا ومتواجد في كثير من الأجهزة.

 تعريف 

مستشعر الاهتزاز (أو الطقطقة) (knock sensor أو Piezo) عبارة عن مركب اليكتروني بسيط جدا
 يمكن استعماله كمولد لنوتات صوتية أو كمستشعر للاهتزاز.

تجدر الاشارة إلى أن مستشعر الاهتزاز يتميز بالقطبية، يعني أنه غالبا ما يكون مزودا
 بمربط أحمر وآخر أسود لتسهيل عملية تركيبه (أعني التمييز بين قطبه السالب وقطبه الموجب
أو 5 فولط واﻷرضية).



تفكر
  
"هل تفكرت يوما في نفسك، أعني كيف تشعر بالاهتزاز مثلا؟" سؤال بسيط،
لكن ففي بساطته عجب. لست أنت أيها الإنسان وحدك من زودت بهذه التقنية
 ممن أتقن كل شيء خلقه،
بل الكثير من المخلوقات لها قدرة فائقة على الشعور بالاهتزاز بل والتواصل عن 
طريق لغة الاهتزازات. 
خذ على سبيل المثال "العنكبوت”، عند وقوع أي فريسة في شبكة العنكبوت 
فإنها تتجه نحو فريستها
 بالاعتماد على اهتزاز خيوط الشبكة. قد تقول "إيه لكن هذه سهلة!”، 
فهل تستطيع صنع روبوت قادر
على التوجه نحو مركز الاهتزاز مثلا؟؟؟
 02
يمكن للضفدع ذي العين الحمراء أن يتواصل مع أقرانه عن طريق هز أغصان الشجرة.
حيث أن ذكور هذه الضفادع تطقطق برجليها الخلفيتيتن أغصان الشجرة 12 مرة في الثانية
لتنبه المنافسين من عدم دخول محيطهم.

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

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

أنواعها  
00.jpg












  


كيف تركب في الروبوت؟
00.jpg







غالبا ما يستعمل هذا المستشعر ﻹصدار نوتات صوتية (أو قل موسيقية)
 تعبر عن حالة ما للجهاز. فمثلا تجد جهاز الحاسوب (خصوصا القديم منها)
 مزودا بواحد من هذه المستشعرات،
وانتبه عندما تريد تشغيل الحاسوب فستسمع نوتات صوتية متفرقة لها معان 
قل ما يعرفها الناس.
من بين هذه النوتات: نوتة يصدرها الحاسوب عند إيجاده للذاكرة وأخرى 
عند إيجاده للشاشة أو لبطاقة الغرافيكس وهكذا...
  


اﻷجزاء الرئيسية

لامتحان هذا المستشعر سنحتاج للتالي:  


    1. بطاقة Arduino
    2. مستشعر الاهتزاز (Piezo sensor)
    3. أسلاك كهربائية (يمكنك الحصول عليها من حاسوب قديم مثلا)
    4. مقاومة كهربائية (1MegaOhm) أي 1000 كيلوأوم
    5. صماما ثنائيا ضوئيا (LED)  

تركيب الدارة الكهربائية 
00.png




أرأيت؟ اﻷمر بسيط جدا يا حبيبي؟؟؟ ما عليك إلا أن تصل السلك اﻷسود للمستشعر
 بالمربط GND للبطاقة والسلك اﻷحمر بالمربط التناظري Analog 0.
صل أيضا مربطي المقاومة بالمربط GND للبطاقة والمربط التناظري
Analog 0 كما ترى في الصورة.

ربما تساءلت عن الغاية وراء استعمال المقاومة! إيه، المقاومة مركبة على التوازي
 مع المستشعر لحماية المربط التناظري للبطاقة من التلف إذا ما قام المستشعر
 بانتاج تيار كهربائي قوي عند تنشيطه.
04 
يمكنك أن تزيل الغطاء البلاستيكي اﻷسود للمستشعر،
سيكون أحسن إن فعلت ذلك لا سيما إذا أردنا أن نبرمجه 
على أنه مستشعر الاهتزاز،
أما إذا أردت أن تبرمجه على أنه منتج لنوتات صوتية فلابأس 
أن تترك الغطاء ﻷنه سيساعد على تكبير الصوت.
  

آلية عمل المستشعر 

النموذج الذي سنستعمله اليوم يستطيع تحديد اهتزازات محددة كالضرب على بطاقة Arduino
أو الجهاز المركب فيه. لا أدري هل يستطيع أن يستشعر الهزات اﻷرضية كالزلزال أم لا!!! المهم،
 عندما تجرب ذلك أخبرنا من فضلك...   


برمجة

اسمعني جيدا! عندما نذكر كلمة تناظري Analog نعني به عكس رقمي digital،
 يعني أن النظام الرقمي يكون إحدى الحالتين (0 أو 1، صح أو خطأ،
0 فولط أو 5 فولط، نعم أو لا،
 ON أو OFF ….) أما النظام التناظري فيعطيك الكثير من الحالات
(مثلا جميع القيم بين 0 فولط و 5 فولط
أو جميع الأرقام بين 7 و 100 مثلا).

لماذا هذه الثرثرة كلها؟ فقط لنقول لك أن مستشعر الاهتزاز عبارة 
عن نظام تناظري، ولهذا تم إيصاله
 بالمربط التناظري للبطاقة. ولنقول لك أيضا أن القيم التي يزودك بها
 المستشعر ستنحصر بين 0 فولط و5 فولط. 

لقراءة القيم الصادرة من المستشعر نستعمل دالة اسمها analogRead،
التي ستقوم بتحويل القيم بين 0 فولط و5
 فولط الى قيم عددية محصورة بين 0 و 1023. 

بطبيعة الحال أن المستشعر سيزودك دائما بقيم قد تكون صغيرة أو متوسطة أو كبيرة.
لكن هل سألت نفسك كيف سنبرمجه حتى يحدد لنا فقط الاهتزازات القوية؟؟؟ 
هنا سنعتبر قيمة (نسميها عتبة)،
 إذا تجاوز القيمة المقروءة من المستشعر العتبة نقول أننا عندنا اهتزازا في 
هذه الحالة والعكس بالعكس. 

سنستعمل البطاقة البرمجية Arduino للتفاعل مع المستشعر. 
وبإمكانك عن طريق هذه الشيفرة
 أن تقوم ببرمجة مماثلة عندما تريد أن تزود روبوتك
 بمستشعر للاهتزاز مثلا لاسيما 
إذا استطدم أو صدم بأشياء في طريقه مثلا. 

/* مستشعر الاهتزاز
تقوم هذه الشيفرة بقراءة القيم الصادرة من المستشعر لتحديد إذا ما كان هناك أي اهتزاز
ستعمل الشيفرة على مقارنة القيمة المحصول عليها بعتبة محددة
"taqtaqإذا كانت القيمة المحصول عليها أكبر من العتبة سنكتب كلمة
ونشعل الصمام الثنائي الموصول بالمربط 13 للبطاقة
:الدارة الكهربائية
Analogالقطب الموجب للمستشعر موصول بالمربط التناظري 0
GND القطب السالب للمستشعر موصول باﻷرضية
مقاومة مركبة على التوازي مع المستشعر من المربط التناظري ألى اﻷرضية
http://www.louhla.tk/أنشأت هذه الشيفرة يوم25 مارس2007
 soufian 
من طرف
وتم تعديلها يوم30 غشت2011
louhla.tk/ 
من طرف
وتمت ترجمتها من طرف محمد السهلي يوم 30 نوفمبر 2011
يمكن استعال هذه الشيفرة بكل حرية
*/

//
تعريف الثوابت
const int ledPin = 13;                // الصمام الضوئي موصول بالمربط 13
const int knockSensor = A0;  // المستشعر موصول بالمربط التناظري 0
const int threshold = 100;       // العتبة لتحديد هل هناك اهتزازا

// تعريف المتغيرات
int sensorReading = 0;  //متغير يحتفظ بالقيمة المقروءة من المستشعر
int ledState = LOW;        // متغير من أجل إشعال الصمام الضوئي وإطفائه
void setup()
{
  pinMode(ledPin,OUTPUT);  // سيكون مربط الصمام مخرجا
  Serial.begin(9600);                // تهيئة سرعة التحويل
}
void loop()
{
  // sensorReading تقوم هذه الدالة بقراءة القيمة الصادرة من المستشعر وتضعها في
  sensorReading= analogRead(knockSensor);
  // هل القيمة الصادرة من المستشعر أكبر من أو تساوي العتية
  if(sensorReading>=threshold)
  {
     ledState=!ledState;                     // غير حالة الصمام
     digitalWrite(ledPin,ledState);   // أرسل الحالة الجديدة إلى الصمام
     // نرسلة كلمة الطقطقة لتظهر على الحاسوب في حالة إذا ما كانت البطاقة موصولة به
     Serial.println("taqtaq!");
  }
  delay(100);// ننتظر بعض اﻷجزاء من الثانية لتأخذ البطاقة أنفاسها
}
  

تمرين

قم بتعديل الشيفرة بحيث يشتعل الصمام إذا كان هناك اهتزاز وينطفئ إذ لم يكن.

قم بتجربته الآن على قلبك لترى نبضات قلبك عن طريق ضوء الصمام. قم بتجربته عند معصمك أيضا. ما رأيك؟
 05

01

التعليقات
0 التعليقات

0 التعليقات:

إضغط هنا لإضافة تعليق

إرسال تعليق

Blogger Widgets