علوم الحاسب

[سلسلة تعلم الأردوينو] التعامل مع المغارز التماثلية

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

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

1. حول الإشارات التناظرية (التماثلية) والرقمية Analog vs Digital Signals

عند الحديث عن الإشارات، فإننا دوماً نميز بين مجالين:

  • المجال التناظري (التماثلي) Analog Domain
  • المجال الرقمي Digital Domain

تنتشر الإشارات في العالم من حولنا بشكلٍ تناظريّ (عندما نقول إشارة هنا فالمقصد هو الجهد الكهربائي) وهذا يعني أن لها قيمة مختلفة بكل لحظة زمنية، ويمكن أن تكون قيمة الإشارة سالبة، موجبة أو تساوي الصفر. لو أخذنا كمثال بسيط درجة الحرارة، فإنه يمكننا التعبير عن قيمتها في لحظة زمنية معينة على أنها 25 درجة مئوية، أو 25.1 درجة مئوية، أو 25.13 درجة مئوية، أو 25.138 درجة مئوية، أو 25.1384 درجة مئوية وهكذا. يمكن أيضاً لدرجة الحرارة أن تكون صفر، كما يمكن لدرجة الحرارة أن تكون -1 أو -2 درجة أو قيمة سالبة أخرى.


أمثلة عن الإشارات التماثلية الحرارة، التيار، الفولت، السرعة، شدة الصوت أو شدة الإضاءة.

من أجل التعامل مع الإشارات التناظرية (التماثلية) ضمن الأنظمة الرقمية، فإننا سنحتاج لتبديل الجهود الكهربائية التي تُعبر عن هذه الظواهر المختلفة (مثل الحرارة، شدة الضوء، الصوت…الخ) من شكلها التناظريّ إلى الشكل الرقميّ الذي تستطيع المعالجات فهمه والتعامل معه. وهو ما يتم عبر استخدام المحول التناظري الرقمي Analog-to-Digital Converter.

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

2. قراءة جهد تناظري باستخدام الأردوينو

تحتوي لوحات Arduino على محول تناظري رقمي بدقة 10-بت متعدد القنوات، هذا يعني أنه وعند قراءة جهد عبر المحول التناظري – الرقمي الخاص بلوحة الأردوينو، فإن الجهد المقروء سيتم تخزينه على شكل قيمة بين 0 و 1023. لو افترضنا أن مجال جهد الدخل هو بين 0 و 5 فولت، فهذا يعني أنه عند قراءة قيمة جهد بقيمة 5 فولت على مغرز المحول التناظري الرقمي سيتم حفظ قيمة 1023. بهذه الصورة، تكون دقة القراءة هي: 5 فولت \ 1024 وحدة أي تقريباً (4.9 مللي فولت) لكل وحدة. بمعنى آخر، وعند قراءة جهد ضمن المجال 0 و 5 فولت، ستكون لوحة الأردوينو قادرة على كشف التغيرات حتى 4.9 ميللي فولت، وأي تغيرٍ في الجهد أصغر من ذلك لن يكون بالإمكان الكشف عنه.

يتصل المحول التناظري – الرقمي في لوحات الأردوينو مع المغارز الموسومة بالحرف A (والتي تُشير إلى Analog)، حيث يُمكن استخدام هذه المغارز كمداخل تناظرية يمكن عبرها قراءة تغيرات الجهود من الأجهزة المختلفة (حساسات على سبيل المثال)، ويُمكن استخدامها كمغارز رقمية.

يتم قراءة القيمة من المغرز التناظري المحدد وذلك باستخدام الأمر البرمجي:

analogRead(pin);

pin: اسم مغرز الإدخال التناظري المراد القراءة من خلاله ويكون (A0 إلى A5 على معظم اللوحات ، A0 إلى A6 على لوحات MKR ، A0 إلى A7 على Mini و Nano ، A0 إلى A15 على Mega).

ويرجع هذا التابع القيمة التي تمثل جهد الدخل الفعلي الموجود عند المغرز ولكن مع تقييس بحسب دقة المحول التماثلي الرقمي كما ذكرنا مؤخرًا (0-1023). في اللوحات (ATmega ، Nano ، Mini ، Mega ، UNO ) يستغرق الأمر حوالي 100 ميكروثانية (0.0001 ثانية) لقراءة المدخلات التناظرية، وبالتالي فإن الحد الأقصى لمعدل القراءة هو حوالي 10000 مرة في الثانية.

1.2 ملاحظات هامة
  1. إذا لم يكن مغرز الإدخال التناظري متصلاً بأي شيء، فستتذبذب القيمة التي يتم إرجاعها بواسطة analogRead() بناءً على عدد من العوامل (مثل قيم المدخلات التناظرية الأخرى، ومدى قرب يدك من اللوحة، ووجود إشارات كهرومغناطيسية في المكان) وتدعى هذه الحالة بالحالة العائمة Floating State.
  2. يمكن تغيير نطاق الإدخال باستخدام analogReference()
    الدقة الافتراضية لـ analogRead() لهذه اللوحات هي 10 بتات كما ذكرنا سابقا، من أجل التوافق.
  3. يمكن تغيير الدقة (فقط للوحات Zero وDue وMKR) باستخدام analogReadResolution() لتغييره إلى 12 بت.

3. المقاومة المتغيرة Potentiometer

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

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

عندما يتم تدوير الذراع بالكامل في اتجاه واحد، يأخذ التماس الأوسط قيمة صغرى جداً (لا تساوي الصفر) أو قيمة عظمى (القيمة الإسمية للمقاومة) و العكس بعكس اتجاه الدوران. مثلاً : لو كانت القيمة الاسمية 10 كيلو أوم، فإن قيمة المقاومة التي تقرأ على التماس الأوسط تكون محصورة ضمن المجال [0 – 10 كيلوم أوم].

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

4. مثال تطبيقي – قراءة قيمة الجهد على المغرز المتغير للمقاومة المتغيرة ذات الذراع

1.4 شرح عمل الدارة

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

2.4 العتاد المستخدم
  • لوحة أردوينو أونو Arduino UNO، أو أي لوحة متوافقة معها.
  • لوحة تجريب إلكترونية.
  • أسلاك توصيل Jumper-Wire..
  • مقاومة متغيرة ذات ذراع قيمتها الاسمية الكلية 10K أوم.
3.4 البرامج المستخدمة
  • بيئة التطوير الرسمية الخاصة بلوحات الأردوينو (للتحميل: اضغط هنا )
4.4 توصيل العتاد

يتم ربط المغرز التناظري A0 بجهد دخل محدد باستخدام المقاومة المتغيرة كما في المخطط الآتي:

5.4 الشيفرة البرمجية
// Potentiometer With Arduino UNO

int input_pin = A0; //Analog Pin

// Variables reservation
int input_value , voltage ;

void setup() {
  // start the serial monitor with 9600 bps baud rate
  Serial.begin(9600);
}

void loop() {
  // Read the analog pin
  input_value = analogRead(input_pin);

  // convert the value range (0-1023) to (0-5V)
  voltage = input_value * 5 / 1024 ;
 
  // Print the Values
  Serial.print("Voltage = ");
  Serial.print(voltage);
  Serial.println(" Volt");

  // Delays between readings
  delay (500); // 0.5 sec

}
6.4 أفكار تطويرية
  • يمكنك تجريب الشيفرة السابقة بدون إجراء العمليات الحسابية على القيمة المقروءة input_value ومشاهدة مجال القيم المقروءة من المغرز التماثلي.
  • يمكنك تجريب الشيفرة السابقة مع استخدام الجمل الشرطية للتحكم بإضاءة أو إطفاء ديود ضوئي تبعا لقيمة الجهد .
  • يمكنك تجريب الشيفرة البرمجية الخاصة بالوميض و تعديل قيم التأخير الزمني للتشغيل و الإطفاء باستخدام المقاومة المتغيرة ذات الذراع .

5.ملخص

  • تمتلك لوحة أردوينو أونو 6 مغارز يمكن استخدامها كمداخل ومخارج للإشارات التماثلية، بالإضافة إلى إمكانية استخدامها الستة أيضا كمداخل ومخارج رقمية.
  • تتم عملية القراءة على المغارز التماثلية بشكل سريع جدا (10.000 مرة في الثانية تقريبا).
  • لا داع لتعريف نمط المغرز التماثلي المستخدم في قسم الإعداد Setup () لأنه حتما يعمل كدخل تماثلي، مالم نعرفه كمغرز رقمي.
  • لا تحتوي لوحة الأردوينو محول رقمي\تماثلي DAC، بالتالي لا يوجد مخارج تماثلية لذلك نلجأ لتقنية تعديل عرض النبضة PWM التي سنتحدث عنها بتدوينة لاحقة.

Mouhamad Hadid

مهندس في الالكترونيات و الاتصالات من جامعة دمشق مهتم بعالم الالكترونيات الرقمية و المتحكمات وأنظمة الـ IOT والتيار الخفيف.

مقالات ذات صلة

زر الذهاب إلى الأعلى