لفهم أنواع حساسات الأردوينو، اسأل أولًا كيف تصل المعلومة إلى اللوحة: قراءة تماثلية، أم مستوى رقمي، أم بيانات عبر اتصال مثل I2C؟ لكل طريق طريقة قراءة مختلفة. [1][2][3]
الخلاصة السريعة
اختر طريقة القراءة بحسب خرج الحساس ودليل اللوحة، ولا تجعل كل رقم ظاهر قياسًا جاهزًا.
- التماثلي: يحول analogRead الجهد إلى عدد؛ UNO R3 بدقة 10 بت تعطي 0–1023، وتختلف الإعدادات باختلاف اللوحة. [1]
- الرقمي البسيط: تعيد digitalRead حالة HIGH أو LOW؛ تفسيرها يتبع الحساس، والمدخل غير الموصل قد يتقلب عشوائيًا. [2]
- أجهزة I2C تتبادل بيانات عبر الاتصال؛ تختلف مواضع أطرافه بين اللوحات. [3]
- UNO التقليدية لها 14 طرفًا رقميًا وستة مداخل تماثلية؛ راجع طراز اللوحة بدل تعميم مواصفاتها على العائلة. [4]
- في مثال 10 بت مؤلف، القراءة 512 تعطي 2.5 فولت بمرجع 5 فولت، أو 1.65 بمرجع 3.3؛ تفسير الجهد يحتاج وصف الحساس.
الحساس التماثلي: عدد يمثل جهدًا
تعيد analogRead عددًا مرتبطًا بجهد المدخل. تذكر وثيقة Arduino أن UNO R3 تعمل بجهد 5 فولت ودقة 10 بت، فتكون القراءة من 0 إلى 1023. وتبين جدولًا للوحات بدقات وجهود مختلفة؛ ليست المواصفة واحدة للجميع. [1]
افترض حساسًا مجهول الاسم أمامك. قبل كتابة البرنامج، دوّن اسم طرف الإشارة، ونوع الخرج، ومجاله المذكور في الدليل. إذا لم تعرف ماذا يمثل الجهد، فستملك أعدادًا في الشاشة، لكنك لن تملك بعد جوابًا عن الظاهرة التي أردت قياسها.
المستوى الرقمي: حالتان وليستا وحدة قياس
تقرأ digitalRead الطرف الرقمي وتعيد HIGH أو LOW. وتحذر الوثيقة من أن الطرف غير الموصل قد يعطي أيًا منهما بصورة متغيرة. لذلك لا تعد تقلب القراءة وحده دليلًا على تغير البيئة المحيطة. [2]
لنضع حالة تعليمية: لوحة ملاحظات تعرض كلمة «تحقق» عند الحالة الأولى و«انتظر» عند الثانية. هاتان رسالتان اخترناهما في المثال. لا يجوز استنتاج أن HIGH تعني دائمًا وجود جسم، أو أن LOW تعني درجة حرارة أقل؛ المعنى يحتاج تعريف خرج الحساس.
البيانات الرقمية عبر I2C
تتيح مكتبة Wire الاتصال بأجهزة I2C لقراءة البيانات وإرسالها. وتختلف مواضع أطراف هذا الاتصال مع تصميم اللوحة وبنيتها. هنا تتعامل مع بيانات عبر بروتوكول، لا تكتفي بسؤال طرف منفرد هل هو HIGH أم LOW. [3]
في دفتر المشروع، افصل خانة «طريقة الاتصال» عن خانة «معنى القيمة». ثم ارجع إلى وصف الجهاز لمعرفة تنظيم البيانات وطريقة تحويلها. وصف الحساس بأنه رقمي لا يغني عن اسم الواجهة أو صيغة البيانات التي ستقرأها.
اللوحة المحددة قبل التوصيل
تحتوي UNO المبنية على ATmega328P على 14 طرف إدخال وإخراج رقميًا، وستة مداخل تماثلية. هذا وصف لوحة محددة في وثيقتها؛ ذكر الاسم الكامل يحمي المقارنة من خلطها بلوحات أخرى. [4]
اجمع دليل الحساس ودليل اللوحة قبل التوصيل. ابحث فيهما عن جهد التشغيل، وحدود الإشارة، والطرف المطلوب، وطريقة القراءة. إذا غابت معلومة ضرورية، اترك خانتها مفتوحة واستكمل البحث؛ لا تجعل رقمًا من لوحة أخرى جوابًا للطراز الذي بين يديك.
مثال: من عدد خام إلى جهد، ثم ماذا؟
في حساب افتراضي نختار دقة 10 بت ومرجعًا مقداره 5 فولت. عدد المستويات 1024؛ فإذا كانت القراءة 512، نحسب 512 × 5 ÷ 1024 = 2.5 فولت تقريبًا. هذه نتيجة افتراضات الحساب، وليست قراءة أجريت على جهاز.
الخطوة التالية سؤال مستقل: ماذا يعني 2.5 فولت في الحساس المختار؟ لم نفترض علاقة للحرارة أو الضغط، فلا نسمي الناتج درجة أو وحدة ضغط. نحتاج علاقة تحويل موثقة ثم مراجعة القياس. وعند تغيير افتراض المرجع إلى 3.3 فولت يصبح الحساب 1.65 فولت؛ الرقم الخام نفسه لا يحمل الوحدة معه.
تفرق وثيقة analogRead بين نطاق المدخل والدقة، وتتيح تغيير المرجع والدقة في اللوحات التي تدعم ذلك. كما تنبه إلى تذبذب قراءة مدخل تماثلي غير موصل. احتفظ بإعدادات القراءة إلى جانب العدد عند تفسيره. [1]
المصادر ومتابعة القراءة
- Arduino: analogRead (يفتح في نافذة جديدة)github.com
- Arduino: digitalRead (يفتح في نافذة جديدة)github.com
- Arduino: Wire (يفتح في نافذة جديدة)github.com
- Arduino: لوحة UNO (يفتح في نافذة جديدة)docs.arduino.cc
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
