الأربعاء، 4 مارس 2020

Arduino Voltage Reference اردوينو الجهد المرجعي

اردوينو الجهد المرجعي Arduino Voltage Reference
يوجد مرجع جهد اردوينو (1.1 فولت) مدمج في بعض ميكروكنترولر اردوينو. لدى كل من Uno و Nano واحد ، وعدد قليل من Arduinos الآخرين لديهم.
عادةً ما تقوم بإعداد Arduino ADC باستخدام مزود الطاقة المتحكم كمرجع للجهد (لأنه سهل! وهو الوضع الافتراضي لبرنامج Arduino). المشكلة في ذلك هي أن رقاقة مزود الطاقة ستحدد بعد ذلك دقة قياسك ، بمعنى أنه لن يكون لديك أدنى فكرة إذا كانت دقيقة أو مستقرة مع درجة الحرارة.

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

على سبيل المثال ، يمكن أن يعمل Arduino Uno / Nano من 1V8 إلى 5V5 واستخدام خليتين من AA يسمح بالعمل (ولكن فقط إذا قمت بضبط الساعة على 4MHz - راجع قسم ورقة البيانات 29.3 "درجات السرعة"). يمكنك استخدام مرجع الجهد الداخلي لمراقبة حالة البطارية - بدون مكونات إضافية.
تحاول هذه الصفحة أن تحدد ، بطريقة بسيطة ، ما إذا كان مرجع جهد Arduino يعتبر جيدًا أم لا.


فجوة نطاق الجهد المرجعي

نوع المرجع في ATMega328P هو نوع ذو فجوة نطاق. يستخدم هذا عنصرين ، أحدهما مع معامل درجة الحرارة السلبية والآخر مع معامل درجة حرارة موجبة يلغي تأثيرات درجة الحرارة.
بينما لا تمنحك قراءات الجهد فائقة الدقة في Arduino ، فقد صُممت الدائرة لتكون مستقرة ضد التغيرات في درجات الحرارة والجهد الكهربائي.

يستخدم هذا النوع من تخطيط الدوائر في المراجع الحديثة على سبيل المثال MAX6143. ومع ذلك ، في ATMega328 وما شابه ذلك ، فإن عملية التحكم في تخطيط الرقاقة على السيليكون لم يتم تعريفها جيدًا ولا تستخدم التشذيب بالليزر ، وبالتالي فإن الدقة الأولية السيئة لمرجع جهد Arduino (± 9٪).

يمكنك معرفة كيفية التخلص من هذا الإزاحة لاحقًا في هذه الصفحة.

ملاحظة: إذا كنت تستخدم مرجعًا خارجيًا ، فسيكون قياس ADC أكثر دقة نظرًا لأنك تتحكم في مواصفات الشريحة.
ومع ذلك ، تذكر أن ADC الداخلي في Arduino ليس دقيقًا على أي حال (انظر ورقة بيانات ATMega328: الدقة المطلقة 2LSB (بما في ذلك INL و DNL وأخطاء التقدير والكسب والإزاحة).

تحذير: لا تستخدم مطلقًا مرجعًا للجهد الخارجي وتمكّن في الوقت نفسه المرجع الداخلي - هناك شيء سينكسر!
يستخدم لمرجع الجهد اردوينو
يمكن استخدام مرجع الجهد اردوينو في واحدة من خمس طرق مختلفة:
للكشف عن اللون البني (انظر ورقة البيانات لتمكين).
كقيمة القياس في ADC (تغذية في أحد المدخلات).
كمرجع لقياسات ADC.
كمدخل إلى المقارنة.
قياس درجة الحرارة (يجب أن تستخدم ADC المرجع الداخلي).

براون خارج الكشف

يتيح الكشف عن اللون البني للمعالج تحديد متى انخفض جهد التيار الكهربائي عن عتبة ولكن لم يذهب إلى الصفر تمامًا. يستخدم هذا للإشارة إلى المعالج أن الذاكرة قد تكون مكتوبة بشكل سيء. إنه يوفر طبقة إضافية من الموثوقية لتطبيق ما.
مدخلات إلى ADC
من شأن قياس المرجع عند إدخال ADC أن يتيح معايرة مصدر مرجعي مختلف ، على سبيل المثال العرض (انظر هنا) أو كمقارنة خام مع مدخلات ADC الأخرى (إلا إذا كنت تقوم بمعايرة المرجع أولاً كما هو موضح في هذه الصفحة - وفي هذه الحالة يمكن أن تكون دقيقة للغاية (~ 1٪)).
مرجع ADC
باستخدام مرجع الجهد اردوينو كما كنت تتوقع أن تستخدم!
نصيحة: استخدام مرجع 1V1 يعني أن ADC 10 بت له قيمة LSB ~ 1mV (1.074mV / LSB).
المدخلات المقارنة
باستخدام مرجع الجهد يسمح المقارنة الخام أي يمكنك فقط مقارنة أي جهد الدخل إلى 1V1. نقطة واحدة مثيرة للاهتمام هي أن أي من مدخلات ADC يمكن مقارنتها من قبل المقارنة - وهذا دون استخدام أي مكونات خارجية أخرى. انظر القسم 23.2 من ورقة البيانات المسمى "المدخلات المقارنة التناظرية المضاعفة".

يمكنك طرح السؤال "لماذا تهتم باستخدام المقارنة عندما يمكنك بسهولة حساب النتيجة باستخدام ADC؟" الجواب هو السرعة.

يمكن للمقارن مقارنة فولتين خلال 100 ثانية من النانوثانية في حين أن ADC هو نوع تقريبي متعاقب ويستغرق حوالي 13us لجمع قيمة ADC. يجب استرداد هذه القيمة بواسطة المعالج ، ثم تقوم بمقارنة القيمة بإعداد حد ، مما يتطلب وقتًا أطول بكثير.
قياس الحرارة
نظرًا لأن مرجع جهد Arduino مستقل عن درجة الحرارة ، فيمكن مقارنته بإخراج دائرة تعتمد على درجة الحرارة - دائرة داخل الشريحة. يتيح لك ذلك قياس درجة الحرارة في ATMega328P.

يمكن ضبط عنصر استشعار درجة الحرارة في ADC على أحد مدخلات ADC. تنص ورقة البيانات على أن معامل درجة الحرارة هو 1mV / ° C ولكن الدقة الأولية هي ± 10 ° C بسبب تباين العملية في تصنيع الرقاقة. (انظر القسم 24.8 من  المسمى "قياس درجة الحرارة"). للحصول على قراءة دقيقة يتطلب معايرة هذا النظام.

اردوينو الجهد المرجعي الأداء

تشير المعلومات الموجودة في ورقة البيانات على مرجع Arduino للجهد إلى أن قيمها القصوى والدنيا هي 1.0V ~ 1.2V و 1 V1 الاسمية. بخلاف هذا لا يوجد المزيد من المعلومات على الإطلاق.

لا توجد معلومات حول التكرار أو الاستقرار. تشير إلى أن الجهد يمكن أن يختلف بنسبة٪ 9٪ حول 1.1 فولت.

لذا فإن السؤال الحقيقي هو:


    هل مرجع الجهد اردوينو أي خير على الإطلاق؟


يبدو أن المواصفات تشير إلى أنها قد تختلف ± 9٪ في أي وقت. في الواقع هذا ليس صحيحا ومرجع الجهد هو أفضل بكثير ، ومفيدة للغاية.

يوجد في هذه الصفحة بعض القياسات المرجعية للجهد - هذه ليست شاملة ولكنها ستعطيك نكهة أداء مرجع فجوة النطاق.
اردوينو الجهد إشارة الأسئلة
الأسئلة المطروحة هنا هي:
كيف يتغير الجهد المرجعي مع درجة الحرارة؟
كيف يتغير الجهد المرجعي مع Vcc؟
ما مدى استقرار الجهد المرجعي بشكل عام؟
تذكر أن هذه القياسات تعتمد على اختبار عدد قليل من الرقائق ومجموعة واحدة أو مجموعتين من القياسات. وبالتالي سوف تعطي انطباعا وليس الجواب المطلق.

ملاحظة: تم إجراء جميع قياسات الجهد باستخدام ADS1115 على لوحة جانبية. تم إجراء جميع قياسات الجهد في الوضع التفاضلي ADS1115. أجريت قياسات درجة الحرارة باستخدام MAX6675 والنوع J الحرارية.

الدقة الأولية
الدقة الأولية سيئة عند ± 9٪ ولكن معايرة مرجع جهد Arduino يسمح لك بالتخلص من هذا الخطأ.
ملاحظة: تبلغ دقة MAX6143 الأولية 0.05٪ (180 مرة أفضل ، 9٪).


استقرار النتائج Arduino Uno USB Stability Measurements

يتم قياس لوحين ، الأول هو لوحة Arduino uno القياسية والثاني هو لوحة Arduino Nano. كلاهما يستخدم نفس المعالج ATMega328P.

أعطت القياسات التي أجريت في أوقات / أيام مختلفة من Arduino Uno مدعوم من مزود الطاقة USB (hub) النتائج التالية:
اردوينو أونو USB قياسات الاستقرار
اردوينو أونو (PDIP)



Arduino Uno USB Stability Measurements , mechatronics  اردوينو اونو

Arduino Uno USB Stability Measurements




يختلف جهد USB بنسبة 2.4٪ إلى 3.6٪ وهذا ليس له تأثير كبير على تباين الخطأ في المرجع (انظر قياسات الجهد أدناه).
لاحظ كيف يظل الجهد المرجعي ثابتًا ، أي أنه يحتوي على خطأ إزاحة ثابت. على الرغم من أن مرجع الجهد يبدأ من قيمة 1.070V فإنه يحتفظ بالقرب من تلك القيمة. قد يكون هذا بسبب عملية التصنيع ويبدو أنه يظل ثابتًا بمرور الوقت.
للحصول على أفضل مجموعة من النتائج ، يتم الحصول على التزويد من لوحة وصل USB مع ناتج الطاقة الخاص بها بينما في الأسفل يكون مخرج USB مباشر للكمبيوتر الشخصي. هذا الأخير يبدو أكثر استقرارا قليلا (نانو).
في كلتا الحالتين ، فإن استخدام مرجع الجهد الداخلي على متن الطائرة سوف يعطي نتيجة أكثر اتساقًا حيث سيكون له تنظيم أكثر تشددًا للجهد.
ملاحظة: تذكر أنك تستخدم وحدة تزويد USB 5V مباشرة (عند العمل على المقعد) أو تستخدم وحدة طاقة خارجية. يحتوي منظم 5 فولت على متن الطائرة - LD1117AG (نفس NCP1117) - على خطأ تشديد في المواصفات (0.1 فولت في 5 فولت = 2٪) من طاقة USB (انظر قياسات حساسية التزويد أدناه).
استنتاج حول الاستقرار
على الرغم من أن مرجع جهد Arduino يحتوي على خطأ إزاحة أولي (ربما بسبب عملية التصنيع) ، فإن استقرار المرجع لا يزال جيدًا. مع القياسات هنا تظهر بين 0.21 ٪ ~ 0.31 ٪ التغيير.
امدادات التيار الكهربائي الاستقرار
.استخدام ATMega382p على لوح لحام دون توصيله بجهد إمداد متغير

استنتاج بشأن امدادات التيار الكهربائي

إشارة الجهد ذات فجوة الحزمة تبدو جيدة جدًا ، كونها غير حساسة لتوفير التغييرات في الجهد. ينخفض ​​بمقدار 1.2mV لكل انخفاض في إمدادات فولت يبدأ من 0،05 ٪ خطأ في 5.26V العرض. إذا تم الإبقاء على الإمداد ثابتًا ، فيمكن أيضًا إزالة خطأ الإزاحة هذا عن طريق معايرة المرجع.
درجة الحرارة الاستقرار
باستخدام المزدوجات الحرارية (النوع J) مع رقاقة MAX6675 و MSOP Arduino Nano. تسخين الشريحة لمدة دقيقة والانتظار حتى تستقر درجة الحرارة. يحتوي MAX6675 الحرارية على خطأ في درجة حرارة الإزاحة ولكن ما نريده حقًا هو التغير في درجة الحرارة وكيف يرتبط الناتج المرجعي. يتم قياس درجة الحرارة المحيطة أيضًا باستخدام جهاز مختلف لإعطاء نقطة مرجعية للحرارية المزدوجة.
قياسات اردوينو نانو
لدرجات الحرارة المحيطة نانو تقاس الحرارية 24.5 درجة مئوية (يقول مقياس الحرارة الأصلي 23 درجة مئوية) قريبة جدا. درجة الحرارة رقاقة 30 درجة مئوية.

القياس الأول:
Vref هو 1.0674V.
Vref هي رقاقة تسخين 1.0659kV إلى 75 درجة مئوية
السقوط هو: -1.5mV
تغير على درجة الحرارة
للحصول على درجة حرارة 35 درجة مئوية ، يتغير الجهد المرجعي بمقدار -1.5mV. تقريبًا -1.5 / 35 = -0.043mV / ° C. لكن هذا يعتمد فقط على جهاز واحد وقياس واحد!

    التغيير هو -0.043mv / ° C

لزيادة درجة الحرارة من 25 درجة مئوية إلى 125 درجة مئوية (دلتا 100 درجة مئوية) يجب أن ينخفض ​​المرجع بنسبة 4.28mV. من حيث النسبة المئوية (4.28e-3 / 1.1) * 100 = 0.39٪.

للحصول على انخفاض في درجة الحرارة من 25 درجة مئوية إلى -40 درجة مئوية (دلتا -65 درجة مئوية) ، يجب زيادة المرجع بنسبة 2.79mV. من حيث النسبة المئوية (2.79e-3 / 1.1) * 65 = 0.16٪.

إذا كنت تفكر في ترانزستور بسيط يحتوي على تغيير في درجة الحرارة -2.1mV / ° C ثم لنفس دلتا درجة الحرارة ستحصل على تغيير جهد 201mV (تغيير بنسبة 18.2 ٪) لذلك فإن دائرة فجوة النطاق تعمل بشكل جيد!

القياس الثاني:
Vref هو 1.0665V.Temp 30 درجة مئوية
Vref هو رقاقة تسخين 1.0652kV إلى 75 درجة مئوية
السقوط هو: -1.3mV - هذه نتيجة مشابهة للنتيجة الأولى.

القياس الثالث:
Vref هو 1.0688V.Temp 30 درجة مئوية
Vref هي رقاقة تسخين 1.0683kV إلى 75 درجة مئوية
السقوط هو: -0.5mV - مختلف قليلاً ، ولكن في نفس النطاق.
استنتاج حول درجة الحرارة
أداء درجة الحرارة جيد مع تغيير مرجعي بنسبة 0.55٪ فقط على مدى درجة الحرارة الكامل (يقدر من 35 درجة مئوية إلى 75 درجة مئوية).

يتغير الجهد المرجعي بمقدار 0.003٪ لكل درجة مئوية (تقديري) [0.55٪ / 165 (تقديري)].
ملاحظة: يتمتع MAX6143 بأداء أفضل في درجات الحرارة بمقدار 1000 مرة عند 3ppm / ° C.

على مدى درجة الحرارة الكاملة (-40 درجة مئوية إلى + 125 درجة مئوية) ، سيتغير المرجع بحوالي 0.55 ٪ (0.39 ٪ + 0.16 ٪) = 0.55 ٪ (من 1V1) وهو أمر ليس سيئا للغاية.


يجب تغيير مرجع الجهد بمقدار + 2.79mV ~ -4.28mV (من 1V1) على درجات الحرارة هذه.
استنتاجات بشأن مرجع الجهد اردوينو
يمكن أن يكون للمرجع إزاحة كبيرة (بسبب عملية التصنيع) ± 9٪ وبالتالي قد تكون دقتها الأولية سيئة.
حساسية امدادات التيار الكهربائي: ~ -1.2mV لكل انخفاض امدادات فولت.
        هذا هو ~ -11 ٪ لكل انخفاض امدادات فولت.
درجة الحرارة الاستقرار: ~ 0.003 ٪ لكل درجة مئوية (المقدرة)
        ~ 0.55 ٪ على مدى درجة الحرارة الكاملة.
استقرار الجهد الناتج: ~ 0.31 ٪
للحصول على أفضل النتائج من مرجع جهد Arduino ، يجب معايرة ذلك. سيؤدي ذلك بعد ذلك إلى القضاء على الفولتية الناتجة عن عملية التصنيع وحساسية الفولتية في الإمداد (إذا ظل مصدر الجهد ثابتًا ، أي تم توفيره من خلال منظم).


هذا سيعطي ثباتًا عند 0.55 + 0.31 = ~ 0.86٪.
تذكر أن هذا تقدير يستند إلى عدد قليل جدًا من العينات ، لذلك قد تختلف نتائجك ، لكن ذلك يوضح أن المرجع يمكن أن يصبح أكثر استقرارًا إذا تمت معايرته. كما يوضح أن مرجع جهد Arduino قد يكون أكثر فائدة مما تتخيل.
كيفية قياس امدادات التيار الكهربائي
يمكنك تشغيل متحكم (ATMega328p - Uno و Nano) من 1V8 إلى 5V5. لا يستطيع المتحكم الدقيق اكتشاف هذه القيمة "الحقيقية" لجهد التزويد هذا إلا إذا كنت تستخدم جهد مرجعي معروف لمعرفة ذلك. هذا لأن ADC يقيس كل شيء بالنسبة إلى مرجع ، أي أن الجهد الكهربائي هو المرجع!

تحذير: في VCC = يمكن أن تكون الساعة 4.5V 20MHz وفي VCC = 2.7V يجب أن تكون سرعة الساعة <= 10MHz ، وبالنسبة لـ VCC = 1.8V يجب أن تكون سرعة الساعة <= 4MHz). راجع القسم "29.3 درجات السرعة" الذي يوضح أنه يجب تقليل تردد الساعة خطيًا مع تقليل جهد التيار الكهربائي.


إنها طريقة الفرز العكسي لقياس ADC. بدلاً من استخدام مرجع الجهد الكهربائي "كمرجع" ، يمكنك استخدام جهد التيار الكهربائي كمرجع و "مرجع الجهد الداخلي Arduino" باعتباره الكمية المراد قياسها.
يتم ذلك بهذه الطريقة لأنه لا يمكنك تحديد جهد Vcc كمدخل إلى ADC. راجع "مخطط كتلة ADC Mux" أدناه.
في هذه الحالة ، فإن الجهد الكهربائي "المرجعي" هو:
    VBIN = VCC / 1024 V / LSB [الأسرى (2،10) = 1024]
في المعادلة أعلاه VCC غير معروف (إلى متحكم!).
بقياس المرجع 1V1 ، والحصول على قيمة ADC لذلك ، يمكنك حل المعادلة
    VBIN = VREF / ADCVALUE

وبالتالي:
    VCC / 1024 = VREF / ADCVALUE
وبالتالي
    VCC = 1024 * (VREF / ADCVALUE)

و ...
    VCC = 1024 * (1V1 / ADCVALUE)
هنا 1024 هو الصحيح

(1024 هو مقسوم لـ VCC للجهد المرجعي).
نصيحة: نصيحة: للحصول على نتيجة أفضل قم بمعايرة مرجع جهد Arduino.
لمعرفة قيمة جهد التيار الكهربائي باستخدام مرجع جهد Arduino:
قم بتعيين مصدر مرجع ADC على Vcc.
(هذا خيار في ADC mux - انظر الرسم البياني أدناه)
تأخذ قراءة ADC من الجهد ذات فجوة الحزمة (مرجع الجهد اردوينو).
يمكنك استخدام المعادلات أعلاه لحساب جهد التيار الكهربائي أو اتباع المثال التالي.
مثال Sketch1 قياس الجهد العرض
ضع الكود التالي في المخطط داخل وظيفة setup ().

إذا قمت بمعايرة المرجع ، فقم بتغيير قيمة ...
arduinoADCcal
... لقيمتك المقاسة. تمثيل 1.1V هو 11000 وهو تمثيل عشري ثابت حيث يفترض أن تكون العلامة العشرية مكان واحد إلى اليمين. لذلك يمكنك التفكير في 11000 يمثل عدد 0.1mVs في الجهد الفعلي ، أي 11000 x 0.1e-3 = 1.1V
باستخدام ADS1115 أو الفولتميتر جيدة سوف تعطيك أرقام كافية. إذا كنت تستخدم DVM قياسي ، فستحصل على 3 أرقام فقط (على مدى 2 فولت) ، لذا اضبط آخر رقمين على الصفر.
البرنامج 
////////////////////////////////////////////////////////////////
void selfMeasureVcc(char *buf) {
uint8_t low,high; // ADC bytes.
// Default reference value. Set this to your measured reference voltage (or leave as is).
// The value uses an integer fixed point representation
// with the assumed decimal point one place to the right.
static unsigned long arduinoADCcal = 11000;

   if (strlen(buf)>1) {
      if (strlen(buf)<6)
         Serial.print(F("Not enough digits"));

      else if (strlen(buf)>6)
         Serial.print(F("Too many digits"));
      else
         arduinoADCcal = atoi(&buf[1]); // delay<nnn>

   } else if (strlen(buf)==1)
      Serial.print(F("Ref calibration value: ")); Serial.println(arduinoADCcal);


   // ADCSRA |= _BV(ADEN); // Enable ADC. Enabled by init() in Arduino code.

   ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // Set VCC ref and band gap as input.
   delay(2); // Vref settling time delay

   // Throw away 1st result as datasheet says
   // After switch, ref may be invalid.
   // Datasheet: "24.5.2 ADC Voltage Reference".
   ADCSRA |= _BV(ADSC); // Start conversion
   while ( bit_is_set(ADCSRA, ADSC) ); // Wait for conversion complete.

   ADCSRA |= _BV(ADSC); // Start conversion
   while ( bit_is_set(ADCSRA, ADSC) ); // Wait for conversion complete.

   // ADCL must be read first, then ADCH, to ensure that the content
   // of the Data Registers belongs to the same conversion
   // Datasheet Section "24.2 Overview"
   low = ADCL;  // Read ADCL first which blocks ADCH updates.
   high = ADCH; // After reading ADCH both registers can be updated by the chip.

   long ADCValue = (high << 8) | low;
   Serial.print(F("ADC value of 1V1 ref: "));  Serial.println(ADCValue);

   #define BINS 1024L // VCC/1024 is the value of each LSB of the ADC.

   Serial.println( (arduinoADCcal)* BINS );
   Serial.println( ((arduinoADCcal * BINS)+5L) );
   Serial.println( ((arduinoADCcal * BINS)+5L) / 10L );

   // Note +5 = middle of LSB bin
   // Calculate Vcc (in mV); 1125300 = 1.1*1024*1000
   // Here ccal value is 1.1*10e4 so no need for *1000 and must divide by 10.

   uint32_t res = (((arduinoADCcal * BINS)+5L) / 10L) / ADCValue;

   // Calculate Vcc (in mV); 1126400 = 1.1*1024*1000
   // should be 1024 / ADCValue = 1125300L / ADCValue; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
   // internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function)
   Serial.print(F("Measured (mV) ")); Serial.print(res); Serial.println(F(" mV"));
}

ترجمة البرنامج بالعربي
////////////////////////////////////////////////// //////////////
باطل selfMeasureVcc (char * buf) {
uint8_t منخفضة ، عالية ؛ // ADC بايت.
// القيمة المرجعية الافتراضية. اضبط هذا على الجهد المرجعي المقاس (أو اتركه كما هو).
// تستخدم القيمة عددًا صحيحًا من النقاط الثابتة
// مع العلامة العشرية المفترضة مكان واحد إلى اليمين.
ثابت غير موقعة طويلة arduinoADCcal = 11000 ؛

   if (strlen (buf)> 1) {
      إذا (strlen (buf) <6)
         Serial.print (F ("الأرقام غير كافية")) ؛

      وإلا إذا (strlen (buf)> 6)
         Serial.print (F ("عدد كبير جدًا من الأرقام")) ؛
      آخر
         arduinoADCcal = atoi (& buf [1])؛ // التأخير <nnn>

   } آخر إذا (strlen (buf) == 1)
      Serial.print (F ("Ref calibration value:"))؛ Serial.println (arduinoADCcal)؛


   // ADCSRA | = _BV (ADEN)؛ // تمكين ADC. يتم التمكين بواسطة init () في كود Arduino.

   ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1) ؛ // تعيين المرجع VCC والفجوة الفرقة كمدخل.
   تأخير (2) ؛ // Vref تسوية تأخير الوقت

   // رمي النتيجة الأولى كما تقول ورقة البيانات
   // بعد التبديل ، قد يكون المرجع غير صالح.
   // ورقة البيانات: "24.5.2 ADC Voltage Reference".
   ADCSRA | = _BV (ADSC) ؛ // ابدأ التحويل
   بينما (bit_is_set (ADCSRA ، ADSC)) ؛ // انتظر التحويل كاملاً.

   ADCSRA | = _BV (ADSC) ؛ // ابدأ التحويل
   بينما (bit_is_set (ADCSRA ، ADSC)) ؛ // انتظر التحويل كاملاً.

   يجب قراءة // ADCL أولاً ، ثم ADCH ، لضمان أن المحتوى
   // سجلات البيانات ينتمي إلى نفس التحويل
   // قسم ورقة البيانات "24.2 نظرة عامة"
   منخفض = ADCL ؛ / / اقرأ ADCL أولاً الذي يمنع تحديثات ADCH.
   عالية = ADCH ؛ // بعد قراءة ADCH يمكن تحديث كلا السجلين بواسطة الشريحة.

   ADCValue طويل = (ارتفاع << 8) | منخفض؛
   Serial.print (F ("ADC value 1V1 ref:"))؛ Serial.println (ADCValue) ؛

   #define BINS 1024L // VCC / 1024 هي قيمة كل LSB من ADC.

   Serial.println ((arduinoADCcal) * BINS)؛
   Serial.println ((((arduinoADCcal * BINS) + 5L)) ؛
   Serial.println ((((arduinoADCcal * BINS) + 5L) / 10L)؛

   // ملاحظة +5 = منتصف صندوق LSB
   / / حساب Vcc (في بالسيارات) ؛ 1125300 = 1.1 * 1024 * 1000
   / / هنا تبلغ قيمة ccal 1.1 * 10e4 لذلك لا داعي لـ * 1000 ويجب قسمة على 10.

   uint32_t res = (((arduinoADCcal * BINS) + 5L) / 10L) / ADCValue؛

   / / حساب Vcc (في بالسيارات) ؛ 1126400 = 1.1 * 1024 * 1000
   يجب أن يكون // 1024 / ADCValue = 1125300L / ADCValue؛ / / حساب Vcc (في بالسيارات) ؛ 1125300 = 1.1 * 1023 * 1000
   // internal1.1Ref = 1.1 * Vcc1 (لكل الفولتميتر) / Vcc2 (لكل وظيفة readVcc ())
   Serial.print (F ("Measured (mV)")) ؛ Serial.print (res)؛ Serial.println (F ("mV")) ؛
}

اردوينو الجهد المرجعي بلوك المخططات
اردوينو أونو / نانو ADC مسك الغزال الرسم البياني
اردوينو adc mux لعملية مرجعية ذات فجوة الحزمة الجهد
Arduino Voltage Reference اردوينو الجهد المرجعي

المصدر: ورقة بيانات ATMega328P

مرجع الجهد الداخلي ATTiny85

يتم ترتيب إشارة الجهد ATTiny85 ، والتي يمكن اختيارها إما 1V1 أو 2.56V ، بشكل مختلف قليلاً في ADC. لا يمكن إعداد دبوس AREF إلا كمدخل (لا يوجد تبديل FET يربط mux المرجع الداخلي بدبوس AREF). لذلك لا يمكنك إعداد مرجع جهد Arduino للقياس عند طرف AREF.

لذلك لا يمكنك معايرة ذلك مباشرة. قد تفترض إما أن لها القيمة المعلنة أو تقيس عرض Vcc بدقة ثم تأخذ قراءة ADC (لكن تذكر أن ADC لديها أخطاءها الخاصة أيضًا!).

إحدى الطرق التي من شأنها القضاء على أخطاء ADC هي التغذية بجهد متغير لإدخال ADC - الذي تقيسه. ثم قارنها بالقراءة من مرجع الجهد (قراءة ADC). بمجرد أن تتطابق القراءتان مع الجهد الكهربي للإدخال ، سيكشف الجهد المرجعي الحقيقي لـ Arduino (بالطبع فقط إلى دقة 1LSB).
اردوينو ATTiny85 ADC Mux بلوك الرسم البياني
إشارة الجهد الداخلي ATtiny85
Arduino Voltage Reference اردوينو الجهد المرجعي

المصدر: ورقة بيانات ATTiny85

معايرة مرجع الجهد اردوينو
لمعايرة المرجع في Uno أو Nano ، عليك فقط تشغيل المرجع وقياس الجهد عند دبوس المرجع. تذكر فقط

يجب أن يكون الشيء الموجود على السنون مكثفًا وليس له دوائر قيادة أخرى (إذا كنت ترغب في الحفاظ على الشريحة!).

تحذير: لا تقم بتوصيل أي إشارة جهد أخرى إلى دبوس VREF عند تشغيل مرجع الجهد Arduino (Uno / Nano) - لا توجد حماية ويمكن أن تتلف إما المرجع الخارجي أو الدائرة المرجعية الداخلية.


تشغيل المرجع يستخدم ببساطة كود Arduino التالي:

    التناظرية (الداخلي) ؛

ومع ذلك ، سوف تحتاج إلى تنشيط ADC لتمكين المرجع ، لذلك ستفعل قراءة بسيطة.

    analogRead (0) ؛ // يمكن أن يكون أي قناة

هذا بسبب الطريقة التي يتم بها كتابة التعليمات البرمجية "الأسلاك" - سجلات mux و REFS0 / 1 تتم كتابتها فقط قبل أمر قراءة ADC (داخل دالة analogRead () فقط).

لاردوينو ميجا يمكنك الاختيار من بين ما يلي:
    INTERNAL1V1
    INTERNAL2V56

ضع الكود أعلاه في جزء الإعداد () من Arduino Sketch.

الآن قم بتوصيل المتر المتعدد إلى دبوس VREF واكتب النتيجة (للاستخدام في التعليمات البرمجية الخاصة بك - انظر قياس الجهد الكهربائي للإمداد ، على وجه التحديد).

نصيحة: استخدم مقياس متعدد ، أو لمزيد من الأرقام ، استخدم ADS1115 في الوضع التفاضلي أو مقياس Fluke (مكلف للغاية).

نصيحة: أضف مكثفًا إلى دبوس Vref لتقليل الضوضاء الإضافية. يمكنني استخدام مكثف 100nF.

لضبط المرجع مرة أخرى لاستخدام العرض:

    التناظرية (DEFAULT) ؛

... مرة أخرى تليها ...

    analogRead (0) ؛ // يمكن أن يكون أي قناة

تم العثور على رمز العملية التناظرية هنا:
"C: / Program Files (x86) / Arduino/hardware/arduino/avr/cores/arduino/wiring_analog.c"

التعريفات (# تعريف) هنا:
C: / ملفات البرنامج (x86) / Arduino/hardware/arduino/avr/cores/arduino/Arduino.h

سيضع كود Arduino أعلاه (للاختيار المرجعي الداخلي) السجلات كما يلي (قسم ورقة البيانات: 24.9.1 سجل اختيار ADMUX ADC Multiplexer):

ADMUX بت 7 و 6 مجموعة عالية (REFS1 و REFS0).
بت ADMUX 3..0 لتعيين B1110.

ملاحظة: تنص ورقة البيانات على:
"قد تكون أول نتيجة لتحويل ADC بعد تبديل مصدر الجهد المرجعي غير دقيقة ، وينصح المستخدم بتجاهل هذه النتيجة."
(انظر قسم ورقة البيانات "24.5.2 ADC Voltage Reference").

لذلك يجب عليك التخلص من أول نتيجة ADC.

المصدر :

الجمعة، 28 فبراير 2020

مؤتمرات الروبوتات في دبي Robotics 2020 Conference in Dubai


مؤتمرات الروبوتات في دبي
مؤتمرات الروبوتات في دبي  Robotics 2020 Conference in Dubai

19-20 مارس 2020
ICASR 2020: مؤتمر التقدم المحرز في مؤتمر ثعبان الروبوتات ، دبي (19-20 مارس 2020)
ICEFM 2020: المجالات الكهرومغناطيسية في مؤتمر الميكاترونكس ، دبي (19-20 مارس 2020)
ICIRTCME 2020: الابتكارات والاتجاهات الحديثة والتحديات في مؤتمر هندسة الميكاترونكس ، دبي (19-20 مارس 2020)
ICMAEE 2020: مؤتمر الميكاترونيك وهندسة السيارات والبيئة ، دبي (19-20 مارس 2020)
ICMCEA 2020: مؤتمر هندسة وتطبيقات التحكم في الميكاترونيك ، دبي (19-20 مارس 2020)
ICMEAM 2020: مؤتمر الهندسة الميكانيكية والأتمتة والميكنة ، دبي (19-20 مارس 2020)
ICMEE 2020: مؤتمر الميكاترونيك والهندسة الكهرومغناطيسية ، دبي (19-20 مارس 2020)
ICMSRM 2020: مؤتمر النظم الميكانيكية والآليات الآلية ، دبي (19-20 مارس 2020)
ICPA 2020: مؤتمر المحركات البوليمرية ، دبي (19-20 مارس 2020)
ICRAMIR 2020: التطورات الحديثة في مؤتمر الميكاترونكس والروبوتات الذكية ، دبي (19-20 مارس 2020)
ICRDSR 2020: التطورات الأخيرة في مؤتمر ثعبان الروبوتات ، دبي (19-20 مارس 2020)
ICRIS 2020: مؤتمر الروبوتات وأجهزة الاستشعار الذكية ، دبي (19-20 مارس 2020)
ICRLAM 2020: مؤتمر أساليب تعلم الروبوت والتكيف ، دبي (19-20 مارس 2020)

 نظرة عامة على مؤتمر الروبوتات2020 Robotics 2020 Conference

عن المؤتمر
نيابة عن اللجنة التنظيمية والاستشارية ، يسرنا أن نرحب بالعلماء الأكاديميين والباحثين والباحثين والطلاب والخبراء في مجالات تطبيق الروبوتات في دبي ، الإمارات العربية المتحدة لحضور المؤتمر الدولي حول الميكاترونيك والروبوتات لتعزيز التقدم في هذا المجال من خلال المساهمة مع خبرتك لما يعد بأن يكون لقاءً شاملاً ومثيراً للغاية ، والاستمتاع بالتراث الفني الفريد الهائل والمناظر الطبيعية الرائعة في دبي ، الإمارات العربية المتحدة.



تعد المؤتمرات الدولية حول الميكاترونيك والروبوتات (Robotics-2020) ، والتي ستعقد خلال الفترة من 26 إلى 27 فبراير 2020 في دبي ، الإمارات العربية المتحدة ، حدثًا حاسمًا ، يستقطب نية مشارك عالمي حول تبادل وتبادل واستكشاف طرق جديدة للروبوتات والذكاء الاصطناعي و البحوث ذات الصلة وآخر التطورات. سيكون للحدث 5-6 مستوى عالمي (فئة مستشهد بها بدرجة عالية) متحدثون عامون ، متحدثون رئيسيون أنشئون ، متحدثون نشطون مدعوون ومتحدثون مساهمون جدد. بالإضافة إلى ذلك ، ستكون مجموعة متنوعة من العروض التقديمية للملصقات إلى جانب ورش العمل والدورات الخاصة مهتمة بالجمهور.



الهدف من Robotics-2020 هو تشجيع البحث الجيد وتأثير العالم الحقيقي في جو من التعاون الدولي الحقيقي بين العلماء والمهندسين من خلال الجمع مرة أخرى بين الباحثين من الطراز العالمي والمجتمعات الدولية ورؤساء الصناعة لمناقشة أحدث التطورات والابتكارات في مجالات الميكاترونكس والروبوتات.



نأمل مخلصين أن يكون Robotics-2020 بمثابة منصة دولية للقاء الباحثين من جميع أنحاء العالم ، وتوسيع الاتصال المهني وخلق فرص جديدة ، بما في ذلك إقامة تعاون جديد.



نتطلع لرؤيتك في Robotics-2020 في دبي ، الإمارات العربية المتحدة.

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

الجمهور المستهدف:

• مدراء الشركات

• الباحثون

• الأساتذة

• محاضرون

• العلماء

• الطلاب

• المديرين وخبراء ذكاء الأعمال

• طلاب البحوث ومعاهد البحوث

• وكالة الإعلان والترويج التنفيذي

يسلط الضوء على الروبوتات 2020:

بدأ المؤتمر من قبل المنتدى الرئيسي ، ونحن نشعر بالكلام لنعرب عن شكرنا لجميع المتحدثين الرئيسيين ، الضيوف الكرام ، وحضور المؤتمر لجعل هذا الحدث مثمرًا.

تم عقد الاجتماع من خلال جلسات مختلفة ، عقدت خلالها مناقشات على المسارات العلمية الرئيسية التالية:

الميكاترونيك

·         علم الروبوتات

التفاعل بين الإنسان والآلة

·         أتمتة

دور الأتمتة في الروبوتات

·         أنظمة التحكم

· أنظمة التحكم الذكية والتحسين

الأنظمة الذكية

· معايير السلامة للروبوتات والأنظمة

أدوات التشغيل الآلي

تطبيقات الأتمتة

نظرية التحكم وتقنية التحسين

طرق التحكم

نشكر جميع الأعضاء الذين دعموا المؤتمر من خلال تعزيز المحادثات الصحية. يسرنا أن نعلن عن مؤتمرنا المقبل "المؤتمر الدولي حول الميكاترونيك والروبوتات" الذي سيعقد في دبي ، الإمارات العربية المتحدة خلال الفترة 26-27 فبراير 2020


     اتحاد جمعية الروبوتات الآسيوية

     جمعية تطوير الأتمتة (A3)

     الرابطة الأسترالية للروبوتات والأتمتة

     CLAWAR

EURON

المجتمع التفاعل الروبوت الإنسان

IEEE الروبوتات وأتمتة المجتمع

الجمعية الهندية للروبوتات تحت الماء (IURS)

الرابطة الدولية للتعرف على الأنماط (IAPR)

الاتحاد الدولي للروبوتات

الأساس الدولي لأبحاث الروبوتات

جمعية الشبكة العصبية الدولية (INNS)

جمعية كوريا للروبوتات

RoboNED

منصة روبوتية مفتوحة (ROP)

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

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

جمعية الروبوتات في سنغافورة

جمعية سان فرانسيسكو للروبوتات الأمريكية (SFRSA)

     الجمعية الأمريكية للمهندسين الميكانيكيين

     معهد مهندسي الكهرباء والإلكترونيات

     جمعية مهندسي السيارات

     جمعية مهندسي التصنيع

الجمعة، 20 ديسمبر 2019

مشروع عرض الوقت علي شاشة LCD باستخدام الاردوينو

مشروع عرض الوقت علي شاشة ال سى دي باستخدام الاردوينو
تعمل الشاشة في احد الحالات التالية:
 استقبال الأوامر من الأردوينو وتنفيذها، مثلا : أمر تهيئة ومسح الشاشة :
سيكون بهذا الشكل 
lcd.begin(16,2);
lcd.clear();
استقبال المعلومات من الأردوينو وعرضها، مثلا : كتابة جملة معينة :
يمكنك استخدام هذا الامر بهذه الطريقة
lcd.print("Hello");

توصيل الدارة :

قم بتوصيل الدارة كما هو موضح بالصورة التالية :
ساعة رقمية باستخدام الاردوينو
سنقوم بعمل كود يقوم على حساب التوقيت لتعمل الساعة بشكل صحيح، حيث سيقوم بحساب مرور 60 ثانية ليقوم بزيادة عدد الدقائق وهكذا ايضا مع الساعات. سيتم استخدام مفاتيح الضغط ليقوم البرنامج بمراقبتها في البداية ليتم ضبط التوقيت الصحيح.
ساعة رقمية باستخدام الاردوينو

الكود البرمجي

قم برفع الكود التالي على الأردوينو :
#include <LiquidCrystal.h>

#define HOUR_BUTTON 6
#define MINUTE_BUTTON 7
#define TICK_LENGTH 60000
#define CHECK_TIME 250


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

unsigned int minute = 0;
unsigned int hour = 01;
unsigned long previousMillis = 0;
unsigned char am = 1;

void setup() {
  // put your setup code here, to run once:
  lcd.begin(16, 2);
  pinMode(HOUR_BUTTON, INPUT);
  pinMode(MINUTE_BUTTON, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  checkTick();
  lcd.setCursor(0,0);
  lcd.print("Time:");
  lcd.setCursor(6,1);
  lcd.print(hour);
  lcd.print(":");
  lcd.print(minute);
  if(am == 1) lcd.print(" AM");
  else lcd.print(" PM");
}

void checkTick() {
   unsigned long currentMillis = millis();
   
   if ((unsigned long)(currentMillis - previousMillis) >= TICK_LENGTH) {
      tick();
      previousMillis = currentMillis;
   }
   if((unsigned long)(currentMillis - previousMillis) >= CHECK_TIME){
      readHourButton();
      readMinuteButton();
   }
}

void tick() {
  minuteUp();
}

  
void readHourButton() {
  if (digitalRead(HOUR_BUTTON) == HIGH) {
    delay(200);
    hourUp();
  }
}

void readMinuteButton() {
  if (digitalRead(MINUTE_BUTTON) == HIGH) {
    delay(200);
    minuteUp();
  }
}

void hourUp() {
  hour = hour + 1;
  if (hour > 12) {
    lcd.clear();
    hour = 1;
    if(am == 1) am = 0;
    else am = 1;
  }
}

void minuteUp() {
  minute = minute + 1;
  if (minute > 59) {
    minute = 0;
    hourUp();
  }
}

شرح الكود :

في البداية نقوم بإضافة مكتبة شاشة الـ LCD وتسمية منافذ الأردوينو المستخدمة مع مفاتيح الضبط :
#include <LiquidCrystal.h>

#define HOUR_BUTTON 6
#define MINUTE_BUTTON 7
ثم نقوم نقوم بالإعلان عن بعض الثوابت التي سيتم استخدامها لاحقا :
#define TICK_LENGTH 60000
#define CHECK_TIME 250
بعد ذلك نقوم بالإعلان عن بعض المتغيرات. يستخدم المتغير minute لحفظ الدقائق. والمتغير hour لحفظ الساعات. والمتغير am لتسجيل ما إذا كان التوقيت صباحا أم مساءاً. وسيتم تسجيل الوقت الخاص بأخر مرة تم حساب التوقيت في المتغير previousMillis .
unsigned int minute = 0;
unsigned int hour = 01;
unsigned long previousMillis = 0;
unsigned char am = 1;
في الدالة ()setup قمنا بضبط الاعدادات اللازمة للمشروع مثل ضبط ارجل الاردوينو كمخارج للمفاتيح وتشغيل الشاشة LCD :
void setup() {
  // put your setup code here, to run once:
  lcd.begin(16, 2);
  pinMode(HOUR_BUTTON, INPUT);
  pinMode(MINUTE_BUTTON, INPUT);
}
في الدلة ()loop، نقوم بحساب عدد الثوان التي مرت، فإذا كانت 60 ثانية نقوم بزيادة عدد الدقائق في المتغير minute. كما نقوم بإختبار الدقائق التي مرت، فعند مرور 60 دقيقة نقوم بزيادة عدد الساعات في المتغير hour. ثم نقوم بالنهاية بعرض الدقائق والساعات على شاشة الـ LCD.
أيضا اثناء الإختبار نقوم بإختبار المفاتيح إذا ما تم الضغط عليها ام لا عبر استدعاء الدالة ()checkTick . فإذا تم الضغط على مفتاح الدقائق نقوم بزيادة عدد الدقائق في المتغير minute، ويعمل بنفس الطريقة عند الضغط على مفتاح الساعات.
void loop() {
  // put your main code here, to run repeatedly:
  checkTick();
  lcd.setCursor(0,0);
  lcd.print("Time:");
  lcd.setCursor(6,1);
  lcd.print(hour);
  lcd.print(":");
  lcd.print(minute);
  if(am == 1) lcd.print(" AM");
  else lcd.print(" PM");
}
سنقوم بعمل عدد من الدوال المستخدمة في المشروع :
الدالة ()checkTick ، في كل مرة يتم استدعائها تقوم بحفظ الوقت الذي مضى منذ عمل Reset للأردوينو. ثم تتم مقارنة الوقت الحالي بقيمة مسبقة فإذا اصبح الفارق بين التوقيتين يتعدى الـ TICK_LENGTH الذي تم تحديده في أول البرنامج، فهذا يعني انه قد مرة دقيقة فنقوم بزيادتها بإستخدام الدالة ()tick. ثم نقوم بتسجيل هذا التوقيت لإستخدامه مرة ارخى لمعرفة هل مر دقيقة أخرى ام لا.
 unsigned long currentMillis = millis();
   
   if ((unsigned long)(currentMillis - previousMillis) >= TICK_LENGTH) {
      tick();
      previousMillis = currentMillis;
   }
ايضا يتم التحقق ما إذا تعدى الفارق في التوقيت قيمة CHECK_TIME ، فعندها نقوم بقراءة المفاتيح المستخدمة في تعديل التوقيت.
   if((unsigned long)(currentMillis - previousMillis) >= CHECK_TIME){
      readHourButton();
      readMinuteButton();
   }
الدالة ()tick، تقوم بإستدعاء الدالة ()minuteUp، والتي بدورها تقوم بزيادة عداد الدقائق.
void tick() {
  minuteUp();
}

الدالة ()readHourtButton تقوم بقراءة المفتاح الخاص بتعديل خانة الساعات فإذا تم الضغط عليه تقوم بتشغيل الدالة ()hourUp التي تقوم بزيادة عداد الساعات.
void readHourButton() {
  if (digitalRead(HOUR_BUTTON) == HIGH) {
    delay(200);
    hourUp();
  }
}
الدالة readMinuteButton() تقوم بقراءة المفتاح الخاص بتعديل خانة الدقائق فإذا تم الضغط عليه تقوم بإستدعاء دالة ()minuteUp التي تقوم بزيادة عداد الدقائق.
void readMinuteButton() {
  if (digitalRead(MINUTE_BUTTON) == HIGH) {
    delay(200);
    minuteUp();
  }
}
الدالة hourUp() في كل مرة يتم إستعداء هذه الدالة تقوم بزيادة عداد الساعات بمقدار واحد وعمل اختبار اذا كان التوقيت تغير من الصباح إلى المساء .
void hourUp() {
  hour = hour + 1;
  if (hour > 12) {
    lcd.clear();
    hour = 1;
    if(am == 1) am = 0;
    else am = 1;
  }
}
الداله minuteUp() في كل مرة يتم إستدعائها تقوم بزيادة عداد الدقائق بمقدار واحد وعمل اختبار اذا وصل عداد الدقائق الى 60 تقوم بتصفير عداد الدقائق و زيادة عداد الساعات بمقدار واحد .
void minuteUp() {
  minute = minute + 1;
  if (minute > 59) {
    minute = 0;
    hourUp();
  }
}

الخميس، 19 ديسمبر 2019

مشروع قياس و قراءة درجة حرارة الطقس عبر شاشة lcd باستخدام الاردوينو Arduano

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

الشاشة 

تعمل الشاشة في احد الحالات التالية:
استقبال أمر من الأردوينو وتنفيذه، على سبيل المثال : أمر التهيئة ومسح الشاشة:
lcd.begin(16,2);
lcd.clear();
استقبال معلومات من الأردوينو وعرضها، على سبيل المثال : كتابة جملة معينة :
lcd.print("Hello");
 للإطلاع على المزيد حول شاشة الـ LCD قم بالإطلاع على درس التحكم بشاشة LCD

حساس الحرارة LM35


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

توصيله في الدارة :

مُخرج هذا الحساس يكون قيمة تناظرية (Analog) ، اي نحتاج إلى توصيله على أحد المنافذ التناظرية (Analog) في الأردوينو. الأطراف التناظرية في الأردوينو من A0 إلى A5 .
جهاز لقياس و التحكم فى درجة الحرارة باستخدام LM35
الطرف (بداية من اليسار)التوصيل
1Vcc
2Output To Arduino
3Ground

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

شرح الدارة

قم بتوصيل الدارة كما هو موضح بالصورة التالية :
جهاز لقياس و التحكم فى درجة الحرارة باستخدام LM35
سيقوم الحساس LM35 بقياس درجة الحرارة بإستمرار وعرضها على شاشة الـ LCD وبإستخدام مفتاح التحكم (Push Buttons) يمكننا التحكم في رفع أو خفض درجة الحرارة المطلوبة في المكان.

الكود البرمجي :

قم بكتابة الكود التالي ورفعه على الأردوينو :
#include <LiquidCrystal.h>
#define tempPin A0 
#define tup 10 
#define tdown 9
 
float temp; 
int defC = 23; 
int upstate = 0; 
int downstate = 0; 

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2); 
  lcd.setCursor(0, 0); 
  lcd.print("Config.."); 
  delay(900);
  lcd.clear(); 
  pinMode(tup, INPUT); 
  pinMode(tdown, INPUT); 
}

void loop() {
  upstate = digitalRead(tup); 
  downstate = digitalRead(tdown); 
  int tvalue = analogRead(tempPin);  
  
  if (upstate == HIGH) { 
    defC = defC + 1; 
  }
  if (downstate == HIGH) { 
    defC = defC - 1; 
  }
  temp = tvalue * 0.48828;

  lcd.setCursor(0, 0);
  lcd.print("Current ");
  lcd.print (temp);  
  lcd.print ('C');
  
  lcd.setCursor (0, 1); 
  lcd.print ("Desired "); 
  lcd.print (defC);
  lcd.print ('C');

  delay(200);
}

شرح الكود :

في البداية، نقوم بإضافة المكتبة الخاصة بشاشة الـ LCD :
#include <LiquidCrystal.h>
ثم نقوم بتسمية منافذ الأردوينو المستخدمة في المشروع :
#define tempPin A0 
#define tup 10 
#define tdown 9
بعد ذلك، نقوم بالإعلان عن المتغيرات التي سيتم استخدامها في البرنامج لتسجيل قيم درجات الحرارة :
float temp; 
int defC = 23; 
int upstate = 0; 
int downstate = 0;
يتم تسجيل درجة الحرارة الناتجة من حساس الحرارة على المتغير temp. واستخدام المتغير defC لتسجيل درجة الحرارة المطلوبة. والمتغير upstate لتسجيل حالة المفتاح الأول الخاص برفع درجة الحرارة المطلوبة. والمتغير downstate لتسجيل حالة المفتاح الثاني الخاص بخفض درجة الحرارة المطلوبة.
ثم نقوم بإنشاء المتغير الخاص بشاشة الـ LCD وتحديد الأرجل التي سيتم توصيلها مع الأردوينو :
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
في الدالة ()setup، نقوم بضبط الإعدادات اللازمة، كإعدادات شاشة الـ LCD وضبط المفاتيح (Push Buttons) كمخرج :
void setup() {
  lcd.begin(16, 2); 
  lcd.setCursor(0, 0); 
  lcd.print("Config.."); 
  delay(900);
  lcd.clear(); 
  pinMode(tup, INPUT); 
  pinMode(tdown, INPUT); 
}
في الدالة ()loop، نقوم بقراءة المفاتيح (Push Buttons) ، وقراءة قيمة الجهد الناتج من الحساس :
  upstate = digitalRead(tup); 
  downstate = digitalRead(tdown); 
  int tvalue = analogRead(tempPin);
ثم نقوم بإختبار ما إذا تم الضغط على المفاتيح. فعند الضغط على مفتاح زيادة درجة الحرارة المطلوبة نقوم بإضافة 1 إلى درجة الحرارة المسجلة في المتغير defC. ويتم العكس عند الضغط على مفتاح خفض درجة الحرارة المطلوبة :
   if (upstate == HIGH) { 
    defC = defC + 1; 
  }
  if (downstate == HIGH) { 
    defC = defC - 1; 
  }

Anti-Theft System نظام حماية ضد السرقة : نظام انذار باستخدام PIR Sensor مع الاردوينو

حساس الحركة PIR Sensor
يعمل الحساس على قياس مقدار التغير في الاشعه تحت الحمراء الصادرة عن الاجسام و في حالتنا الانسان. ولكن لا يقوم الحساس بقياس كمية الأشعة الصادرة من الإنسان بل التغير الحادث لهذه الأشعة، وهكذا يشعر الحساس بوجود حركة.
يتم توصيله إلى الأردوينو كما هو موضح بالجدول :

الطرف (بداية من اليسار) التوصيل
1 GND
2 Output To Arduino
3 VCC
توصيل الدارة
قم بتوصيل الدارة كما هو موضح بالصورة التالية :

سنقوم بكتابه برنامج، بحيث يقوم الحساس بإلتقاط ما إذا كان هناك حركة ام لا، , وعند الكشف عن وجود حركة يقوم بإرسال اشارة إلى الأردوينو الذي يقوم بدوره بتشغيل الـ Buzzer وإضاءة الـ LED للتنبيه.


// led
#define LED 13
// pir
#define INPUT 2
// buzzer
#define SPEAKER 10

int pirFlag = 0;
int val = 0;


void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(INPUT, INPUT);
  pinMode(SPEAKER, OUTPUT);
  Serial.begin(9600);
}


void loop()
{
  val = digitalRead(INPUT);
  // test this val
  if (val == HIGH){
    digitalWrite(LED, HIGH);
    tone(SPEAKER, 160, 300);
    delay(300);
    if (pirFlag == 0){
 Serial.println("Motion detected!");
 pirFlag = 1;
    }
  } 
  else{
    digitalWrite(LED, LOW);
    noTone(SPEAKER);
    if (pirFlag == 1){
 Serial.println("Motion ended!");
 pirFlag = 0;
    }
  }
}

شرح الكود :

في البداية، نقوم بتسمية منافذ الأردوينو المستخدمة في المشروع، من أجل تسهيل عملية التعامل معها. ثم نقوم بالإعلان عن المتغيرات التي سنحتاج استخدامها في البرنامج.
سيتم استخدام المتغير pirFlag لتسجيل حالة الحساس. نقوم بوضع قيمة ابتدائية للحالة وهي 0. والمتغير val يستخدم لتسجيل الإشارة القادمة من الحساس إلى الأردوينو حسب وجود حركة ام لا.
// led
#define LED 13
// pir
#define INPUT 2
// buzzer
#define SPEAKER 10

int pirFlag = 0;
int val = 0;



في الدالة ()setup، قمنا بضبط المنافذ المستخدمة إما مدخله أو مخرجة. يتم ضبط الـ LED والـ Buzzer كمخرج، والمنفذ الموصل مع الـحساس كمدخل.

ويتم تفعيل الاتصال التسلسلي من أجل الطباعة على الشاشة التسلسلية Serial Monitor عند الكشف عن وجود حركة.
void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(INPUT, INPUT);
  pinMode(SPEAKER, OUTPUT);
  Serial.begin(9600);
}


في دالة الـ ()loop، نقوم بقراءة الإشارات القادمة من الحساس واختبارها.
 إذا كانت الإشارة High
اي انه تم الكشف عن وجود حركة، نقوم بتشغيل ال LED والـ Buzzer . ثم نقوم بتحقق من الحالة المسجله في المتغير PirFlag إذا كانت 0 نقوم بطباعة رسالة تدل على وجود حركة على الشاشة التسلسلية وتغير قيمة المتغير pirFlag إلى 1 .

val = digitalRead(INPUT);
  // test this val
  if (val == HIGH){
    digitalWrite(LED, HIGH);
    tone(SPEAKER, 160, 300);
    delay(300);
    if (pirFlag == 0){
 Serial.println("Motion detected!");
 pirFlag = 1;
    }
  } 
في حال كانت الإشاءة القادمة من الحساس LOW اي انه لم يتم الكشف عن وجود حركة، نقوم بإيقاف تشغيل الـ LED و الـ Buzzer . والتحقق من الحالة المسجله لدى الـ pirFlag إذا كانت 1 اي انه كانت هناك حركة وتوقفت فنقوم بالطباعة على الشاشة التسلسلية رساله تدل على وقف الحركة، وتغير قيمة المتغير pirFlag إلى 0 .
else{
    digitalWrite(LED, LOW);
    noTone(SPEAKER);
    if (pirFlag == 1){
 Serial.println("Motion ended!");
 pirFlag = 0;
    }
  }
اذا تم استخدام سنسور التراسونك


int echoPin =8; 
int trigPin =9; 
int Led_Red =7;
 int Led_Green =6; 
int Buzzer=5; 
void setup() { 
Serial.begin (9600);
 pinMode(trigPin, OUTPUT); 
pinMode(echoPin, INPUT); 
pinMode(Led_Red, OUTPUT); 
pinMode(Led_Green, OUTPUT);
 pinMode(Buzzer, OUTPUT); } 
void loop() { 
long duration; //المدة 
long distance;//المسافة 
digitalWrite(trigPin, LOW); 
delay(15); 
digitalWrite(trigPin, HIGH); 
delay(10); 
digitalWrite(trigPin, LOW);
 duration = pulseIn(echoPin, HIGH); 
distance= duration*0.034/2; 
Serial.print(distance); 
Serial.println(" cm"); 
if (distance < 10) {
 digitalWrite(Led_Red,HIGH); digitalWrite(Buzzer,HIGH); digitalWrite(Led_Green,LOW); }
 else { digitalWrite(Led_Red,LOW); digitalWrite(Buzzer,LOW); digitalWrite(Led_Green,HIGH);} 
delay(500); }


Circuit Connections:-
Trigger pin to pin 12
Echo pin to pin 13
piezo Buzzer to pin 8
led to pin 11
Ground pin of piezo and sensor to ground
Note:- if you are using a 9v battery i found out that you
have to connect the Vcc pin of the sensor to 5v ,while if
you are using your computer as a power source you have to
connect the Vcc pin to the Vin of your arduino

تستخدم الدالة tone() لتوليد اشارات يكمننا من سماعها عن
 طريق سماعه او Buzzer

tone(SPEAKER, 160, 300);

noTone(SPEAKER);
tone(المدة الزمنية , التردد ,اسم الرجل)
noTone(اسم الرجل)

الثلاثاء، 5 نوفمبر 2019

وظيفة مهندس ميكاترونكس من الاردن - ميكاترونك Mechatronics engineer job


وظيفة مهندس ميكاترونكس من الاردن - ميكاترونك
 Mechatronics engineer job






وظيفة مهندس ميكاترونيك
وظيفة مهندس ميكاترونكس
Mechatronics engineer  job

شركة زراعية في عمان الاردن تطلب مهندس ميكاترونكس خبرة
للتفاصيل و التقديم
إلق نظرة على هذه الوظيفة في Agrimatco LTD: https://www.linkedin.com/jobs/view/1520691971



تعريف بعلم الميكاترونيات والروبوتات وفروعه، ومصادر مفتوحة لإتقانها


تعريف بعلم الميكاترونيات والروبوتات وفروعه، ومصادر مفتوحة لإتقانها

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

و نظرًا لأهمية هذا العلم سوف نذكر تعريفًا لكل مجال من مجالات علم الميكاترونيات وبعض المصادر المفتوحة على الإنترنت حتى نتمكن من تعلم هذا العلم الممتع والجديد نسبيًا:

1- الهندسة الميكانيكية :
علم الميكاترونيات يعتمد بشكل كبير على عدة أفرع من الهندسة الميكانيكة، مثل التصميم الميكانيكي، ونظرية الآلات، ودراسة الاتزان في حالتي السكون والحركة من Classical Mechanics وهو من فروع الفيزياء ولكن مهندسي الميكانيكا من أكثر التخصصات التي تتعامل مع هذا العلم، لذلك سوف نلحقه بها.

بالنسبة لهندسة التصميم الميكانيكي، يتم دراسة كيفية تأثير أنواع الأحمال المختلفة على المواد، وبناءً على ذلك يتم تحديد نوع المادة المناسبة للتطبيق المعين الذي نهتم به، بعد ذلك يتم عمل نموذج في برنامج رسم هندسي CAD Program لكل من هذه الأجزاء على حدة، ثم تجميعها بعد اختيار الأبعاد المناسبة والمواد المستخدمة في التصميم في رسم تجميعي Assembly Drawing، وبعد هذه الخطوة تأتي المحاكاة، حيث يتم تعريض التصميم للأحمال المتوقعة سواء كانت ثابتة أو متغيرة والتي تم التصميم على أساسها، ومقارنة الأحمال على الأجزاء بالأحمال التي تم حسابها في خطوة التصميم السابقة، والتأكد من أن التصميم آمن تمامًا، بعد ذلك يتم عمل رسومات التشغيل Working Drawing وهي التي تستخدم في تصنيع الأجزاء التي تم تصميها لتصبح موجودة في الواقع.

بالنسبة لنظرية الآلات، فإن المطلوب هو تخليق نوع معين من الحركة Motion Synthesis وقد تكون الحركة المطلوبة حركة خط أو نقطة على حسب التطبيق، ومن ثم يتم دراسة Position Analysis وتحليل السرعة والعجلة ثم القوى (ولاحظ هنا أن عند هذه النقطة، التي يتم فيها تحديد القوى ندخل في خطوة التصميم الميكانيكي السابقة، وهكذا هذا العلم متداخل)
دراسة الحركة Dynamics Analysis تأتي للتأكد من أن التصميم يعمل بشكل صحيح في بيئة المحاكاة، فلا تتداخل أجزاء التصميم الكلي الذي تم تجميعه، والتأكد من أنها تنتج الحركة المطلوبة، ويمكن استخدام برامج CAD في هذا وقد يتوقف دورها على إنتاج حركة صورية Animation فقط ومن ثم لا تنتج حسابات يمكن الاعتماد علىها في دراسة الحركة، أو استخدام برنامج مخصص لهذه الدراسة بالذات مثل MSC Adams أو SIMULINK SimMechanics.





يمكنك فهم دراسة السكون والحركة Statics and Dyn7amics من كورسيرا مجموعة رائعة وهي حسب ترتيب المستوى كالآتي :

https://www.coursera.org/learn/engineering-mechanics-statics

https://www.coursera.org/learn/engineering-mechanics-statics-2?fbclid=IwAR25hV7cT-Alm_WGliMSh36VOfWUFsjWeO4NvIzh8_k8pf-on2GOZ-d-UIk

https://www.coursera.org/learn/dynamics

https://www.coursera.org/learn/motion-and-kinetics

يمكنك تعلم أساسيات التصميم Mechanics of Materials من هذه المصادر:






http://ow.ly/MTKnW

http://ow.ly/MTKts

والمصدرالتالي عبارة عن أساسيات لبرنامج SolidWorks:

http://ow.ly/MTKzr

والمصدر التالي عبارة عن أساسيات لبرنامج CATIA:

http://ow.ly/MTNgw

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





2- الهندسة الكهربية :
نظرية الدوائر الكهربية والغرض منها في الصورة الكبيرة للنظام الميكاتروني هو تغذية المحركات Actuators بالطاقة المطلوبة، وتعديل خرج الحساسات ليناسب التعامل مع نظام التحكم، ويكون الهدف غالبًا عمل تنقية لخرج الحساسات، من الترددات العليا التي تتداخل معها قبل عمل تكبير لها، لتتناسب مع دخل نظام التحكم.

يمكنك بناء معرفة بفهم واضح للمبادئ الأساسية لتحليل الدوائر والتعرف على العناصر الأساسية فيها، وتطبيقاتها في الأجهزة المحيطة بنا،عن طريق متابعة سلسلة الدوائر الكهربية الخطية من معهد ولاية جورجيا للتكنولوجيا على موقع كورسيرا :

https://www.coursera.org/course/circuits

يتبع هذه السلسلة في طريق إتقان هذه الجزئية سلسلة أخرى بعنوان مقدمة لعلم الإلكترونيات، يتناول دراسة بمستوى أعلى من سابقه لبعض العناصر الإلكترونية، مثل المكبر OP-Amp الدايود والترانزستور وتصميم الفلاتر من هنا :

https://www.coursera.org/course/introtoelectronics





3- النمذجة والمحاكاة والتحكم :
الهدف الأساسي من هذه الخطوة هو تصميم نظام التحكم وتحديد قدرة المحركات المطلوبة لتحريك الروبوت، ولاحظ التداخل بين فروع هذا العلم، ففي الخطوة الأخيرة من الهندسة الميكانيكية لدينا نموذج تم عمله في برنامج تصميم ميكانيكي ثم في برنامج تحليل للحركة، وهكذا يكون لدينا نموذج ولا نحتاج إلي هذه الخطوة هنا، وقد يتم تمثيل النظام عن طريق معادلة تفاضلية في Time domain أو Transfer Function في الـ S-Domain أو عن طريق تعريف النظام بمجموعة من المدخلات ومجموعة مقابلة من المخرجات الصحيحة كما يحدث في System Identification ونخلص من هذه النقطة إلى أنه يمكن أن يتم بناء النموذج بطرق عديدة، والاختلاف بينها يكون في مستوي الدقة المقبول.
المحاكاة هي عبارة عن حل المعادلات التي تصف النظام الذي نريد دراسة سلوكه بناءً على بعض المدخلات، بفرض أن لدينا نظام مثل ذراع روبوت ينقل شيء من مكان لآخر أو يقوم بعملية لحام أو دهان، بعد عمل النموذج تتم المحاكاة يتم فيها إدخال قيم معينة للمحركات في مفاصل الذراع من أجل أن يقوم بالمهمة المرغوبة، وغالبًا نجد أن النظام لا يقوم بالأمر المطلوب بمستوى الآداء المرضي مثل السرعة أو الثبات عند الوضع النهائي، أو أن النظام غير متزن أصلًا وهنا يأتي تصميم نظام التحكم.
الهدف الأساسي لنظام التحكم هو جعل المنظومة التي تم عمل نموذج لها متزنة بالكامل، وبعد ذلك يتم وضع تصميم معين لمستوى الآداء المطلوب، مثل بطء النظام أو سرعته في الوصول للهدف بأقل حيود في اتجاه الزيادة Over Shoot والتأكد من الثبات عن القيمة النهائية المطلوبة Zero Steady State error.

من البرامج الأساسية في النمذجة والمحاكاة وتصميم التحكم هو Matlab وهو سهل في الاستخدام والتعلم مقارنة بلغة C أو C++يمكن اكتساب خبرة جيّدة فيه، إذ لا غنى عنه للمهندسين من خلال الكورس :

https://iversity.org/en/courses/modelling-and-simulation-using-matlab?fbclid=IwAR3zMppT-Oox3jjfhxDRGZpzWOoed5IiaeV3QrGRRpUbr9gayP3RB_1BR70

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

http://ow.ly/MTKTV

https://www.coursera.org/course/conrob

http://web.mit.edu/nsl/www/videos/lectures.html





4- البرمجة:
يسأل الكثيرون عن لغة البرمجة المناسبة لمهندسين الميكاترونيات، حتى الآن أعتقد أن الترتيب الحالي من حيث الأهمية واقعي:
لغة Matlab هي الأهم وقد ذكرت مصدرًا جيدًا لتعلمه في الجزء السابق، ومن الجيد أن تتعلم كيفية ربط الماتلاب مع الHardware المختلفة مثل Arduino وLego Mindstorms وكيف تستعمل كل منها على حده، يمكن أن تساعدك هذه الخبرة في إنجاز تجارب سريعة تفهم منها الكثير من الأشياء النظرية في الدراسة.
كما يجب أن تقضي وقتاً طويلًا مع Matlab Robotics Toolbox وقد ذكرته في كورس د. بيتر كورك وهو أصلًا من إنتاجه، ويكون أفضل إذا استطعت متابعة الكورس معه.

يأتي بعده في الأهمية لغات C / C++ تكتسب من خلال تعلمها أساسيات البرمجة (بغض النظر عن اللغة) وهذه الخبرة لا غنى عنها، كما أنك سوف تحتاج إليهما في حالة برمجة الأنظمة المدمجةEmbedded System on low level وللعلم، فإن برنامج Matlab يمكنه أن ينتج كود C لبعض الـHardware باستخدام Automatic code generation.

ثم لغة Arduino وهي تعتمد على C/C++ في الأساس وتستخدم C-Compiler، ولكن الدوال الموجودة تجعل البرمجة سهلة جدًا للمبتدئين.
تجد في هذا المصادر كيفية تعلم Arduino وكيفية ربط Matlab& Arduino.

http://www.arduino.cc/en/Tutorial/HomePage

http://ow.ly/MTLtj

https://www.mathworks.com/hardware-support/arduino-matlab.html?fbclid=IwAR07OI_Yg7sipfAI2BZnKC3hP3jgN-QjoAjDgo2QlXUv5P-1RDlqs44hiFg

مصادر لتعلم لغات C/C++ :

http://www.tutorialspoint.com/cprogramming/index.htm

http://ow.ly/MTLKU

https://www.coursera.org/course/cplusplus4c

وإذا كنت تحتاج إلى تعلم برمجة الأنظمة المدمجة فيمكن أن ترجع لهذه المقالة على المدونة (مصادر تعلم الأنظمة المدمجة):

http://ow.ly/MTMnI

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

يمكن تعلم الذكاء الاصطناعي بالتركيز على علم الروبوتات من كورس رائع على يوداسيتي، يقدمه سباستيان ثرن قائد فريق سيارة جوجل، وفي الكورس يتم بناء Autonomous Robotic Systems أو نظام ذاتي التحكم من هنا:

https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373?fbclid=IwAR1KtwDftOInvenQLbVrO9erTgjw4Y9oDSC1JdbILrK8t74q6TRJiPzrpOo





6- علم الروبوتات :
هو أصلًا تطبيق لعلم الميكاترونيات، ولشهرته الواسعة يستخدمه البعض كاسمٍ بديلٍ له، والبداية في فهم هذا العلم غالبًا ما تكون بدراسة الروبوتات الصناعية (Industrial Arm Robots)، ونتعلم فيه كيفية توصيف وضع الجسم Pose (مكانه ودورانه) في الفراغ الثلاثي وبالنسبة لمحاور إحداثيات مختلفة، ثم دراسة الحركة وتوصيف حركة نهاية ذراع الروبوت End Effect-or بسبب حركة المحركات الموجودة في مفاصل الذراع والتي تتحكم بمجموعها في حركة نهاية الذراع لكي يتمكن من إنجاز مهمة معينة مثل اللحام أو الدهان ونقل شئ معين. بعد ذلك نتعلم كيف يتم تخطيط مسار معين ليتمكن الذراع من إتمام المهمة المطلوبة على المسار المصمم وبالسرعة المطلوبة، ودراسة حركة الذراع dynamics ثم كيفية التحكم فيه.

من المصادر الجيدة في تعلم أساسيات هذا العلم، كورس د.أسامة خطيب من جامعة ستانفورد:

https://www.youtube.com/playlist?list=PL65CC0384A1798ADF

وكورسان من جامعة سيول نجدهم هنا مرتبين حسب المستوى (المستوى الثاني يحتوي على معلومات معقدة جدًا في الكتب، وتم تناولها بالتفصيل) وهو الوحيد الذي يشمل دراسة Serial Robot وParallel Robot:

https://www.edx.org/course/robot-mechanics-control-part-ii-snux-snu446-345-2x?fbclid=IwAR32hsyOZOunKsyx8PwtHI6l5cRdQRm9CJMgilixd_pEAbiRukpLRFuAOYk

ويوجد كورسات في أنواع مختلفة من الروبوتات، يوجد في هذا الرابط كورس عن الروبوت الطائر (طائرة بدون طيار) Autonomous Unmanned Aerial Vehicle:

https://www.edx.org/course/autonomous-navigation-flying-robots-tumx-autonavx-0?fbclid=IwAR29ZK8VRsstsTJ3_jfAh5V-XQ4yN6K8greurqSOmQpuJHD5rZVP2TpCNV8

وهنا كورس عن الروبوت الذي يتحرك على عجلات وبدون الاعتماد على الإنسان Autonomous Mobile Robots:

https://www.edx.org/course/autonomous-mobile-robots?fbclid=IwAR3ELhLMLzJqdWK48cBo18c1-Bk1e1IlE37bezdt5rGRjYTMguMUq3xPqSY

وأخيرًا يوجد كورس عن تصميم الروبوت Under actuated Robot بأقل عدد من المحركات أو بدون محركات تمامًا، وفي نفس الوقت الحصول على عدد من درجات الحرية كافية لإتمام المهمة المطلوبة، مثل المشي على قدمين أوكثعبان أو السباحة أو الطيران:
https://www.edx.org/course/underactuated-robotics-mitx-6-832x-0?fbclid=IwAR1Yxpdhae5oepCWvPay0TOj82AQrR3MpUwaYE-dvZ5SPX_ut54JhAvcwTU

#Mechatronics_Online

المصدر :
https://m.facebook.com/story.php?story_fbid=118237969574488&id=102375804494038

وظائف مهندسين ميكاترونكس مصر ، نوفمبر 2019 Mechatronics engineer job

وظائف مهندسين ميكاترونكس مصر ، نوفمبر 2019
 Mechatronics engineer job

شركة مقاولات كهروميكانيك بمصر الجديدة تطلب مهندس مبيعات و مكتب فني ( ميكانيكا - كهرباء - ميكاترونكس)  حديث التخرج
مهندس تنفيذ ( ميكانيكا كهرباء ميكاترونكس)  خبرة 3 سنوات
محاسب - خبرة 3سنوات
Technocrane.jobs@gmail.com
فقط لسكان القاهرة و يفضل قرب السكن من مصر الجديدة

----------------------------------
#وظيفة مهندس ميكاترونكس
 Mechatronics engineer job
----------------------------------

مطلوب فورا للعمل بشركة الكوثر الخليج مصر (KKC)
مهندسين تركيبات أنظمة أمنية
فنيين تركيبات أنظمة أمنية
مهندسين مبيعات خارجية
مهندسين الكترونيات و ميكاترونكس من محافظة المنيا واسيوط حديثي التخرج للعمل بقسم المبيعات والصيانه
مدير مبيعات خبرة بالعمل مع البنوك المصرية

من يرغب في التقديم يرجي ارسال السيرة الذاتية علي info@kkctgroup.com

او الاتصال علي رقم: 01011676122 – 01011044382

برجاء ذكر المسمي الوظيفي في عنوان الايميل
----------------------------------
#وظيفة مهندس ميكاترونكس
 Mechatronics engineer job
----------------------------------

شركه سامسونج
 #مهندسين #ميكانيكا و #ميكاترونكس و #كهرباء #حديث_التخرج عام 2017 و 2018 و 2019.
للتقدم يرجي ارسال السيرة الذاتية علي الايميل التالي :-
J.yousef@SAMSUNG.com


----------------------------------
#وظيفة مهندس ميكاترونكس
 Mechatronics engineer job
----------------------------------


مطلوب الوظائف التاليه :
- مهندس ميكاترونكس حديث التخرج
_ مهندسه ميكاترونكس حديثة التخرج
_ فني الومنيتال حاصل ع دبلوم صنايع
_ عامل بوفيه
للعمل في العاشر من رمضان
للتواصل :
01030044431
او ارسال ال cv ع الايميل :
Hr@almosallay.com


----------------------------------
#وظيفة مهندس ميكاترونكس
 Mechatronics engineer job
----------------------------------

مطلوب عدد ٢ مهندسات حديثي التخرج للعمل ( كهربا_ ميكانيكا_ميكاترونكس) في شركة توريدات هندسية في مدينة نصر
لارسال ال CV
mhossam@electracontrol.com

شركة اردنية تعمل في مجال التعدين ترغب بتعيين مهندس ميكاترونكس



شركة اردنية تعمل في مجال التعدين ترغب بتعيين مهندس ميكاترونكس 

الاثنين، 4 نوفمبر 2019

الاردوينو Arduino الجزء الثاني



هناك العديد من أنواع لوحات الأردوينو Arduino و التي يمكن إستخدامها لأغراض مختلفة. تبدو بعض اللوحات مختلفة قليلاً عن تلك الموجودة في الصورة التالية ، و لكن معظم الأردوينو Arduinos لديها غالبية هذه المكونات المشتركة.

ما الذي تحتويه لوحة الأردوينو Arduino ؟!


دائرة اردوينو اونو Arduino Uno

- مصدر الطاقة  (USB / Barrel Jack )
كل لوحة اردوينو Arduino تحتاج إلى وسيلة للاتصال بمصدر الطاقة. يمكن تشغيل Arduino UNO من كابل USB قادم من جهاز الكمبيوتر  أو من مصدر طاقة الجدار (مثل هذا) الذي يتم استخدامه لشحن التليفون المحمول . في الصورة ، رقم  1 هو USB و مقبس باريل (2).

اتصال USB هو أيضًا الطريقة التي سيتم بها تحميل التعليمات البرمجية على لوحة الاردوينو Arduino.
ملاحظة: لا تستخدم مصدر طاقة أكبر من 20 فولت حيث ستتمكن من التغلب على الدائرة (وبالتالي تدمير) الاردوينو Arduino الخاص بك. يتراوح الجهد الموصى به لمعظم  انواع اردوينو Arduino بين 6 و 12 فولت.

- نقاط جهد (5 فولت ، 3.3 فولت ، GND ، تناظرية ، رقمية ، PWM ، AREF)
النقاط الموجودة على Arduino هي الأماكن التي تقوم فيها بتوصيل الأسلاك لإنشاء دارة (ربما بعض الدوائر تحتوي على "رؤوس" بلاستيكية سوداء تسمح لك بتوصيل السلك مباشرة باللوحة.و تحتوي على عدة أنواع مختلفة من النقاط ، يتم تمييز كل منها على اللوحة ويستخدم في وظائف مختلفة.

3- GND : اختصار لـ "Ground" مشترك . هناك العديد من النقاط  GND على Arduino ، يمكن استخدام أي منها لتوصيل دائرتك.
5 فولت هو رقم (4) في الصورة و 3.3 فولت (5): كما هو واضح  نقطة 5 فولت تعطي 5 فولت من الطاقة ، بينما توفر نقطة جهد  3.3 فولت ، 3.3 فولت من الطاقة. معظم المكونات البسيطة المستخدمة مع اردوينو Arduino تعمل في مدي جهد من 5 الي 3.3 فولت.
نقاط جهد تناظري  - Analog - 6 : منطقة النقاط الموجودة تحت ملصق "Analog" (من A0 إلى A5 على UNO) هي نقاط جهد متناظر Analog. يمكن لهذه النقاط قراءة الإشارة من جهاز استشعار تمثيلي ( تناظري ) - مثل مستشعر درجة الحرارة -  وتحويله إلى قيمة رقمية يمكننا قراءتها.
- Digital - 7 نقاط جهد رقمي: تحتوي لوحة اردوينو اونو Arduino UNO علي نقاط جهد رقمية (من 0 إلى 13 على اردوينو UNO). يمكن استخدام هذه النقاط لكل من المدخلات الرقمية (مثل معرفة ما إذا تم الضغط على زر) والإخراج الرقمي (مثل تشغيل مؤشر LED).
PWM - 8 ربما لاحظت الإشارة (~) بجانب بعض النقاط الرقمية (3 و 5 و 6 و 9 و 10 و 11 على لوحة اردوينو اونو  UNO). تعمل هذه النقاط كمخارج رقمية عادية ، ولكن يمكن استخدامها أيضًا في شيء يسمى Pulse-Width Modulation و الترجمة الحرفية لها في اللغة العربية هي (تعديل عرض النبض) و يرمز لها ب (PWM).هنا يمكنك معرفة تفاصيل اكثر عن  PWM ، ولكن في الوقت الحالي ، فكر في هذه النقاط على أنها قادرة على محاكاة الإخراج التمثيلي (مثل تغير شدة إضاءة مصباح LED).
AREF - 9 : نقطة قيمة مرجعية تناظرية. غالبا نترك هذه النقطة بدون توصيل .لكن يتم استخدامها في بعض الأحيان لتعيين جهد مرجعي ( للمقارنة) خارجي (بين 0 و 5 فولت) كحد أقصى لنقاط الإدخال التناظرية.
زر إعادة الضبط Reset Button
 يحتوي اردوينو اونو Arduino Uno على زر إعادة الضبط رقم (10). سيؤدي الضغط عليه إلى توصيل نقطة إعادة التعيين مؤقتًا بالجهد الأرضي  وإعادة تشغيل أي برنامج تم تحميله على الاردوينو Arduino. قد يكون ذلك مفيدًا للغاية إذا لم يتم تكرار الكود اثناء البرمجة ، و أردت اختبار البرنامج عدة مرات.
مؤشر إضاءة LED للطاقة
أسفل وتحت يمين كلمة "UNO" على لوحة الأردوينو الإلكترونية  ، يوجد مؤشر ضوئي صغير بجوار كلمة "ON" (11). يجب أن يضيء مصباح LED هذا عندما تقوم بتوصيل اردوينو Arduino بمصدر طاقة. إذا لم يتم تشغيل هذا الضوء ، فهناك خطأ ما قد حدث 😥.و لابد من إعادة فحص دائرة الأردوينو الخاصة بك😊

TX RX LEDs مؤشرات الإرسال و الإستقبال
TX اختصار للإرسال ، RX اختصار للاستقبال. تظهر هذه العلامات قليلاً في الإلكترونيات للإشارة إلى النقاط المسؤولة عن الاتصال التسلسلي. في حالتنا ، يوجد مكانان على Arduino UNO يظهر فيهما TX و RX - مرة واحدة بواسطة نقاط رقمية 0 و 1 ، ومرة ​​أخرى بجانب مؤشر LED لمؤشر TX و RX (12). ستمنحنا مصابيح LED هذه بعض المؤشرات المرئية اللطيفة عندما يتلقى Arduino بياناتنا أو ينقلها (مثل عندما نقوم بتحميل برنامج جديد على الدائرة).

IC الرئيسي
الشيء الأسود مع مجموعة الأرجل المعدنية هو IC ، أو الدوائر المتكاملة (13). التفكير في الأمر كما أدمغة. يختلف IC الرئيسي في اردوينو Arduino قليلاً من دائرة اردوينو إلي أخري ، ولكنه عادة ما يكون من نوع ATmega من شركة ATMEL. قد يكون هذا مهمًا ، حيث قد تحتاج إلى معرفة نوع IC (جنبًا إلى جنب مع نوع اللوحة الخاصة بك) قبل تحميل برنامج جديد من برامج الاردوينو Arduino. عادة ما يمكن العثور على هذه المعلومات من الكتابة على الجانب العلوي من الدائرة المتكاملة IC.
منظم الجهد Voltage Regulator
منظم الجهد (14) ليس في الواقع شيئًا يمكنك (أو ينبغي) أن تتفاعل معه على الاردوينو Arduino. لكن لابد من أن نعرف أنه موجود وما هو المقصود به. يقوم منظم الجهد بعمل ما يسمي به بالضبط - إنه يتحكم في مقدار الجهد المسموح بدخوله إلى لوحة اردوينو Arduino. مثل وظيفة حارس البوابة ؛لذلك سيقوم بإيقاف الجهد الإضافي الذي قد يضر الدائرة. بالطبع ، لها حدود ، لذلك لاتقوم بتوصيل أي جهد أعلي من 20فولت بدائرة الاردوينو Arduino.
تابع معنا في الجزء الثالث من الاردوينو في المقالة القادمة بإذن الله .

الثلاثاء، 22 أكتوبر 2019

مطلوب مهندس ميكاترونكس للعمل في صنعاء

مطلوب مهندس ميكاترونكس للعمل في صنعاء
الشروط:
١- خريج هندسة ميكاترونكس.
٢- لديه خبرة في هندسة الميكاترونكس.

فعلى من يجد في نفسه الرغبة  يرسل سيرته الذاتية إلى ايميل
hrh0045@gmail.com

التاريخ: 5 اكتوبر 2019