Acelerômetro MMA8452 com Arduino Nano 33 IoT - Projeto prático!
Acelerômetro MMA8452 com Arduino Nano 33 IoT

Acelerômetro MMA8452 com Arduino Nano 33 IoT Deixe um comentário

Neste tutorial, vamos explorar o funcionamento do acelerômetro MMA8452 com Arduino Nano 33 IoT. O acelerômetro é um dispositivo sensorial capaz de medir a aceleração em três eixos distintos: x, y e z. 

Acelerômetro MMA8452 com Arduino Nano 33 IoT

Utilizando um Arduino Nano 33 IoT, que possui um IMU (Unidade de Medição Inercial) integrado capaz de disponibilizar informações sobre movimento angular, aceleração e temperatura, juntamente com um display LCD TFT 1.8” 128×160, vamos criar um projeto prático para entender melhor como esse sensor opera e como podemos integrá-lo em nossas aplicações. 

Objetivos

Neste tutorial vamos compreender o funcionamento do acelerômetro MMA8452 e sua integração com o Arduino Nano 33 IoT, utilizando um display LCD TFT 1.8” 128×160, através da realização de um projeto prático. Além disso, iremos:

  • Aprender a utilizar o Arduino Nano 33 IoT para adquirir dados do acelerômetro MMA8452 .
  • Aprender a utilizar o Arduino Nano 33 IoT para adquirir dados do IMU integrado à placa.
  • Familiarizar-se com o uso de um display LCD TFT para exibir informações obtidas pelo acelerômetro.
  • Praticar o carregamento de código para o Arduino Nano 33 IoT utilizando a Arduino IDE.

Materiais Necessários

Para seguir com este tutorial, você irá precisar dos seguintes componentes:

Materiais Necessários

Além dos itens mencionados acima, você também precisará ter a Arduino IDE instalada em seu computador ou uma conta cadastrada na Arduino Cloud.

Como funciona o Acelerômetro MMA8452?

O acelerômetro MMA8452 é um dispositivo sensorial que mede a aceleração em três eixos: x, y e z. Ele utiliza a tecnologia de microeletromecânica (MEMS) para detectar mudanças na velocidade ou orientação do dispositivo em que está instalado. 

Acelerômetro MMA8452

Aqui estão os principais componentes e como ele funciona:

  • Microeletromecânica (MEMS): O acelerômetro contém um minúsculo componente MEMS que consiste em uma pequena massa suspensa por molas dentro do dispositivo. Quando há movimento, essa massa se desloca em relação ao referencial fixo do sensor.
  • Capacitores Variáveis: À medida que a massa se desloca, a capacitância dos capacitores variáveis dentro do sensor muda. Essa mudança na capacitância é medida eletronicamente e é proporcional à aceleração experimentada pelo sensor.
  • Circuitos Eletrônicos: O acelerômetro contém circuitos eletrônicos que medem as mudanças na capacitância e convertem essas mudanças em sinais elétricos que representam a aceleração nos três eixos.
  • Interface de Comunicação: O MMA8452 utiliza a interface I2C para se comunicar com outros dispositivos, como microcontroladores. A Interface I2C (Inter-Integrated Circuit) é um padrão de comunicação serial que permite que vários dispositivos se comuniquem entre si utilizando apenas dois fios: um para dados (SDA) e outro para clock (SCL). 
  • Faixa de Operação: ±2g, ±4g, ±8g: O termo “Faixa de Operação” refere-se aos limites dentro dos quais o acelerômetro pode medir a aceleração. No caso do MMA8452, ele oferece três opções de faixa: ±2g, ±4g e ±8g. Isso significa que o sensor pode medir acelerações de até duas vezes, quatro vezes ou oito vezes a gravidade terrestre (onde 1g é a aceleração devido à gravidade).
  • Interrupções: São os sinais usados pelos dispositivos para alertar o microcontrolador sobre eventos importantes. No caso do MMA8452, ele pode gerar até duas interrupções, o que significa que pode notificar o microcontrolador sobre dois eventos diferentes simultaneamente. Isso permite um gerenciamento mais eficiente de eventos, reduzindo a necessidade de o microcontrolador constantemente verificar os dados do acelerômetro.

Em resumo, o acelerômetro MMA8452 detecta mudanças na velocidade e orientação de um dispositivo em que está instalado, convertendo essas mudanças em sinais elétricos que podem ser interpretados para determinar a aceleração nos três eixos. Isso o torna útil em uma variedade de aplicações, como dispositivos portáteis, jogos eletrônicos, drones e muito mais.

Pinout do Acelerômetro MMA8452

Para que o MMA8452 funcione corretamente e se comunique com outros dispositivos, ele possui diversos pinos com funções específicas:

Pinout do Acelerômetro MMA8452

  • VCC_IN: Este é o pino de entrada de alimentação. Ele é conectado à fonte de energia do sistema e fornece energia para o funcionamento do sensor. Geralmente, ele é conectado a uma fonte de tensão entre 3 à 5V.
  • 3.3V: Este é o pino de saída da tensão de referência de 3,3 volts. Ele pode ser usado para fornecer energia a outros dispositivos que operam com essa tensão específica.
  • GND: Este é o pino de terra, que é conectado ao terminal negativo da fonte de alimentação para completar o circuito elétrico e garantir uma referência comum de potencial elétrico.
  • SCL (Serial Clock): Este é o pino de clock serial. Ele é usado para sincronizar a transferência de dados entre o sensor MMA8452 e o dispositivo host, como um microcontrolador. O clock determina a taxa de transferência de dados.
  • SDA (Serial Data): Este é o pino de dados serial. Ele é usado para transmitir e receber dados entre o sensor e o dispositivo host. As informações sobre a aceleração nos três eixos são transmitidas através deste pino.
  • SAO (Slave Address Option): Este pino é usado para definir o endereço do dispositivo em um barramento I2C quando múltiplos dispositivos estão conectados ao mesmo barramento. Ele permite selecionar entre dois endereços possíveis para comunicação.
  • INT2 e INT1 (Interrupt): Estes são os pinos de interrupção. Eles são utilizados para sinalizar ao dispositivo host quando determinadas condições ocorrem no sensor, como detecção de movimento ou alterações significativas na aceleração. Isso permite que o dispositivo host seja notificado imediatamente sobre eventos importantes sem a necessidade de verificar constantemente o sensor.

Circuito Eletrônico: Acelerômetro MMA8452 com Arduino

Segue esquema de conexões do circuito que integra o acelerômetro MMA8452, o display TFT 1.8” e a placa Arduino Nano 33 IoT:

Circuito Eletrônico

As conexões realizadas são as seguintes:

Acelerômetro 3 Eixos MMA8452 <-> Arduino Nano 33 IoT

VIN <-> 3V3
GND <-> GND
SCL <-> A5
SDA <-> A4

Display LCD TFT 1.8″ 128×160  <-> Arduino Nano 33 IoT

LED <-> 3V3
SCK <-> D13
SDA <-> D11
A0 <-> D8
RESET <-> D9
CS <-> D10
GND <-> GND
VCC <-> 3V3 

Código

Antes de realizar o upload do código abaixo é necessário seguir algumas etapas. A primeira delas é configurar a Arduino IDE para programação da placa Arduino Nano 33 IoT:

    • Vá em Ferramentas > Placa > Gerenciador de Placas… e busque por “SAMD”. Faça a instalação do pacote Arduino SAMD Boards (32-bit ARM Cortex-M0+).
    • Depois vá em Ferramentas > Placa > Arduino SAMD Boards (32-bit ARM Cortex-M0+) e selecione a placa Arduino Nano 33 IoT.
  • Selecione a porta COM que a Nano 33 Iot está conectada.

Na sequência, é necessário fazer a instalação de algumas bibliotecas:

  • Vá em Ferramentas > Gerenciador de Bibliotecas… e busque por “GFX”. Faça a instalação da biblioteca Adafruit GFX Library e todas as suas dependências. 
  • Depois busque por “ST7735”.  Faça a instalação da biblioteca Adafruit ST7735 and ST7789 Library e todas as suas dependências. 
  • Por fim, busque por “LSM6DS3”. Faça a instalação da biblioteca Arduino_LSM6DS3.

Com as configurações feitas, carregue o código abaixo para a placa:

// Programa: Acelerômetro com Arduino Nano 33 IoT e Display TFT
// Autor: Rosana Guse

// Bibiotecas utilizadas no código
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <Arduino_LSM6DS3.h>
#include <Wire.h>

// Endereço I2C do acelerômetro MMA8452
#define ACCELEROMETER_ADDR 0x1C

// Definação dos pinos de conexão do Display TFT
#define TFT_CS        10
#define TFT_RST        9
#define TFT_DC         8

// Variáveis globais utilizadas no código
float t;
float xg;
float yg;
float zg;
float xa1;
float ya1;
float za1;
int16_t acceleration[3];

// Instancia um objeto da classe Adafruit_ST7735 para controlar o display TFT
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup() {
  // Inicialização da comunicação serial
  Serial.begin(9600);

  // Inicialização do display TFT
  tft.initR(INITR_BLACKTAB);
  tft.setRotation(1);
  tft.fillScreen(ST77XX_BLACK);

  // Inicialização do sensor LSM6DS3
  IMU.begin();
  IMU.temperatureSampleRate();
  IMU.gyroscopeSampleRate();
  IMU.accelerationSampleRate();

  // Inicialização da comunicação I2C e do acelerômetro
  Wire.begin();
  initializeAccelerometer();
}

void loop () {
  // Leitura dos dados do sensor LSM6DS3
  IMU.readTemperature(t);
  IMU.readGyroscope(xg, yg, zg);
  IMU.readAcceleration(xa1, ya1, za1);

  // Leitura dos dados do acelerômetro MMA8452
  readAccelerometerData(acceleration);

  // Exibição dos dados no display TFT
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(1);
 
  tft.setCursor(10, 15);
  tft.print("Temperatura LSM6DS3:");
  tft.setCursor(10, 25);
  tft.print(t);
  tft.print((char)247);
  tft.print("C");

  tft.setCursor(10, 45);
  tft.print("Giroscopio LSM6DS3:");
  tft.setCursor(10, 55);
  tft.print("X:");
  tft.print(xg, 1);
  tft.print(" Y:");
  tft.print(yg, 1);
  tft.print(" Z:");
  tft.print(zg, 1);

  tft.setCursor(10, 75);
  tft.print("Acelerometro LSM6DS3:");
  tft.setCursor(10, 85);
  tft.print("X:");
  tft.print(xa1, 1);
  tft.print(" Y:");
  tft.print(ya1, 1);
  tft.print(" Z:");
  tft.print(za1, 1);

  tft.setCursor(10, 105);
  tft.print("Acelerometro MMA8452:");
  tft.setCursor(10, 115);
  tft.print("X:");
  tft.print((float)acceleration[0] / 1000, 1);
  tft.print(" Y:");
  tft.print((float)acceleration[1] / 1000, 1);
  tft.print(" Z:");
  tft.print((float)acceleration[2] / 1000, 1);

  delay(1000);

  // Limpa as áreas onde os dados foram exibidos no display TFT
  tft.fillRect(0, 25, 160, 20, ST77XX_BLACK);
  tft.fillRect(0, 55, 160, 20, ST77XX_BLACK);
  tft.fillRect(0, 85, 160, 20, ST77XX_BLACK);
  tft.fillRect(0, 115, 160, 20, ST77XX_BLACK);
}

// Inicializa o acelerômetro MMA8452
void initializeAccelerometer() {
  writeRegister(0x2A, 0x00);
  writeRegister(0x2A, 0x01);
  writeRegister(0x0E, 0x00);
  delay(300);
}

// Lê os dados do acelerômetro MMA8452
bool readAccelerometerData(int16_t* acceleration) {
  Wire.beginTransmission(ACCELEROMETER_ADDR);
  Wire.write(0x00);
  if (Wire.endTransmission(false) != 0) {
    return false;
  }

  Wire.requestFrom(ACCELEROMETER_ADDR, 6);
  if (Wire.available() != 6) {
    return false;
  }

  for (int i = 0; i < 3; i++) {
    uint8_t lowByte = Wire.read();
    uint8_t highByte = Wire.read();
    acceleration[i] = (int16_t)((highByte << 8) | lowByte) / 16;
  }

  return true;
}

// Escreve um valor em um registrador específico do acelerômetro MMA8452
void writeRegister(uint8_t regAddr, uint8_t value) {
  Wire.beginTransmission(ACCELEROMETER_ADDR);
  Wire.write(regAddr);
  Wire.write(value);
  Wire.endTransmission();
}

Funcionamento

No display LCD TFT 1.8” serão apresentadas 4 informações:

  • Temperatura, disponíveis através do IMU da Arduino Nano 33 IoT;
  • Orientação angular dos eixos X, Y e Z, disponíveis através do IMU da Arduino Nano 33 IoT;
  • Aceleração dos eixos X, Y e Z,  disponíveis através do IMU da Arduino Nano 33 IoT;
  • Aceleração dos eixos X, Y e Z,  disponíveis através do acelerômetro MMA8452.

As informações são atualizadas a cada segundo. 

 

A capacidade de medir a aceleração em três eixos torna esse circuito útil em projetos relacionados à detecção de movimento e monitoramento de vibrações. Por exemplo, poderia ser empregado em dispositivos de segurança que detectam movimentos suspeitos, em sistemas de rastreamento de objetos ou em veículos autônomos que necessitam de feedback em tempo real sobre mudanças de velocidade e direção.

 Além disso, a integração com o Arduino Nano 33 IoT permite que o circuito seja facilmente conectado à Internet, facilitando aplicações de monitoramento remoto, como sistemas de monitoramento de saúde pessoal, monitoramento de condições ambientais ou até mesmo em aplicações de Internet das Coisas (IoT)


Se você tiver dúvidas, sugestões ou experiências para compartilhar, fique a vontade para deixar um comentário abaixo. E para não perder nenhum conteúdo como este, não deixe de nos seguir no Instagram.

Faça seu comentário

Acesse sua conta e participe