Índice:

Introdução à interface do sensor I2C ?? - Interface do seu MMA8451 usando ESP32s: 8 etapas
Introdução à interface do sensor I2C ?? - Interface do seu MMA8451 usando ESP32s: 8 etapas
Anonim
Introdução à interface do sensor I2C ?? - Interface do seu MMA8451 usando ESP32s
Introdução à interface do sensor I2C ?? - Interface do seu MMA8451 usando ESP32s

Neste tutorial, você aprenderá tudo sobre como iniciar, conectar e obter dispositivo I2C (acelerômetro) trabalhando com controlador (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Etapa 1: Como começar a usar I2C - Magnificent World of Inter IC Communication

O Arduino, Série ESP, PIC, Rasberry PI, etc. são todos incríveis. Mas o que você faz com ele depois de ter um?

O melhor é adicionar sensores e tal. Hoje, muitas das novas tecnologias usam o protocolo I2C para permitir que o computador, telefones, tablets ou microcontroladores falem com os sensores. Os smartphones seriam menos inteligentes se não pudessem se comunicar com o sensor do acelerômetro para saber para que lado seu telefone está voltado.

Etapa 2: Visão geral do I2C

I2C é um protocolo de comunicação serial, síncrono e half-duplex que permite a coexistência de vários mestres e escravos no mesmo barramento. O barramento I2C consiste em duas linhas: linha de dados serial (SDA) e relógio serial (SCL). Ambas as linhas requerem resistores pull-up.

SDA (Serial Data) - A linha para o mestre e o escravo enviarem e receberem dados. SCL (Serial Clock) - A linha que transporta o sinal do clock. Com vantagens como simplicidade e baixo custo de fabricação, o I2C é usado principalmente para comunicação de dispositivos periféricos de baixa velocidade em distâncias curtas (dentro de um pé).

Quer saber mais sobre I2C? ……

Etapa 3: Como configurar sensores I²C

Antes de entrar no projeto, você precisa entender alguns princípios básicos do seu sensor. Portanto, sirva-se de uma xícara de café antes de mergulhar:)? …

A grande força do I2C é que você pode colocar muitos sensores nos mesmos quatro fios. Mas para unidades com vários módulos pré-fabricados conectados, você pode ter que remover alguns resistores smd dos breakouts, caso contrário, o pull-up no barramento pode se tornar muito agressivo.

Que informações queremos da Folha de Dados ??

  1. Funcionalidade do sensor
  2. Pinagem e funcionalidade de pinos
  3. Descrição da interface (não deixe de consultar a “Tabela de seleção de endereços I2c“)
  4. Registros !!

Está tudo bem, você vai encontrar facilmente, mas registra ?? REGISTRADORES são simplesmente localizações de memória dentro de um dispositivo I²C. O resumo de quantos registros existem em um determinado sensor e o que eles controlam ou contêm é chamado de mapa de registros. A maioria das informações na folha de dados do sensor é sobre como explicar como cada função de registro, e pode ser um trabalho árduo de ler porque as informações raramente são apresentadas de forma direta.

Para lhe dar uma ideia do que quero dizer com isso: Existem muitos tipos de registradores, mas, para esta introdução, irei agrupá-los em dois tipos gerais: Registradores de controle e de dados.

1) Registros de controle

A maioria dos sensores muda a forma como operam com base nos valores armazenados nos registros de controle. Pense nos registros de controle como bancos de chaves liga / desliga, que você liga definindo um bit como 1 e desliga definindo esse bit como 0. Sensores baseados em chip I²C geralmente têm uma dúzia ou mais configurações operacionais para coisas como bit- Modos, interrupções, controle de leitura e gravação, profundidade, velocidade de amostragem, redução de ruído, etc., portanto, geralmente você precisa definir bits em vários registros de controle diferentes antes de realmente fazer uma leitura.

2) Registradores de dados Ao contrário de um banco de interruptores de registros de controle, penso nos registros de saída de dados como contêineres contendo números que por acaso são armazenados na forma binária. Para saber os dados, sempre leia os registros de dados como quem sou eu para identificação do dispositivo, registro de status etc.

Portanto, a inicialização de um sensor I²C é um processo de várias etapas e a ordem correta das operações é frequentemente explicada por escrito na direção reversa, em vez de uma planilha de dados direta. lista nunca dizendo "Para obter uma leitura deste sensor, faça (1), (2), (3), (4), etc", mas você encontrará descrições dos bits de registro de controle dizendo "antes de definir o bit x neste registrar você deve definir o bit y neste outro registro de controle”.

Mesmo assim, sempre acho que uma planilha de dados é mais interativa do que a maioria dos textos. se você irá referenciá-lo para uma peça específica ou peças de informação e dar-lhe todos os detalhes, conexões e referências. Basta sentar e ler para obter todas as suas referências.:)

Etapa 4: comece com movimento - acelerômetro

Os acelerômetros modernos são dispositivos Micro Electro-Mechanical Systems (MEMS), o que significa que eles são capazes de caber em um pequeno chip dentro do menor dos dispositivos. Um método para medir a aceleração empregada por acelerômetros MEMS é utilizar uma pequena massa condutiva suspensa em molas. A aceleração do dispositivo faz com que as molas se estiquem ou contraiam, e a deflexão da massa condutiva pode ser medida por meio de uma mudança na capacitância para placas fixas próximas.

Os acelerômetros são especificados pelos seguintes recursos:

  1. O número de eixos, de um a três eixos, rotulados como X, Y e Z nos diagramas de especificação. Observe que alguns acelerômetros são chamados de 6 eixos ou 9 eixos, mas isso significa apenas que eles são agrupados com outros dispositivos MEMS, como giroscópios e / ou magnetômetros. Cada um desses dispositivos também tem três eixos, por isso existem unidades de medição inercial (IMUs) de 3, 6 ou 9 eixos.
  2. O tipo de saída, analógica ou digital. Um acelerômetro digital cuida da formatação dos dados de aceleração em uma representação digital que pode ser lida em I2C ou SPI.
  3. A faixa de aceleração medida em gs, onde 1g é a aceleração devido à gravidade da Terra.
  4. Coprocessadores que podem descarregar alguns dos cálculos necessários para analisar os dados brutos do MCU. A maioria dos acelerômetros tem alguma capacidade de interrupção simples para detectar um limite de aceleração (choque) e uma condição de 0 g (queda livre). Outros podem fazer processamento avançado nos dados brutos para oferecer dados mais significativos ao MCU.

Etapa 5: Interface com o controlador

Como conhecemos os microcontroladores ESP em tendência, usaremos o ESP32 como exemplo. Portanto, primeiro você precisa de um Nodemcu-32s.

Não se preocupe se você tiver outras placas ESP ou mesmo Arduino !!! Você só precisa configurar seu IDE Arduino e configurar de acordo com suas placas de desenvolvimento, para Arduino, ESP NodeMCU, ESP32s etc … Você também precisará de algum tipo de peças I2C, geralmente em uma placa de breakout. Neste tutorial, vou usar MMA8451 placa de breakout do acelerômetro digital.

E alguns fios de jumper….

Etapa 6: conexões

Conexões
Conexões

E aqui está um layout.

Usei a seguinte conexão do módulo acima para meu módulo Nodemcu-32s.

ESP32s - Módulo

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Lembre-se de que, na maioria das vezes, nem todas as placas de desenvolvimento (principalmente em ESPs) têm uma boa pinagem clara para ajudar a determinar quais pinos são usados !! Portanto, antes da conexão, identifique os pinos corretos da sua placa para usar quais pinos são para SDA e SCL."

Etapa 7: Código

Isso requer a biblioteca Adafruit

de

Baixe, descompacte e você encontrará a pasta de exemplos, na pasta basta abrir MMA8451demo em seu Arduino IDE e aqui está….

você verá o seguinte código para a interface do sensor MMA8451 com o seu controlador

#incluir

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); configuração de vazio (vazio) {Serial.begin (9600); Wire.begin (4, 5); / * junte o barramento i2c com SDA = D1 e SCL = D2 de NodeMCU * / Serial.println ("Teste Adafruit MMA8451!"); if (! mma.begin ()) {Serial.println ("Não foi possível iniciar"); enquanto (1); } Serial.println ("MMA8451 encontrado!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Intervalo ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Lê os dados 'brutos' em contagens 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 (); / * Obter um novo evento de sensor * / sensores_event_t event; mma.getEvent (& event); / * Exibir os resultados (a aceleração é medida em 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"); / * Obtenha a orientação do sensor * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); pausa; case MMA8451_PL_PUB: Serial.println ("Portrait Up Back"); pausa; case MMA8451_PL_PDF: Serial.println ("Retrato frontal para baixo"); pausa; case MMA8451_PL_PDB: Serial.println ("Retrato para baixo nas costas"); pausa; case MMA8451_PL_LRF: Serial.println ("Landscape Right Front"); pausa; case MMA8451_PL_LRB: Serial.println ("Paisagem traseira direita"); pausa; case MMA8451_PL_LLF: Serial.println ("Paisagem Frente Esquerda"); pausa; case MMA8451_PL_LLB: Serial.println ("Paisagem traseira esquerda"); pausa; } Serial.println (); atraso (1000); }

Salvar, verificar e fazer upload …

Abra o monitor serial e você verá algo parecido com isto, eu estava movendo o sensor daí as várias leituras

X: -2166 Y: 1872 Z: 2186

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

Paisagem Frente Esquerda

X: -224 Y: -2020 Z: 3188

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

Retrato na frente

Bem, se tudo correu como deveria, agora você tem o básico de I2C e como conectar seu dispositivo..

Mas o dispositivo não está funcionando ??

Vá para a próxima etapa …

Etapa 8: Coloque seu dispositivo I2C para funcionar

Passos básicos para fazer o dispositivo I2C funcionar

Vamos investigar….

  • A fiação está correta.. (verifique novamente)
  • O programa está correto.. (Sim, é um exemplo de teste..)

Comece com etapas para resolver …

Estágio 1: Execute o programa de varredura do dispositivo I2C para verificar o endereço do dispositivo e primeiro seu dispositivo I2C está ok

Você pode baixar o esboço e verificar a saída.

Resultado - o dispositivo está funcionando e o endereço do sensor está correto

Scanner I2C. Verificando …

Endereço encontrado: 28 (0x1C) Concluído. Encontrado 1 dispositivo (s).

Etapa 2: verificar a biblioteca de sensores

Abra o arquivo Adafruit_MMA8451.h e encontre o endereço do dispositivo

Resultado - O endereço é diferente do meu dispositivo ??

/ * ====================================================== ============================= ENDEREÇO / BITS I2C --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Endereço MMA8451 I2C padrão, se A for GND, será 0x1C / * ======================= ========================================================== * /

Fazer - Editar o arquivo do bloco de notas (alterar o endereço) + Salvar + Reiniciar IDE

Funciona. Você pode obter suas leituras.

Ainda não….. ???

Etapa 3: Verificar se Wire.begin foi sobrescrito?

Abra o arquivo Adafruit_MMA8451.c e encontre Wire.begin.

Resultado - esta declaração é substituída

/ *************************************************** ************************* // *! @brief Configura o HW (lê os valores dos coeficientes, etc.) * / / ********************************** ****************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Fazer - Editar o arquivo do bloco de notas (declaração de comentário) + Salvar + Reiniciar IDE

E, finalmente, o dispositivo está funcionando☺…

Quase sobrecarreguei este tutorial porque o objetivo principal era explicar Como iniciar, obter dados do datasheet, conectar e fazer o dispositivo I2C funcionar com um exemplo bem básico. Espero que tudo corra como deve, e seja útil iniciar o seu Sensor.

Recomendado: