التخاطب مع الحساسات

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

في البداية لا بد من أن نذكّر بأن الحسّاسات تقوم عملياً بتحويل قيمة ظاهرة ما إلى إشارة كهربائية , مثلاً يقوم حسّاس الحرارة بتحويل درجة حرارة الوسط المحيط إلى إشارة كهربائية , و بصورة عامة قد لا تكون جميع الإشارات الكهربائية قابلة للإدخال مباشرة إلى دارة Arduino , إذ يجب أن تكون ضمن المجال المقبول للدارة من 0V إلى 5V (أو 3.3V في بعض الدارات).

فمثلاً لا يمكننا استخدام دارة Arduino لمراقبة جهد التغذية الكهربائية المنزلية (220V) مباشرة لأنه أعلى كثيراً من المجال المسموح لها (إلا إذا أردنا صنع مشاوي Arduino) , و بصورة مماثلة لا يمكن لدارة Arduino أن تقيس الإشارة الكهربائية للقلب مباشرة لأن جهدها أقل كثيراً مما يمكن للدارة تحسّسه , و هذا يعني أنه في الحالة العامة تحتاج الحسّاسات الإلكترونية إلى دارات مساعدة لتحويل الإشارة الكهربائة الخارجة منها إلى إشارة قابلة للقياس و تسمى عملياً دارات تكييف الإشارة و هو موضوع يقع خارج مجال بحثنا الآن, و بالتالي سنقتصر هنا على بعض الحسّاسات القابلة للربط مباشرة مع دارات Arduino .

النقطة الثانية التي يجب أن نشير إليها أيضاً قبل أن نبدأ هي أنه يوجد نوعان من الإشارات الكهربائية :

  1. الإشارة الرقمية (Digital signal): و هي التي تأخذ إحدى حالتين 0 أو 5 فولت و بمكن أن نصل هذا النوع من الإشارات إلى أيٍ من مداخل دارة Arduino (حتى المداخل التمثيلية).
  2. الإشارة التمثيلية (Analog Signal):و هي التي تأخذ عدداً كبيراً من الحالات مابين قيمتي الجهد 0 و 5 فولت ( مثلاً 2.5 أو 3.7 أو 1.5 فولت ....إلخ ), و يمكن أن نصل هذا النوع من الإشارات إلى المداخل التمثيلية فقط (Analog Pins) لدارة Arduino .

مثلاً لقراءة إشارة تمثيلية موصولة على المدخل التمثيلي رقم 2 لدارة Arduino و تخزينها في متحول x مثلاً نستخدم :

x=analogRead(3);

إن القيمة التي ستجدها ضمن المتحول x ليست قيمة الجهد على المدخل رقم 2 كما هو متوقع لأن دارات Arduino (و كل الدارات الرقمية عملياً) تستخدم وحدة إلكترونية تسمى المبدل التمثيلي الرقمي(Analog to Digital Converter) لقياس الجهود و تعطي قيمة رقمية لجهد الدخل (الجهد على المدخل التمثيلي رقم 3 في المثال السابق) تساوي أقرب عدد من مضاعفات (5V*(1/1024 أي أقرب عدد من مضاعفات الجهد 4.883mV تقريباً (طبعاً 1V يساوي 1000mV).

مثلاً إذا كانت قيمة الجهد على المدخل التمثيلي رقم 3 هي 3.3V تكون قيمة المتحول x هي :

x=3.3V*1024/5V=3.3V/4.883mV=3300/4.883=675

و لمزيد من التوضيح فإن القيمة 5V (خمسة فولت) الظاهرة في المعادلات السابقة هي قيمة جهد تغذية الدارة فيجب الانتباه أن جهد التغذية قد يكون أقل قليلاً من 5V عندما تتم تغذية الدارة من منفذ USB .

أخيراً تسمى القيمة 5V السابقة بالجهد المرجعي للمبدل و يمكن برمجة دارات Arduino لتستخدم قيماً أخرى غير جهد التغذية و لمزيد من المعلومات عن ذلك يمكنك الرجوع إلى فقرة المداخل التمثيلية في مقالتنا التخاطب مع بوابات Arduino .

و قبل أن نبدأ الحديث عن الحسّاسات لا بد أن نشير إلى موضوع هام و هو كيف سنقوم بتوصيل هذه الحسّاسات إلى دارة SYRDUINO أو أي دارة متوافقة مع دارات Arduino :

الحل البديهي هو أن نستخدم لوح تجارب عادي (Bread board) و أسلاك توصيل إلى دارة Arduino مباشرة .

هذا الحل ممكن لتوصيل حسّاس و واحد أو أكثر لكنه غير متين و غير مناسب لتصطحب مشروعك في رحلة لأنه سيتفكك بسهولة , لذلك ننصح بالحل الآخر و هو استخدم دارتنا SYRDUINO Sensor Shield .

Sensor V21sensor shield2

تتضمن هذه الدارة ستة أماكن لتوصيل حسّاسات تمثيلية إلى الدارة كل منها بثلاثة أقطاب (تغذية و أرضي و مدخل تمثيلي) و عدد آخر من الأقطاب لتوصيل الدارات الأخرى بسهولة و دون الحاجة إلى لوح تجارب .

و لصنع وصلات للحسّاسات ننصح باستخدام كبل مسطح (flat cable) (يمكن شراؤه من هنا )مماثل لكبلات الأقراص الصلبة القديمة IDE (أرجو أن لا تكونوا قد نسيتموها !) منها ملون أو رمادي .

flat cables

و من ثم نستخدم وصلات الخطوة المرفقة مع دارتنا (و يمكن شراؤها من هنا ) وفق الخطوات التالية :

connectors

  • أولاً : نفصل عدد من الأسلاك من الكبل المسطح حسب الحاجة و نقوم بفصلها عن بعضها من البداية و النهاية :

cable10

cable9

  • ثانياً : نقوم بتعرية نهاية كل سلك باستخدام أداة تعرية الأسلاك أو قطّاعة (يحتاج ذلك إلى بعض المهارة) :

cable8

  • ثالثاً : نفصل الوصلة المعدنية الخاصة بوصلة الخطوة و نقوم بإطباقها على نهاية السلك :

cable7cable6cable5

  • رابعاً : ندخل الوصلة المعدنية في وصلة الخطوة :

cable4cable3

تهانينا ! الوصلة الناتجة متينة و سهلة الاستخدام .

cable2

1- مجزء الجهد ! :

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

يحسب جهد الخرج من العلاقة :

V2=V1*R2/(R1+R2)

في الحقيقة يمكن استخدام مجزء الجهد لغايتين :

  1. لتخفيض قيمة جهد الدخل V1 كما في حالة قياس جهد أكبر من 5V .
  2. لتحويل تغير مقاومة إلى تغير جهد بوصل V1 إلى التغذية 5V و جعل المقاومة المطلوب مراقبة تغيرها إحدى مقاومتي مجزء الجهد و إدخال الجهد V2 إلى أحد المداخل التمثيلية لدارة Arduino .

مثلاً إذا أردنا قياس جهد تغذية دارة Arduino (بطارية مثلاً) يمكن أن نستخدم مجزء جهد بحيث تكون R1=4.7KΩ و R2=4.7KΩ و لكن هنا يكون جهد البطارية هنا هو V1 و حسب العلاقة السابقة :

Vbat=V1=V2*(R1+R2)/R2=V2*2

و المثال التالي يبين برنامجاً يقوم بقياس جهد تغذية دارة SYRDUINO NG و يرسلها إلى الحاسب :

voltage divider

void setup(){
  Serial.begin(9600);
}
void loop(){
  //reading the analog input 0
  int voltage=analogRead(0);
  //converting the reading to milli volt
  voltage=map(voltage,0,1024,0,5000);
  //the input voltage Vout=Vin*R2/(R2+R1)
  //in out example R2=R1=4.7K Ohm
  //so Vout=Vin/2
  voltage=voltage*2;
  //a 700mV should be added to calculate the real value
  //because of the Arduino circuit's input diode
  //(look at the circuit's schematic)
  voltage=voltage+700;
  Serial.print("Vin=");
  Serial.print(voltage);
  Serial.println("mV");
  delay(1000);
}

2- حسّاس الحرارة LM35 :

 وهو دارة متكاملة صغيرة تعطي على مخرجها جهداً كهربائياً متناسباً مع درجة الحرارة المئوية لها و يتوفر هذا الحسّاس على شكل ترانزيستور بتغليف من نوع TO-92 و يمكن شرح توزع أقطابه كما يلي :

lm35lm35 1

عند توصيل الحسّاس بالطريقة المباشرة يمكن استخدامه لقياس درجات الحرارة من +2 إلى 150 درجة مئوية (و توجد في دليل الحسّاس Data sheet طريقة لتوصيله بحيث يقيس الحرارة من -55 إلى 150 درجة مئوية ) .

جهد تغذية الحسّاس يجب أن يكون ما بين 4 فولت و 30 فولت و بالتالي يمكن أن تغذيته مباشرة من جهد 5 فولت المستخدم في دارات Arduino .

يعطي مخرج الحسّاس إشارة جهد كهربائي مستمر تتناسب قيمتها مع درجة الحرارة المقاسة كما يلي :

 10 mV أو 0.01 V لكل درجة مئوية

فإذا كانت درجة حرارة الحسّاس 22 درجة مئوية تكون قيمة الجهد المقاس على مخرجه 0.22 فولت .

الآن لوصل الحسّاس بالدارة نصنع وصلة بثلاثة أسلاك وفق التعليمات السابقة مع ملاحظة أن نبادل ببين السلك الأوسط و أحد الجانبيين في إحدى النهايتين ,و ندخل الحسّاس في إحدى نهايتيها و الأخرى في دارتنا SYRDUINO Sensor Shield و يجب أن ننتبه إلى صحة اتجاه الحسّاس .

sensor cabletemperature sensor1

الآن بفرض وصل الحسّاس إلى المدخل رقم 1 , يمكن أن نقرأ الحسّاس و أن نخزن قيمة النتيجة في متحول t مثلاً بإدخال السطر :

t=analogRead(1);

و لتحويل القيمة المقروؤة إلى حرارة يجب أولاً أن نحصل على قيمة الجهد المقابل للقراءة أولاً بالميللي فولت mV :

t=t*5000/1024;

نذكر : الـ 5000 هنا هي قيمة الجهد المرجعي(جهد التغذية في الحالة الافتراضية) بالميللي فولت .

ثم نحويل قيمة الجهد إلى حرارة :

t=t/10;

أيضاً نذكر بأننا استخدمنا القيمة 10 لأن كل 10mV من خرج الحسّاس تقابل درجة مئوية واحدة .

و المثال التالي يبين برنامجاً كاملاً يقرأ درجة الحرارة من حسّاس موصول إلى المدخل التمثيلي رقم 0 و يرسلها إلى الحاسب :

void setup(){
  //starting serial connection with PC
  Serial.begin(9600);
}
void loop(){
  //reading the analog input 0
  int t=analogRead(0);
  //converting to milli volt
  t=map(t,0,1024,0,5000);
  //converting to centigrade
  t=map(t,0,5000,0,500);
  Serial.print("Temperature=");
  Serial.print(t);
  Serial.println(" C");
  delay(1000);
}

3- المقاومة الضوئية LDR :

المقاومة الضوئية هي عنصر إلكتروني تتغير قيمة مقاومته بتغير شدة الإضاءة الساقطة عليه , و هي منخفضة التكلفة و غير دقيقة و تتوفر يعدة قياسات .

light sensor3

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

و طبعاً لايمكننا قياس المقاومة مباشرة باستخدام دارات Arduino و لذلك نبني مجزء جهد من المقاومة الضوئية و مقاومة ثايتة بقيمة 10KΩ لتحويل تغير قيمة المقاومة الضوئية إلى تغير في خرج مجزئ الجهد .

و لتوصيل دارة الحسّاس (مجزء الجهد) نقوم بصنع وصلة بثلاثة أسلاك عادية و نصل إحى النهايتين في دارتنا SYRDUINO Sensor Shiled و نقص نهايات المقاومة الضوئية بطول 1سم تقريباً و ندخلها في النهاية الأخرى للوصلة مابين التغذية و مدخل الدارة و كذلك نقص نهايات المقاومة الثابتة 10KΩ بطول 1.5سم تقريباً و ندخلها في نفس النهاية مابين الأرضي GND و مدخل الدارة .

light sensor2light sensor1

الآن في حالة الظلام الدامس يكون جهد خرج مجزء الجهد :

Vout=5V*10K/(10K+200K)=0.238V

أما في حالة نور الشّمس الساطع يكون جهد خرج مجزء الجهد :

Vout=5V*10K/(10K+0.3K)=4.854V

الآن لقراءة شدة الإضاءة باستخدام دارات Arduino لا بد من قراءة المدخل التمثيلي المستخدم و من ثم حساب قيمة قيمة الجهد الكهربائي على المدخل التمثيلي من القيمة المقروءة و هنا سنستخدم التابع map لذلك :

l=analogRead(1);

l=map(l,0,1024,0,5000);

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

l=map(l,238,4854,0,100);

4- حسّاس الرطوبة SY-HS-220 :

و هي دارة صغيرة تتضمن حسّاس رطوبة مع بعض العناصر الأخرى اللازمة لتحويل رطوبة الهواء النسبية إلى جهد كهربائي .

humidity shield1

يقيس الحسّاس رطوبة الهواء النسبية مابين 30% و 90% , و المنحني التالي يبين العلاقة بين رطوبة الهواء النسبية و جهد خرج الحساس :

SY HS 220

 

يأتي هذا الحسّاس مع وصلة بثلاثة أسلاك لكن نهايتها غير متوافقة مع دارتنا SYRDUINO Sensor Shield لذلك نقص نهاية سلك الحسّاس و نقوم بتركيب نهاية السلك المرفقة مع الدارة .

humidity shield2

و لقراءة الحسّاس نقوم بقراءة المدخل التمثيلي الذي تم توصيل الحسّاس إليه و نحول القمية المقروؤة إلى قيمة جهد و من ثم إلى قيمة رطوبة نسبية بالاستعانة بجدول قيم الحسّاس و استخدام التابع map :

h=analogRead(1);

h=map(h,0,1024,0,5000);

h=map(h,990,2970,30,90);

humidity shield4

 

و لتحميل دليل استخدام الحساس اضغط هنا .

5- مقاومة قياس التيار ! :

في الحقيقة المقاومة ليست حسّاساً لكن يمكن استخدامها لقياس التيار (التيارات الصغيرة نسبياً) فحسب قانون أوم :

V=R*I

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

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

الملاحظة المهمة هنا هي أن لا تكون قيمة المقاومة كبيرة بحيث تؤثر كثيراً على عملية القياس , فمثلاً عند قياس تيار محرك تبار مستمر بتغذية 12 فولت و بفرض أن تيار المحرك بحدود 1 أمبير فإذا استخدمنا مقاومة بقيمة 10 أوم سيكون الجهد الهابط على المقاومة :

10Ω*1A=10V

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

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

P=R*I2

 و يجب أن لاتزيد الاستطاعة المستهلكة في المقاومة عن الحد المسموح به , و المقاومات الموجودة في السوق تأتي بعدة استطاعات 0.25W أو 0.5W أو 2W أو 5W أو 10W .

و الشكل التالي يبين دارة تقوم بالتحكم بمحرك صغير و قياس الجهد على طرفيه و التيار المار ضمنه و حساب الاستطاعة المستهلكة المصروفة ضمن المحرك .

6- حساس الحرارة و الرطوبة DHT-11 أو DHT-22 :

dht11 1

و هو عبارة عن حساس رقمي يعطي قيمة حرارة و الرطوبة النسبية للهواء المحيط على شكل تسلسل للبتات على قطب واحد منه ( في الحقيقة هو عبارة عن حساسين و دارة متكاملة ) , و يمكن تلخيص مواصفات هذا الحساس بالجدول التالي :

  DHT-11 DHT-22
جهد التغذية من 3V إلى 5V من 3.3V إلى 6V
مجال قياس الحرارة من C°0 إلى 50°C من C°-40 إلى 80°C
دقة قياس الحرارة ± 2°C ± 0.2°C
مجال قياس الرطوبة النسبية من 20% إلى 90%  من 0% إلى 100% 
دقة قياس الرطوبة النسبية ± 5% ± 1%

الميزة الأساسية لهذا الحساس هي أنه رقمي أي أننا نقرأ قياسات هذا الحساس على شكل تسلسل من الأصفار و الواحدات و هي أقل تأثراً بالضجيج من الحساسات السابقة و بالتالي يمكننا أن نثبته بعيداً عن الدارة الأساسية بمسافة تتجاوز العشرين متراً ! (شريطة استخدم أسلاك مناسبة) .

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

 لربط الحساس مع دارات SYRDUINO (أو الدارات المتوافقة مع Arduino) يمكن استخدام المكتبة DHT و التي يمكن تحميلها من هنا .

و لمزيد من المعلومات عن هذا الحساس يمكن الرجوع إلى دليل استخدام الحساس .

 

التعليقات  

# شادي المجدلاني 2014-11-22 21:28
أنتم رائعون شكرا لكم
رد | رد مع اقتباس | اقتباس
# فاتن العبيد 2014-12-18 09:15
طالبه حساس حراره ال Max لقياس الحراره 400
رد | رد مع اقتباس | اقتباس
# SYRDUINO 2014-12-18 16:23
يمكنك استخدام مزدوجة حرارية Thermocouple ( النوع المتوفر في سوق الإلكترونيات المحلية هو K ) و يمكن باستخدامها قياس درجات الحرارة من -200 إلى +1350 درجة مئوية و لكنك بحاجة إلى دارة مكبر عمليات لربطها بدارتك .
رد | رد مع اقتباس | اقتباس

أضف تعليق

كود امني
تحديث