الثلاثاء، 25 فبراير 2014

Arduino Due USB Host

لوحة المفاتيح Keyboard


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


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

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

في البداية ما ستحتاجه هو :





1)أردوينو ديو DUE
2)لوحة مفاتيح keyboard بمنفذ usb
3) اسلاك توصيل
4)وصلات لتوصيل لوحة المفاتيح بالأردوينو ديو DUE
5) مقاومات 510 اوم عدد 4.
6) بواعث ضوئية LED عدد 4 .

انتبه : لا تقوم بتوصيل البواعث الضوئية LED بدون مقاومات على الأقل 510 اوم , لان الديو DUE تيارها محدود جداً و لو ارتفع لحدود اعلى من 15ملي امبير ممكن ان يسبب تلفاً للبطاقة




كتوصيلة , لن تحتاج سوى لتوصيل لوحة المفاتيح بالمنفذ USB Native في الأردوينو و توصيل الأردوينو بالحاسوب عبر منفذ البرمجة programming port , و من ثم تحميل البرنامج .

تأكد من انك تستعمل نسخة اردوينو 1.5 او أكثر لأن الاصدارات القديمة لا تدعم الديو DUE .

اختار المنفذ التسلسلي الصحيح للاردوينو DUE و اختار Arduino Due Programming port من لائحة اللوحات Boards و حمل البرنامج .

البرنامج في الأسفل :

كشرح للأوامر كالآتي :

ستحتاج لتحميل المكتبة الخاصة بالوحة المفاتيح كالآتي

#include <KeyboardController.h>


ثم تعرف الأسم الوسيط للمكتبة كالآتي
USBHost usb;


و من ثم تعرف هذا الوسيط على انه لوحة المفاتيح كالآتي
KeyboardController KEYBOARD(usb);


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

void keyPressed()



في حال انهيت الضغط على احد ازرار لوحة المفاتيح , ينتقل البرنامج لهذا الأمر الذي يوضع في جملة استدعاء خاصة .
void keyReleased()

يمكن معرفة الزر الذي تم الضغط عليه من خلال الأمر :



void keyReleased()

ازرار خاصة , ازرار ال ctrl, alt shift تخضع لوضع خاص يمكن معرفة اذا ما تم الضغط على احد هذه الأزرار عن طريق الأمر :
getModifiers()

و الذي يعُيد return لنا قيمة صحيحة كالآتي :


LeftCtrl = 1
LeftShift = 2
Alt = 4
LeftCmd = 8
RightCtrl = 16
RightShift = 32
AltGr = 64
RightCmd = 128


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


usb.Task();

هذا الفيديو يوضح نتيجة هذا البرنامج .



يمكنك فعل المشاريع التالية , و التي قمت بها انا , مثلاً :

1) استخدام لوحة المفاتيح لأدخال أحرف و كلمات و عرضها على شاشة LCD

2)
 استخدام لوحة المفاتيح لأدخال أحرف و كلمات و عرضها على شاشة مضيئة LED

3) وضعها كنظام حماية من خلال تعيين كلمة سر من خلالها .

4) تحويل الأرقام و الأحرف المدخلة لوسيلة تحكم , كما هو في الفيديو .


الجمعة، 21 فبراير 2014

مكتبات خاصة في الأردوينو ديو 2 Arduino DUE

Advance Library 2 




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

الآن نعود لنتحدث عن موضوع سابق عن سؤال كان يطرح علي كثيراً , هل يمكننا ربط عدد كبير من الحساسات و القطع و العمليات الحسابية المختلفة مع  الأردوينو بدون تأخير زمني ملحوظ ؟! تحدثت عن مكتبة Metro التي تعتمد على الأمر millis .


لكن لو كانت هذه العمليات كثيرة و معقدة ؟! كوجود شاشات رسومية و محركات سيرفو او محركات خطوية متعددة او مربوط عدد كبير من الحساسات ! وقتها لن ينفع إلا ان نتجه لاستخدام Arduino DUE ففيها الحل الأمثل لمثل هذه المشاكل .

تتميز الأردوينو ديو Arduino DUE بمعمارية 32bit و قدرة على العمل بوجود 9 مؤقتات و امكانية عمل كل المداخل كمقاطعات Interrupts  ! هذا يجعلها ذات قوة خارقة اذا ما تحدثنا عن سرعة المعالجة ! 


هناك مكتبتان سأتحدث عنهما في هذه التدوينة :

1) مكتبة Scheduler

2) مكتبة DUE Timer



1) مكتبة Scheduler :

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


حسناً كل ما سأقوم به هو تشغيل عدة مهام مختلفة و تشغيلها بنفس الوقت و دون حصول مقاطعة بينهم .

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

1) أردوينو ديو Arduino DUE .
2) بواعث ضوئية  LED عدد 2 .
3) مقاومة ضوئية LDR 
4) مقاومتات 510 اوم عدد 2 و 10كيلو أوم 
5) BreadBoard .
6) اسلاك توصيل 


مخطط التوصيل .

البرنامج :






2) مكتبة DUE Timer :

 هي مكتبة غير رسمية تمكنك من استخدام المؤقتات ال 9 الموجودة في الأردوينو ديو Arduino DUE بسهولة تامة

يمكن تحميل المكتبة من الرابط :

استخدام المكتبة سهل جداً و سأعرض الأمثلة كأفضل طريقة لاستخدام المؤقتات






كل ما عليك هو تحديد نوع المؤقت العامل و زمن المؤقت "بالمايكرو ثانية " و من ثم تقوم المكتبة بالذهاب لجملة تنفيذ هذا المؤقت و تنفذها عند وصول العداد الداخلي لزمن المؤقت .

من هنا يتضح أهمية أن تكون الجمل قصيرة داخل جملة المؤقت و زمن تنفيذ المؤقت .

أيضاً هذه المكتبة تعطي أمكانية تحديد المؤقت المستخدم تلقائياً دون الحاجة لتعيينه مسبقاً

هذا البرنامج يوضح تشغيل المؤقتات جميعهم بواسطة الأختيار التلقائي للمؤقت .




المخطط :
البرنامج :





تعليمات هذه المكتبة سهلة جداً , و لكن كنصيحة يفضل استخدام المكتبة الأولى المدعومة من الأردوينو حتى يتم معالجة بعض المشاكل في المكتبة DUE Timer  .


الاثنين، 17 فبراير 2014

مكتبات خاصة بالأردوينو ديو 1 Arduino DUE

 ADVANCE FUNCTION 1




منذ أن بدأت في استعمال هذه اللوحة التطويرية Arduino DUE و كل مرة أكتشف فيها عالم كبير لا ينتهي من الأمكانيات و القدرات الهائلة المختزنة فيها .

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

مكتبة RTC Timer :

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

في الأصدارات الأحدث من الأردوينو ديو Arduiono DUE يوجد هناك كريستالة داخليه مثبته على اللوحة يمكن رؤيتها في المخطط الخاص بتصميم الدارة  


التعامل مع المكتبة سهل , كل ما ستحتاجه في هذه التجربة :

1) بطاقة أردوينو ديو Arduino DUE  فقط.





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





أفضل استخدام Atmel Studio لرؤية المتغيرات التي تحدث في الكود بشكل أفضل .




لننتقل للجزء الثاني من المكتبات .


2)مكتبة التصفير الذاتي Watch Dog Timer :


تنبيه : ان أردت أن تثبت هذه المكتبة كما سأشرحها أدناه , يجب عليك أن تُضمن هذه المكتبة دائماً في أي برنامج ستكتبه في الأردينو ديو , لأنه في حالة عدم تضمينها فإن الأردوينو ديو ستعمل لوقت معين و بعدها تعيد تصفير Reset تلقائياً , لذا وجب الأنتباه .


في وقت سابق تحدثت عن هذا النوع من المؤقتات في المدونة لأهميته في عمل تصفير للبرنامج في حالة وقوعه في حاله تعليق deadlock . 


قبل استعمال المكتبة يجب الذهاب للمسار التالي :


arduino1.5.x/hardware/arduino/sam/variants/arduino_due_x/variant.cpp 




ثم تعديل السطر رقم 353 و وضع اشارتين تعليق  //  لعدم تفعيله .

بعد ذلك يمكن تحميل البرنامج ادناه .







في هذا البرنامج يبقى تنفيذ البرنامج بشكل صحيح حتى يدخل البرنامج في حالة تعليق DeadLock فيعمل البرنامج اعادة تصفير ذاتية ! هذا رائع :) 


ستحتاج فقط لأردوينو ديو Arduino DUE فقط . و يمكن فتح شاشة السيريال لرؤية عمل البرنامج .


ممتاز , اذا تقوم المكتبة بعمل مؤقت للتحقق من وصول البرنامج لنهايته و اذا لم يصل خلال مدة زمنية محددة يقوم البرنامج تلقائياً بعمل تصفير ذاتي للبرنامج .



المكتبة الأخرى ضمن سلسلة المكتبات الخاصة هي مكتبة توليد الأرقام العشوائية  .

3) مكتبة بسيطة هدفها توليد ارقام عشوائية .

البرنامج :






يمكن توليد ارقام ذات حدود مختلفة  int, long , byte

يمكن رؤية المصدر الذي توجد فيه المكتبات من خلال الرابط 

الجمعة، 14 فبراير 2014

التعديل النبضي في الأردوينو ديو Arduino DUE

التعديل النبضي في الأردوينو ديو Arduino DUE

Arduino DUE PWM






التعديل النبضي PWM من أهم التقنيات التي تستخدم في التطبيقات العملية المختلفة للتحكم بالفولتية المطبقة على الأحمال "كالمحركات الكهربائية او البواعث الضوئية LED " و تحدث سابقاً في موضوعين منفصلين في المدونة عن هذه التقنية نظراً لاهميتها .

في النسخ التقليدية من الأردوينو التي تستعمل معالجات AVR MCU تتفاوت قدرات و عدد المنافذ Ports التي تدعم التعديل النبضي , فالأردوينو أونو يدعم 6 منافذ , و الأردوينوليوناردو 7 منافذ و الميجا 15 منفذ , و بترددات مختلفة , الأردوينو ديو DUE فيها 12 منفذ يدعم التعديل النبضي PWM


ما يميزها عن الأصدارات التقليدية هي مقدرتنا على استعمال أكثر من منفذ للتعديل النبضي في آن واحد Multiple PWM و بتردد أعلى من باقي بطاقات الأردوينو التي تحتوي معالجات AVR

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

في بداية هذه السلسلة تحدثت عن ان الفولتية التي تعمل عندها الأردوينو ديو هي 3.3فولت و ليس 5 فولت , أي انها تعطي فولتية عظمى من منافذها لا تتجاوز ال 3.3 فولت , في نفس الوقت تيار هذه المنافذ قليل جداً و قد لا يتجاوز 3mA في بعض المنافذ "كالمنفذ D2,D13 "  و الرسم التوضيحي التالي يبين هذه القيم  .



لذلك يفضل دائماً توصيل Transistor لأي منفذ Port من منافذ الأردوينو حتى نحافظ على المنفذ من التلف .


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

1)بطاقة اردوينو ديو Arduino DUE

2)بواعث ضوئية LED عدد 6
3)مقاومات 470 اوم 

4)ترانزستور 2n2222 أو ما يكافئه"اختياري"
5)اسلاك توصيل jumper

6) BreadBoard .





يمكن توصيل الدارة كما في المخطط ادناه :


في الحالة العادية يكون طول المبدل التماثلي الرقمي ADC يساوي 8 بت"يمكن تعديله باستخدام الأمر

 analogWriteResolution()




في حال استخدام الترانزستور "يفضل استخدامه" يكون التوصيل كالآتي :

البرنامج :








بالنسبة للتردد الخارج , في الأردوينو ديو اعطى على راسم الأشارة تردد 1كيلو هيرتز "مقارب لما تعطيه الأردوينو ليوناردو " 

و الفيديو أدناه يوضح التطبيق العملي لهذا البرنامج  , تحياتي 



الاثنين، 10 فبراير 2014

المبدل الرقمي التشابهي DAC في الأردوينو ديو

المبدل الرقمي التشابهي  DAC في الأردوينو ديو 




في لوحات الأردوينو التقليدية ذات الأصدار AVR يوجد فيها منافذ رقمية Digital و منافذ تماثلية Analog .

يمكننا من خلال المنافذ التماثلية من قراءة الحساسات , لكن هل بأمكانها أعطاءنا فولتيات متغيرة كما يتصور البعض ! بأمكانك تجريب ذلك , هل تستطيع الحصول على فولتية ثابته "مثلاً 2.6 فولت " من أحد المداخل التماثلية في الأردوينو " A0-A5 في الأردوينو أونو UNO " ؟!


ببساطة لن تستطيع ذلك , لأنك ستحتاج لشيء يسمى مبدل رقمي - تماثلي DAC و هو ما لا يتوافر في أغلب بطاقات ال AVR التي تعمل الأردوينو عليها .




الحل يكمن بأردوينو ديو ARDUINO DUE ففي هذه البطاقة الألكترونية التي تعتمد على معالج ARM Cortex M3 يوجد فيها وحدة تبديل رقمي - تماثلي ADC مدمجة داخلياً , و تستطيع اعطاءنا فولتيات مختلفة و ايضاً اعطاءنا اشارات Waveform مختلفة "sine , triangle,saw tooth " .

هناك مدخلين مخصصين لهذا المبدل DAC0 , DAC1  




بشكل عام نستطيع توليد أشارات متغيرة Wavform عن طريقهما بفولتية Peak-peak تصل ل 3 فولت تقريباً .

ما سنقوم بتوليده هو أشارة جيبية Sine wave  .

ما سنحتاجه لتنفيذ التجربة :
1) بطاقة أردوينو ديو Arduino DUE فقط .





البرنامج :





هذا البرنامج سيولد موجه جيبية بتردد 1khz

ممتاز يمكن ايضاً توليد اشارة مثلثية triangle , عن طريق هذا البرنامج :


يمكن توليد أغلب الموجات الأساسية , هذا مثلاً برنامج لتوليد اشارة منشارية Sawtooth



هذه التقنية مفيدة جداً و هي أحدى مزايا الأردوينو ديو الكثيرة .

يمكنك بناء مولد اشارة خاص فيك بسهولة .

الأحد، 9 فبراير 2014

روبوت تفادي الحواجز باستخدام التراسونيك متحرك

روبوت تفادي الحواجز باستخدام التراسونيك متحرك





لقد تحدثنا سابقا عن كيفيه بناء  روبوت تفادي الحواجز باستخدام حساس الامواج الفوق صوتيه ( التراسونيك) "يمكنك الرجوع لهذا المقال من هنا"  , وكنا نغير اتجاه حركه هذا الروبوت بناءعلى مقدار المسافه بينه بين اي عائق امامه .....امامه فقط , اي يكون الروبوت محدود الرؤيه بزايه معينه , هذه المحدوديه سببها  الزاويه التي يرسل فيها حساس الالتراسونيك الامواج طريقه ارتدادها عن الاجسام المحيطه , ماذا لو حركنا حساس الالتراسونيك لاخد اكثر من قراءة للمسافه في عده اتجاهات وتوجيه الروبوت الى اكثر مسافه ممكنه,كيف يمكننا ذلك؟ هذا ما سنعرفه في هذا المقال. 




سنحتاج الى تثبيت حساس الامواج الفوق صوتيه "الالتراسونيك" على  محرك السيرفو Servo motor  ذو 180 درجه  " لمعرفه المزيد عن هذا المحرك يمكنك الرجوع لمقاله السيرفو من هنا " , ونحرك هذا المحرك على اكثر من زاويه ونأخذ قراءه الحساس عند كل زاويه ,نقارن بين هذه المسافات ونحرك الروبوت باتجاه  المسافه الاعظم اي المسار الذي يكون فيها الحاجز امام الروبوت ابعد .وبذلك نكون قد وسعنا مدى الرؤيه لهذا الروبوت.


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

1) بطاقة أردوينو "أستعملت هنا أردوينو Uno"




2) هيكل روبوت




3)arduino L298 motor shield لقياده المحركات الكهربائيه 



5) بطاريتان ليثيوم (3.7V - 2400mA )
6)اسلاك التوصيل female-male & male-male wires
7)محرك سيرفو servo motor 



8) ماده لاصقه UHU او لاصق لتثبيت سنسور الالتراسونيك على محرك  السيرفو 




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

1) قم بتركيب هيكل الروبوت
2) قم بتوصيل داره L298 كما في الشكل وثبتها فوق الهيكل


3) قم بتوصيل حساس الامواج فوق الصوتيه  Ultrasonic sensor كما هو موضح بالصورة
 4) قم بتوصيل محرك السيرفو كما في الشكل 

5) ثبت حساس الامواج فوق الصوتيه على محرك السيرفو



قبل تحميل الكود تأكد من وجود مكتبه الالتراسونيك ضمن مسار مكتبات اردوينو ان لم تكن موجوده يمكنك تحميلها من هنا واتباع الخطوات في مقال كيفيه وضع مكتبه جديده للاردوينو .


6) حمل الكود وافتح شاشه العرض Serial monitor لتتأكد من تثبيت الالتراسونك بشكل صحيح .يجب ان  تتغير القراءه كلما اقتربت يدك منه , ويجب ان يتحرك محرك السيرفو فقط عندما يكون بعد يدك اقل من 20 سم. 





يقوم هذا االكود في البدايه  بتخزين المسافه المأخوذه من الالتراسونيك, واستخدام جمله الشرط "if " لمقارنة هذه القراءه مع الرقم 20 , فان كانت المسافه اكبر من 20سم سيتحرك الروبوت للامام , اما ان كانت المسافه اقل من 20 سم سيتوقف الروبوت ويتحرك السيرفو بزاويه 45 ,180,135,90درجه , عند كل زاويه  يتم  قراءه الحساس فان كانت اكبر من 20سم سيتحرك الروبوت الى الامام , اما ان كانت اقل من 20سم سيتحرك السيرفو الى زاويه التي تليها. وعند وصول السيرفو  الى الزاويه 180 سيعود لزاويه الصفر . 

وهذا الفيديو يوضح طريقه عمل هذا الكود:





الأربعاء، 5 فبراير 2014

Arduino DUE دقة القراءة التماثلية


دقة القراءة التماثلية 





analog Pin Resolution









بطاقة الأردوينو ديو DUE تستخدم مبدلاً رقمياً تناظرياً ADC ذات سعة 12Bit و هذا مغاير لما كنا نستخدنه في بقية اصدارات الأردوينو السابقة التي تحتوي مبدلاً رقمياً تناظرياً سعته 10Bit هذا الأختلاف يسمح للأردوينو ديو DUE بأن تكون أكثر دقه و أكثر حساسية .


فمثلاً الأردوينو اونو Uno تكون حساسيتها :





بينما في الأردوينو ديو Due فتكون :




نلاحظ هنا مدى أكبر للقراءة"من 0-4095 " اضافة لدقة أكبر للقراءة .

لكن هناك ميزة أخرى , و هو الأمر analogReadResolution و يقوم هذا الأمر بالتحكم بطول المبدل الرقمي التناظري ADC فمثلاً :

analogReadResolution (12);

بطول 12Bit من (0-4095)


analogReadResolution (10); 


هكذا تصبح القراءة مشابها لمثيلتها في الأردوينو Uno,Mega و بطول 10Bit من (0-1023)

analogReadResolution (8);



بطول 8Bit من (0-255)


analogReadResolution (4);

بطول 4Bit من (0-16)


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

التوصيل :






البرنامج :






الآن ننتقل لأمر الأمر الكتابة analogWriteResolution

بنفس مبدأ القراءة , يستطيع المبدل الرقمي التناظري ADC كتابة قيم ذات طول 12Bit او تحديدها من خلال هذا الأمر .

مثال :

analogWriteResolution(10); 


تكون قيمة المخرج بين 0-1023
analogWriteResolution(12);

تكون قيمة المخرج بين 0-4095

analogWriteResolution(8); 


تكون قيمة المخرج بين 0-255


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



سنقوم في هذا المثال البسيط على قراءة مقاومة متغيرة و التحكم في اضاءة LED's بدقة مختلفة لكل منهما .



التوصيل :






البرنامج




تعطي الأردوينو ديو أمكانيات أكبر في التحكم في دقة القراءة التماثلية لتناسب المشاريع المختلفة .
 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.