Mündəricat:
- Addım 1: I2C - Inter IC Ünsiyyətinin Möhtəşəm Dünyası ilə Necə Başlayaq
- Addım 2: I2C -yə ümumi baxış
- Addım 3: I²C Sensorlarını Necə Konfiqurasiya etmək olar
- Addım 4: Hərəkətlə Başlayın - Akselerometr
- Addım 5: Nəzarətçi ilə İnterfeys
- Addım 6: Bağlantılar
- Addım 7: Kod
- Addım 8: I2C cihazınızı işə salın
Video: I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi: 8 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Bu təlimatda, nəzarətçi ilə işləyən (Arduino, ESP32, ESP8266, ESP12 NodeMCU) I2C cihazını (Accelerometer) necə işə salmaq, bağlamaq və əldə etmək haqqında hər şeyi öyrənəcəksiniz.
Addım 1: I2C - Inter IC Ünsiyyətinin Möhtəşəm Dünyası ilə Necə Başlayaq
Arduino, ESP Series, PIC, Rasberry PI və s. Hamısı inanılmazdır. Ancaq bir şeyiniz olandan sonra nə edəcəksiniz?
Ən yaxşısı sensorlar əlavə etməkdir. Bu gün bir çox yeni texnologiya, kompüterlərə, telefonlara, planşetlərə və ya mikrokontrolörlərə sensorlar ilə danışmaq üçün I2C protokolundan istifadə edir. Telefonunuzun hansı tərəfə baxdığını bilmək üçün o akselerometr sensoru ilə danışa bilməsələr, ağıllı telefonlar daha az ağıllı olardı.
Addım 2: I2C -yə ümumi baxış
I2C, eyni avtobusda birdən çox ustanın və qulun birlikdə yaşamasına imkan verən seriyalı, sinxron, yarı dupleks bir əlaqə protokoludur. I2C avtobusu iki xətdən ibarətdir: serial məlumat xətti (SDA) və serial saat (SCL). Hər iki xətt çəkmə rezistorlarına ehtiyac duyur.
SDA (Serial Data) - Məlumat göndərmək və almaq üçün usta və qulun xətti. SCL (Serial Clock) - Saat siqnalını daşıyan xətt. Sadəlik və aşağı istehsal dəyəri kimi üstünlükləri ilə I2C əsasən aşağı məsafəli periferik cihazların qısa məsafələrdə (bir ayaq daxilində) ünsiyyəti üçün istifadə olunur.
I2C haqqında daha çox öyrənmək istəyirsiniz? …….
Addım 3: I²C Sensorlarını Necə Konfiqurasiya etmək olar
Layihəyə başlamazdan əvvəl, Sensorunuzun bəzi əsaslarını başa düşməlisiniz. Dalışdan əvvəl özünüzə bir fincan qəhvə tökün:)? …
I2C -nin böyük gücü, eyni dörd telə çox sayda sensor yerləşdirə bilməkdir. Ancaq bir neçə əvvəlcədən hazırlanmış modulu birləşdirilmiş vahidlər üçün bir neçə smd rezistoru qırılmalardan çıxarmalı ola bilərsiniz, əks halda avtobusdakı çəkmə çox aqressiv ola bilər.
Məlumat cədvəlindən hansı məlumatları istəyirik ??
- Sensor funksiyası
- Pinouts və sancaqlar funksionallığı
- İnterfeys təsviri ("I2c Ünvan Seçim cədvəlinə" baxmağı qaçırmayın)
- Qeydiyyat !!
Hər şey yaxşıdır, asanlıqla tapa bilərsiniz, amma Qeydiyyat? QEYDİYYATçılar sadəcə bir I²C cihazının içərisində olan yaddaş yerləridir. Verilmiş bir sensordakı neçə registrin və onların idarə etdiklərinin və ya ehtiva etdiklərinin xülasəsinə qeyd xəritəsi deyilir. Sensorun məlumat cədvəlindəki məlumatların əksəriyyəti, hər bir reyestrin necə işlədiyini izah etməklə əlaqədardır və bu məlumatlar nadir hallarda birbaşa şəkildə təqdim edildiyi üçün oxumaq olduqca çətin ola bilər.
Bununla nə demək istədiyimi anlamaq üçün: Bir çox növ qeydlər var, amma bu giriş üçün onları iki ümumi növə bölmək fikrindəyəm: Nəzarət və Məlumat qeydləri.
1) Nəzarət Qeydləri
Sensorların çoxu idarəetmə qeydlərində saxlanılan dəyərlərə əsasən necə işlədiyini dəyişir. Nəzarət registrlərini bir az 1-ə qoyaraq açdığınız və bu biti 0-a qoyaraq söndürdüyünüz Açma/Kapama açarlarının bankları kimi düşünün. I²C çip əsaslı sensorlar tez-tez bit kimi şeylər üçün onlarla və ya daha çox əməliyyat parametrlərinə malikdir. Rejimlər, kəsilmələr, oxu-yazma nəzarəti, dərinlik, nümunə götürmə sürəti, səs-küyün azaldılması və s., Buna görə də oxu etməzdən əvvəl adətən bir neçə fərqli nəzarət reyestrində bitlər təyin etməlisiniz.
2) Məlumat qeydləri Nəzarət registrləri, açar banklarını qeyd etmədən fərqli olaraq, yalnız ikili formada saxlanılan nömrələri tutan konteynerlər kimi məlumatların çıxış qeydlərini düşünürəm. Veriləri bilmək istəyirsən, cihaz identifikasiyası üçün kim olduğumu, Status reyestrini və s.
Beləliklə, bir I²C sensoru işə salmaq çox mərhələli bir prosesdir və düzgün əməliyyat qaydası tez-tez əksinə yazılaraq açıqlanır. "Bu sensordan bir oxunuş əldə etmək üçün (1), (2), (3), (4) və s." sözlərini heç vaxt söyləməyən siyahı, ancaq bu işdə bit x təyin etməzdən əvvəl "nəzarət qeydləri bitlərinin təsvirlərini tapa bilərsiniz. qeydiyyatdan keçmək üçün bu digər nəzarət qeydində bit y təyin etməlisiniz."
Yenə də hər zaman bir məlumat vərəqinin əksər mətnlərdən daha interaktiv olduğunu görürəm. Əgər müəyyən bir məlumat və ya məlumat üçün istinad edərsinizsə və sizə bütün detalları, əlaqələri və istinadları versəniz. Sadəcə oturun və bütün istinadlarınızı öyrənmək üçün oxuyun.:)
Addım 4: Hərəkətlə Başlayın - Akselerometr
Müasir akselerometrlər, Mikro Elektro-Mexanik Sistemlər (MEMS) cihazlarıdır, yəni ən kiçik gadgetların içərisindəki kiçik bir çipə sığa bilirlər. MEMS sürətölçənlərin istifadə etdiyi sürətlənməni ölçmək üçün bir üsul yaylarda asılmış kiçik bir keçirici kütlədən istifadə etməkdir. Cihazın sürətlənməsi yayların uzanmasına və ya daralmasına səbəb olur və keçirici kütlənin sapması yaxınlıqdakı sabit lövhələrə olan tutumun dəyişməsi ilə ölçülə bilər.
Sürətləndiricilər aşağıdakı xüsusiyyətlərlə müəyyən edilir:
- Spesifikasiya diaqramlarında X, Y və Z etiketli birdən üçə qədər olan baltaların sayı. Diqqət yetirin ki, bəzi akselerometrlərə 6 oxlu və ya 9 oxlu deyilir, lakin bu onların jiroskoplar və/və ya maqnitometrlər kimi digər MEMS cihazları ilə birləşdirildiyini bildirir. Bu cihazların hər birinin üç oxu var, bu səbəbdən 3, 6 və ya 9 oxlu Atalet Ölçmə Birlikləri (IMU) var.
- İstənilən analog və ya rəqəmsal çıxış növü. Rəqəmsal bir akselerometr, sürətləndirmə məlumatlarının I2C və ya SPI üzərində oxuna bilən rəqəmsal bir təqdimata formatlanmasını təmin edir.
- 1g -nin Yerin cazibə qüvvəsi səbəbiylə əldə etdiyi sürətlənmə g ilə ölçülür.
- MCU -dan xam məlumatları təhlil etmək üçün lazım olan bəzi hesablamaları yükləyə bilən koprosessorlar. Əksər sürətölçənlər bir sürətlənmə eşikini (şok) və 0-g (sərbəst düşmə) vəziyyətini aşkar etmək üçün bəzi sadə kəsmə qabiliyyətinə malikdir. Digərləri, MCU -ya daha mənalı məlumatlar təqdim etmək üçün xam məlumatlarda qabaqcıl emal edə bilərlər.
Addım 5: Nəzarətçi ilə İnterfeys
ESP Mikrokontrollerlərini trenddə tanıdığımız üçün nümunəmiz üçün ESP32 -dən istifadə edəcəyik. Beləliklə, əvvəlcə bir Nodemcu-32s lazımdır.
Başqa bir ESP lövhəniz və ya hətta Arduino varsa narahat olmayın !!! Arduino IDE və konfiqurasiyanızı Arduino, ESP NodeMCU, ESP32s və s. İşlətmə lövhələrinə uyğun olaraq qurmalısınız … Bir qayda olaraq, bir qırılma lövhəsində bir növ I2C hissələrinə ehtiyacınız olacaq. Bu dərslikdə MMA8451 istifadə edəcəyəm. rəqəmsal sürətləndirici qırılma lövhəsi.
Və az keçid telləri ….
Addım 6: Bağlantılar
Və burada bir tərtibat var.
Yuxarıdakı moduldan Nodemcu-32s modulu ilə aşağıdakı əlaqəni istifadə etdim.
ESP32s - Modul
3v3 - Vin
Gnd - Gnd
SDA 21 - SDA
SCL 22 - SCL
"Unutmayın, çox vaxt bütün inkişaf lövhələrində (əsasən ESP -lərdə) hansı sancaqların istifadə edildiyini təyin etməyə kömək edəcək yaxşı bir aydın pinout yoxdur !! Buna görə də qoşulmadan əvvəl, SDA və SCL üçün hansı pinlərin istifadə olunacağını anlamaq üçün lövhənizin düzgün pinlərini müəyyənləşdirin."
Addım 7: Kod
Bunun üçün Adafruit kitabxanası lazımdır
downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip saytından
Yükləyin, açın və nümunələr qovluğunu tapacaqsınız, qovluqda yalnız Arduino IDE -də MMA8451demo açın və bura gedin ….
nəzarətçinizlə birlikdə MMA8451 sensor interfeysi üçün aşağıdakı kodu görəcəksiniz
#daxil edin
#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * NodeMCU -nun SDA = D1 və SCL = D2 ilə i2c avtobusuna qoşul */ Serial.println ("Adafruit MMA8451 testi!"); if (! mma.begin ()) {Serial.println ("Başlatılamadı"); isə (1); } Serial.println ("MMA8451 tapıldı!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Aralıq ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// 'xam' məlumatları 14 bitlik saylarda oxuyun mma.read (); Serial.print ("X: / t"); Serial. çap (mma.x); Serial.print ("\ tY: / t"); Serial. çap (mma.y); Serial.print ("\ tZ: / t"); Serial. çap (mma.z); Serial.println (); / * Yeni bir sensor hadisəsi alın */ sensors_event_t hadisə; mma.getEvent (və hadisə); / * Nəticələri göstərin (sürətlənmə m/s^2 ilə ölçülür) */Serial.print ("X: / t"); Serial. çap (hadisə. sürətləndirmə.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial. çap (hadisə. sürətləndirmə.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial. çap (hadisə.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * Sensorun istiqamətini alın */ uint8_t o = mma.getOrientation (); keçid (o) {halda MMA8451_PL_PUF: Serial.println ("Öndən Portret"); fasilə; halda MMA8451_PL_PUB: Serial.println ("Portret Yuxarı"); fasilə; dava MMA8451_PL_PDF: Serial.println ("Öndən aşağıya portret"); fasilə; dava MMA8451_PL_PDB: Serial.println ("Aşağıya doğru portret"); fasilə; hal MMA8451_PL_LRF: Serial.println ("Landşaft Sağ Ön"); fasilə; dava MMA8451_PL_LRB: Serial.println ("Sağda Mənzərə"); fasilə; hal MMA8451_PL_LLF: Serial.println ("Landşaft Sol Ön"); fasilə; hal MMA8451_PL_LLB: Serial.println ("Landşaft Sol Geri"); fasilə; } Serial.println (); gecikmə (1000); }
Saxla, Doğrula və Yüklə ….
Serial monitoru açın və buna bənzər bir şey görəcəksiniz, sensoru hərəkət etdirdiyim üçün müxtəlif oxunuşlar oldu
X: -2166 Y: 1872 Z: 2186
X: -2166 Y: 1872 Z: 2186X: -4.92 Y: 5.99 Z: 4.87 m/s^2
Landşaft Sol Ön
X: -224 Y: -2020 Z: 3188
X: -5.10 Y: -3.19 Z: 7.00 m/s^2
Öndən Portret
Yaxşı, hər şey lazım olduğu kimi getsəydi, indi I2C -nin əsaslarını və cihazınızı necə bağlayacağınızı bilirsiniz.
Amma cihaz işləmir ??
Növbəti addımı atın ….
Addım 8: I2C cihazınızı işə salın
I2C cihazının işləməsi üçün əsas addımlar
Gəlin araşdıraq ….
- Kablolama düzgündür.. (yenidən yoxlayın)
- Proqram düzgündür. (Bəli, test nümunəsidir..)
Həll etmək üçün mərhələlərlə başlayın ….
Mərhələ 1: Cihazın ünvanını yoxlamaq üçün I2C cihaz skaner proqramını işə salın və əvvəlcə I2C cihazınız yaxşıdır
Eskiz yükləyə və çıxışı yoxlaya bilərsiniz.
Nəticə - Cihaz işləyir və Sensor ünvanı düzgündür
I2C skaner. Skan edilir …
Tapılan ünvan: 28 (0x1C) Tamamlandı. 1 cihaz tapıldı.
Mərhələ 2: Sensor kitabxanasını yoxlayın
Adafruit_MMA8451.h faylını açın və cihaz ünvanını tapın
Nəticə - Ünvan cihazımdan fərqlidir?
/*=============================================== =========================== I2C ADRES/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Varsayılan MMA8451 I2C ünvanı, əgər A GND, onun 0x1C /*======================= ================================================= */
Et - Faylları notepaddən düzəldin (ünvanı dəyişdirin) + Saxla + IDE -ni yenidən başladın
Bu işləyir. Oxumlarınızı əldə edə bilərsiniz.
Hələ də yox …. ???
Mərhələ 3: Check Wire.begin üzərində yazılıb?
Adafruit_MMA8451.c faylını açın və Wire.begin tapın.
Nəticə - Bu ifadənin üzərinə yazılıb
/*********************************************** ************************* //*! @brief HW qurur (əmsalların dəyərlərini və s. oxuyur)* / / ******************************** **************************************/ bool Adafruit_MMA8451:: start (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;
Et - Faylları notepaddən düzəldin (şərh ifadəsi) + Saxla + IDE -ni yenidən başladın
Və nəhayət cihaz işə düşür…
Demək olar ki, bu dərsliyi çox yükləyirəm, çünki əsas məqsədi necə başlamağı, məlumat cədvəlindən məlumat əldə etməyi, I2C cihazını çox sadə bir nümunə ilə işləməyi izah etmək idi. Ümid edirəm hər şey lazım olduğu kimi gedəcək və Sensorunuzu işə salmaq faydalı olacaq.
Tövsiyə:
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: 4 addım
Arduino istifadə edərək İnternetdən istifadə edərək bütün dünyanı idarə et: Salam, mən Rithikəm. Telefonunuzdan istifadə edərək internetə nəzarət edən bir led quracağıq. Arduino IDE və Blynk kimi proqramlardan istifadə edəcəyik. Bu çox sadədir və uğur qazansanız istədiyiniz qədər elektron komponenti idarə edə bilərsiniz
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək sürətlənməni izləyin: 6 addım
Python istifadə edərək Raspberry Pi və AIS328DQTR istifadə edərək Sürətləndirməni izləyin: Sürətləndirmə sonsuzdur, düşünürəm ki, Fizikanın bəzi qanunlarına görə. Sahilə çıxan ən sürətli məxluq, bir anda ən yüksək sürətindən istifadə edərək ovunu tutur
I2C / IIC LCD Ekran - Arduino ilə SPI -IIC Modulundan istifadə edərək I2C LCD Ekranına SPI LCD istifadə edin: 5 addım
I2C / IIC LCD Ekran | Arduino ilə SPI -dən IIC Modulundan istifadə edərək I2C LCD Ekranına SPI LCD -dən istifadə edin: Salam uşaqlar normal SPI LCD 1602 -yə qoşulmaq üçün çoxlu tellər olduğundan arduino ilə əlaqə qurmaq çox çətindir, ancaq bazarda bunu edə biləcək bir modul var. SPI ekranını IIC ekrana çevirin, buna görə yalnız 4 tel bağlamalısınız
Neopixel Ws2812 M5stick-C ilə Göy qurşağı LED Glow - Arduino IDE -dən istifadə edərək M5stack M5stick C -dən istifadə edərək Neopixel Ws2812 -də Göy qurşağının Çalışması: 5 addım
Neopixel Ws2812 M5stick-C ilə Göy qurşağı LED Glow | Arduino IDE istifadə edərək M5stack M5stick C istifadə edərək Neopixel Ws2812 üzərində Göy qurşağı çalıştırın: Salam uşaqlar bu təlimatlarda Arduino IDE ilə m5stack m5stick-C inkişaf lövhəsi ilə neopixel ws2812 LED və ya led şerit və ya led matris və ya led üzük istifadə etməyi öyrənəcəyik. onunla bir göy qurşağı nümunəsi
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə - 433mhz ilə HT12E və HT12D istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: 5 addım
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə | HT12E və HT12D -dən 433mhz istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: Bu təlimatda sizə HT12E kodlu 433mhz ötürücü qəbuledici modulu istifadə edərək RADIO uzaqdan idarə etməyi göstərəcəyəm. HT12D kod deşifratoru IC. Bu təlimatda çox ucuz komponentləri istifadə edərək məlumat göndərə və ala bilərsiniz: HT