Tabla de contenido:

Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: 8 pasos
Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: 8 pasos

Video: Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: 8 pasos

Video: Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s: 8 pasos
Video: MODULO I2C PARA PANTALLAS LCD (display 16x2) + CODIGO ARDUINO + CONEXIONES|| BIEN EXPLICADO 2024, Noviembre
Anonim
Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s
Introducción a la interfaz del sensor I2C - Interfaz de su MMA8451 usando ESP32s

En este tutorial, aprenderá todo sobre cómo iniciar, conectar y hacer que el dispositivo I2C (acelerómetro) funcione con el controlador (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Paso 1: Cómo empezar con I2C - Magnífico mundo de la comunicación Inter IC

Arduino, ESP Series, PIC, Rasberry PI, etc.son increíbles. Pero, ¿qué haces con él una vez que tienes uno?

Lo mejor es agregar sensores y tal. Hoy en día, muchas de las nuevas tecnologías utilizan el protocolo I2C para permitir que la computadora, los teléfonos, las tabletas o los microcontroladores se comuniquen con los sensores. Los teléfonos inteligentes serían menos inteligentes si no pudieran hablar con ese sensor acelerómetro para saber en qué dirección está mirando su teléfono.

Paso 2: descripción general de I2C

I2C es un protocolo de comunicación en serie, síncrono y semidúplex que permite la coexistencia de múltiples maestros y esclavos en el mismo bus. El bus I2C consta de dos líneas: línea de datos en serie (SDA) y reloj en serie (SCL). Ambas líneas requieren resistencias pull-up.

SDA (datos en serie): la línea para que el maestro y el esclavo envíen y reciban datos. SCL (Serial Clock): la línea que transporta la señal del reloj. Con ventajas como la simplicidad y el bajo costo de fabricación, I2C se utiliza principalmente para la comunicación de dispositivos periféricos de baja velocidad en distancias cortas (dentro de un pie).

¿Quiere saber más sobre I2C? ……

Paso 3: Cómo configurar sensores I²C

Antes de entrar en el proyecto, debe comprender algunos conceptos básicos de su sensor. Así que sírvase una taza de café antes de sumergirse:)? …

La gran fortaleza de I2C es que puede colocar tantos sensores en los mismos cuatro cables. Pero para las unidades con varios módulos prefabricados conectados, es posible que deba quitar algunas resistencias smd de las rupturas, de lo contrario, el pull-up en el bus podría volverse demasiado agresivo.

¿Qué información queremos de la hoja de datos?

  1. Funcionalidad del sensor
  2. Funcionalidad de pines y pines
  3. Descripción de la interfaz (no se pierda la "tabla de selección de direcciones I2c")
  4. ¡¡Registros !!

Todo esta bien lo encontraras facilmente pero Registros ?? Los REGISTROS son simplemente ubicaciones de memoria dentro de un dispositivo I²C. El resumen de cuántos registros hay en un sensor dado y lo que controlan o contienen se llama mapa de registros. La mayor parte de la información en la hoja de datos del sensor trata de explicar cómo funciona cada registro, y puede ser bastante difícil leerlos porque la información rara vez se presenta de manera directa.

Para darle una idea de lo que quiero decir con eso: hay muchos tipos de registros, pero para esta introducción los voy a agrupar en dos tipos generales: registros de control y de datos.

1) Registros de control

La mayoría de los sensores cambian su funcionamiento en función de los valores almacenados en los registros de control. Piense en los registros de control como bancos de interruptores de encendido / apagado, que enciende configurando un bit en 1 y apaga configurando ese bit en 0. Los sensores basados en chips I²C a menudo tienen una docena o más configuraciones operativas para cosas como bit- Modos, interrupciones, control de lectura y escritura, profundidad, velocidad de muestreo, reducción de ruido, etc., por lo que normalmente es necesario establecer bits en varios registros de control diferentes antes de poder realizar una lectura.

2) Registros de datos A diferencia de un banco de conmutadores de registros de control, pienso en los registros de salida de datos como contenedores que contienen números que simplemente se almacenan en forma binaria. Si desea conocer los datos, lea siempre los registros de datos, como quién soy, registro para la identificación del dispositivo, registro de estado, etc.

Por lo tanto, la inicialización de un sensor I²C es un proceso de varios pasos y el orden correcto de las operaciones a menudo se explica por escrito en dirección inversa, en lugar de una hoja de datos sencilla. lista que nunca dice "Para obtener una lectura de este sensor, haga (1), (2), (3), (4), etc.", pero encontrará descripciones de los bits del registro de control que dicen "antes de establecer el bit x en este registro debe establecer bit y en este otro registro de control”.

Aún así, siempre encuentro que una hoja de datos es más interactiva que la mayoría de los textos. si lo hará referencia a una pieza o piezas específicas de información y le dará todos los detalles, conexiones y referencias. Simplemente siéntese y lea para obtener todas sus referencias.:)

Paso 4: Comience con movimiento: acelerómetro

Los acelerómetros modernos son dispositivos de sistemas microelectromecánicos (MEMS), lo que significa que pueden caber en un pequeño chip dentro del dispositivo más pequeño. Un método para medir la aceleración empleado por los acelerómetros MEMS es utilizar una pequeña masa conductora suspendida en resortes. La aceleración del dispositivo hace que los resortes se estiren o contraigan, y la desviación de la masa conductora se puede medir a través de un cambio en la capacitancia de las placas fijas cercanas.

Los acelerómetros se especifican mediante las siguientes características:

  1. El número de ejes, de uno a tres ejes, etiquetados como X, Y y Z en los diagramas de especificación. Tenga en cuenta que algunos acelerómetros se denominan de 6 o 9 ejes, pero eso solo significa que están integrados con otros dispositivos MEMS como giroscopios y / o magnetómetros. Cada uno de esos dispositivos también tiene tres ejes, por lo que hay unidades de medición inercial (IMU) de 3, 6 o 9 ejes.
  2. El tipo de salida, ya sea analógica o digital. Un acelerómetro digital se encarga de formatear los datos de aceleración en una representación digital que se puede leer sobre I2C o SPI.
  3. El rango de aceleración medido en g, donde 1 g es la aceleración debida a la gravedad de la Tierra.
  4. Coprocesadores que pueden descargar algunos de los cálculos necesarios para analizar los datos sin procesar de la MCU. La mayoría de los acelerómetros tienen alguna capacidad de interrupción simple para detectar un umbral de aceleración (choque) y una condición de 0 g (caída libre). Otros pueden realizar un procesamiento avanzado de los datos sin procesar para ofrecer datos más significativos a la MCU.

Paso 5: Interfaz con el controlador

Dado que conocemos los microcontroladores ESP en tendencia, usaremos ESP32 para nuestro ejemplo. Entonces, primero necesitas un Nodemcu-32s.

¡No se preocupe si tiene otras placas ESP o incluso Arduino! Solo tiene que configurar su Arduino IDE y la configuración de acuerdo con sus placas de desarrollo, para Arduino, ESP NodeMCU, ESP32s, etc. También necesitará algún tipo de partes I2C, generalmente en una placa de conexión. Placa de conexión de acelerómetro digital.

Y algunos cables de puente….

Paso 6: Conexiones

Conexiones
Conexiones

Y aquí hay un diseño.

Usé la siguiente conexión desde el módulo anterior a mi módulo Nodemcu-32s.

ESP32s - Módulo

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Recuerde, la mayoría de las veces no todas las placas de desarrollo (principalmente en ESP) tienen una buena distribución de pines clara para ayudar a determinar qué pines se utilizan. Por lo tanto, antes de la conexión, identifique los pines correctos de su placa para usar qué pines son para SDA y SCL."

Paso 7: Código

Esto requiere la biblioteca Adafruit

de

Descarga, descomprime y encontrarás la carpeta de ejemplos, en la carpeta simplemente abre MMA8451demo en tu Arduino IDE y aquí tienes….

Verá el siguiente código para la interfaz del sensor MMA8451 con su controlador

#incluir

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); configuración vacía (void) {Serial.begin (9600); Wire.begin (4, 5); / * unirse al bus i2c con SDA = D1 y SCL = D2 de NodeMCU * / Serial.println ("¡Prueba Adafruit MMA8451!"); if (! mma.begin ()) {Serial.println ("No se pudo iniciar"); mientras (1); } Serial.println ("¡MMA8451 encontrado!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Rango ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Leer los datos 'sin procesar' en recuentos 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 (); / * Obtener un nuevo evento de sensor * / sensor_event_t evento; mma.getEvent (& evento); / * Muestra los resultados (la aceleración se mide 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"); / * Obtiene la orientación del sensor * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Retrato al frente"); rotura; case MMA8451_PL_PUB: Serial.println ("Retrato arriba y atrás"); rotura; case MMA8451_PL_PDF: Serial.println ("Retrato hacia abajo al frente"); rotura; case MMA8451_PL_PDB: Serial.println ("Retrato hacia abajo hacia atrás"); rotura; case MMA8451_PL_LRF: Serial.println ("Frente derecho horizontal"); rotura; case MMA8451_PL_LRB: Serial.println ("Horizontal Derecha Atrás"); rotura; case MMA8451_PL_LLF: Serial.println ("Horizontal frontal izquierdo"); rotura; case MMA8451_PL_LLB: Serial.println ("Horizontal Atrás Izquierda"); rotura; } Serial.println (); retraso (1000); }

Guardar, verificar y cargar ……

Abra el monitor de serie y verá algo como esto, estaba moviendo el sensor de ahí las diversas lecturas

X: -2166 Y: 1872 Z: 2186

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

Horizontal Delantero Izquierdo

X: -224 Y: -2020 Z: 3188

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

Retrato al frente

Bueno, si todo salió como debería, entonces ahora tienes los conceptos básicos de I2C y cómo conectar tu dispositivo.

¿Pero el dispositivo no funciona?

Simplemente continúe con el siguiente paso …

Paso 8: Haga funcionar su dispositivo I2C …

Pasos básicos para que el dispositivo I2C funcione

Investiguemos….

  • El cableado es correcto … (compruébalo de nuevo)
  • El programa es correcto … (Sí, es un ejemplo de prueba …)

Comience con etapas para resolver…..

Etapa 1: Ejecute el programa de escáner de dispositivo I2C para verificar la dirección del dispositivo y primero su dispositivo I2C está okey

Puede descargar el boceto y verificar la salida.

Resultado: el dispositivo funciona y la dirección del sensor es correcta

Escáner I2C. Escaneando…

Dirección encontrada: 28 (0x1C) Listo. Se encontraron 1 dispositivo (s).

Etapa 2: Verifique la biblioteca de sensores

Abra el archivo Adafruit_MMA8451.hy busque la dirección del dispositivo

Resultado - ¿La dirección es diferente a la de mi dispositivo?

/ * ============================================== ========================= DIRECCIÓN / BITS I2C --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Dirección predeterminada de MMA8451 I2C, si A es GND, es 0x1C / * ======================= ================================================ * /

Hacer - Editar archivo desde el bloc de notas (cambiar dirección) + Guardar + Reiniciar IDE

Funciona. Puede obtener sus lecturas.

¿Todavía no….. ???

Etapa 3: ¿Comprobar que Wire.begin esté sobrescrito?

Abra el archivo Adafruit_MMA8451.cy busque Wire.begin.

Resultado: esta declaración se sobrescribe

/ ********************************************** ************************* // *! @brief Configura el HW (lee valores de coeficientes, etc.) * / / ******************************** *************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Hacer - Editar archivo desde el bloc de notas (declaración de comentario) + Guardar + Reiniciar IDE

Y finalmente el dispositivo se pone en funcionamiento☺…

Casi sobrecargo este tutorial porque su objetivo principal era explicar cómo comenzar, obtener datos de la hoja de datos, conectar y hacer que el dispositivo I2C funcione con un ejemplo muy básico. Espero que todo salga como debería, y será útil para iniciar su sensor.

Recomendado: