Taula de continguts:

Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32: 8 passos
Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32: 8 passos

Vídeo: Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32: 8 passos

Vídeo: Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32: 8 passos
Vídeo: 💜 Direcciones I2C con Arduino [I2C Scanner] 2024, De novembre
Anonim
Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32
Introducció a la interfície del sensor I2C ?? - Interfície del MMA8451 mitjançant ESP32

En aquest tutorial, aprendreu tot sobre Com iniciar, connectar i obtenir un dispositiu I2C (acceleròmetre) que funciona amb el controlador (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Pas 1: Com començar amb I2C: magnífic món de la comunicació entre IC

Arduino, ESP Series, PIC, Rasberry PI, etc. són increïbles. Però, què hi fas un cop en tens un?

El millor és afegir sensors i això. Avui en dia, gran part de la nova tecnologia utilitza el protocol I2C per permetre a l'ordinador, als telèfons, a les tauletes o als microcontroladors parlar dels sensors. Els telèfons intel·ligents serien menys intel·ligents si no poguessin parlar amb el sensor de l’acceleròmetre per saber cap a on s’enfronta el telèfon.

Pas 2: Visió general a I2C

I2C és un protocol de comunicació en sèrie, síncron i mig dúplex que permet la coexistència de múltiples mestres i esclaus en el mateix bus. El bus I2C consta de dues línies: línia de dades sèrie (SDA) i serial clock (SCL). Les dues línies requereixen resistències de tracció.

SDA (Serial Data): la línia que permet el mestre i l'esclau per enviar i rebre dades. SCL (Serial Clock): la línia que transporta el senyal del rellotge. Amb avantatges com la simplicitat i el baix cost de fabricació, I2C s’utilitza principalment per a la comunicació de dispositius perifèrics de baixa velocitat a distàncies curtes (dins d’un peu).

Voleu obtenir més informació sobre I2C? …

Pas 3: Com configurar els sensors I²C

Abans d’entrar al projecte, heu d’entendre alguns aspectes bàsics del vostre sensor. Així que aboqueu-vos una tassa de cafè abans de bussejar:)? …

La gran força d’I2C és que podeu posar tants sensors als mateixos quatre cables. Però per a les unitats amb diversos mòduls prefabricats connectats, és possible que hagueu d’eliminar algunes resistències smd dels brots, en cas contrari, la tracció del bus pot resultar massa agressiva.

Quina informació volem del full de dades ??

  1. Funcionalitat del sensor
  2. Funcionalitat de pinouts i pins
  3. Descripció de la interfície (no deixeu de mirar la "Taula de selecció d'adreces I2c")
  4. Registres !!

Tot està bé ho trobareu fàcilment però Registra ?? REGISTRS són simplement ubicacions de memòria dins d’un dispositiu I²C. El resum de quants registres hi ha en un sensor determinat i del que controlen o contenen s’anomena mapa de registres. La major part de la informació del full de dades del sensor tracta d’explicar el funcionament de cada registre i pot ser una consigna de lectura, perquè la informació poques vegades es presenta de manera directa.

Per fer-vos una idea del que vull dir amb això: hi ha molts tipus de registres, però per a aquesta introducció els agruparé en dos tipus generals: Control i registres de dades.

1) Registres de control

La majoria dels sensors canvien el seu funcionament en funció dels valors emmagatzemats als registres de control. Penseu en els registres de control com a bancs d’interruptors On / Off, que activeu configurant un bit a 1 i apagueu configurant aquest bit a 0. Els sensors basats en xips I²C solen tenir una dotzena o més de configuracions operatives per a coses com el bit- Modes, interrupcions, control de lectura-escriptura, profunditat, velocitat de mostreig, reducció de soroll, etc., de manera que normalment cal establir bits en diversos registres de control diferents abans de poder llegir.

2) Registres de dades A diferència d’un control que registra els bancs de commutadors, crec que els registres de sortida de dades són contenidors que contenen números que s’emmagatzemen en forma binària. Per tant, voleu saber dades, llegeix sempre registres de dades com qui em registro per a la identificació del dispositiu, registre d’estat, etc.

Per tant, inicialitzar un sensor I²C és un procés de diversos passos i l’ordre correcte de les operacions sovint s’explica per escrit en sentit invers, en lloc d’un senzill al full de dades. llista que no digui mai "Per obtenir una lectura d'aquest sensor, feu (1), (2), (3), (4), etc", però trobareu descripcions dels bits del registre de control que diuen "abans d'establir el bit x en aquest registre heu d’establir el bit y en aquest altre registre de control”.

Tot i així, sempre trobo que un full de dades és més interactiu que la majoria de text. si el referencieu per a una informació o peces específiques i us proporcionarà tots els detalls, connexions i referències. Només cal seure i llegir per obtenir totes les seves referències.:)

Pas 4: Comenceu amb l'acceleròmetre de moviment

Els acceleròmetres moderns són dispositius de sistemes microelectromecànics (MEMS), cosa que significa que són capaços d’adaptar-se a un petit xip dins del més petit aparell. Un mètode per mesurar l’acceleració emprada pels acceleròmetres MEMS és utilitzar una petita massa conductora suspesa a les molles. L’acceleració del dispositiu fa que les molles s’estenguin o es contraguin i la deflexió de la massa conductora es pugui mesurar mitjançant un canvi de capacitat cap a plaques fixes properes.

Els acceleròmetres s’especifiquen amb les funcions següents:

  1. El nombre d'eixos, d'un a tres eixos, etiquetats com a X, Y i Z als diagrames d'especificacions. Tingueu en compte que alguns acceleròmetres s’anomenen eixos de 6 o 9 eixos, però això només significa que s’uneixen a altres dispositius MEMS com ara giroscopis i / o magnetòmetres. Cadascun d'aquests dispositius també té tres eixos, per això hi ha unitats de mesura inercial (IMU) de 3, 6 o 9 eixos.
  2. El tipus de sortida, ja sigui analògica o digital. Un acceleròmetre digital s’encarrega de formatar les dades d’acceleració en una representació digital que es pot llegir a través d’I2C o SPI.
  3. El rang d’acceleració mesurat en g’s, on 1g és l’acceleració deguda a la gravetat de la Terra.
  4. Coprocessadors que poden descarregar alguns dels càlculs necessaris per analitzar les dades brutes de la MCU. La majoria dels acceleròmetres tenen una capacitat d’interrupció senzilla per detectar un llindar d’acceleració (xoc) i una condició de 0 g (caiguda lliure). Altres poden fer un processament avançat de les dades brutes per oferir dades més significatives a la MCU.

Pas 5: Interfície amb el controlador

Com que coneixem els microcontroladors ESP en tendència, utilitzarem ESP32 com a exemple. Per tant, primer necessiteu un Nodemcu-32.

No us preocupeu si teniu cap altra placa ESP o fins i tot Arduino !!! Només heu de configurar l’IDE i la configuració d’Arduino segons les vostres plaques de desenvolupament, per a Arduino, ESP NodeMCU, ESP32, etc. tauler digital d’acceleròmetre.

I pocs cables de pont …

Pas 6: connexions

Connexions
Connexions

I aquí teniu un disseny.

He utilitzat la següent connexió des del mòdul anterior al mòdul Nodemcu-32s.

ESP32s: mòdul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Recordeu, la majoria de les vegades no totes les plaques de desenvolupament (sobretot en ESP) tenen un bon pinout clar per ajudar a determinar quins pins s'utilitzen !! Així que, abans de la connexió, identifiqueu els pins correctes de la vostra placa per utilitzar quins pins són per a SDA i SCL."

Pas 7: Codi

Això requereix la biblioteca Adafruit

des de

Descarregueu, descomprimiu i trobareu exemples de carpeta, a la carpeta només heu d'obrir MMA8451demo al vostre IDE Arduino i aquí teniu …

veureu el següent codi per a la interfície del sensor MMA8451 amb el controlador

#incloure

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); configuració de buit (buit) {Serial.begin (9600); Wire.begin (4, 5); / * uniu el bus i2c amb SDA = D1 i SCL = D2 de NodeMCU * / Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("No s'ha pogut iniciar"); mentre que (1); } Serial.println ("MMA8451 trobat!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Rang ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Llegiu les dades "en brut" en comptes de 14 bits 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 (); / * Obteniu un nou esdeveniment de sensor * / esdeveniment sensors_event_t; mma.getEvent (& event); / * Mostra els resultats (l'acceleració es mesura en 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"); / * Obteniu l'orientació del sensor * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); trencar; case MMA8451_PL_PUB: Serial.println ("Retrat cap enrere"); trencar; case MMA8451_PL_PDF: Serial.println ("Retrat avall"); trencar; case MMA8451_PL_PDB: Serial.println ("Retrat cap enrere"); trencar; cas MMA8451_PL_LRF: Serial.println ("Horitzontal frontal dret"); trencar; case MMA8451_PL_LRB: Serial.println ("Horitzontal cap enrere"); trencar; cas MMA8451_PL_LLF: Serial.println ("Horitzontal frontal esquerre"); trencar; case MMA8451_PL_LLB: Serial.println ("Horitzontal esquerra enrere"); trencar; } Serial.println (); retard (1000); }

Desa, verifica i penja …

Obriu el monitor de sèrie i veureu alguna cosa així, movia el sensor d’aquí les diverses lectures

X: -2166 Y: 1872 Z: 2186

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

Paisatge frontal esquerre

X: -224 Y: -2020 Z: 3188

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

Retrat al davant

Doncs bé, si tot ha anat com hauria de ser, llavors ja teniu els conceptes bàsics d’I2C i Com connectar el vostre dispositiu..

Però el dispositiu no funciona ??

Simplement seguiu el següent pas …

Pas 8: Feu funcionar el dispositiu I2C

Passos bàsics per fer funcionar el dispositiu I2C

Investiguem …

  • El cablejat és correcte.. (torneu a comprovar-ho)
  • El programa és correcte.. (Sí, és un exemple de prova..)

Comenceu per etapes a resoldre …

Etapa 1: executeu el programa d’escaneig de dispositius I2C per comprovar l’adreça del dispositiu i primer el vostre dispositiu I2C és okey

Podeu descarregar esbossos i comprovar la sortida.

Resultat: el dispositiu funciona i l'adreça del sensor és correcta

Escàner I2C. S'està escanejant …

Adreça trobada: 28 (0x1C) Fet. S'han trobat 1 dispositius.

Fase 2: comproveu la biblioteca del sensor

Obriu el fitxer Adafruit_MMA8451.h i cerqueu l'adreça del dispositiu

Resultat: l'adreça és diferent del meu dispositiu ??

/ * ================================================= ========================= ADREÇA / BITS I2C --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <L'adreça I2C predeterminada MMA8451, si A és GND, és 0x1C / * ======================= =================================================== * /

Feu - Editeu el fitxer des del bloc de notes (canvieu l'adreça) + Desa + Reinicieu l'IDE

Funciona. Podeu obtenir les vostres lectures.

Sill no ….. ???

Fase 3: comproveu que Wire.begin està sobreescrit?

Obriu el fitxer Adafruit_MMA8451.c i cerqueu Wire.begin.

Resultat: aquesta declaració es sobreescriu

/ ************************************************** ************************* // *! @brief Configura el HW (llegeix els valors dels coeficients, etc.) * / / ********************************** **************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Feu - Editeu el fitxer des del bloc de notes (declaració de comentari) + Desa + Reinicieu l'IDE

I, finalment, el dispositiu funciona …

Estic gairebé sobrecarregant aquest tutorial perquè el seu objectiu principal era explicar com començar, obtenir dades del full de dades, connectar-se i fer funcionar el dispositiu I2C amb un exemple molt bàsic.

Recomanat: