Mündəricat:

I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi: 8 addım
I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi: 8 addım

Video: I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi: 8 addım

Video: I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi: 8 addım
Video: RemoteXY IoT Cloud ilə dünyanın istənilən yerindən ESP32-ni necə izləmək və idarə etmək olar 2024, Iyul
Anonim
I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi
I2C Sensor İnterfeysi ilə Başlarsınız? - ESP32s istifadə edərək MMA8451 interfeysi

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 ??

  1. Sensor funksiyası
  2. Pinouts və sancaqlar funksionallığı
  3. İnterfeys təsviri ("I2c Ünvan Seçim cədvəlinə" baxmağı qaçırmayın)
  4. 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:

  1. 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.
  2. İ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.
  3. 1g -nin Yerin cazibə qüvvəsi səbəbiylə əldə etdiyi sürətlənmə g ilə ölçülür.
  4. 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

Əlaqələr
Əlaqələr

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ə: