جدول المحتويات:

الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s: 8 خطوات
الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s: 8 خطوات

فيديو: الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s: 8 خطوات

فيديو: الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s: 8 خطوات
فيديو: How to use ESP32 WiFi and Bluetooth with Arduino IDE full details with examples and code 2024, شهر نوفمبر
Anonim
الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s
الشروع في العمل مع واجهة مستشعر I2C ؟؟ - قم بتوصيل MMA8451 باستخدام ESP32s

في هذا البرنامج التعليمي ، ستتعلم كل شيء عن كيفية بدء تشغيل جهاز I2C (مقياس التسارع) وتوصيله والحصول عليه باستخدام وحدة التحكم (Arduino و ESP32 و ESP8266 و ESP12 NodeMCU)

الخطوة 1: كيف تبدأ مع I2C - عالم رائع من Inter IC Communication

Arduino و ESP Series و PIC و Rasberry PI وما إلى ذلك كلها مذهلة. لكن ماذا تفعل به بمجرد أن يكون لديك واحد؟

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

الخطوة 2: نظرة عامة على I2C

I2C هو بروتوكول اتصال تسلسلي متزامن أحادي الاتجاه يسمح بالتواجد المشترك للعديد من الرواد والعبيد على نفس الناقل. يتكون ناقل I2C من سطرين: خط البيانات التسلسلي (SDA) والساعة التسلسلية (SCL). كلا الخطين يتطلبان مقاومات سحب.

SDA (البيانات التسلسلية) - الخط الخاص بالسيد والعبد لإرسال واستقبال البيانات. SCL (Serial Clock) - الخط الذي يحمل إشارة الساعة. مع مزايا مثل البساطة وانخفاض تكلفة التصنيع ، يتم استخدام I2C في الغالب لتوصيل الأجهزة الطرفية منخفضة السرعة عبر مسافات قصيرة (في نطاق قدم واحدة).

هل تريد معرفة المزيد عن I2C؟ ……

الخطوة 3: كيفية تكوين مستشعرات I²C

قبل الدخول في المشروع ، تحتاج إلى فهم بعض أساسيات المستشعر الخاص بك. لذا اسكب لنفسك فنجانًا من القهوة قبل الغوص في:)؟ …

تكمن القوة العظيمة لـ I2C في أنه يمكنك وضع العديد من أجهزة الاستشعار على نفس الأسلاك الأربعة. ولكن بالنسبة للوحدات التي تحتوي على عدة وحدات مسبقة الصنع متصلة ، قد تضطر إلى إزالة بعض مقاومات smd من الكسور ، وإلا فقد يصبح سحب الحافلة عدوانيًا للغاية.

ماهي المعلومات التي نريدها من ورقة البيانات ؟؟

  1. وظائف الاستشعار
  2. وظائف Pinouts والدبابيس
  3. وصف الواجهة (لا تفوت إلقاء نظرة على "جدول تحديد عنوان I2c")
  4. تسجيلات !!

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

لإعطائك فكرة عما أعنيه بذلك: هناك العديد من أنواع السجلات ولكن بالنسبة لهذه المقدمة ، سأقوم بتجميعها في نوعين عامين: سجلات التحكم والبيانات.

1) سجلات التحكم

تغير معظم أجهزة الاستشعار طريقة عملها بناءً على القيم المخزنة في سجلات التحكم. فكر في سجلات التحكم كبنوك لمفاتيح التشغيل / الإيقاف ، والتي تقوم بتشغيلها عن طريق ضبط قليلاً على 1 وإيقاف تشغيله عن طريق ضبط هذا الشيء على 0. غالبًا ما تحتوي المستشعرات القائمة على رقاقة I²C على عشرات أو أكثر من الإعدادات التشغيلية لأشياء مثل bit- الأوضاع ، المقاطعات ، التحكم في القراءة والكتابة ، العمق ، سرعة أخذ العينات ، تقليل الضوضاء ، وما إلى ذلك ، لذلك تحتاج عادةً إلى ضبط البتات في عدة سجلات تحكم مختلفة قبل أن تتمكن بالفعل من أخذ القراءة.

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

لذلك ، فإن تهيئة مستشعر I²C هي عملية متعددة الخطوات ، وغالبًا ما يتم شرح الترتيب الصحيح للعمليات مكتوبًا في الاتجاه العكسي ، بدلاً من كتابة مباشرة في ورقة البيانات. القائمة لا تذكر أبدًا "للحصول على قراءة من هذا المستشعر ، قم بإجراء (1) ، (2) ، (3) ، (4) ، إلخ" ، ولكنك تجد أوصافًا لبتات تسجيل التحكم تقول "قبل تعيين البت x في هذا سجل يجب عليك تعيين البت y في سجل التحكم الآخر ".

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

الخطوة 4: ابدأ بالحركة - مقياس التسارع

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

يتم تحديد مقاييس التسارع من خلال الميزات التالية:

  1. عدد المحاور ، من واحد إلى ثلاثة محاور ، المسمى X و Y و Z في مخططات المواصفات. لاحظ أن بعض مقاييس التسارع تسمى 6 محاور أو 9 محاور ، ولكن هذا يعني فقط أنها مجمعة مع أجهزة MEMS أخرى مثل الجيروسكوبات و / أو أجهزة قياس المغناطيسية. يحتوي كل جهاز من هذه الأجهزة أيضًا على ثلاثة محاور ، وهذا هو سبب وجود وحدات القياس بالقصور الذاتي (IMUs) ذات 3 أو 6 أو 9 محاور.
  2. نوع الإخراج سواء كان تناظريًا أو رقميًا. يعتني مقياس التسارع الرقمي بتنسيق بيانات التسريع في تمثيل رقمي يمكن قراءته عبر I2C أو SPI.
  3. نطاق التسارع المُقاس بوحدة g ، حيث 1g هو التسارع الناتج عن جاذبية الأرض.
  4. المعالجات المشتركة التي يمكنها إلغاء تحميل بعض الحسابات اللازمة لتحليل البيانات الأولية من وحدة MCU. تحتوي معظم مقاييس التسارع على بعض إمكانية المقاطعة البسيطة لاكتشاف عتبة التسارع (الصدمة) وحالة 0-g (السقوط الحر). يمكن للآخرين إجراء معالجة متقدمة على البيانات الأولية لتقديم بيانات أكثر أهمية لوحدة MCU.

الخطوة 5: الواجهة مع وحدة التحكم

نظرًا لأننا نعرف المتحكمات الدقيقة ESP في الاتجاه ، فسنستخدم ESP32 كمثال. لذلك تحتاج أولاً إلى Nodemcu-32s.

لا تقلق إذا كان لديك أي لوحات ESP أخرى أو حتى Arduino !!! عليك فقط إعداد Arduino IDE والتكوين وفقًا للوحات التطوير الخاصة بك ، من أجل Arduino و ESP NodeMCU و ESP32s وما إلى ذلك … ستحتاج أيضًا إلى نوع من أجزاء I2C ، عادةً على لوحة الاختراق. في هذا البرنامج التعليمي سأستخدم MMA8451 لوحة اندلاع مقياس التسارع الرقمي.

وقليل من الأسلاك الطائر….

الخطوة 6: التوصيلات

اتصالات
اتصالات

وهنا تخطيط.

لقد استخدمت الاتصال التالي من الوحدة أعلاه إلى وحدة Nodemcu-32s الخاصة بي.

ESP32s - وحدة

3 ضد 3 - فين

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"تذكر ، في معظم الأوقات ، لا تحتوي جميع لوحات التطوير (غالبًا في ESPs) على pinout واضحًا جيدًا للمساعدة في تحديد المسامير المستخدمة !! لذا قبل الاتصال ، حدد المسامير الصحيحة للوحة الخاصة بك لاستخدام المسامير المخصصة لـ SDA و SCL."

الخطوة 7: الكود

هذا يتطلب مكتبة Adafruit

من

قم بتنزيل وفك ضغط وستجد مجلد أمثلة ، في المجلد فقط افتح MMA8451demo في Arduino IDE الخاص بك وهنا تذهب….

سترى الكود التالي لواجهة مستشعر MMA8451 مع وحدة التحكم الخاصة بك

#يشمل

# تضمين # تضمين Adafruit_MMA8451 mma = Adafruit_MMA8451 () ؛ إعداد باطل (باطل) {Serial.begin (9600) ؛ Wire.begin (4 ، 5) ؛ / * انضم إلى ناقل i2c مع SDA = D1 و SCL = D2 من NodeMCU * / Serial.println ("اختبار Adafruit MMA8451!") ؛ إذا (! mma.begin ()) {Serial.println ("تعذر البدء") ؛ بينما (1) ؛ } Serial.println ("تم العثور على MMA8451!")؛ mma.setRange (MMA8451_RANGE_2_G) ، Serial.print ("Range =") ؛ Serial.print (2 << mma.getRange ()) ؛ Serial.println ("G") ؛ } حلقة فارغة () {// اقرأ البيانات "الأولية" بأعداد 14 بت mma.read ()؛ Serial.print ("X: / t") ؛ Serial.print (mma.x) ؛ Serial.print ("\ tY: / t") ؛ Serial.print (mma.y) ؛ Serial.print ("\ tZ: / t")؛ Serial.print (mma.z) ؛ Serial.println () ، / * احصل على حدث مستشعر جديد * / sensors_event_t event ؛ mma.getEvent (& event) ؛ / * عرض النتائج (يتم قياس التسارع بوحدة m / s ^ 2) * / Serial.print ("X: / t") ؛ Serial.print (event.acceleration.x) ؛ Serial.print ("\ t") ؛ Serial.print ("Y: / t") ؛ Serial.print (event.acceleration.y) ؛ Serial.print ("\ t") ؛ Serial.print ("Z: / t") ؛ Serial.print (event.acceleration.z) ؛ Serial.print ("\ t") ؛ Serial.println ("م / ث ^ 2") ؛ / * احصل على اتجاه المستشعر * / uint8_t o = mma.getOrientation () ؛ التبديل (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front") ؛ استراحة؛ الحالة MMA8451_PL_PUB: Serial.println ("Portrait Up Back") ؛ استراحة؛ الحالة MMA8451_PL_PDF: Serial.println ("Portrait Down Front") ؛ استراحة؛ الحالة MMA8451_PL_PDB: Serial.println ("صورة لأسفل للخلف") ؛ استراحة؛ الحالة MMA8451_PL_LRF: Serial.println ("أمامي يمين أفقي") ؛ استراحة؛ الحالة MMA8451_PL_LRB: Serial.println ("خلفية أيمن أفقي") ؛ استراحة؛ الحالة MMA8451_PL_LLF: Serial.println ("أمامي يسار أفقي") ؛ استراحة؛ الحالة MMA8451_PL_LLB: Serial.println ("المشهد الأيسر للخلف") ؛ استراحة؛ } Serial.println () ، تأخير (1000) ؛ }

حفظ وتحقق وتحميل ……

افتح الشاشة التسلسلية وسترى شيئًا كهذا ، كنت أقوم بتحريك المستشعر ومن هنا جاءت القراءات المختلفة

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 m / s ^ 2

الجبهة اليسرى الأفقية

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 م / ث ^ 2

عمودي في الأمام

حسنًا ، إذا سار كل شيء كما ينبغي ، فلديك الآن أساسيات I2C وكيفية توصيل جهازك..

لكن الجهاز لا يعمل ؟؟

ما عليك سوى الانتقال إلى الخطوة التالية …….

الخطوة 8: احصل على جهاز I2C يعمل

الخطوات الأساسية لتشغيل جهاز I2C

دعونا نتحرى….

  • الأسلاك صحيحة.. (تحقق من ذلك مرة أخرى)
  • البرنامج صحيح.. (نعم إنه مثال تجريبي..)

ابدأ بمراحل لحلها…..

المرحلة 1: قم بتشغيل برنامج الماسح الضوئي لجهاز I2C للتحقق من عنوان الجهاز وأول جهاز I2C الخاص بك على ما يرام

يمكنك تنزيل المخطط والتحقق من الإخراج.

النتيجة - الجهاز يعمل وعنوان المستشعر صحيح

الماسح الضوئي I2C. يتم المسح …

تم العثور على العنوان: 28 (0x1C). تم العثور على جهاز واحد (أجهزة).

المرحلة 2: فحص مكتبة المستشعرات

افتح ملف Adafruit_MMA8451.h وابحث عن عنوان الجهاز

النتيجة - العنوان مختلف عن جهازي ؟؟

/ * ================================================= ========================== عنوان I2C / البتات --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! ==================================================== * /

افعل - تحرير الملف من المفكرة (تغيير العنوان) + حفظ + إعادة تشغيل IDE

إنه يعمل. يمكنك الحصول على قراءاتك.

ما زلت … ؟؟؟

المرحلة 3: التحقق من أن Wire.begin قد تم استبداله؟

افتح ملف Adafruit_MMA8451.c وابحث عن Wire.begin.

النتيجة - تم الكتابة فوق هذا البيان

/ *************************************************** ************************* // *! brief لإعداد HW (لقراءة قيم المعاملات ، إلخ.) * / / ************************************ ****************************************** / bool Adafruit_MMA8451:: start (uint8_t i2caddr) {Wire.begin () ، _i2caddr = i2caddr ؛

افعل - تحرير الملف من المفكرة (بيان التعليق) + حفظ + إعادة تشغيل IDE

وأخيرًا يبدأ الجهاز في العمل☺…

أنا على وشك تحميل هذا البرنامج التعليمي لأن هدفه الرئيسي هو شرح كيفية البدء والحصول على البيانات من ورقة البيانات والاتصال والحصول على جهاز I2C يعمل مع مثال أساسي للغاية ، آمل أن يسير كل شيء كما ينبغي ، وسيكون من المفيد بدء تشغيل المستشعر.

موصى به: