الأحد، 28 يوليو، 2013

المرحلات Relay


المرحلات Relay


أنتبه : هذه المقال تحتوي على تجارب تتطلب توصيل تيار متردد AC 220V هذا التيار خطير و يجب التعامل معاه بحذر شديد
لا تقم بالتوصيل ما لم تكن على دراية كاملة بما تفعل او اطلب مساعدة من شخص له خبرة في هذا المجال .




في التطبيقات العملية قد نود أن نتحكم بأحمال ذات قدرات علية High Power باستخدام المتحكم الأصغري Microcontroller , فمثلاً نود أن نتحكم بأنارة مصباح يعمل على تيار متردد AC او تشغيل محركات كهربائية حثية مثل مضخات المياه , او حتى نجده شائعاً في السيارات إذ أن المرحل Relay هو المسؤول عن توصيل التيار و فصله عن الأحمال المختلفة في السيارة .

صورة لعلبة الكهرباء الاساسية في السيارة و تشمل مرحلات عدة .



مهما كان هذا الحمل العالي يمكن توصيله إلى المرحل , فالمرحل يعمل كعنصر وصل \فصل On-off switch حيث يقوم بتوصيل التيار الكهربائي للأحمال Loads او يقوم بفصلها .

المرحل Relay  شكله كما في الصورة , و تركيبه الداخلي يكون عبارة عن ملف Coil  و عند مرور  التيار الكهربائي خلاله يقوم بعمل حث كهرومغناطيسي للطرف الأخر من المرحل Relay الذي يحتوي على مؤشر موصل للتيار Pivot اما ان يوصل الطرف الأول أو الطرف الثاني للحمل .



من الآن سأتحدث حصراً عن هذا الموديول Relay 2channal Module حيث أنه يتميز عن الأنواع العادية بتصميمه المخصص للمتحكمات الأصغرية MCU او الدقيقة MPU بحيث يحتوي على دوائر الحماية من دايودات و ديودات زينر و ترانزستورات لحفظ مداخل المتحكم الأصغري Microcontroller من التلف .
التوصيل :
مبدأ العمل :
كل ما هنالك في هذا الموديول من المرحلات Relay Module هو أن  هناك طرفين نربطهما مع الأردوينو و الطرف الآخر نربطه بالحمل ذو القدرة العالية  High Powe load  .

لطرف الحمل 
 ذو القدرة العالية  High Powe load ثلاثة اطراف :


1) المدخل الرئيسي المشترك Common .
2) (NO (Normally Open الذي يعني ان هذا المدخل في الوضع الطبيعي يكون غير موصول مع المدخل الرئيسي Common و يشكل دارة مفتوحة .


3) (NC (Normally Close الذي يعني أن هذا المدخل يكون في الوضع الطبيعي موصول مباشرة مع المدخل الرئيسي و يشكل دارة مغلقة في الوضع الطبيعي .

أنتبه : هذه المقال تحتوي على تجارب تتطلب توصيل تيار متردد AC 220V هذا التيار خطير و يجب التعامل معاه بحذر شديد
لا تقم بالتوصيل ما لم تكن على دراية كاملة بما تفعل او اطلب مساعدة من شخص له خبرة في هذا المجال .




عندما تريد توصيل الحمل ذو القدرة العالية " مثلاً لمبة مصباح 100 واط " وصل كما في الصورة :

 


البرمجة :

سأدمج بعض المشاريع العملية في هذا البرنامج :

الأول : فتح و اغلاق نظام انارة ac بزمن تأخير  معينة 


الكود :







الثاني : التحكم بالأنارة باستخدام حساس للحركة Motion Sensor

الكود :








أهم ما في الأمر الإنتباه لتوصيل المصدر المتردد 220V لأنه خطير و قد يكون قاتلاً , لذلك لا تجربه إلا اذا كنت على دراية كافية بما تفعل او استعن بمن له خبرة في التوصيلات الكهربائية لمساعدتك .

الاثنين، 22 يوليو، 2013

شاشة اللمس Nintendo DS Touch Screen

شاشة اللمس Nintendo DS Touch Screen



من أهم الابتكارات التكنولوجية التي ظهرت في بداية هذه الالفية هي شاشات اللمس Touch Screen و التي تعد أحدى أهم الطفرات في عالم صناعة الأجهزة الالكترونية , فمن الأجهزة الخلوية , إلى الحواسيب المحمولة Tablet  ,و غيرها الكثير جعلت هذه الشاشات التفاعل بين الأجهزة و المستخدم أكثر سهولة و متعة .


تقسم هذه الشاشة  نوعين رئيسين شائعين هما :


1) الشاشات المقاومية Resistive Touch :و التي تعتمد على مبدأ ال Strain Gauge كأساس لعملها , حيث يحدث الضغط على مكان ما على الشاشة يحدث تغيير في الفولتية على الخرج تعتمد على مقاومة المكان الذي تم الضغط عليه و بالأتجاهين x,y "مبدأ مقسم الجهد Voltage Divider " .

2) الشاشات المكثفية Capcitance Touch و هي الشائعة حالياً لوضوح صورتها و دعمها لمزايا عدة مثل اللمس المتعدد .
ستيف غوبس و هو يحمل اول هاتف من آيفون يدعم اللمس المتعدد عام 2007م

و الآن إن كنت تسائل نفسك هل تستطيع بناء واحدة بنفسك فالجواب نعم , في هذه المقالة سأشرح عن كيفية برمجة أحدى اسهل و أرخص شاشات اللمس و التي تستخدم في اجهزة الننتيندو للألعاب .

لنبدأ تنفيذ تجربتنا نحتاج إلى :




1) بطاقة اردوينو 
2)شاشة اللمس Nintendo DS Touch Screen

3) الحاضنة الخاصة بالشاشة Nintindo ds breakOut
4) اسلاك توصيل .

5) قلم شاشة "اختياري و الهدف منه الدقة في التحديد "

التوصيل :

و هذه صورة اوضح للتوصيل 
Taken from http://bildr.org/2011/06/ds-touch-screen-arduino/

البرمجة :



البرمجة ترتكز على التالي : في حال اردنا قراءة الاحداث السيني x axis نقوم بجعل x1  و x2 كمخارج Output احدهما Vcc و الأخر Gnd فيما يقوم y1  و y2 بدور المداخل التي تقرأ هذا التغيير , و العكس صحيح بالنسبة للأحداثي الصادي Y axis .




الكود :





يمكنك فتح ال Serial Monitor لرؤية الاحداثيات .


تحياتي 

الأحد، 14 يوليو، 2013

حساس الأشعة تحت الحمراء SHARP 2Y0A02

GLCD12864 ST7920 Controller

الشاشة الرسومية 12864


مع تنوع المشاريع و متطلباتها , يصبح المهتمين في علوم الألكترونيات و الهواة بحاجة لطرق جديدة لعرض البيانات و المعلومات التي يريدون عرضها , في وقت سابق عرضت كيفية التحكم بشاشة نوكيا 5110  و التي تمكنك من رسم الأشكال و الخطوط و حتى الصور و عرض البيانات بخطوط و تأثيرات ممتعة .
لذلك سأتحدث اليوم عن موضوع الشاشات الرسومية من جديد مستخدماً الشاشة GLCD 12864 التي تستخدم المتحكم ST7920 حيث يمكن رؤية النشرة الفنية لها من هنا 

يوجد العديد من المتحكمات الأخرى للشاشة , لكن سأفتصر الحديث في هذا الموضوع عن المتحكم ST7920

المكتبة الخاصة بالرسم الجرافيكي مصممة بالأساس للتعامل مع كثير من أنواع الشاشات الرسومية , سواءاً GLCD,TFT,OLED حيث تدعم متحكمات و انواع متعددة.


يمكن تحميل هذه المكتبة من هذا الرابط .

قبل ن ابدأ احب أن انوه لأمر مهم , هو أن هذه المكتبة و التطبيقات التي يمكنك ان تنفذها بواسطته لا تنتهي , فمن يريد الأستزادة أكثر في هذا المجال من البرمجة عليه بالتطبيق العملي لكثرة الأوامر و التعليمات التي توفرها المكتبات الرسومية , ما سأعرضه في هذه التدوينة سيكون نقطة في بحر في هذا المجال.

في البداية سنحتاج لتنفيذ هذه التجربة ما يلي :

1) بطاقة أردوينو 
2) شاشة رسومية ST7920 Controller
3)اسلاك توصيل 
4) مقاومة متغيرة 500 اوم
6)breadboard

يوجد هناك طريقتين للتحكم بهذه الشاشة , فيمكن توصيلها بنمط تحميل البيانات على التوازي Parallel connection  و هناك نمط التوصيل على التوالي Series Interface الذي يستعمل البروتوكول التسلسلي SPI  و الذي يتميز بالسرعة ففي نقل البيانات و تقليص عدد المداخل التي نحتاج لتوصيلها من الشاشة الى المتحكم الأصغري , سأستخدم في التوصيل نمط التوصيل على التوالي  Series Interface

طريقة التوصيل :

المخطط التالي يبين طريقة توصيل هذه الشاشة .



سأتحدث عن المكتبة و طريقة استعمالها .لنبدأ بهذا المثال 




في البداية يجب تعريف المكتبة و نوع المتحكم و

 الأرجل المستخدمة للتحكم , عن طريق هذا الأمر 

U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);

ضبط الألوان , بما أننا نستخدم شاشة ذات لونين

 فقط Monochrome LCD فإن هناك أمر

 يفعل نمط تفعيل البكسل الواحد او تعطيله , و هو

 الأمر 

 u8g.setColorIndex(x); // pixel on 

حيث :
x=0 تكون الشاشة في وضعية المسح 

x=1 تكون الشاشة في وضعية الكتابة و تفعيل

 البكسل .

سأوضح ما سبق بمثال بعد رؤية هذه التعليمة  

لكتابة بكسل واحد فقط على الشاشة نكتب الأمر :

u8g.drawPixel(x_axis,y_axis);

حيث يقوم برسم بكسل واحد في الأحداثيات  المحدده له 

مثال :  



u8g.setColorIndex(1); // pixel on !

u8g.drawPixel(20,20);
النتيجة على الشاشة تكون 



  لو كان الأمر المكتوب بهذا الشكل :


u8g.setColorIndex(0); // pixel on ! 

u8g.drawPixel(20,20); 



فسيتم مسح النقطة المحددة بالأحداثيات . 

هذه المكتبة تدعم العديد من الخطوط , يمكن ضبط الخط عن طريق الأمر 

  u8g .setFont(u8g_font);


أوامر الكتابة , لكتابة نص على الشاشة يستخدم الأمر :

 u8g.drawStr(x , y, " text");

حيث تحدد الأحداثيات x,y التي نريد ان نبدأ الكتابة عندها و ثم نكتب النص الذي نريد اظهاره على الشاشة .



رسم الأشكال الهندسية .

لرسم الدوائر :
 u8g.drawCircle(x,y,raduis);

example:

 u8g.drawCircle(20,40,10);


لرسم اجزاء من الدائرة , نكتب الأمر :
 u8g.drawCircle(x,y,raduis,opt);

حيث :
  • opt: Selects some or all sections of the circle.
    • U8G_DRAW_UPPER_RIGHT
    • U8G_DRAW_UPPER_LEFT
    • U8G_DRAW_LOWER_LEFT
    • U8G_DRAW_LOWER_RIGHT
    • U8G_DRAW_ALL

حيث تستطيع اختيار اي جزء من الدائرة و رسمه .

لرسم الدوائر المعبأة Filled circle  نكتب الأمر 

 u8g.drawDisc(x,y,radius);


لرسم الاشكال المربعة و المستطيلة هذا الأمر يستخدم لذلك 

 u8g.drawBox(x,y,w,h);
u8g.drawFrame(x,y,w,h);



حيث نحدد نقطة البداية x,y والطول و العرض لهذا الصندوق .

لرسم ما تريده , عليك وضعه في جملة استدعاء void و استدعاءه في جملة الLoop كالآتي :
 u8g.firstPage();
 do{
 draw_shapes(); 

 }
  while(u8g.nextPage() );   

بالمجمل هذه اهم الأوامر التي تحتاجها لعمل الرسوم و للاستزادة أكثر عن هذه المكتبة يمكنك قراءة المرجع الرئيسي الكامل لهذه المكتبة 

و في النهاية هذه كود أخر لطريقة جعل النص يلتف بزوايا مختلفة على الشاشة 


لتحميل البرنامج

Download the code



و هذا الفيديو في النهاية يوضح كيفية العمل الكود .




الجمعة، 12 يوليو، 2013

حساس الأشعة تحت الحمراء SHARP 2Y0A21

SHARP 2Y0A02


 Distance Measuring Sensor Measuring distance 



 في مقالة سابقة تحدثت عن حساس الأشعة تحت الحمراء SHARP 2Y0A21 و قلنا أنه حساس يقرأ المسافة ما بين 10- 80 سم , هناك نوع مماثل له من نفس العائلة و يدعى SHARP 2Y0A02 يتميز بأن له مدى قراءة أوسع يصل ما بين 20 -150 سم .

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

ما ستحتاجه لتنفيذ هذه التجربة :



1) بطاقة اردوينو 
2) حساس الاشعة تحت الحمراء SHARP 2Y0A02 .
3) اسلاك توصيل .

التوصيل :


طريقة حساب المسافة :

تختلف طريقة حساب المسافة بينه و بين الحساس SHARP 2Y0A12 نظراً لاختلاف العلاقة المبينة بالمنحنى لذلك علينا باستخدام قانون ايجاد المسافة بين نقطتين و الميل ايجاد هذه العلاقة من المنحنى , يمكنك مراجعة المقال الخاص ب SHARP 2Y0A02 لتتعرف على كيفية ايجادها .

بالمحصلة وجدت أن المعادلة التي تربط مقلوب المسافة X و الفولتية Y تعطى بعدة  علاقات : 

للمسافة بين 150سم - 30 سم 
للمسافة بين 30-20 سم .
للمسافة بين 20-15 سم .

كل واحدة منهم في معادلة في جملة if statement  

لأن المنحنى بشكل عام متغير بين هذه النقاط تقريباً .
شيء مهم أخير أضيفه , قد تحصل أخطاء في القراءات عند استعمالك لهذا الحساس , أحرص على اتباع التالي :


ثبت  الحساس بحيث تكون جهة توصيل الأسلاك أعلى الحساس و ليس اسفله ,  هذا يعطي قراءات أكثر دقة .


ثانياً سيعطي الحساس خطأ اذا كان الجسم الذي أمامه يتحرك عمودياً , هذا يسبب بطء استجابة الحساس و يعطي اجابات غير منطقية , الحركة للجسم الذي امامه تكون أفقية , كما هو مبين بالرسم .

اعطي هذا الحساس الوقت الكافي لقراءة المسافة لأنه على الأقل يحتاج ل 60ملي ثانية حتى يعطي تحديثاً للمسافة .





 

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




الكود دقيق لغاية 15 سم و بخطأ +-2سم و يعتمد حسب الجسم الذي ترتد عنه الأشعة . 


الثلاثاء، 9 يوليو، 2013

الشاشة الرسومية 12864 GLCD

GLCD12864 ST7920 Controller

الشاشة الرسومية 12864


مع تنوع المشاريع و متطلباتها , يصبح المهتمين في علوم الألكترونيات و الهواة بحاجة لطرق جديدة لعرض البيانات و المعلومات التي يريدون عرضها , في وقت سابق عرضت كيفية التحكم بشاشة نوكيا 5110  و التي تمكنك من رسم الأشكال و الخطوط و حتى الصور و عرض البيانات بخطوط و تأثيرات ممتعة .
لذلك سأتحدث اليوم عن موضوع الشاشات الرسومية من جديد مستخدماً الشاشة GLCD 12864 التي تستخدم المتحكم ST7920 حيث يمكن رؤية النشرة الفنية لها من هنا 

يوجد العديد من المتحكمات الأخرى للشاشة , لكن سأفتصر الحديث في هذا الموضوع عن المتحكم ST7920

المكتبة الخاصة بالرسم الجرافيكي مصممة بالأساس للتعامل مع كثير من أنواع الشاشات الرسومية , سواءاً GLCD,TFT,OLED حيث تدعم متحكمات و انواع متعددة.


يمكن تحميل هذه المكتبة من هذا الرابط .

قبل ن ابدأ احب أن انوه لأمر مهم , هو أن هذه المكتبة و التطبيقات التي يمكنك ان تنفذها بواسطته لا تنتهي , فمن يريد الأستزادة أكثر في هذا المجال من البرمجة عليه بالتطبيق العملي لكثرة الأوامر و التعليمات التي توفرها المكتبات الرسومية , ما سأعرضه في هذه التدوينة سيكون نقطة في بحر في هذا المجال.

في البداية سنحتاج لتنفيذ هذه التجربة ما يلي :

1) بطاقة أردوينو 
2) شاشة رسومية ST7920 Controller
3)اسلاك توصيل 
4) مقاومة متغيرة 500 اوم
6)breadboard

يوجد هناك طريقتين للتحكم بهذه الشاشة , فيمكن توصيلها بنمط تحميل البيانات على التوازي Parallel connection  و هناك نمط التوصيل على التوالي Series Interface الذي يستعمل البروتوكول التسلسلي SPI  و الذي يتميز بالسرعة ففي نقل البيانات و تقليص عدد المداخل التي نحتاج لتوصيلها من الشاشة الى المتحكم الأصغري , سأستخدم في التوصيل نمط التوصيل على التوالي  Series Interface

طريقة التوصيل :

المخطط التالي يبين طريقة توصيل هذه الشاشة .



سأتحدث عن المكتبة و طريقة استعمالها .لنبدأ بهذا المثال 




في البداية يجب تعريف المكتبة و نوع المتحكم و

 الأرجل المستخدمة للتحكم , عن طريق هذا الأمر 

U8GLIB_ST7920_128X64 u8g(13, 11, 12, U8G_PIN_NONE);

ضبط الألوان , بما أننا نستخدم شاشة ذات لونين

 فقط Monochrome LCD فإن هناك أمر

 يفعل نمط تفعيل البكسل الواحد او تعطيله , و هو

 الأمر 

 u8g.setColorIndex(x); // pixel on 

حيث :
x=0 تكون الشاشة في وضعية المسح 

x=1 تكون الشاشة في وضعية الكتابة و تفعيل

 البكسل .

سأوضح ما سبق بمثال بعد رؤية هذه التعليمة  

لكتابة بكسل واحد فقط على الشاشة نكتب الأمر :

u8g.drawPixel(x_axis,y_axis);

حيث يقوم برسم بكسل واحد في الأحداثيات  المحدده له 

مثال :  



u8g.setColorIndex(1); // pixel on !

u8g.drawPixel(20,20);
النتيجة على الشاشة تكون 



  لو كان الأمر المكتوب بهذا الشكل :


u8g.setColorIndex(0); // pixel on ! 

u8g.drawPixel(20,20); 



فسيتم مسح النقطة المحددة بالأحداثيات . 

هذه المكتبة تدعم العديد من الخطوط , يمكن ضبط الخط عن طريق الأمر 

  u8g .setFont(u8g_font);


أوامر الكتابة , لكتابة نص على الشاشة يستخدم الأمر :

 u8g.drawStr(x , y, " text");

حيث تحدد الأحداثيات x,y التي نريد ان نبدأ الكتابة عندها و ثم نكتب النص الذي نريد اظهاره على الشاشة .



رسم الأشكال الهندسية .

لرسم الدوائر :
 u8g.drawCircle(x,y,raduis);

example:

 u8g.drawCircle(20,40,10);


لرسم اجزاء من الدائرة , نكتب الأمر :
 u8g.drawCircle(x,y,raduis,opt);

حيث :
  • opt: Selects some or all sections of the circle.
    • U8G_DRAW_UPPER_RIGHT
    • U8G_DRAW_UPPER_LEFT
    • U8G_DRAW_LOWER_LEFT
    • U8G_DRAW_LOWER_RIGHT
    • U8G_DRAW_ALL

حيث تستطيع اختيار اي جزء من الدائرة و رسمه .

لرسم الدوائر المعبأة Filled circle  نكتب الأمر 

 u8g.drawDisc(x,y,radius);


لرسم الاشكال المربعة و المستطيلة هذا الأمر يستخدم لذلك 

 u8g.drawBox(x,y,w,h);
u8g.drawFrame(x,y,w,h);



حيث نحدد نقطة البداية x,y والطول و العرض لهذا الصندوق .

لرسم ما تريده , عليك وضعه في جملة استدعاء void و استدعاءه في جملة الLoop كالآتي :
 u8g.firstPage();
 do{
 draw_shapes(); 

 }
  while(u8g.nextPage() );   

بالمجمل هذه اهم الأوامر التي تحتاجها لعمل الرسوم و للاستزادة أكثر عن هذه المكتبة يمكنك قراءة المرجع الرئيسي الكامل لهذه المكتبة 

و في النهاية هذه كود أخر لطريقة جعل النص يلتف بزوايا مختلفة على الشاشة 


لتحميل البرنامج

Download the code



و هذا الفيديو في النهاية يوضح كيفية العمل الكود .




 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.