الجمعة، 24 أكتوبر، 2014

كيف تحمي الأردوينو من التلف بأبسط المكونات !!



كيف تحمي الأردوينو بأبسط المكونات  ؟!!


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




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

إذا كنت تريد أن تحمي دائرة الأردوينو من التلف عند توصيل المحركات والمرحلات Relays او اي جهاز يسحب تيار أعلي من (40mA) عليك بدائرة عزل الأردوينو عن طريق العازل الضوئي Opticopler .

يتكون العازل الضوئي من جانبين :

الجانب الأيسر : وهو عبارة عن ليد والجانب الأيمن : وهو عبارة عن ترانزستور ضوئي يتم تغذية قاعدته بإضاءة الليد

تستطيع أن تراه في الصورة 





هذا يوفر لك العزل الكامل بين الجانب الأيسر الذي نستطيع ان نسميه جانب الإشارةsignal side, والجانب الأيمن الذي نستطيع تسميته بدائرة الحمل circuit_load

هذه ليست للعزل فقط , ولكن الترانزستور الضوئي يتصرف كفيوز , نعم لا تعجب !! فعند حدوث _ short circuit_ في دائرة الحمل لا تقلق علي الحمل ولكن قد تودع ذلك الترانزستور الضوئي الذي لا يتعدي ثمنه المائة قرش :D

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

إذا أردنا أيضا أن نحسب التيار الذي يسحبه ذلك الريلاي :

أولا : نقوم بحساب مقاومة ملف الريلاي وذلك بضبط الفولتميتر علي مقياس المقاومة ووضع طرفي القياس علي الملف نجد R-coil =130 ohm ولدينا جهد الاردوينو = 5v

إذا يكون التيار :

 I-coil = 5/130 =0.038 =38mA

هذا المرحل برغم ان الجهد المناسب لملفه هو 5V وهو ما يستطيع الاردوينو توفيره .

لكن هذا التيار قريب جدا من اقصي تيار يمكن سحبه من اي طرف من أطراف الاردوينو 40mA ولذا فلا داعي للمخاطرة :]

بما أننا بصدد التحدث عن المرحل Relay ذلك العنصر المتميز فهو يقوم بالعزل بين control circuit المتمثلة في طرفي تغذية ملف الريلاي والذي قد يكون 5,6,12,24 v)) او ربما 220 vac ودائرة الحمل التي تكون عبارة عن حمل مُحضر عليه طرف وينتظر الطرف الآخر الذي يتم قطعه عن طريق نقاط الريلاي com – N.O – N.C

كما نعلم جميعا ان ذلك العنصر الكهرومغناطيسي المجنون كما يُسميه البعض الذي يصدر تكتـَة أسمع لها دوي ٌ في قلبي :] فيه نقطة تتعلق بالتحكم وهي :

يمكنني عند توصيل الريلاي بعمل فصل للحمل وذلك بإستخدام طرفي com – NC اما عندما أريد توصيل الحمل استخدم com – NO .

أيضا نقاط تلامس الريلاي com – N.O – N.C لها قيمة لا يجب أن تتعداها وإلا فلن تحتمل أو يقل عمرها الإفتراضي

يجب مراعاة هذه النقطة .

انظر الشكل عند توصيل الريلاي وفصله صورة 2 :



لعله يدور في رأسك هذا السؤال الآن س: ما الحمل الذي أقوم بوضعه علي الريلاي ؟

ج : الحمل هو عبارة عن مروحة 12vdc تعمل إذا قلت درجة الحرارة عن درجة معينة .

يتم قياس درجة الحرارة عن طريق سنسور حراري اسمه LM35 هذا السنسور إذا نظرنا إلي النشرة الفنية  الخاصة به, يمكنك الاطلاع عليها من هنا :


نجد أن :

يتم تغذية هذا السنسور من 4Vإلى 20V ونحصل علي قراءة10mv إذا تم قياس واحد درجة سيليزيوس .

ونحصل علي قراءة -550mv إذا تم قياس -55 درجة سيليزيوس .

أيضا نحصل علي قراءة 1500mv اذا تم قياس 150 درجة سيليزيوس .

فهو يستطيع قياس (-55 : 150) درجة سيليزيوس . من (-550mv : 1500mv )

معادلة الجهد عند استخدام Analog to Digital Converter_ _ :

يتم تقسيم ال 5v الي 1024 ثم يتم ضرب الرقم في قيمة الجهد المقروء لنحصل علي الجهد المكافئ بالديجيتال

Voltage = sensorRead*5/1024))

لكن Lm35 يستطيع فقط توفير من (0Vإلى  1V)

وبإستخدام هذه الطريقة نكون قد فقدنا 80% من الدقة المتاحة لدينا .

ولذلك فإن الحل هو إستخدام خاصية الجهد المرجعي الداخلي لبوردة الأردوينو والذي يساوي 1.1v وبهذا نحصل علي اعلي دقة ممكنة .

ستتغير معادلة الجهد عند تغيير مقياس الجهد إلي 1.1v لتكون

(Voltage = sensorRead*1100/1024)

*/ تحويل الجهد الي مللي فولت وتغيير المقياس /*

بما ان مقياس الفولت المقاس تغير إذا فإن مقياس الحرارة تغير أيضا فهو الآن يستطيع قياس من (0 : 110) درجة س

تحت معيار (0:1100) فولت . ولن يستطيع قياس الحرارة السالبة لانه لن يتم تطبيق جهد سالب عليه .

إذا يتبقي لدينا أن نعرف معادلة درجة الحرارة :

إذا قسمنا 1100 /1024 فان الناتجي يكون تقريبا ( 0.001074V = 1.0742 mV)

إذا كل زيادة خطوة في القراءة الأنالوج تساوي هذا الناتج . وبما أن 10mv تكافئ 1 درجة سيليزيوس إذا

( 10 / 1.0742 = ~9.31) فتكون المعادلة :

tempC = sensorReading / 9.31)).

سنقوم بفرض افتراضين : فرض لدرجة الحرارة العادية , وفرض لدرجة الحرارة الحارة ,, وباستخدام if statement سنقوم باختبار ما اذا وصلت الحرارة الي القيمة ام لا وحين تكون درجة الحرارة عادية يضئ ليد مثلا لونه أخضر ونقوم باستخدام خاصية (PWM) في انارة الليد الأخضر شيئا فشيئا حتي يضئ الاضاءة الكاملة ثم يخفت شيئا فشيئا وإذا كانت حارة يضئ الليد الاحمرايضا بنفس الطريقة ، ويتم إعطاء إشارة إلي الترانزستور الضوئي وتغذية الليد الداخلي له لكن ليس مباشرة وانما باضافة مقاومة توالي معه نتعامل معه مثل اي ليد ليقوم بدوره بتغذية قاعدة الترانزستور بالضوء فتكتمل دائرة الريلاي ومن ثم تكتمل دائرة الحمل المتحكم فيه عن طريق الريلاي .

من مميزات هذه الدائرة انها قامت بعزل دائرة الحمل (المروحة 12vdc ) مرتين :

اولا : العزل الكهربي عن طريق الريلاي بين دائرة الكنترول –طرفي الملف- ودائرة الحمل المروحة بمصدر جهدها .

ثانيا : العزل الضوئي بين دائرة الريلاي وبين دائرة الأردوينو (دائرة الإشارة) إذ يمكننا العزل مرة واحدة باستخدام ترانزستور تُغذي قاعدته من الاردوينو او باستخدام الترانزستور الضوئي فقط بدون الريلاي.

خطوات عمل هذه الدائرة :

اولا : المكونات :
1)بطاقة أردوينو أونو uno

2)مرحل Relay
3)حساس الحرارة LM35
4)العازل الضوئي PC817
5)اسلاك توصيل Jumper
6)مقاومة 220 اوم 
7)الموحد Diode 1N4007 



ثانيا : قم بقياس درجة حرارة غرفتك عن تو صيل الاردوينو ب lm35 كما بالشكل :


ثم قم بكتابة هذا الكود :


ثم قم برفع هذا الكود وقم بالضغط علي serial monitor
//Published for Arabduino Initiative.
// Learn More About it  :
//http://www.genotronex.com/p/blog-page_6281.html
//http://www.genotronex.com/ 
float voltage = 0;
float tempC = 0;
float sensor = 0;
void setup()
{
analogReference (INTERNAL); 
 Serial.begin(9600); 
}
void loop(){
sensor = analogRead(0); // select internal 1.1 V reference voltage 
oltage = 0.001074 * sensor; // 1100/1024 = 0.001074 convert sensor value to millvoltsv
//10mv / 0.001074 = 9.31    كل تغير بقيمة 9.13 في قراءة السنسور الانالوج هناك تغير درجة واحدة في درجة الحرارة          
tempC = sensor / 9.31 ; 
  Serial.print("TEMPRATURE = ");
  Serial.println(tempC);
  Serial.print("*C");
  Serial.println();
  delay(1000); 
}



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


ثالثا: قم بتوصيل دائرتك كما بالشكل :


ثم قم بوضع المروحة كما رأينا في الصورة الموضحة في شرح المرحل والتي عوضنا عنها  بمحرك تيار مستمر عنها في برنامج المحاكاة البسيط الرائع _ circuit wizard _ وقمنا بوضع لمبة بيان لان عند أخذ_ snipshot_ المحرك يكون من وضع الثبات لن تظهر حركته . انظر صورة 2


المروحة وهي موصلة بطرفي الريلاي N.O – Com :

ثم رابعا : قُم برفع هذا الكود :
//Published for Arabduino Initiative.
// Learn More About it  :
//http://www.genotronex.com/p/blog-page_6281.html
//http://www.genotronex.com/ 
#define RELAY 7
#define HOT 5 
#define NORMAL 3
float voltage = 0; 
float tempC = 0; 
float hot = 0; 
float normal = 0; 
float sensor = 0;
int a;
int d = 50; 
void setup ()
{
pinMode (HOT, OUTPUT);
pinMode (NORMAL,OUTPUT);
pinMode (RELAY,OUTPUT);
analogReference (INTERNAL);
}
void loop () 
{
sensor = analogRead(0); // select internal 1.1 V reference voltage
voltage = 0.001074 * sensor; // 1100/1024 = 0.001074 convert sensor value to millvolts
//10mv / 0.001074 = 9.31    كل تغير بقيمة 9.13 في قراءة السنسور الانالوج هناك تغير درجة واحدة في درجة الحرارة          
tempC = sensor / 9.31 ;  //كيفية حساب الحرارة المكافئة بقسمة الجهد المقروء من السنسور علي (9.31)//
if ( 'normal temp' <= 29.86 )
{digitalWrite (HOT,LOW);
for ( int a = 255 ; a > 1 ; a-- )
{
analogWrite(NORMAL, a);
delay(d);}
}

else if  ('hot temp'>= 29.86)
{ 
digitalWrite (NORMAL,LOW);  
digitalWrite (RELAY,HIGH);
for ( int a =255 ; a > 1 ; a-- )
{analogWrite(HOT,a);delay(d);
}                                                                                     
}
}

أريدك منك أن تسري فيك الإلكترونات من عقلك إلي قلبك قبل أن تسري من الطرف الموجب إلي السالب ^_^ دُمتم J

الكاتب : محمد سيد حميد السيد

الدولة : جمهورية مصر العربية 

2 التعليقات :

  1. ما شاء الله شغل ممتاز اود مزيد من التوضيح حول امرين و هما :
    1- طريقة توصيل المروحة مع الريلاي ؟
    2- طريقة توصيل مصدر الطاقة الخارجي مع الريلاي ؟
    و جزاكم الله خيرا و حيّاكم الله جميعا

    ردحذف
    الردود
    1. دلوقتي المروحة عايزة طرفين بديها طرف سالب مباشرة والموجب بديه لطرف ال-common- في الريلاي وبدي طرف _N.o_ للمروحة عشان اول ما اقوم بتغذية الريلاي يقوم بتوصيل ال_com_ _N.O_ معا ليصل للمروحة الطرف الموجب ايضا وتكتمل دائرتها :]

      حذف

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