Você está na página 1de 13

04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

FAVORITAR

 07/06/2023

 Equipe Embarcados

 2 Comentários

Franzininho WiFi: Acelerômetro e


Giroscópio MPU6050

ÍNDICE DE CONTEÚDO 
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 1/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

 Introdução
 Instalação da Biblioteca
 Biblioteca MPU6050 Adafruit MPU6050
 begin()
 setMotionInterrupt()
 getInterruptStatus()
 getEvent()
 Materiais necessários
 Circuito
 Código
 Explicação do Código
 Valores lidos:
 Conclusão

Introdução
O MPU6050 possui, no mesmo invólucro, um acelerômetro e um giroscópio de
alta precisão com tecnologia MEMS. No total, são 6 eixos, sendo três para o
acelerômetro e 3 para o giroscópio. Além disso, esse dispositivo possui um
sensor de temperatura interno que permite medir temperaturas entre -40 a
85°C com acurácia de +/- 1°C. A comunicação é feita através do padrão I2C,
usando os pinos SCL e SDA.

Neste artigo, vamos entender como ler os sinais do acelerômetro, do


giroscópio e do sensor de temperatura usando a Franzininho WiFi. O Exemplo
apresentado poderá ser usado para diversas aplicações que necessitem de
acelerômetro e giroscópio.

Instalação da Biblioteca
Para aproveitar o máximo dos recursos disponíveis pelo MPU6050, vamos
instalar no Arduino IDE a biblioteca responsável por inicializar o barramento
(I2C) e realizar as leituras do acelerômetro e do giroscópio. 
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 2/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

Acesse: Ferramenta -> Gerenciador de Bibliotecas (Tools -> Manager


Libraries)

Figura 1 – Acessando o gerenciador de bibliotecas

Após acessar o Gerenciador de biblioteca aguarde surgir uma janela como


mostrado na imagem abaixo. Digite no campo de texto: “mpu6050”, e aguarde
o resultado da pesquisa finalizar. Procure pela biblioteca Adafruit MPU6050
by Adafruit e clique em Install para concluir a instalação e clique em Close.
Pronto já estamos aptos a utilizar a biblioteca.


https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 3/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

Figura 2: Instalação da biblioteca

Biblioteca MPU6050 Adafruit MPU6050


Nesta seção vamos apresentar os métodos utilizados pela biblioteca da
Adafruit MPU6050.h  presente no exemplo de projeto.

begin()

Configura o barramento I2C para realizar a comunicação com o dispositivo.

1 bool begin(uint8_t i2caddr, TwoWire *wire, uint8_t sensorID);

i2caddr: parâmetro opcional (pode ser omitido ao chamar o método), por


padrão o endereço I2C do MPU6050 é 68 em hexadecimal (0x68),
normalmente utiliza-se quando há mais de um sensor conectado ao
barramento.

wire: parâmetro opcional(pode ser omitido ao chamar o método),


ponteiro para o objeto da biblioteca Wire.

sensorID: parâmetro opcional(pode ser omitido ao chamar o método)


usado como identificador. 
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 4/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

Retorna true, configurou corretamente e false, não foi possível configurar.

setMotionInterrupt()

Configura os registros do chip para habilitar ou não a interrupção no pino INT .

1 void setMotionInterrupt(bool active);

active: true, para habilitar a interrupção e false, para desabilitar a


interrupção

getInterruptStatus()

Verifica status da do pino INT, isso indica que a leituras dos sensores foram
finalizadas naquele ciclo.

1 bool getInterruptStatus();

Retorna true, concluiu a leitura e false, não ainda não concluiu a leitura .

getEvent()

Busca os eventos mais recentes ocorridos . O evento trata-se de um ciclo de


leitura realizado quando solicitado aos registradores do chip.

1 bool getEvent(sensors_event_t *accel, sensors_event_t *gyro ,sensors_event_t *temp);

A estrutura de dados sensors_event_t contém os elementos:

Version – valor fixo de 1

Sensor ID – identificador numérico para cada tipo de sensor

Type – identificado de tipo de sensor


(SENSOR_TYPE_AMBIENT_TEMPERATURE,
SENSOR_TYPE_ACCELEROMETER, SENSOR_TYPE_GYROSCOPE)

Timestamp – tempo decorrido do evento, utiliza a função millis() para



registrar
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 5/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

Gyro – leitura dos 3 eixo do giroscópio

Accel – leitura dos 3 eixo do acelerômetro

Temp – leitura de temperatura

Os parâmetros do método são:

gyro : ponteiro de estrutura para receber as leituras do giroscópio

temp : ponteiro de estrutura para receber as leituras de temperatura.

Retorna true, evento finalizado e false, ainda está ocorrendo.

Materiais necessários
Os materiais necessários para desenvolver nossa aplicação são:

Placa Franzininho WiFi

Módulo MPU6050

Jumpers

Arduino IDE

Circuito
No circuito proposto para o nosso projeto, vamos utilizar o barramento I2C
(GPIO 9 e GPIO 8) para realizar a troca de informações, seja para solicitar as
leituras do sensor ou recebê-las. O módulo MPU6050 possui oito pinos, dentre
eles temos a alimentação (VCC e GND), porém não iremos utilizar todos.
Abaixo segue uma imagem e uma descrição sobre cada pino:

SCL: responsável por transferir o clock do barramento, sincronizando as


trocas de bits.

https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 6/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

SDA: pino bidirecional, responsável por transferir os bits de leituras e


comandos solicitados para realizá-las.

XDA: pino de dados utilizado para conectar a um barramento I2C


externo.

XCL: pino de clock utilizado para conectar a um barramento I2C externo.

AD0: caso haja mais de um MPU6050, esse pino pode mudar o endereço
I2C dependendo de onde esteja conectado (VCC, GND, SDA ou SCL).

INT: pino para interrupção, indica quando os dados estão prontos para
leitura.

Figura 3: Esquema de montagem com a Franzininho WiFi e o MPU6050

Código
No projeto proposto, vamos realizar as leituras do módulo MPU6050 a fim de
adquirir as informações do giroscópio e do acelerômetro. Os dados serão
mostrados na tela no Monitor Serial e, caso deseje visualizar no Plotter Serial,
uma visualização gráfica dos dados, descomente o trecho do código referente
a esse recurso:

1 /*

2 Autor: Embarcados
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 7/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050
3 */
4
5 // Inclui a biblioteca para configurar o barramento I2C
6 #include <Wire.h>
7
8 // Inclui bibliotecas para habilitar os métodos
9 #include <Adafruit_MPU6050.h>
10 #include <Adafruit_Sensor.h>
11
12 // Declaração do objeto
13 Adafruit_MPU6050 mpu;
14
15 // Estrutura para receber as leituras dos sensores
16 sensors_event_t acc, gyr, temp;
17
18 void setup()
19 {
20 // Inicializa a comunicação serial
21 Serial.begin(115200);
22 Serial.println("Iniciando demo MPU6050...");
23
24 // Inicializa o módulo MPU6050 e verifica se foi configurado corretamente
25 if (!mpu.begin())
26 {
27 // Caso não seja configurado corretamente, informa no monitor serial
28 Serial.println("Falha ao configurar MPU6050");
29 }
30
31 Serial.println("MPU6050 encontrado");
32 }
33
34 void loop()
35 {
36 // Realiza as leituras do acelerômetro, giroscópio e do sensor de temperatura.
37 mpu.getEvent(&acc, &gyr, &temp);
38
39 // Mostra na tela as leituras realizadas no Monitor Serial
40 Serial.println(" # Acelerômetro: ");
41 Serial.print(" X: ");
42 Serial.print(acc.acceleration.x);
43 Serial.print("\t Y: ");
44 Serial.print(acc.acceleration.y);
45 Serial.print("\t Z: ");
46 Serial.println(acc.acceleration.z);
47
48 Serial.println(" # Giroscópio: ");
49 Serial.print(" X: ");
50 Serial.print(gyr.gyro.x);
51 Serial.print("\t Y: ");
52 Serial.print(gyr.gyro.y);
53 Serial.print("\t Z: ");
54 Serial.println(gyr.gyro.z);
55 Serial.println("--------------------");
56
57 // Mostra as leituras realizadas no Plotter Serial
58
59 // Descomente para mostrar as leituras individuais do acelerômetro no Plotter Ser
60 /*
61 Serial.print(acc.acceleration.x);
62 Serial.print("\t");
63 Serial.print(acc.acceleration.y);
64 Serial.print("\t");
65 Serial.println(acc.acceleration.z);
66 */
67
68 // Descomente para mostrar as leituras individuais do giroscópio no Plotter Seria
69 /*
70 Serial.print(gyr.gyro.x); 
71 Serial.print("\t");

https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 8/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050
72 Serial.print(gyr.gyro.y);
73 Serial.print("\t");
74 Serial.println(gyr.gyro.z);
75 */
76
77 delay(50);
78 }
Simule esse exemplo no Wokwi:
https://wokwi.com/projects/366882120661309441 

SAVE SHARE SIGN UP

Simulation Code

GND
VCC

SDA

XDA

XCL

AD0
SCL

INT
X : 0.00 Y : 0.00 Z : 0.00
--------------------
# Acelerômetro:
X : 0.00 Y: 0.00 Z: 9.81
# Giroscópio:
X : 0.00 Y : 0.00 Z : 0.00
--------------------

Explicação do Código
Nesta seção, explicaremos o código linha por linha, para garantir uma
compreensão completa e entender a finalidade de cada função utilizada.

Nesse trecho, estamos incluindo a biblioteca “Wire.h”, que permite a


configuração do barramento I2C:

1 // Inclui a biblioteca para configurar o barramento I2C


2 #include <Wire.h>

Aqui, estamos incluindo duas bibliotecas adicionais: “Adafruit_MPU6050.h” e


“Adafruit_Sensor.h”. Essas bibliotecas habilitam os métodos necessários para

https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 9/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

o funcionamento do MPU6050, um sensor de movimento que combina um


acelerômetro e um giroscópio:

1 // Inclui bibliotecas para habilitar os métodos


2 #include <Adafruit_MPU6050.h>
3 #include <Adafruit_Sensor.h>

Nessa linha, estamos declarando um objeto chamado “mpu” do tipo


“Adafruit_MPU6050”. Esse objeto será utilizado para interagir com o sensor
MPU6050:

1 // Declaração do objeto
2 Adafruit_MPU6050 mpu;

Aqui, estamos declarando uma estrutura chamada “sensors_event_t” que será


utilizada para armazenar as leituras dos sensores do MPU6050. Ela contém
informações sobre o acelerômetro, o giroscópio e a temperatura:

1 // Estrutura para receber as leituras dos sensores


2 sensors_event_t acc, gyr, temp;

A função “setup()” é executada apenas uma vez quando o Arduino é ligado ou


reiniciado. Nesse trecho, inicializamos a comunicação serial com a taxa de
transmissão de 115200 bps. Em seguida, exibimos uma mensagem no
Monitor Serial informando que o código está sendo iniciado.

Em seguida, tentamos inicializar o sensor MPU6050 utilizando o método


“begin()”. Se a inicialização falhar, exibimos uma mensagem informando o
erro. Caso contrário, exibimos uma mensagem informando que o MPU6050 foi
encontrado com sucesso:

1 void setup()
2 {
3 // Inicializa a comunicação serial
4 Serial.begin(115200);
5 Serial.println("Iniciando demo MPU6050...");
6
7 // Inicializa o módulo MPU6050 e verifica se foi configurado corretamente
8 if (!mpu.begin())
9 {
10 // Caso não seja configurado corretamente, informa no monitor serial
11 Serial.println("Falha ao configurar MPU6050");
12 }
13
14 Serial.println("MPU6050 encontrado");
15 }

A função “loop()” é executada continuamente após a execução da função


“setup()”. Nesse trecho, realizamos as leituras do acelerômetro, giroscópio e 
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 10/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

sensor de temperatura utilizando o método “getEvent()”.

Em seguida, exibimos as leituras no Monitor Serial. Mostramos as leituras do


acelerômetro (eixos X, Y e Z) e do giroscópio (eixos X, Y e Z) utilizando a
função “Serial.print()”. Adicionamos algumas formatações para melhor
visualização das informações.

No trecho comentado, temos opções para exibir as leituras individuais do


acelerômetro e do giroscópio no Plotter Serial. Para utilizar essas opções, é
necessário descomentar os trechos de código removendo os comentários (/*
e */).

Por fim, adicionamos um pequeno atraso de 50 milissegundos utilizando a


função “delay(50)” para evitar que as leituras sejam realizadas de forma muito
rápida.

1 void loop()
2 {
3 // Realiza as leituras do acelerômetro, giroscópio e do sensor de temperatura.
4 mpu.getEvent(&acc, &gyr, &temp);
5
6 // Mostra na tela as leituras realizadas no Monitor Serial
7 Serial.println(" # Acelerômetro: ");
8 Serial.print(" X: ");
9 Serial.print(acc.acceleration.x);
10 Serial.print("\t Y: ");
11 Serial.print(acc.acceleration.y);
12 Serial.print("\t Z: ");
13 Serial.println(acc.acceleration.z);
14
15 Serial.println(" # Giroscópio: ");
16 Serial.print(" X: ");
17 Serial.print(gyr.gyro.x);
18 Serial.print("\t Y: ");
19 Serial.print(gyr.gyro.y);
20 Serial.print("\t Z: ");
21 Serial.println(gyr.gyro.z);
22 Serial.println("--------------------");
23
24 // Mostra as leituras realizadas no Plotter Serial
25
26 // Descomente para mostrar as leituras individuais do acelerômetro no Plotter Ser
27 /*
28 Serial.print(acc.acceleration.x);
29 Serial.print("\t");
30 Serial.print(acc.acceleration.y);
31 Serial.print("\t");
32 Serial.println(acc.acceleration.z);
33 */
34
35 // Descomente para mostrar as leituras individuais do giroscópio no Plotter Seria
36 /*
37 Serial.print(gyr.gyro.x);
38
39
Serial.print("\t");
Serial.print(gyr.gyro.y);

40 Serial.print("\t");
https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 11/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050
41 Serial.println(gyr.gyro.z);
42 */
43
44 delay(50);
45 }

Valores lidos:

A figura a seguir exibe os valores lidos exibidos no terminal:

Figura 4: Saída das leituras de aceleração no Monitor Serial

Quando descomentado o trecho referente a aceleração para o plotter Serial, os


seguintes valores foram exibidos para a aceleração:


https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 12/25
04/01/2024, 14:51 Franzininho WiFi: Acelerômetro e Giroscópio MPU6050

Figura 5: Saída das leituras de aceleração no Plotter Serial

Conclusão
O rastreamento de movimentos e a detecção de vibração são funcionalidades
comuns em diversos dispositivos eletrônicos. Por exemplo, nos smartphones,
temos internamente os mesmos sensores presentes no módulo MPU 6050
(acelerômetro e giroscópio), que servem para interagir com o usuário. Para
criar esse recurso, podemos adicionar algoritmos capazes de extrair
informações instantâneas, como velocidade ou aceleração, e ao longo do
tempo, como distância percorrida.

Neste artigo, exploramos os recursos disponíveis, configuramos e realizamos


as leituras dos sensores em um exemplo de projeto. Com isso, desafiamos
você a criar aplicações que possam interagir com outros dispositivos, como
display, LED ou buzzer, e, ao final, compartilhar sua experiência com a
comunidade por meio de um artigo ou vídeo.

Equipe Embarcados
646 posts
https://embarcados.com.br/
O Embarcados tem como foco inspirar qualidade e
inovação tecnológica, disseminando o conhecimento
da área de sistemas embarcados.

Esta obra está licenciada com uma Licença Creative Commons Atribuição-
CompartilhaIgual 4.0 Internacional .

   


https://embarcados.com.br/franzininho-wifi-acelerometro-e-giroscopio-mpu6050/ 13/25

Você também pode gostar