विषयसूची:

I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें: 8 कदम
I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें: 8 कदम

वीडियो: I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें: 8 कदम

वीडियो: I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें: 8 कदम
वीडियो: Introduction to ESP32 - Getting Started 2024, नवंबर
Anonim
I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें
I2C सेंसर इंटरफेस के साथ शुरुआत करना ?? - ESP32s का उपयोग करके अपने MMA8451 को इंटरफ़ेस करें

इस ट्यूटोरियल में, आप कंट्रोलर (Arduino, ESP32, ESP8266, ESP12 NodeMCU) के साथ काम करने वाले I2C डिवाइस (एक्सेलेरोमीटर) को शुरू करने, कनेक्ट करने और प्राप्त करने के तरीके के बारे में जानेंगे।

चरण 1: I2C के साथ कैसे शुरुआत करें - इंटर आईसी संचार की शानदार दुनिया

Arduino, ESP Series, PIC, Rasberry PI, आदि सभी अविश्वसनीय हैं। लेकिन एक बार आपके पास हो जाने के बाद आप इसके साथ क्या करते हैं?

सेंसर वगैरह जोड़ना सबसे अच्छी बात है. आज बहुत सी हॉट नई तकनीक कंप्यूटर, फोन, टैबलेट या माइक्रोकंट्रोलर को सेंसर से बात करने की अनुमति देने के लिए I2C प्रोटोकॉल का उपयोग करती है। स्मार्ट फोन कम स्मार्ट होंगे यदि वे यह जानने के लिए उस एक्सेलेरोमीटर सेंसर से बात नहीं कर सकते कि आपका फोन किस तरफ है।

चरण 2: I2C पर अवलोकन

I2C एक सीरियल, सिंक्रोनस, हाफ-डुप्लेक्स संचार प्रोटोकॉल है जो एक ही बस में कई स्वामी और दासों के सह-अस्तित्व की अनुमति देता है। I2C बस में दो लाइनें होती हैं: सीरियल डेटा लाइन (SDA) और सीरियल क्लॉक (SCL)। दोनों लाइनों को पुल-अप प्रतिरोधों की आवश्यकता होती है।

एसडीए (सीरियल डेटा) - डेटा भेजने और प्राप्त करने के लिए मास्टर और दास के लिए लाइन। SCL (सीरियल क्लॉक) - वह लाइन जो क्लॉक सिग्नल को वहन करती है। सरलता और कम निर्माण लागत जैसे लाभों के साथ, I2C का उपयोग ज्यादातर कम दूरी (एक फुट के भीतर) पर कम गति वाले परिधीय उपकरणों के संचार के लिए किया जाता है।

I2C के बारे में अधिक जानना चाहते हैं?……

चरण 3: I²C सेंसर को कैसे कॉन्फ़िगर करें

परियोजना में जाने से पहले, आपको अपने सेंसर की कुछ मूल बातें समझनी होंगी। तो गोता लगाने से पहले अपने आप को एक कप कॉफी डालें:)? …

I2C की सबसे बड़ी ताकत यह है कि आप एक ही चार तारों पर इतने सारे सेंसर लगा सकते हैं। लेकिन कई पूर्व-निर्मित मॉड्यूल वाली इकाइयों के लिए, आपको ब्रेकआउट से कुछ smd प्रतिरोधों को हटाना पड़ सकता है, अन्यथा बस पर पुल-अप बहुत आक्रामक हो सकता है।

हम डेटाशीट से क्या जानकारी चाहते हैं ??

  1. सेंसर कार्यक्षमता
  2. पिनआउट और पिन कार्यक्षमता
  3. इंटरफ़ेस विवरण ("I2c पता चयन तालिका" को देखना न भूलें)
  4. रजिस्टर !!

सब कुछ ठीक है आपको यह आसानी से मिल जाएगा लेकिन रजिस्टर्स ?? रजिस्टर एक I²C डिवाइस के अंदर बस मेमोरी लोकेशन हैं। किसी दिए गए सेंसर में कितने रजिस्टर होते हैं, और वे क्या नियंत्रित या शामिल करते हैं, इसका सारांश रजिस्टर मैप कहलाता है। सेंसर की डेटाशीट की अधिकांश जानकारी यह समझाने के बारे में है कि प्रत्येक रजिस्टर कैसे कार्य करता है, और उन्हें पढ़ने के लिए काफी नारा हो सकता है क्योंकि जानकारी शायद ही कभी सीधे तरीके से प्रस्तुत की जाती है।

आपको यह समझने के लिए कि मेरा क्या मतलब है: कई प्रकार के रजिस्टर हैं लेकिन इस परिचय के लिए मैं उन्हें दो सामान्य प्रकारों में समूहित करने जा रहा हूं: नियंत्रण और डेटा रजिस्टर।

१) नियंत्रण रजिस्टर

अधिकांश सेंसर बदलते हैं कि वे नियंत्रण रजिस्टरों में संग्रहीत मूल्यों के आधार पर कैसे काम करते हैं। नियंत्रण रजिस्टरों को ऑन/ऑफ स्विच के बैंकों के रूप में सोचें, जिन्हें आप थोड़ा सा 1 पर सेट करके चालू करते हैं और उस बिट को 0 पर सेट करके बंद कर देते हैं। I²C चिप-आधारित सेंसर में अक्सर एक दर्जन या अधिक परिचालन सेटिंग्स होती हैं जैसे बिट- मोड, इंटरप्ट, रीड-राइट कंट्रोल, डेप्थ, सैंपलिंग स्पीड, नॉइज़ रिडक्शन इत्यादि, इसलिए आपको वास्तव में रीडिंग लेने से पहले कई अलग-अलग कंट्रोल रजिस्टरों में बिट्स सेट करने की आवश्यकता होती है।

2) डेटा रजिस्टर एक नियंत्रण रजिस्टर बैंक-ऑफ-स्विच के विपरीत, मैं डेटा आउटपुट रजिस्टरों के बारे में सोचता हूं जैसे कंटेनर होल्डिंग नंबर जो बाइनरी फॉर्म में संग्रहीत होते हैं। तो आप डेटा जानना चाहते हैं, हमेशा डेटा रजिस्टर पढ़ें जैसे कि मैं डिवाइस पहचान, स्थिति रजिस्टर आदि के लिए कौन पंजीकृत हूं।

इसलिए, I²C सेंसर को इनिशियलाइज़ करना एक बहु-चरणीय प्रक्रिया है और संचालन के सही क्रम को अक्सर डेटाशीट में सीधे के बजाय विपरीत दिशा में लिखित रूप में समझाया जाता है। सूची कभी नहीं कह रही है "इस सेंसर से पढ़ने के लिए, (1), (2), (3), (4), आदि" करें, लेकिन आपको नियंत्रण रजिस्टर बिट्स के विवरण मिलते हैं, "इसमें बिट x सेट करने से पहले" रजिस्टर करने के लिए आपको इस अन्य नियंत्रण रजिस्टर में बिट y सेट करना होगा"।

फिर भी मुझे हमेशा लगता है कि अधिकांश टेक्स्ट की तुलना में डेटा शीट अधिक इंटरैक्टिव है। यदि आप इसे किसी विशिष्ट अंश या जानकारी के लिए संदर्भित करेंगे और यह आपको सभी विवरण, कनेक्शन और संदर्भ देगा। अपने सभी संदर्भ प्राप्त करने के लिए बस बैठ जाएं और पढ़ें।:)

चरण 4: गति के साथ प्रारंभ करें - एक्सेलेरोमीटर

आधुनिक एक्सेलेरोमीटर माइक्रो इलेक्ट्रो-मैकेनिकल सिस्टम (एमईएमएस) उपकरण हैं, जिसका अर्थ है कि वे छोटे से छोटे गैजेट के अंदर एक छोटी चिप पर फिट होने में सक्षम हैं। एमईएमएस एक्सेलेरोमीटर द्वारा नियोजित त्वरण को मापने की एक विधि स्प्रिंग्स पर निलंबित एक छोटे प्रवाहकीय द्रव्यमान का उपयोग करना है। डिवाइस का त्वरण स्प्रिंग्स को खिंचाव या अनुबंध का कारण बनता है, और प्रवाहकीय द्रव्यमान के विक्षेपण को कैपेसिटेंस में पास, निश्चित प्लेटों में परिवर्तन के माध्यम से मापा जा सकता है।

एक्सेलेरोमीटर निम्नलिखित विशेषताओं द्वारा निर्दिष्ट किया गया है:

  1. एक से तीन कुल्हाड़ियों तक की कुल्हाड़ियों की संख्या, निर्दिष्ट आरेखों में एक्स, वाई, और जेड लेबल की गई है। ध्यान दें कि कुछ एक्सेलेरोमीटर को 6-अक्ष या 9-अक्ष कहा जाता है, लेकिन इसका मतलब यह है कि उन्हें अन्य एमईएमएस उपकरणों जैसे कि जीरोस्कोप और/या मैग्नेटोमीटर के साथ बंडल किया गया है। उन उपकरणों में से प्रत्येक में तीन अक्ष भी होते हैं, यही वजह है कि 3, 6, या 9-अक्ष जड़त्वीय मापन इकाइयां (आईएमयू) हैं।
  2. आउटपुट का प्रकार, या तो एनालॉग या डिजिटल। एक डिजिटल एक्सेलेरोमीटर त्वरण डेटा को डिजिटल प्रतिनिधित्व में स्वरूपित करने का ख्याल रखता है जिसे I2C या SPI पर पढ़ा जा सकता है।
  3. त्वरण का परिसर g's में मापा जाता है, जहाँ 1g पृथ्वी के गुरुत्वाकर्षण के कारण त्वरण है।
  4. कोप्रोसेसर जो एमसीयू से कच्चे डेटा का विश्लेषण करने के लिए आवश्यक कुछ गणनाओं को ऑफलोड कर सकते हैं। अधिकांश एक्सेलेरोमीटर में त्वरण थ्रेशोल्ड (शॉक) और 0-जी (फ्रीफॉल) स्थिति का पता लगाने के लिए कुछ सरल इंटरप्ट क्षमता होती है। अन्य एमसीयू को अधिक सार्थक डेटा प्रदान करने के लिए कच्चे डेटा पर उन्नत प्रसंस्करण कर सकते हैं।

चरण 5: नियंत्रक के साथ इंटरफ़ेस

चूंकि हम प्रवृत्ति में ईएसपी माइक्रोकंट्रोलर जानते हैं, हम अपने उदाहरण के लिए ईएसपी 32 का उपयोग करेंगे। तो सबसे पहले आपको एक Nodemcu-32s चाहिए।

कोई चिंता नहीं अगर आपके पास कोई अन्य ईएसपी बोर्ड या यहां तक कि Arduino भी है !!! आपको Arduino, ESP NodeMCU, ESP32s आदि के लिए बस अपने विकास बोर्ड के अनुसार अपना Arduino IDE और कॉन्फ़िगरेशन सेटअप करना होगा … आपको किसी प्रकार के I2C भागों की भी आवश्यकता होगी, आमतौर पर ब्रेकआउट बोर्ड पर। इस ट्यूटोरियल में मैं उपयोग करने जा रहा हूँ MMA8451 डिजिटल एक्सेलेरोमीटर ब्रेकआउट बोर्ड।

और कुछ जम्पर तार…।

चरण 6: कनेक्शन

कनेक्शन
कनेक्शन

और यहाँ एक लेआउट है।

मैंने उपरोक्त मॉड्यूल से मेरे Nodemcu-32s मॉड्यूल में निम्नलिखित कनेक्शन का उपयोग किया।

ESP32s -- मॉड्यूल

३वी३ -- विनो

Gnd -- Gnd

एसडीए 21 -- एसडीए

एससीएल 22 -- एससीएल

"याद रखें, ज्यादातर समय सभी विकास बोर्डों (ज्यादातर ईएसपी में) के पास यह निर्धारित करने में मदद करने के लिए एक अच्छा स्पष्ट पिनआउट नहीं होता है कि कौन से पिन का उपयोग किया जाता है !! इसलिए कनेक्शन से पहले, एसडीए और एससीएल के लिए कौन से पिन का उपयोग करने के लिए अपने बोर्ड के सही पिन की पहचान करें।"

चरण 7: कोड

इसके लिए एडफ्रूट पुस्तकालय की आवश्यकता है

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip से

डाउनलोड करें, अनज़िप करें और आपको उदाहरण फ़ोल्डर मिलेगा, फ़ोल्डर में बस अपने Arduino IDE में MMA8451demo खोलें और यहाँ आप जाएँ…।

आप अपने नियंत्रक के साथ अपने MMA8451 सेंसर इंटरफ़ेस के लिए निम्नलिखित कोड देखेंगे

#शामिल

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451(); शून्य सेटअप (शून्य) {Serial.begin (९६००); वायर.बेगिन(4, 5); /* NodeMCU के SDA=D1 और SCL=D2 के साथ i2c बस में शामिल हों */ Serial.println("Adafruit MMA8451 test!"); अगर (! mma.begin ()) { Serial.println ("शुरू नहीं हो सका"); जबकि (1); } Serial.println ("MMA8451 मिला!"); mma.setRange(MMA8451_RANGE_2_G); सीरियल.प्रिंट ("रेंज ="); Serial.print(2 << mma.getRange ()); सीरियल.प्रिंट्लन ("जी"); } शून्य लूप () {// 'कच्चे' डेटा को 14-बिट काउंट में पढ़ें mma.read (); सीरियल.प्रिंट ("एक्स: / टी"); सीरियल.प्रिंट (एमएमए.एक्स); सीरियल.प्रिंट ("\ tY: / t"); सीरियल.प्रिंट (एमएमए.वाई); सीरियल.प्रिंट ("\ tZ: / t"); सीरियल.प्रिंट (एमएमए.जेड); सीरियल.प्रिंट्लन (); /* एक नया सेंसर ईवेंट प्राप्त करें */ sensor_event_t ईवेंट; mma.getEvent(&event); /* परिणाम प्रदर्शित करें (त्वरण m/s^2 में मापा जाता है) */ Serial.print("X: \t"); सीरियल.प्रिंट (event.acceleration.x); सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट ("वाई: / टी"); सीरियल.प्रिंट (event.acceleration.y); सीरियल.प्रिंट ("\ t"); सीरियल.प्रिंट ("जेड: / टी"); सीरियल.प्रिंट (event.acceleration.z); सीरियल.प्रिंट ("\ t"); Serial.println ("एम/एस ^ 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 ("लैंडस्केप राइट फ्रंट"); टूटना; मामला MMA8451_PL_LRB: Serial.println ("लैंडस्केप राइट बैक"); टूटना; मामला MMA8451_PL_LLF: Serial.println ("लैंडस्केप लेफ्ट फ्रंट"); टूटना; मामला MMA8451_PL_LLB: Serial.println ("लैंडस्केप लेफ्ट बैक"); टूटना; } सीरियल.प्रिंट्लन (); देरी (1000); }

सहेजें, सत्यापित करें और अपलोड करें……

सीरियल मॉनिटर खोलें और आप कुछ इस तरह देखेंगे, मैं सेंसर को घुमा रहा था इसलिए विभिन्न रीडिंग

एक्स: -2166 वाई: 1872 जेड: 2186

एक्स: -2166 वाई: 1872 जेड: 2186 एक्स: -4.92 वाई: 5.99 जेड: 4.87 एम/एस^2

लैंडस्केप वाम मोर्चा

एक्स: -224 वाई: -2020 जेड: 3188

एक्स: -5.10 वाई: -3.19 जेड: 7.00 एम/एस^2

पोर्ट्रेट अप फ्रंट

ठीक है अगर सब कुछ वैसा ही हो गया जैसा होना चाहिए, तो अब आपके पास I2C की मूल बातें हैं और अपने डिवाइस को कैसे कनेक्ट करें..

लेकिन डिवाइस काम नहीं कर रहा??

बस अगले कदम के साथ जाओ……

चरण 8: अपना I2C डिवाइस काम कर रहा है

I2C डिवाइस काम करने के लिए बुनियादी कदम

आइए पड़ताल करते हैं….

  • वायरिंग सही है..(इसे फिर से जांचें)
  • कार्यक्रम सही है..(हाँ, यह परीक्षण उदाहरण है..)

हल करने के लिए चरणों से शुरू करें…..

चरण 1: डिवाइस का पता जांचने के लिए I2C डिवाइस स्कैनर प्रोग्राम चलाएं और सबसे पहले आपका I2C डिवाइस ठीक है।

आप स्केच डाउनलोड कर सकते हैं और आउटपुट की जांच कर सकते हैं।

परिणाम - डिवाइस काम कर रहा है और सेंसर का पता सही है

I2C स्कैनर। स्कैन किया जा रहा है…

पता मिला: 28 (0x1C) हो गया। 1 उपकरण मिला।

चरण 2: सेंसर पुस्तकालय की जाँच करें।

Adafruit_MMA8451.h फ़ाइल खोलें और डिवाइस का पता ढूंढें

परिणाम - पता मेरे डिवाइस से अलग है??

/*=========================================== ======================== I2C पता/बिट्स --------------------- -------------------------------------------------- */ #परिभाषित करें MMA8451_DEFAULT_ADDRESS (0x1D) //!< डिफ़ॉल्ट MMA8451 I2C पता, यदि A GND है, तो इसका 0x1C /*=================== ============================================= */

करें - नोटपैड से फ़ाइल संपादित करें (पता बदलें) + सहेजें + आईडीई पुनरारंभ करें

यह काम करता है। आप अपनी रीडिंग प्राप्त कर सकते हैं।

सिल नहीं…..???

चरण 3: चेक Wire.begin अधिलेखित है?

Adafruit_MMA8451.c फ़ाइल खोलें और Wire.begin ढूंढें।

परिणाम - यह कथन अधिलेखित है

/********************************* *************************//*! @ ब्रीफ एचडब्ल्यू को सेट करता है (गुणांक मान, आदि पढ़ता है) *//********************************** *************/ बूल Adafruit_MMA8451::begin(uint8_t i2caddr) {वायर.बेगिन (); _i2caddr = i2caddr;

करें - नोटपैड से फ़ाइल संपादित करें (टिप्पणी कथन) + सहेजें + आईडीई पुनरारंभ करें

और अंत में डिवाइस काम कर रहा है☺…।

मैं इस ट्यूटोरियल को लगभग ओवरलोड कर देता हूं क्योंकि इसका मुख्य लक्ष्य यह समझाना था कि कैसे शुरू करें, डेटाशीट से डेटा प्राप्त करें, कनेक्ट करें और I2C डिवाइस को बहुत ही बुनियादी उदाहरण के साथ काम करें। आशा है कि सब कुछ वैसा ही होगा जैसा इसे करना चाहिए, और यह आपके सेंसर को शुरू करने के लिए उपयोगी होगा।

सिफारिश की: