توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته

إنَّ Raspberry Pi هو جهاز مُمتاز للمشاريع الإلكترونية المُختلفة، ولكن باستخدام مُحول ADC، يُمكنك توسيع قدراته لقياس الإشارات التناظرية والتفاعل مع مجموعة أوسع من الأجهزة.

حيث يفتقر Raspberry Pi بشكل قياسي إلى مُدخلات تناظرية. وهذا يجعله في وضع غير مؤاتٍ مُقارنة باللوحات المعتمدة على المُتحكم الدقيق مثل Arduino.

لكن لا تيأس: هناك الكثير من الخيارات التي يجب مراعاتها. يُمكنك بدء العمل مع Raspberry Pi و ADC خارجي. في هذا الدليل، سنُقدم لك نظرة شاملة حول كيفية استخدام مُحول ADC مع Raspberry Pi، مع التركيز على الخطوات الرئيسية والفوائد المُحتملة. تابع القراءة لاستكشاف كيف يُمكنك الاستفادة القصوى من جهازك وتكامله في مشاريعك الإلكترونية بشكل فعّال. تحقق من ما هو المُحول التناظري الرقمي (ADC)؟ فهم عمله وأهميته في عصر التكنولوجيا الرقمية.

توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته - Raspberry Pi

لماذا قد ترغب في إضافة المُدخلات؟

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

ربما تتطلع إلى مراقبة رطوبة تربتك، أو درجة حرارة الدفيئة، أو وزن الهامستر. قد تتطلع إلى إضافة عنصر تحكم في مستوى الصوت إلى جهاز Pi الخاص بك، أو إنشاء مُوّازن صوتي، أو تصميم عصا تحكم من الصفر. الاحتمالات، أكثر أو أقل، لا حدود لها.

خيارات ADC

إذًا، ما هو ADC الأفضل للمُبتدئين؟

من بين الخيارات الأكثر شعبية ومُباشرة هي شرائح MCP3004MCP3008) من Microchip. ستحصل على أربع (أو ثماني) قنوات كل منها بـ 10 بت، والتي يُمكنها قراءة ما يصل إلى 200 كيلو SPS. ومن ناحية أخرى، هناك أجهزة ADS111x من شركة Texas Instruments، والتي تقرأ 16 بت بمعدل 860 SPS. لذلك، هناك مقايضة بين السرعة والدقة (وبطبيعة الحال، السعر).

العديد من وحدات التحكم الدقيقة تأتي مع مُحولات ADC مدمجة. سيُوفر ATMega الذي تجده في Arduino المتوسط عدة قنوات 10 بت، بالإضافة إلى كل شيء آخر. هذا هو ما يسمح لـ Arduino بتوفير مدخلات تناظرية حيث لا يستطيع Raspberry Pi ذلك. إذا كان لديك بالفعل Arduino مشاركًا في الإعداد الخاص بك، وكانت 10 بتات كافية للدقة، فقد تكون هذه هي الطريقة الأسهل بالفعل.

هنا، سنبقي الأمر بسيطًا، مع ADS1115 من Adafruit. تحقق من إيجابيات وسلبيات استخدام النسخة المُستنسخة من Arduino في مشاريعك.

توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته - Raspberry Pi

ما هو مُضخم الكسب القابل للبرمجة؟

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

الميزة هنا هي أنه يُمكنك تغيير الكسب في المنتصف. وتتخذ الشرائح الأخرى، مثل MCP3004، نهجًا مُختلفًا؛ حيث أنها تأتي مع دبوس إضافي، والذي يُمكنك توفير الجهد المرجعي له.

ماذا عن تعدد الإرسال؟

مُعدد الإرسال (أو mux) هو مفتاح يُتيح لك قراءة العديد من المدخلات باستخدام ADC واحد. إذا كانت شريحة ADC لديك تحتوي على العديد من منافذ الإدخال، فهذا يعني حدوث بعض عمليات الإرسال المُتعدد الداخلية. يسمح mux الخاص بـ ADS1115 بأربعة مدخلات، والتي يُمكنك تحديدها عبر السجلات الداخلية.

التعامل مع السجلات

يُوفر ADS1115 هذه الخيارات، بالإضافة إلى عدد قليل من الخيارات الأخرى. يُمكنك التعامل مع مُعدد الإرسال، وضبط الكسب، وتنشيط المُقارنة المُضمَّنة، وتغيير معدل العينة، ووضع الجهاز في وضع السكون مُنخفض الطاقة، كل ذلك عن طريق النقر على بعض المفاتيح.

ولكن أين تلك المفاتيح؟ إنها موجودة داخل الحزمة، على شكل أجزاء صغيرة جدًا من الذاكرة تُسمى السجلات. لتنشيط ميزة معينة، ما عليك سوى تعيين البت ذي الصلة على 1، بدلاً من 0.

بالنظر إلى ورقة بيانات ADS111x، ستجد أنَّ هذه النماذج تأتي مع أربعة سجلات، بما في ذلك سجلات التكوين التي تحكم سلوك الجهاز.

توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته - Raspberry Pi

على سبيل المثال، تتحكم البتات من 14 إلى 12 في معدد الإرسال. باستخدام هذه البتات الثلاث، يمكنك الاختيار من بين ثمانية تكوينات. الرقم الذي تريده هنا هو “100”، والذي سيعطي الفرق بين الإدخال صفر والدنيا. ومن ناحية أخرى، تتحكم البتات من 7 إلى 5 في معدل العينة. إذا كنت تريد الحد الأقصى وهو 860 عينة في الثانية، فيُمكنك ضبطها على “111”.

بمجرد معرفة الخيارات التي تُريد تعيينها، سيكون لديك وحدتي بايت لإرسالهما إلى ADC. إذا أردت لاحقًا تعيين بت واحد هنا أو هناك، فيُمكنك التعامل معها بشكل فردي باستخدام معاملات البت.

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

توصيل الأسلاك

يُمكنك توصيل هذا المُحول مُباشرة باللوحة المُفردة. سوف يقبل مُدخلات الجهد الموجب ما بين 2 إلى 5.5 فولت، مما يعني أنَّ السكة 3.3 فولت الموجودة على Raspberry Pi ستعمل بشكل جيد.

قم بتوصيل مُدخلات SDA و SCL إلى نظيراتها على RPi، وقم بنفس الأشياء مع الأرض و 3.3 فولت. احصل على مقياس الجهد بين خطوط الأرض والجهد، ثم ضع السلك الأوسط في المدخل الأول لـ ADC. هذا كل ما تحتاجه للبدء!

التعامل مع I2C

تعمل مُحولات ADC المختلفة عبر بروتوكولات مختلفة. في حالة ADS1115، سنستخدم I2C.

سوف يتفاعل المثال التالي مع ADC باستخدام Python. ولكن قبل أن تفعل ذلك، سوف تحتاج إلى إعداده. لقد جعلت الإصدارات الأخيرة من Raspberry Pi OS هذا الأمر بسيطًا للغاية. توجه إلى التفضيلات > تكوين Raspberry Pi. ثم، من علامة التبويب “الواجهات”، قم بتشغيل I2C.

توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته - Raspberry Pi

للتحقق من أن كل شيء يعمل، افتح Terminal وقم بتشغيل:

sudo i2cdetect -y 1

سيؤدي هذا الأمر إلى إخراج شبكة. على افتراض أن كل شيء يعمل، وقمت بتوصيله بشكل صحيح، سترى قيمة جديدة تظهر في الشبكة. هذا هو عنوان ADC الخاص بك. ضع في اعتبارك هنا أنها قيمة سداسية عشرية، لذا تحتاج إلى إضافة بادئتها بـ “0x” عند استخدامها في الكود أدناه. وهنا 0x48:

توسيع إمكانيات Raspberry Pi باستخدام مُحوِّل ADC: ما تحتاج إلى معرفته - Raspberry Pi

بمجرد حصولك على العنوان، يُمكنك استخدام مكتبة SMBus لإرسال أوامر I2C. سوف تتعامل مع طريقتين هنا. الأولى هي write_word_data()، والتي يقبل ثلاث وسيطات: عنوان الجهاز، والسجل الذي تكتب إليه، والقيمة التي تُريد كتابتها.

والثانية هي read_word_data()، والتي تقبل فقط عنوان الجهاز والسجل. سوف يقوم ADC بقراءة الفولتية بشكل مستمر وتخزين النتيجة في سجل التحويل. باستخدام هذه الطريقة، يمكنك استرداد محتويات هذا السجل.

يمكنك تجميل النتيجة قليلاً، ومن ثم طباعتها. قبل العودة إلى بداية الحلقة، قم بإجراء مهلة قصيرة. سيضمن هذا عدم إرهاقك بالبيانات.

from smbus import SMBus
import time
addr = 0x48
bus = SMBus(1)

# set the registers for reading
CONFIGREG = 1
CONVERSIONREG = 0

# set the address register to point to the config register
# write to the config registers
bus.write_word_data(addr, CONFIGREG, (0b00000100 << 8 | 0b10000010)) 

# define the top of the range
TOP = 26300

while True:
    # read the register
    b = bus.read_word_data(addr, CONVERSIONREG)

    # swap the two bytes
    b = ((b & 0xFF) << 8) | ((b >> 8) & 0xFF)
    
    # subtract half the range to set ground to zero
    b -= 0x8000

    # divide the result by the range to give us a value between zero and one
    b /= TOP

    # cap at one
    b = min(b, 1)

    # bottom is zero
    b = max(b, 0)

    # two decimal places
    b = round(b, 2)
    print(b)
    time.sleep(.01)

أنت على وشك الانتهاء. قم بتعيين نطاق القيم التي تحصل عليها إلى القيمة التي تفضلها، ثم قم باقتطاعها إلى العدد المطلوب من الأماكن العشرية. يُمكنك تخصيص وظيفة الطباعة بحيث لا تطبع قيمة جديدة إلا عندما تكون مختلفة عن القيمة الأخيرة.

التعامل مع الضوضاء

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

من خلال ربط الإدخال المجاور (الإدخال 1) بالأرض، وتبديل الوضع بحيث تقارن المدخلين الأول والثاني، يمكنك الحصول على نتائج أكثر استقرارًا. يمكنك أيضًا استبدال كابلات التوصيل الطويلة التي تجمع الضوضاء بأخرى صغيرة، وإضافة عدد قليل من المُكثفات أثناء قيامك بهذا التعديل. يمكن لقيمة مقياس الجهد الخاص بك أن تحدث فرقًا أيضًا.

هناك أيضًا خيارات برمجية. يمكنك إنشاء متوسط متداول، أو ببساطة تجاهل التغييرات الصغيرة. الجانب السلبي هو أن الكود الإضافي سيفرض تكلفة حسابية. إذا كنت تكتب عبارات شرطية بلغة عالية المستوى مثل Python، وتأخذ آلاف العينات كل ثانية، فسوف تتضاعف هذه التكاليف بسرعة. تحقق من دليل استخدام Raspberry Pi و Sense HAT لمُراقبة درجات الحرارة: أفضل الخطوات والنصائح.

الأسئلة الشائعة

س1. ما هو محول ADC وكيف يعمل مع Raspberry Pi؟

يُعد محول ADC (Analog-to-Digital Converter) جهازًا يُحوِّل الإشارات التناظرية إلى إشارات رقمية. يُمكن توصيل محول ADC بـ Raspberry Pi لتمكينه من قراءة الإشارات التناظرية من مصادر مثل أجهزة الاستشعار والمُتغيِّرات البيئية.

س2. ما هي الفوائد الرئيسية لاستخدام محول ADC مع Raspberry Pi؟

  • توسيع قدرات القياس: يسمح لك باستخدام إشارات تناظرية مثل الضوء، درجة الحرارة، الصوت، والمزيد.
  • دقة أعلى: يوفر تحويل الإشارات التناظرية إلى رقمية دقة أكبر في القراءات.
  • دعم مجموعة متنوعة من الأجهزة: يمكن استخدامه مع مجموعة واسعة من الأجهزة الإلكترونية ومشاريع Raspberry Pi.

س3. كيف يُمكنني توصيل مُحول ADC بـ Raspberry Pi؟

يمكن توصيل محول ADC بـ Raspberry Pi عبر واجهة GPIO باستخدام الكابلات والموصلات المُناسبة. يجب توخي الحذر واتباع دليل الاتصالات المرفق مع محول ADC.

س4. هل يُمكنني استخدام محول ADC مع جميع إصدارات Raspberry Pi؟

نعم، يمكن استخدام محول ADC مع معظم إصدارات Raspberry Pi. ومع ذلك، قد تحتاج إلى مراعاة توصيل المُحول بمنفذ GPIO المناسب لإصدار جهازك الخاص.

س5. هل يتطلب الاستفادة من محول ADC خبرة في البرمجة؟

يعتمد ذلك على نطاق المشروع. في حالات بسيطة، يُمكن استخدام مكتبات جاهزة. ومع ذلك، قد تتطلب بعض المشاريع مهارات برمجية لاستخدام البيانات بشكل فعّال.

المضي قدمًا مع العديد من الخطوات التالية المُحتملة

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

فلماذا لا نأخذ الأمور إلى أبعد من ذلك؟ اربط عدة مقاييس جهد معًا، أو حاول قراءة الضوء أو الصوت أو درجة الحرارة. قم بتوسيع وحدة التحكم التي قمت بإنشائها للتو، وقم بإنشاء إعداد Raspberry Pi الذي يعد عمليًا حقًا! يُمكنك الإطلاع الآن على التحديات المُحتملة لخدمات الاستضافة الذاتية لمشاريعك على Raspberry Pi.

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