الأحد، 12 أكتوبر 2014

كيف تحمي دائرة الأردوينو بجنيه واحد فقط ؟!! _How to protect your arduino at a cost less than a quarter $ !!?_

كيف تحمي الأردوينو بجنيه واحد فقط ؟!!
كيف تحمي الأردوينو من التلف بأبسط المكونات !!
في هذا المشروع البسيط جمعت فيه بفضل الله خبرتي في الاردوينو فهو يضم المخارج الانالوج والديجيتال وكيفية استغلال الجهد المرجعي الداخلي للأردوينو واستخدام خاصية التعديل الإتساعي المعتمد علي عرض النبضة PWM
Pulse width modulation . 
إذا كنت تريد أن تحمي دائرة الأردوينو من التلف عند توصيل المحركات والريليهات او اي جهاز يسحب تيار أعلي من (40mA) عليك بدائرة عزل الأردوينو عن طريق العازل الضوئي .
يتكون العازل الضوئي optocoupler من جانبين :
الجانب الأيسر : وهو عبارة عن ليد  والجانب الأيمن : وهو عبارة عن ترانزستور ضوئي يتم تغذية قاعدته بإضاءة الليد
تستطيع أن ترا ه في الصورة 1 :



هذا يوفر لك العزل الكامل بين الجانب الأيسر الذي نستطيع ان نسميه جانب الإشارةsignal side__ ,,, والجانب الأيمن الذي نستطيع تسميته بدائرة الحمل circuit_ _load
هذه ليست للعزل فقط , ولكن الترانزستور الضوئي يتصرف كفيوز , نعم لا تعجب !! فعند حدوث _ short circuit_  في دائرة الحمل لا تقلق علي الحمل ولكن قد تودع ذلك الترانزستور الضوئي الذي لا يتعدي ثمنه المائة قرش :D
لقد استخدمت العازل الضوئي من نوع  _ pc817_ الموجود في الصورة , لعزل بوردة الاردوينو خاصتي عند توصيل الريلاي الذي ربما يعطي قوة دافعة كهربية عكسية خطيرة بالرُغم من وضع دايود بالتوازي معه منحازا انحيازا عكسيا .
إذا أردنا أيضا أن نحسب التيار الذي يسحبه ذلك الريلاي :
أولا نقوم بحساب مقاومة ملف الريلاي وذلك بضبط الفولتميتر علي مقياس المقاومة ووضع طرفي القياس علي الملف نجد             R-coil =130 ohm                                                                          ولدينا جهد الاردوينو = 5v
إذا يكون التيار :                                      I-coil = 5/130 =0.038 =38mA
هذا الريلاي برغم ان الجهد المناسب لملفه هو 5v وهو ما يستطيع الاردوينو توفيره .
لكن هذا التيار قريب جدا من اقصي تيار يمكن سحبه من اي طرف من أطراف الاردوينو 40mA ولذا فلا داعي للمخاطرة :]
بما أننا بصدد التحدث عن الريلاي ذلك العنصر المتميز فهو يقوم بالعزل بين _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 هذا السنسور إذا نظرنا إلي الداتا الشيت الخاصة بجد
صورة3:



نجد أن :
يتم تغذية هذا السنسور من 4: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 ) مرتين :
اولا : العزل الكهربي عن طريق الريلاي بين دائرة الكنترول –طرفي الملف- ودائرة الحمل المروحة بمصدر جهدها .
ثانيا : العزل الضوئي بين دائرة الريلاي وبين دائرة الأردوينو (دائرة الإشارة) إذ يمكننا العزل مرة واحدة باستخدام ترانزستور تُغذي قاعدته من الاردوينو او باستخدام الترانزستور الضوئي فقط بدون الريلاي.



خطوات عمل هذه الدائرة :
اولا : المكونات :
بوردة اردوينو اونو – ريلاي 5v  او علي حسب رغبتك – 2 ليد 5 مم – 3مقاومة220اوم – موحد 1n4007 – عازل ضوئي _ pc817_ سنسور حراري Lm35__ جنابر توصيل . صورة 5 :رسم يدوي للدائرة
ثانيا : قم بقياس درجة حرارة غرفتك عن تو صيل الاردوينو ب _ lm35كما بالشكل6 :  


ثم قم بكتابة هذا الكود :
//Temperature
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
voltage = 0.001074 * sensor; // 1100/1024 = 0.001074 convert sensor value to millvolts
//10mv / 0.001074 = 9.31    كل تغير بقيمة 9.13 في قراءة السنسور الانالوج هناك تغير درجة واحدة في درجة الحرارة         
tempC = sensor / 9.31 ;
  Serial.print("TEMPRATURE = ");
  Serial.println(tempC);
  Serial.print("*C");
  Serial.println();
  delay(1000);
}
ثم قم برفع هذا الكود وقم بالضغط علي _ serial monitor_


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

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


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

المروحة وهي موصلة بطرفي الريلاي N.O – 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
محمد سيد حميد السيد ^_^


ليست هناك تعليقات:

إرسال تعليق