فهرست مطالب:

شروع به کار با رابط سنسور I2C ؟؟ - رابط MMA8451 خود را با استفاده از ESP32s انجام دهید: 8 مرحله
شروع به کار با رابط سنسور I2C ؟؟ - رابط MMA8451 خود را با استفاده از ESP32s انجام دهید: 8 مرحله

تصویری: شروع به کار با رابط سنسور I2C ؟؟ - رابط MMA8451 خود را با استفاده از ESP32s انجام دهید: 8 مرحله

تصویری: شروع به کار با رابط سنسور I2C ؟؟ - رابط MMA8451 خود را با استفاده از ESP32s انجام دهید: 8 مرحله
تصویری: ESP32 Modbus Communication | FLProg SCADA 2024, نوامبر
Anonim
شروع به کار با رابط سنسور I2C ؟؟ - با استفاده از ESP32 به MMA8451 خود رابط دهید
شروع به کار با رابط سنسور I2C ؟؟ - با استفاده از ESP32 به MMA8451 خود رابط دهید

در این آموزش شما با نحوه راه اندازی ، اتصال و دریافت دستگاه I2C (شتاب سنج) کار با کنترلر آشنا خواهید شد (Arduino ، ESP32 ، ESP8266 ، ESP12 NodeMCU)

مرحله 1: چگونه می توان با I2C شروع کرد - دنیای باشکوه ارتباطات IC IC

Arduino ، ESP Series ، PIC ، Rasberry PI و غیره همه باورنکردنی هستند. اما وقتی یکی را داشتید با آن چه می کنید؟

بهترین کار اضافه کردن سنسورها و موارد دیگر است. امروزه بسیاری از فناوری های جدید داغ از پروتکل I2C استفاده می کنند تا به رایانه ، تلفن ها ، رایانه های لوحی یا میکروکنترلرها اجازه دهد با حسگرها صحبت کنند. اگر تلفن های هوشمند نتوانند با آن سنسور شتاب سنج صحبت کنند تا بدانند تلفن شما به کدام سمت روبرو است ، کمتر هوشمند خواهند بود.

مرحله 2: مروری بر I2C

I2C یک پروتکل ارتباطی سریالی ، همزمان ، نیمه دوطرفه است که امکان وجود چندین استاد و برده در یک گذرگاه را فراهم می کند. گذرگاه I2C شامل دو خط است: خط داده سریال (SDA) و ساعت سریال (SCL). هر دو خط نیاز به مقاومت های کششی دارند.

SDA (داده های سریال) - خطی برای ارسال و دریافت داده ها برای master و slave. SCL (ساعت سریال) - خطی که سیگنال ساعت را حمل می کند. I2C با مزایایی مانند سادگی و هزینه پایین تولید ، بیشتر برای ارتباط دستگاههای جانبی کم سرعت در مسافتهای کوتاه (در فاصله یک پا) استفاده می شود.

آیا می خواهید در مورد I2C بیشتر بدانید؟ ……

مرحله 3: نحوه پیکربندی سنسورهای I²C

قبل از رفتن به پروژه ، باید چند اصل از سنسور خود را بشناسید. بنابراین قبل از شیرجه زدن برای خود یک فنجان قهوه بریزید:)؟ …

نقطه قوت I2C این است که می توانید سنسورهای زیادی را روی چهار سیم یکسان قرار دهید. اما برای واحدهایی که چندین ماژول از پیش ساخته شده به هم متصل شده اند ، ممکن است مجبور شوید چند مقاومت smd را از شکاف ها بردارید ، در غیر این صورت کشش در اتوبوس ممکن است بیش از حد تهاجمی شود.

از Datasheet چه اطلاعاتی می خواهیم؟

  1. عملکرد سنسور
  2. عملکرد Pinouts و پین ها
  3. توضیحات رابط (نگاه کردن به "جدول انتخاب آدرس I2c" را از دست ندهید)
  4. ثبت نام !!

همه چیز خوب است شما به راحتی آن را پیدا خواهید کرد اما ثبت نام می کند؟ REGISTERS مکانهای حافظه در داخل دستگاه I²C هستند. خلاصه ای از تعداد رجیسترهای موجود در یک سنسور معین و آنچه که آنها کنترل یا شامل می شوند ، نقشه ثبت نامیده می شود. بیشتر اطلاعات موجود در برگه اطلاعات سنسور در مورد نحوه عملکرد هر یک از ثبات ها است و خواندن آنها می تواند بسیار مبهم باشد زیرا اطلاعات به ندرت به صورت مستقیم ارائه می شوند.

برای اینکه منظورم را از این جمله بفهمید: انواع زیادی از رجیسترها وجود دارد اما برای این مقدمه قصد دارم آنها را به دو نوع کلی دسته بندی کنم: ثبت و کنترل داده ها.

1) ثبت های کنترل

بیشتر حسگرها بر اساس مقادیر ذخیره شده در رجیسترهای کنترل نحوه عملکرد خود را تغییر می دهند. به رجیسترهای کنترل به عنوان بانک های کلیدهای روشن/خاموش فکر کنید ، که با تنظیم کمی روی 1 و خاموش کردن آن روی 0 روشن می کنید. سنسورهای مبتنی بر تراشه I²C اغلب دارای دوجین یا بیشتر تنظیمات عملیاتی برای مواردی مانند بیت هستند. حالت ها ، وقفه ها ، کنترل خواندن و نوشتن ، عمق ، سرعت نمونه برداری ، کاهش نویز و غیره ، بنابراین شما معمولاً باید بیت هایی را در چندین رجیستر کنترلی مختلف تنظیم کنید تا بتوانید قرائت را انجام دهید.

2) ثبت داده ها بر خلاف کنترل که بانک سوئیچ ها را ثبت می کند ، من ثبت کننده های خروجی داده را به عنوان ظروفی در نظر می گیرم که اعداد را در خود ذخیره می کنند و به صورت دودویی ذخیره می شوند. بنابراین شما می خواهید داده ها را بشناسید ، همیشه ثبت کننده های داده ای مانند من برای شناسایی دستگاه ، وضعیت ثبت نام و غیره را بخوانید.

بنابراین ، راه اندازی یک سنسور I²C یک فرایند چند مرحله ای است و ترتیب صحیح عملیات اغلب به صورت مستقیم در جهت عکس نوشته می شود ، به جای آنکه در Datasheet مستقیم باشد. لیست هرگز نمی گوید "برای دریافت خواندن از این سنسور ، کارهای (1) ، (2) ، (3) ، (4) و غیره را انجام دهید" ، اما توضیحاتی در مورد بیت های ثبت کننده کنترل پیدا می کنید که می گوید "قبل از تنظیم بیت x در این register باید بیت y را در این رجیستر کنترل دیگر تنظیم کنید."

با این وجود ، من همیشه می دانم که یک برگه داده نسبت به اکثر متن ها تعاملی تر است. اگر شما آن را برای قطعه یا اطلاعات خاصی ارجاع دهید و همه جزئیات ، ارتباطات و منابع را در اختیار شما قرار دهد. فقط بنشینید و بخوانید تا همه مراجع خود را دریافت کنید.:)

مرحله 4: با حرکت - شتاب سنج شروع کنید

شتاب سنج های مدرن دستگاه های میکرو الکترو مکانیکی (MEMS) هستند ، به این معنی که آنها می توانند بر روی یک تراشه کوچک در کوچکترین ابزارها قرار گیرند. یکی از روشهای اندازه گیری شتاب مورد استفاده در شتاب سنجهای MEMS استفاده از یک جرم رسانای کوچک معلق بر روی چشمه ها است. شتاب دستگاه باعث می شود که چشمه ها کشیده یا منقبض شوند و انحراف جرم رسانا را می توان از طریق تغییر ظرفیت به صفحات ثابت و مجاور اندازه گیری کرد.

شتاب سنج ها با ویژگی های زیر مشخص می شوند:

  1. تعداد محورها ، از یک تا سه محور ، با برچسب X ، Y و Z در نمودارهای مشخصات. توجه داشته باشید که برخی از شتاب سنج ها 6 محور یا 9 محور نامیده می شوند ، اما این بدان معناست که آنها با سایر دستگاه های MEMS مانند ژیروسکوپ و/یا مغناطیس سنج همراه شده اند. هر یک از این دستگاه ها همچنین دارای سه محور هستند ، به همین دلیل واحد اندازه گیری اینرسی 3 ، 6 یا 9 محور (IMU) وجود دارد.
  2. نوع خروجی ، آنالوگ یا دیجیتال. شتاب سنج دیجیتال از قالب بندی داده های شتاب در یک نمایش دیجیتالی که می تواند از طریق I2C یا SPI خوانده شود مراقبت می کند.
  3. محدوده شتاب اندازه گیری شده در g’s ، که 1g شتاب ناشی از گرانش زمین است.
  4. هم پردازنده هایی که می توانند برخی از محاسبات مورد نیاز برای تجزیه و تحلیل داده های خام از MCU را بارگیری کنند. اکثر شتاب سنجها دارای قابلیت وقفه ای ساده برای تشخیص آستانه شتاب (شوک) و شرایط 0 گرم (سقوط آزاد) هستند. دیگران می توانند پردازش پیشرفته ای را بر روی داده های خام انجام دهند تا داده های معنی دار تری به MCU ارائه دهند.

مرحله 5: رابط با کنترل کننده

از آنجا که ما میکروکنترلرهای ESP را در جریان می شناسیم ، از ESP32 برای مثال خود استفاده می کنیم. بنابراین ابتدا به یک Nodemcu-32s نیاز دارید.

اگر هیچ تابلوی ESP دیگر یا حتی آردوینو ندارید نگران نباشید !!! شما فقط باید Arduino IDE و پیکربندی خود را مطابق با تابلوهای توسعه خود ، برای Arduino ، ESP NodeMCU ، ESP32s و غیره تنظیم کنید … همچنین به برخی از قطعات I2C ، معمولاً در یک بریکت برد نیاز دارید. در این آموزش من قصد دارم از MMA8451 استفاده کنم برد شکست دیجیتال شتاب سنج.

و چند سیم جامپر….

مرحله 6: اتصالات

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

و در اینجا یک طرح بندی است.

من از اتصال زیر از ماژول بالا به ماژول Nodemcu-32s خود استفاده کردم.

ESP32s - ماژول

3v3 - Vin

گند - گند

SDA 21 - SDA

SCL 22 - SCL

"به یاد داشته باشید ، بیشتر اوقات همه تابلوهای توسعه (بیشتر در ESP ها) دارای یک پینت واضح و خوب برای تعیین پین های مورد استفاده نیستند !! بنابراین قبل از اتصال ، پین های صحیح برد خود را مشخص کنید تا از پین های SDA و SCL استفاده کنید."

مرحله 7: کد

این نیاز به کتابخانه Adafruit دارد

از

بارگیری کنید ، از حالت فشرده خارج شوید و پوشه نمونه ها را پیدا خواهید کرد ، در پوشه فقط MMA8451demo را در Arduino IDE خود باز کنید و در اینجا شما….

کد زیر را برای رابط سنسور MMA8451 با کنترلر خود مشاهده خواهید کرد

#عبارتند از

#شامل #شامل Adafruit_MMA8451 mma = Adafruit_MMA8451 ()؛ void setup (void) {Serial.begin (9600)؛ Wire.begin (4 ، 5) ؛ / * با SDA = D1 و SCL = D2 از NodeMCU */ Serial.println ("تست Adafruit MMA8451!") به گذرگاه i2c بپیوندید؛ if (! mma.begin ()) {Serial.println ("شروع نشد")؛ در حالی که (1) ؛ } Serial.println ("MMA8451 پیدا شد!") ؛ mma.setRange (MMA8451_RANGE_2_G) ؛ Serial.print ("محدوده =")؛ Serial.print (2 << mma.getRange ())؛ Serial.println ("G") ؛ } void loop () {// خواندن داده های "خام" در تعداد 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 (& رویداد)؛ / * نمایش نتایج (شتاب با 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 ("m/s^2") ؛ / * جهت سنسور را دریافت کنید */ uint8_t o = mma.getOrientation ()؛ switch (o) {case MMA8451_PL_PUF: Serial.println ("پرتره از جلو")؛ زنگ تفريح؛ مورد MMA8451_PL_PUB: Serial.println ("پرتره به بالا")؛ زنگ تفريح؛ مورد MMA8451_PL_PDF: Serial.println ("عمودی از جلو")؛ زنگ تفريح؛ مورد 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) انجام شد. 1 دستگاه (ها) پیدا شد.

مرحله 2: کتابخانه حسگر را بررسی کنید

فایل Adafruit_MMA8451.h را باز کرده و آدرس دستگاه را بیابید

نتیجه - آدرس با دستگاه من متفاوت است؟

/*============================================= ======================== آدرس I2C/BITS --------------------- ------------------------------------------------------ * / #تعریف MMA8451_DEFAULT_ADDRESS (0x1D) //! <آدرس پیش فرض MMA8451 I2C ، اگر A GND باشد ، 0x1C /*======================= ================================================ */

انجام - ویرایش فایل از دفترچه یادداشت (تغییر آدرس) + ذخیره + راه اندازی مجدد IDE

کار می کند.شما می توانید مطالب خود را دریافت کنید.

جلو نیاید….. ؟؟؟

مرحله 3: بررسی کنید Wire.begin رونویسی شده است؟

فایل Adafruit_MMA8451.c را باز کرده و Wire.begin را بیابید.

نتیجه - این عبارت رونویسی می شود

/********************************************** ***************************! brief تنظیم HW (خواندن مقادیر ضرایب و غیره)* / / ******************************* *************************************/ bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin ()؛ _i2caddr = i2caddr ؛

انجام - ویرایش فایل از دفترچه یادداشت (بیانیه نظر) + ذخیره + راه اندازی مجدد IDE

و سرانجام دستگاه در حال کار است…

من تقریباً این آموزش را بیش از حد بار می کنم زیرا هدف اصلی آن توضیح نحوه شروع ، دریافت داده ها از برگه داده ، اتصال و کارکردن دستگاه I2C با مثال اصلی بود. امیدوارم همه چیز آنطور که باید پیش برود و راه اندازی سنسور شما مفید خواهد بود.

توصیه شده: