Cuprins:

Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași
Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași

Video: Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași

Video: Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași
Video: CN2 - Cursul 6 2024, Noiembrie
Anonim
Noțiuni introductive despre interfața senzorului I2C ?? - Interfațați MMA8451 utilizând ESP32s
Noțiuni introductive despre interfața senzorului I2C ?? - Interfațați MMA8451 utilizând ESP32s

În acest tutorial, veți afla totul despre cum să porniți, să vă conectați și să obțineți dispozitivul I2C (accelerometru) care funcționează cu controlerul (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Pasul 1: Cum să începeți cu I2C - Lumea magnifică a comunicării inter IC

Arduino, seria ESP, PIC, Rasberry PI etc. sunt toate incredibile. Dar ce faci cu el odată ce ai unul?

Cel mai bun lucru este să adăugați senzori și altele. Astăzi, o mare parte a noii tehnologii fierbinți folosește protocolul I2C pentru a permite computerului, telefoanelor, tabletelor sau microcontrolerelor să comunice senzorii. Telefoanele inteligente ar fi mai puțin inteligente dacă nu ar putea vorbi cu acel senzor de accelerometru pentru a ști în ce direcție se află telefonul.

Pasul 2: Prezentare generală pe I2C

I2C este un protocol de comunicare serial, sincron, semi-duplex, care permite coexistența mai multor master și sclavi pe aceeași magistrală. Autobuzul I2C este format din două linii: linia de date seriale (SDA) și ceasul serial (SCL). Ambele linii necesită rezistențe de tracțiune.

SDA (Serial Data) - Linia pentru master și slave pentru a trimite și primi date. SCL (Serial Clock) - Linia care transportă semnalul de ceas. Având avantaje precum simplitatea și costul redus de fabricație, I2C este utilizat în cea mai mare parte pentru comunicarea dispozitivelor periferice de viteză redusă pe distanțe scurte (la un picior).

Doriți să aflați mai multe despre I2C? ……

Pasul 3: Cum se configurează senzorii I²C

Înainte de a intra în proiect, trebuie să înțelegeți câteva elemente de bază ale senzorului. Deci, turnați-vă o ceașcă de cafea înainte de a vă scufunda:)? …

Punctul mare al I2C este că puteți pune atât de mulți senzori pe aceleași patru fire. Dar pentru unitățile cu mai multe module prefabricate conectate, este posibil să trebuiască să scoateți câteva rezistențe smd din breakouts, altfel tragerea în autobuz ar putea deveni prea agresivă.

Ce informații dorim din foaia de date ??

  1. Funcționalitatea senzorului
  2. Funcționalitate Pinouts și pins
  3. Descrierea interfeței (Nu ratați să căutați „tabelul de selecție a adreselor I2c“)
  4. Registrele !!

Totul este bine, îl veți găsi cu ușurință, dar Înregistrează ?? REGISTRURILE sunt pur și simplu locații de memorie în interiorul unui dispozitiv I²C. Rezumatul numărului de registre care există într-un senzor dat și a ceea ce controlează sau conțin se numește o hartă a registrelor. Majoritatea informațiilor din foaia de date a senzorului sunt despre explicarea modului în care funcționează fiecare registru și pot fi destul de slog de citit, deoarece informațiile sunt rareori prezentate în mod direct.

Pentru a vă da o idee despre ceea ce vreau să spun prin asta: Există multe tipuri de registre, dar pentru această introducere le voi grupa în două tipuri generale: Control și registre de date.

1) Registre de control

Majoritatea senzorilor modifică modul în care funcționează pe baza valorilor stocate în registrele de control. Gândiți-vă la registrele de control ca la bancuri de comutatoare On / Off, pe care le porniți setând un bit la 1 și dezactivați setând acel bit la 0. Senzorii pe bază de cip I²C au adesea o duzină sau mai multe setări operaționale pentru lucruri precum bit- Moduri, întreruperi, control citire-scriere, adâncime, viteză de eșantionare, reducere a zgomotului, așa că trebuie, de obicei, să setați biți în mai multe registre de control diferite înainte de a putea efectua o citire.

2) Registre de date Spre deosebire de un control care înregistrează banca de comutatoare, cred că registrele de ieșire a datelor sunt containere care conțin numere care se întâmplă să fie stocate în formă binară. Deci, doriți să cunoașteți date, citiți întotdeauna registre de date precum cine mă înregistrez pentru identificarea dispozitivului, registrul de stare etc.

Deci, inițializarea unui senzor I²C este un proces în mai mulți pași și ordinea corectă a operațiunilor este adesea explicată în scris în sens invers, în loc de o simplă în foaia de date. lista care nu spune niciodată „Pentru a obține o citire de la acest senzor, faceți (1), (2), (3), (4) etc.”, dar găsiți descrieri ale biților din registrul de control spunând „înainte de a seta bitul x în acest înregistrare trebuie să setați bitul y în acest alt registru de control”.

Totuși, întotdeauna găsesc că o foaie de date este mai interactivă decât majoritatea textului. dacă îl veți face referire la o anumită informație sau la anumite informații și vă oferă toate detaliile, conexiunile și referințele. Stai jos și citește pentru a obține toate referințele tale.:)

Pasul 4: Începeți cu mișcarea - accelerometru

Accelerometrele moderne sunt dispozitive cu sisteme micro-electromecanice (MEMS), ceea ce înseamnă că sunt capabile să se potrivească pe un cip mic în cel mai mic gadget. O metodă de măsurare a accelerației folosită de accelerometrele MEMS este utilizarea unei mici mase conductoare suspendate pe arcuri. Accelerarea dispozitivului face ca arcurile să se întindă sau să se contracte, iar devierea masei conductoare poate fi măsurată printr-o schimbare a capacității la plăci fixe din apropiere.

Accelerometrele sunt specificate de următoarele caracteristici:

  1. Numărul de axe, de la una la trei axe, etichetate X, Y și Z în diagramele de specificații. Rețineți că unele accelerometre sunt numite axe 6 sau axe 9, dar asta înseamnă doar că sunt incluse în pachete cu alte dispozitive MEMS, cum ar fi giroscopurile și / sau magnetometrele. Fiecare dintre aceste dispozitive are, de asemenea, trei axe, motiv pentru care există unități de măsurare inerțiale (IMU) cu 3, 6 sau 9 axe.
  2. Tipul de ieșire, fie analogic, fie digital. Un accelerometru digital are grijă de formatarea datelor de accelerație într-o reprezentare digitală care poate fi citită pe I2C sau SPI.
  3. Gama de accelerație măsurată în g, unde 1g este accelerația datorată gravitației Pământului.
  4. Coprocesoare care pot descărca unele dintre calculele necesare pentru a analiza datele brute de la MCU. Majoritatea accelerometrelor au o capacitate simplă de întrerupere pentru a detecta un prag de accelerație (șoc) și o stare de 0 g (cădere liberă). Alții pot face prelucrări avansate pe datele brute pentru a oferi date mai semnificative MCU.

Pasul 5: Interfață cu controler

Din moment ce cunoaștem microcontrolerele ESP în trend, vom folosi ESP32 ca exemplu. Deci mai întâi ai nevoie de un Nodemcu-32.

Nu vă faceți griji dacă aveți alte plăci ESP sau chiar Arduino !!! Trebuie doar să vă configurați Arduino IDE și configurația conform plăcilor dvs. de dezvoltare, pentru Arduino, ESP NodeMCU, ESP32 etc … Veți avea nevoie, de asemenea, de un fel de piese I2C, de obicei pe o placă de breakout. În acest tutorial voi folosi MMA8451 placă digitală de accelerare a accelerometrului.

Și câteva fire jumper ….

Pasul 6: Conexiuni

Conexiuni
Conexiuni

Și iată un aspect.

Am folosit următoarea conexiune de la modulul de mai sus la modulul meu Nodemcu-32s.

ESP32s - Modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

„Amintiți-vă, de cele mai multe ori nu toate plăcile de dezvoltare (mai ales în ESP-uri) au un pinout clar clar pentru a ajuta la determinarea pinilor care se utilizează !! Deci, înainte de conectare, identificați pinii corecți ai plăcii dvs. pentru a utiliza care pinii sunt pentru SDA și SCL."

Pasul 7: Cod

Acest lucru necesită biblioteca Adafruit

de la

Descărcați, dezarhivați și veți găsi exemple de dosare, în folder deschideți doar MMA8451demo în ID-ul dvs. Arduino și iată …

veți vedea următorul cod pentru interfața senzorului MMA8451 cu controlerul dvs.

#include

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); configurare nulă (nulă) {Serial.begin (9600); Wire.begin (4, 5); / * join i2c bus with SDA = D1 and SCL = D2 of NodeMCU * / Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Nu s-a putut porni"); în timp ce (1); } Serial.println ("MMA8451 găsit!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Gama ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Citiți datele „brute” în număr de 14 biți 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 (); / * Obțineți un nou eveniment senzor * / eveniment sensors_event_t; mma.getEvent (& event); / * Afișați rezultatele (accelerația este măsurată în 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"); / * Obțineți orientarea senzorului * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pauză; cazul MMA8451_PL_PUB: Serial.println ("Portret înapoi"); pauză; cazul MMA8451_PL_PDF: Serial.println ("Portret în față"); pauză; cazul MMA8451_PL_PDB: Serial.println ("Portret înapoi înapoi"); pauză; carcasa MMA8451_PL_LRF: Serial.println ("Peisaj dreapta față"); pauză; cazul MMA8451_PL_LRB: Serial.println ("Peisaj dreapta înapoi"); pauză; carcasa MMA8451_PL_LLF: Serial.println ("Peisaj frontal stânga"); pauză; cazul MMA8451_PL_LLB: Serial.println ("Peisaj stânga înapoi"); pauză; } Serial.println (); întârziere (1000); }

Salvați, verificați și încărcați ……

Deschideți monitorul serial și veți vedea ceva de genul acesta, mi-am deplasat senzorul și de aici diferitele citiri

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m / s ^ 2

Peisaj Stânga Față

X: -224 Y: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 m / s ^ 2

Portret în față

Ei bine, dacă totul a mers așa cum ar trebui, atunci aveți acum elementele de bază ale I2C și Cum să vă conectați dispozitivul..

Dar dispozitivul nu funcționează ??

Mergeți cu pasul următor …

Pasul 8: Puneți în funcțiune dispozitivul I2C

Pași de bază pentru funcționarea dispozitivului I2C

Să investigăm …

  • Cablajul este corect.. (verificați-l din nou)
  • Programul este corect.. (Da, este un exemplu de testare..)

Începeți cu etape de rezolvat …..

Etapa 1: Rulați programul de scanare a dispozitivului I2C pentru a verifica adresa dispozitivului și mai întâi dispozitivul dvs. I2C este okey

Puteți descărca schița și verificați ieșirea.

Rezultat - Dispozitivul funcționează și adresa senzorului este corectă

Scaner I2C. Se scanează …

Adresă găsită: 28 (0x1C) Gata. S-au găsit 1 dispozitive.

Etapa 2: Verificați biblioteca senzorilor

Deschideți fișierul Adafruit_MMA8451.h și găsiți adresa dispozitivului

Rezultat - Adresa este diferită de dispozitivul meu ??

/ * ================================================= ========================= ADRESA I2C / BITS --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Adresă implicită MMA8451 I2C, dacă A este GND, este 0x1C / * ======================= =================================================== * /

Do - Editați fișierul din notepad (modificați adresa) + Salvați + Reporniți IDE

Funcționează. Puteți obține lecturile dvs.

Nu prag ….. ???

Etapa 3: Verificați dacă Wire.begin este suprascris?

Deschideți fișierul Adafruit_MMA8451.c și găsiți Wire.begin.

Rezultat - Această declarație este suprascrisă

/ ************************************************** ************************* // *! @brief Configurează HW (citește valorile coeficienților etc.) * / / ********************************** **************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Editați fișierul din notepad (declarație de comentariu) + Salvați + Reporniți IDE

Și, în cele din urmă, dispozitivul funcționează☺…

Aproape că supraîncărc acest tutorial, deoarece scopul său principal a fost să explic cum să porniți, să obțineți date din foaia de date, să vă conectați și să folosiți dispozitivul I2C cu un exemplu foarte de bază. Sper că totul va merge așa cum ar trebui și va fi util să porniți senzorul.

Recomandat: