সুচিপত্র:

I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32s ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন: 8 টি ধাপ
I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32s ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন: 8 টি ধাপ

ভিডিও: I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32s ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন: 8 টি ধাপ

ভিডিও: I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32s ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন: 8 টি ধাপ
ভিডিও: কিভাবে রিমোটএক্সওয়াই এর মাধ্যমে বিশ্বের যেকোন স্থান থেকে ESP32 নিরীক্ষণ ও নিয়ন্ত্রণ করা যায় 2024, নভেম্বর
Anonim
I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32 ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন
I2C সেন্সর ইন্টারফেস দিয়ে শুরু করা ?? - ESP32 ব্যবহার করে আপনার MMA8451 ইন্টারফেস করুন

এই টিউটোরিয়ালে, আপনি নিয়ামক (Arduino, ESP32, ESP8266, ESP12 NodeMCU) এর সাথে I2C ডিভাইস (Accelerometer) কিভাবে শুরু করবেন, সংযুক্ত করবেন এবং পাবেন সে সম্পর্কে সব শিখবেন।

ধাপ 1: I2C দিয়ে কিভাবে শুরু করা যায় - ইন্টার আইসি কমিউনিকেশনের দুর্দান্ত বিশ্ব

আরডুইনো, ইএসপি সিরিজ, পিআইসি, রাসবেরি পিআই ইত্যাদি সবই অবিশ্বাস্য। কিন্তু একবার আপনার কাছে থাকলে আপনি এটি দিয়ে কি করবেন?

সেরা জিনিস হল সেন্সর যুক্ত করা এবং এরকম। কম্পিউটার, ফোন, ট্যাবলেট, বা মাইক্রোকন্ট্রোলারকে সেন্সরে কথা বলার অনুমতি দেওয়ার জন্য আজ অনেক নতুন নতুন প্রযুক্তি I2C প্রোটোকল ব্যবহার করে। স্মার্ট ফোনগুলি কম স্মার্ট হবে যদি তারা সেই অ্যাকসিলরোমিটার সেন্সরের সাথে কথা না বলতে পারে যে আপনার ফোন কোন দিকে যাচ্ছে।

ধাপ 2: I2C- এর ওভারভিউ

I2C একটি সিরিয়াল, সিঙ্ক্রোনাস, অর্ধ-দ্বৈত যোগাযোগ প্রোটোকল যা একই বাসে একাধিক মাস্টার এবং ক্রীতদাসদের সহ-অস্তিত্বের অনুমতি দেয়। আই 2 সি বাস দুটি লাইন নিয়ে গঠিত: সিরিয়াল ডেটা লাইন (এসডিএ) এবং সিরিয়াল ক্লক (এসসিএল)। উভয় লাইন টান আপ প্রতিরোধক প্রয়োজন।

এসডিএ (সিরিয়াল ডেটা) - মাস্টার এবং স্লেভের জন্য ডেটা প্রেরণ এবং গ্রহণের লাইন। এসসিএল (সিরিয়াল ক্লক) - যে লাইনটি ঘড়ির সংকেত বহন করে। সরলতা এবং কম উত্পাদন খরচের মতো সুবিধার সাথে, I2C বেশিরভাগ ক্ষেত্রে স্বল্প দূরত্বের (এক পায়ের মধ্যে) কম গতির পেরিফেরাল ডিভাইসের যোগাযোগের জন্য ব্যবহৃত হয়।

I2C সম্পর্কে আরো জানতে চান? ……

ধাপ 3: কিভাবে I²C সেন্সর কনফিগার করবেন

প্রকল্পে যাওয়ার আগে, আপনাকে আপনার সেন্সরের কয়েকটি বেসিক বুঝতে হবে। তাই ডুব দেওয়ার আগে নিজেকে এক কাপ কফি pourালুন:)? …

I2C এর বড় শক্তি হল যে আপনি একই চারটি তারের উপর অনেক সেন্সর লাগাতে পারেন। কিন্তু বিভিন্ন প্রি-তৈরি মডিউল সংযুক্ত ইউনিটগুলির জন্য, আপনাকে ব্রেকআউট থেকে কয়েকটি এসএমডি প্রতিরোধক অপসারণ করতে হতে পারে, অন্যথায় বাসে পুল-আপ খুব আক্রমণাত্মক হয়ে উঠতে পারে।

আমরা ডেটাশীট থেকে কি তথ্য চাই ??

  1. সেন্সর কার্যকারিতা
  2. পিনআউট এবং পিনের কার্যকারিতা
  3. ইন্টারফেস বর্ণনা ("I2c ঠিকানা নির্বাচন টেবিল" দেখতে ভুলবেন না)
  4. রেজিস্টার !!

সবকিছু ঠিক আছে আপনি সহজেই খুঁজে পাবেন কিন্তু নিবন্ধন করেন ?? রেজিস্টারগুলি কেবল একটি I²C ডিভাইসের ভিতরে মেমরির অবস্থান। প্রদত্ত সেন্সরে কতগুলি রেজিস্টার রয়েছে এবং সেগুলি কী নিয়ন্ত্রণ করে বা কী ধারণ করে তার সারসংক্ষেপকে রেজিস্টার ম্যাপ বলে। সেন্সরের ডেটশীটে বেশিরভাগ তথ্য প্রতিটি রেজিস্টার কীভাবে কাজ করে তা ব্যাখ্যা করার বিষয়ে এবং সেগুলি পড়ার জন্য বেশ স্লগ হতে পারে কারণ তথ্য খুব কমই সরাসরি উপস্থাপন করা হয়।

আমি এর দ্বারা আপনি কি বোঝাতে চেয়েছেন তা বোঝার জন্য: অনেক ধরণের রেজিস্টার আছে কিন্তু এই প্রবর্তনের জন্য আমি তাদের দুটি সাধারণ প্রকারে বিভক্ত করতে যাচ্ছি: কন্ট্রোল এবং ডেটা রেজিস্টার।

1) কন্ট্রোল রেজিস্টার

বেশিরভাগ সেন্সর কন্ট্রোল রেজিস্টারে সংরক্ষিত মানগুলির উপর ভিত্তি করে তারা কীভাবে কাজ করে তা পরিবর্তন করে। কন্ট্রোল রেজিস্টারগুলিকে অন/অফ সুইচের ব্যাঙ্ক হিসাবে মনে করুন, যা আপনি বিট 1 এ সেট করে চালু করেন এবং সেই বিটকে 0 এ সেট করে বন্ধ করুন I²C চিপ-ভিত্তিক সেন্সরগুলিতে প্রায়ই বিট-এর মতো জিনিসের জন্য এক ডজন বা তার বেশি অপারেশনাল সেটিংস থাকে মোড, ইন্টারাপ্টস, রিড-রাইট কন্ট্রোল, ডেপথ, স্যাম্পলিং স্পিড, নয়েজ রিডাকশন ইত্যাদি, তাই আপনি আসলে একটি রিডিং নেওয়ার আগে আপনাকে সাধারণত বিভিন্ন কন্ট্রোল রেজিস্টারে বিট সেট করতে হবে।

2) ডেটা রেজিস্টার ব্যাংক-অফ-সুইচগুলি নিয়ন্ত্রণের মতো নয়, আমি মনে করি ডাটা আউটপুট রেজিস্টারগুলিকে কন্টেইনার ধারণকারী সংখ্যা যা কেবল বাইনারি আকারে সংরক্ষণ করা হয়। সুতরাং আপনি ডেটা জানতে চান, সর্বদা ডেটা রেজিস্টার পড়ুন যেমন আমি ডিভাইস সনাক্তকরণের জন্য নিবন্ধন করি, স্ট্যাটাস রেজিস্টার ইত্যাদি।

সুতরাং, একটি I²C সেন্সর আরম্ভ করা একটি বহু-ধাপের প্রক্রিয়া এবং অপারেশনের সঠিক ক্রমটি প্রায়শই উল্টো দিকে লিখিতভাবে ব্যাখ্যা করা হয়, ডেটশীটে একটি সহজবোধ্যের পরিবর্তে। তালিকাটি কখনই বলছে না "এই সেন্সর থেকে পড়ার জন্য, করুন (1), (2), (3), (4), ইত্যাদি" এই অন্যান্য নিয়ন্ত্রণ নিবন্ধনে আপনাকে অবশ্যই বিট y সেট করতে হবে।

তবুও আমি সবসময় খুঁজে পাই যে একটি ডাটা শীট বেশিরভাগ পাঠ্যের চেয়ে বেশি ইন্টারেক্টিভ। যদি আপনি এটি একটি নির্দিষ্ট অংশ বা তথ্যের টুকরাগুলির জন্য উল্লেখ করেন এবং এটি আপনাকে সমস্ত বিবরণ, সংযোগ এবং রেফারেন্স দেয়। আপনার সমস্ত রেফারেন্স বের করতে শুধু বসে পড়ুন।:)

ধাপ 4: মোশন দিয়ে শুরু করুন - অ্যাকসিলরোমিটার

আধুনিক অ্যাকসিলরোমিটার হল মাইক্রো ইলেক্ট্রো-মেকানিক্যাল সিস্টেম (এমইএমএস) ডিভাইস, যার মানে হল যে তারা গ্যাজেটের ক্ষুদ্রতম ভিতরে একটি ছোট চিপে ফিট করতে সক্ষম। MEMS অ্যাকসিলরোমিটার দ্বারা নিযুক্ত ত্বরণ পরিমাপ করার একটি পদ্ধতি হল স্প্রিংসে স্থগিত ক্ষুদ্র পরিবাহী ভর ব্যবহার করা। ডিভাইসের ত্বরণ স্প্রিংসগুলিকে প্রসারিত বা সংকোচনের কারণ করে এবং পরিবাহী ভরের প্রতিফলনকে কাছাকাছি, স্থির প্লেটে ক্যাপ্যাসিট্যান্সের পরিবর্তনের মাধ্যমে পরিমাপ করা যায়।

অ্যাকসিলরোমিটার নিম্নলিখিত বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয়:

  1. অক্ষের সংখ্যা, এক থেকে তিনটি অক্ষ পর্যন্ত, স্পেসিফিকেশন ডায়াগ্রামে X, Y, এবং Z লেবেলযুক্ত। লক্ষ্য করুন যে কিছু অ্যাকসিলরোমিটারকে 6-অক্ষ বা 9-অক্ষ বলা হয়, কিন্তু এর মানে হল যে তারা অন্যান্য এমইএমএস ডিভাইস যেমন জাইরোস্কোপ এবং/অথবা ম্যাগনেটোমিটারের সাথে একত্রিত। এই ডিভাইসের প্রতিটিতে তিনটি অক্ষ রয়েছে, যার কারণে 3, 6, বা 9-অক্ষের জড়তা পরিমাপ ইউনিট (আইএমইউ) রয়েছে।
  2. আউটপুট প্রকার, হয় এনালগ বা ডিজিটাল। একটি ডিজিটাল অ্যাকসিলরোমিটার ত্বরণ ডেটাকে একটি ডিজিটাল উপস্থাপনায় ফরম্যাট করার যত্ন নেয় যা I2C বা SPI- এর মাধ্যমে পড়া যায়।
  3. ত্বকের পরিধি g এর মধ্যে পরিমাপ করা হয়, যেখানে 1g হল পৃথিবীর মাধ্যাকর্ষণের কারণে ত্বরণ।
  4. MCU থেকে কাঁচা তথ্য বিশ্লেষণের জন্য প্রয়োজনীয় কিছু হিসাব অফলোড করতে পারে এমন কোপ্রোসেসর। বেশিরভাগ অ্যাকসিলরোমিটারের একটি অ্যাক্সিলারেশন থ্রেশহোল্ড (শক) এবং 0-জি (ফ্রিফল) অবস্থা সনাক্ত করার জন্য কিছু সহজ বাধা ক্ষমতা রয়েছে। অন্যরা MCU- কে আরও অর্থবহ ডেটা দেওয়ার জন্য কাঁচা তথ্যের উপর উন্নত প্রক্রিয়াকরণ করতে পারে।

ধাপ 5: কন্ট্রোলারের সাথে ইন্টারফেস

যেহেতু আমরা ESP মাইক্রোকন্ট্রোলারকে ট্রেন্ডে জানি, আমরা আমাদের উদাহরণের জন্য ESP32 ব্যবহার করব। তাই প্রথমে আপনার একটি Nodemcu-32s প্রয়োজন।

আপনার যদি অন্য কোন ESP বোর্ড বা এমনকি Arduino থাকে তাহলে কোন চিন্তা নেই !!! Arduino, ESP NodeMCU, ESP32s ইত্যাদির জন্য আপনাকে শুধু আপনার ডেভেলপমেন্ট বোর্ড অনুযায়ী আপনার Arduino IDE এবং কনফিগারেশন সেটআপ করতে হবে … সাধারণত আপনার ব্রেকআউট বোর্ডে I2C অংশগুলিরও প্রয়োজন হবে। এই টিউটোরিয়ালে আমি MMA8451 ব্যবহার করতে যাচ্ছি ডিজিটাল অ্যাক্সিলারোমিটার ব্রেকআউট বোর্ড।

এবং কয়েকটি জাম্পার তার …

ধাপ 6: সংযোগ

সংযোগ
সংযোগ

এবং এখানে একটি বিন্যাস।

আমি উপরের মডিউল থেকে আমার Nodemcu-32s মডিউলে নিম্নলিখিত সংযোগ ব্যবহার করেছি।

ESP32s - মডিউল

3v3 - ভিন

Gnd - Gnd

এসডিএ 21 - এসডিএ

এসসিএল 22 - এসসিএল

"মনে রাখবেন, বেশিরভাগ সময় সব উন্নয়ন বোর্ডের (বেশিরভাগ ইএসপিগুলিতে) কোন পিন ব্যবহার করা হয় তা নির্ধারণ করতে সাহায্য করার জন্য একটি ভাল স্পষ্ট পিনআউট থাকে না! তাই সংযোগের আগে, আপনার বোর্ডের সঠিক পিনগুলি সনাক্ত করুন যে কোন পিনগুলি এসডিএ এবং এসসিএলের জন্য ব্যবহার করা হয়।"

ধাপ 7: কোড

এর জন্য অ্যাডাফ্রুট লাইব্রেরির প্রয়োজন

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip থেকে

ডাউনলোড করুন, আনজিপ করুন এবং আপনি উদাহরণ ফোল্ডারটি পাবেন, ফোল্ডারে আপনার Arduino IDE তে MMA8451demo খুলুন এবং এখানে যান…।

আপনি আপনার নিয়ামক সহ আপনার MMA8451 সেন্সর ইন্টারফেসের জন্য নিম্নলিখিত কোডটি দেখতে পাবেন

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত Adafruit_MMA8451 mma = Adafruit_MMA8451 (); অকার্যকর সেটআপ (অকার্যকর) {Serial.begin (9600); Wire.begin (4, 5); / * I2c বাসে SDA = D1 এবং SCL = D2 NodeMCU */ Serial.println ("Adafruit MMA8451 test!") এর সাথে যোগ দিন; যদি (! mma.begin ()) {Serial.println ("শুরু করা যায়নি"); যখন (1); } Serial.println ("MMA8451 পাওয়া গেছে!"); mma.setRange (MMA8451_RANGE_2_G); সিরিয়াল.প্রিন্ট ("রেঞ্জ ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } অকার্যকর লুপ () {// 14-বিট গণনায় 'কাঁচা' ডেটা পড়ুন mma.read (); Serial.print ("X: / t"); সিরিয়াল.প্রিন্ট (mma.x); Serial.print ("\ tY: / t"); সিরিয়াল.প্রিন্ট (mma.y); সিরিয়াল.প্রিন্ট ("\ tZ: / t"); সিরিয়াল.প্রিন্ট (mma.z); Serial.println (); / * একটি নতুন সেন্সর ইভেন্ট পান */ sensors_event_t ইভেন্ট; mma.getEvent (& event); / * ফলাফল প্রদর্শন করুন (ত্বরণ m/s^2 এ পরিমাপ করা হয়) */Serial.print ("X: / t"); সিরিয়াল.প্রিন্ট (event.acceleration.x); Serial.print ("\ t"); সিরিয়াল.প্রিন্ট ("Y: / t"); সিরিয়াল.প্রিন্ট (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); সিরিয়াল.প্রিন্ট (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * সেন্সরের ওরিয়েন্টেশন পান */ uint8_t o = mma.getOrientation (); সুইচ (ও) {কেস 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 ("Landscape Right Front"); বিরতি; কেস MMA8451_PL_LRB: Serial.println ("ল্যান্ডস্কেপ রাইট ব্যাক"); বিরতি; কেস MMA8451_PL_LLF: Serial.println ("Landscape Left Front"); বিরতি; কেস 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 m/s^2

সামনে পোর্ট্রেট

ঠিক আছে যদি সবকিছু ঠিক মতো চলতে থাকে, তাহলে আপনার কাছে এখন I2C এর মূল বিষয়গুলি এবং আপনার ডিভাইসটি কীভাবে সংযুক্ত করতে হবে।

কিন্তু ডিভাইস কাজ করছে না ??

শুধু পরবর্তী ধাপে এগিয়ে যান ……

ধাপ 8: আপনার I2C ডিভাইসটি কাজ করুন

I2C ডিভাইসের কাজ করার জন্য প্রাথমিক পদক্ষেপগুলি

আসুন তদন্ত করি ….

  • ওয়্যারিং সঠিক.. (এটি আবার পরীক্ষা করুন)
  • প্রোগ্রাম সঠিক.. (হ্যাঁ, এটি পরীক্ষার উদাহরণ..)

সমাধানের জন্য পর্যায়গুলি দিয়ে শুরু করুন ….

পর্যায় 1: ডিভাইসের ঠিকানা পরীক্ষা করতে I2C ডিভাইস স্ক্যানার প্রোগ্রাম চালান এবং প্রথমে আপনার I2C ডিভাইস ঠিক আছে।

আপনি স্কেচ ডাউনলোড করতে পারেন এবং আউটপুট চেক করতে পারেন।

ফলাফল - ডিভাইস কাজ করছে এবং সেন্সরের ঠিকানা ঠিক আছে

I2C স্ক্যানার। স্ক্যান করা হচ্ছে …

পাওয়া ঠিকানা: 28 (0x1C) সম্পন্ন। ১ টি ডিভাইস পাওয়া গেছে

পর্যায় 2: সেন্সর লাইব্রেরি পরীক্ষা করুন।

Adafruit_MMA8451.h ফাইলটি খুলুন এবং ডিভাইসের ঠিকানা খুঁজুন

ফলাফল - ঠিকানা আমার ডিভাইস থেকে আলাদা ??

/*====================================================== =========================== I2C ঠিকানা/বিটস --------------------- -------------------------------------------------- MMA8451_DEFAULT_ADDRESS (0x1D) //! ======================================================== */

করুন - নোটপ্যাড থেকে ফাইল সম্পাদনা করুন (ঠিকানা পরিবর্তন করুন) + সংরক্ষণ করুন + আইডিই পুনরায় চালু করুন

এটা কাজ করে.আপনি আপনার রিডিং পেতে পারেন।

সিল না….. ???

পর্যায় 3: Wire.begin চেক করুন?

Adafruit_MMA8451.c ফাইলটি খুলুন এবং Wire.begin খুঁজুন।

ফলাফল - এই বিবৃতিটি ওভাররাইট করা হয়েছে

/*************************************************** *************************** //*! rief সংক্ষিপ্ত সেটআপ HW (সহগের মান ইত্যাদি পড়ে)* / / ********************************** ********************************************/ বুল Adafruit_MMA8451:: start (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

করুন - নোটপ্যাড থেকে ফাইল সম্পাদনা করুন (মন্তব্য বিবৃতি) + সংরক্ষণ করুন + IDE পুনরায় চালু করুন

এবং অবশেষে ডিভাইস কাজ করছে -

আমি এই টিউটোরিয়ালটি প্রায় ওভারলোড করেছি কারণ এর মূল লক্ষ্য ছিল কিভাবে শুরু করা, ডেটাশীট থেকে ডেটা পাওয়া, সংযোগ করা এবং I2C ডিভাইসটি খুব মৌলিক উদাহরণ দিয়ে কাজ করা।

প্রস্তাবিত: