Arduino, Internet das Coisas e Computação vestível

[Voltar]

[Avançar]

Módulo Acelerômetro e Giroscópio MPU-6050 - GY521

Descrição

O Acelerômetro e Giroscópio MPU-6050 3 Eixos apresenta dois recursos em uma única placa, destacando-se ainda a presença do recurso DMP, o qual é responsável pela realização dos cálculos de alta complexidade. Para maior praticidade, encontra-se embutido junto ao Acelerômetro e Giroscópio MPU-6050 3 Eixos um sensor de temperatura que trabalha com medições entre -40 a 85°C. Conforme anteriormente mencionado o Acelerômetro e Giroscópio MPU-6050 conta com 3 Eixos (X,Y,Z) para o acelerômetro e outros 3 eixos para o giroscópio, apresentando resultados satisfatórios e excelente grau de precisão.

Caracteristicas

  • Acelerômetro e Giroscópio MPU-6050
  • Dois módulos em uma única placa
  • 3 Eixos 6 DOF
  • Alta precisão
  • Conversor analógico digital de 16-bits para cada canal
  • Captura simultaneamente X, Y e Z
  • Sensor de temperatura embutido

Especificações

  • Modelo: GY-521
  • Chip: MPU-6050
  • Tensão de Operação: 3 - 5V
  • Conversor AD: 16 bits
  • Comunicação: I2C
  • Faixa do Giroscópio: ±250, 500, 1000, 2000°/s;
  • Faixa do Acelerômetro: ±2, ±4, ±8, ±16g;
  • Faixa do Sensor de Temperatura: -40 a 85°C
  • Dimensões (CxLxE): 21x17x3mm
  • Peso: 1,2g

Pinagem:

  • Vcc: Alimentação (3,3V à 5V);
  • GND: 0V;
  • SCL: I2C Serial Clock (SCL);
  • SDA (Slave_Data): I2C Serial Data (SDA);
  • XDA: I2C Master Serial Data, para conexão de sensor auxiliar;
  • XCL: I2C Master Serial Clock, para conexão de sensor auxiliar;
  • AD0: Define o endereço da I2C;
  • INT: pino para interrupção.

Como funciona


O acelerômetro
: força da gravidade (Inclinação e movimento)

O sensor mede a aceleração através da força de gravidade a que o sensor está sujeito em cada um dos três eixos. Ele mede a inclinação e o movimento. É capaz de detectar o movimento de rotação e gestos tais como balançar ou agitar um objeto do qual ele faz parte. O gráfico (a) representa uma situação em que o acelerômetro se encontra em repouso, pousado numa superfície plana, os valores comunicados pelos sensor serão x= 0, y=0 e z=-1. O gráfico (b) representa a rotação do eixo X para baixo, o valores comunicados pelo sensores serão x=1, y=0 e z=0.

O giroscópio: força da gravidade (Direção do movimento)

O sensor permite entender o posicionamento espacial através da força de gravidade. Quando um objeto está em movimento, os sensores de eixo do giroscópio conseguem informar exatamente para qual direção o produto está se movendo. Numa aeronave sua utilidade é ainda maior, uma vez que consegue determinar se o aparelho está apontado para cima ou para baixo. Ou seja, é muito empregado em sistema que necessitam interpretar os movimentos do utilizador. 

 

Bilioteca:

Para programar o Módulo Acelerômetro e Giroscópio MPU-6050 utilize a biblioteca abaixo:


Projeto(s) relacionado(s)


Projeto acelerômetro e giroscópio

O projeto utiliza um Arduino Uno R3, Display Oled 0,96 128x64 e Módulo Acelerômetro e Giroscópio MPU-6050 para informar valores referentes a posição espacial do sensor. Este é um bom exemplo de como usar conjuntamente a tela OLED 128x64 "I2C" no endereço "0x3C" e o Giroscópio MPU-6050 "I2C" no endereço "0x68". O I2C é um protocolo de comunicação que visa conectar diversos dispositivos (periféricos) utilizando as linhas de dados Serial Data (SDA) e Serial Clock (SCL) . A ideia é definir um endereço hexadecimal para cada dispositivo conectado e no momento de comunicação somente o dispositivo solicitado responderá.

// Projeto: acelerômetro e giroscópio 
// Autor: André Silveira
// Data: 14/06/2019

#include "Adafruit_GFX.h"                      			// Biblioteca para processamento gráfico
#include "Adafruit_SSD1306.h"                 			// Biblioteca do controlador SSD1306
#include "GY6050.h"                           			// Biblioteca do Acelerometro e Giroscópio

/* ---  Variaveis globais --- */
float acelX, acelY, acelZ;
float giroX, giroY, giroZ;
float tempCelsius, tempFarenheit; 
char string[10];
 
GY6050 gyro(0x68);                        				// Cria um objeto gyro com endereço I2C "0x68"
Adafruit_SSD1306 display(128, 64);                		// Cria objeto display

void setup() {                

      delay(100);                                 
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);    // Inicializa a tela com endereço I2C "0x3C"
      display.clearDisplay();                           		// Limpa a tela 
      display.setTextColor(WHITE);                      		// Define cor do texto
      display.setRotation(0);                           		// Configura orientação 0, 1, 2 ou 3
      display.setTextWrap(false);   
      display.setTextSize(1);                           		// Define tamanho da fonte do texto
      display.dim(0);                                   			// Define brilho (0 é máximo)
      gyro.initialisation();						// Inicializa giroscópio

}  

void loop()  {

/* --- Obtem dados do sensor --- */
    
      acelX = gyro.refresh('A', 'X');           			// Obtém o eixo "X" do Acelerometro
      acelY = gyro.refresh('A', 'Y');           			// Obtém o eixo "Y" do Acelerometro
      acelZ = gyro.refresh('A', 'Z');           			// Obtém o eixo "Z" do Acelerometro
      
      tempCelsius = gyro.refresh('T', 'C');     			// Obtém a temperatura em Graus Celsius
      tempFarenheit = gyro.refresh('T', 'F');   		// Obtém a temperatura em Farenheit 
    
      giroX = gyro.refresh('G', 'X');           			// Obtém o eixo "X" do Giroscópio
      giroY = gyro.refresh('G', 'Y');           			// Obtém o eixo "Y" do Giroscópio
      giroZ = gyro.refresh('G', 'Z');           			// Obtém o eixo "Z" do Giroscópio                       
    
/* --- Desenha dados na tela do acelerometro --- */
    
      display.clearDisplay();                            
      display.drawRoundRect(20,0,40,54,4, WHITE);       
      display.drawLine(20,16,60,16, WHITE);              
        
      display.setCursor(28,6);                         
      display.println("Acel");  
    
      display.setCursor(32,22);          
      dtostrf(acelX, 3, 0, string);               
      display.println(string);    
    
      display.setCursor(32,32);          
      dtostrf(acelY, 3, 0, string);               
      display.println(string);       
      
      display.setCursor(32,42);          
      dtostrf(acelZ, 3, 0, string);               
      display.println(string);  
     
/* --- Desenha dados na tela do giroscópio --- */
    
      display.drawRoundRect(64,0,40,54,4, WHITE);       
      display.drawLine(64,16,104,16, WHITE);             
      
      display.setCursor(72,6);                         
      display.println("Gyro");  
    
      display.setCursor(76,22);          
      dtostrf(giroX, 3, 0, string);               
      display.println(string);
    
      display.setCursor(76,32);          
      dtostrf(giroY, 3, 0, string);               
      display.println(string);
    
      display.setCursor(76,42);          
      dtostrf(giroZ, 3, 0, string);               
      display.println(string);        
       
      display.display();                                    
      delay(1500);                                          

} 






Mini balancing robo

O robô auto-equilibrante que usa dois motores passos (NEMA14), Arduino Pro Mini, drivers de passo A4988, um modulo de giroscópio MPU-6050, dentre outras peças. A estrutura física do robô é composta por peças plásticas impressas em 3D.

URL: http://axelsdiy.brinkeby.se/?page_id=1447

 

 

[Voltar]

[Avançar]