- Componentes necessários:
- MPU6050 Gyro Sensor:
- Descrição:
- Diagrama de circuito e explicação:
- Configurando Raspberry Pi para sensor MPU6050 Gyro:
- Explicação de programação:
O sensor MPU6050 tem muitas funções em um único chip. Consiste em um acelerômetro MEMS, um giroscópio MEMS e um sensor de temperatura. Este módulo é muito preciso ao converter valores analógicos em digitais porque possui um hardware conversor de analógico para digital de 16 bits para cada canal. Este módulo é capaz de capturar os canais x, y e z ao mesmo tempo. Ele possui uma interface I2C para se comunicar com o controlador host. Este módulo MPU6050 é um chip compacto com acelerômetro e giroscópio. Este é um dispositivo muito útil para muitas aplicações, como drones, robôs, sensores de movimento. É também chamado de giroscópio ou acelerômetro de eixo triplo.
Hoje, neste artigo, faremos a interface deste MPU6050 com Raspberry Pi e mostraremos os valores acima de 16x2 LCD.
Componentes necessários:
- Raspberry Pi
- MPU-6050
- 10K POT
- Jumper wire
- Tábua de pão
- Fonte de energia
MPU6050 Gyro Sensor:
MPU-6050 é um giroscópio e acelerômetro de 8 pinos e 6 eixos em um único chip. Este módulo funciona com comunicação serial I2C por padrão, mas pode ser configurado para interface SPI configurando-se o registro. Para I2C, tem linhas SDA e SCL. Quase todos os pinos são multifuncionais, mas aqui estamos procedendo apenas com os pinos do modo I2C.
Configuração do pino:
Vcc: - este pino é usado para alimentar o módulo MPU6050 em relação ao aterramento
GND: - este é um pino de aterramento
SDA: - O pino SDA é usado para dados entre o controlador e o módulo mpu6050
SCL: - O pino SCL é usado para entrada de relógio
XDA: - Esta é a linha de dados do sensor I2C SDA para configuração e leitura de sensores externos ((opcional) não utilizado em nosso caso)
XCL: - Esta é a linha do relógio do sensor I2C SCL para configuração e leitura de sensores externos ((opcional) não utilizado em nosso caso)
ADO: - I2C Slave Address LSB (não aplicável em nosso caso)
INT: - Pino de interrupção para indicação de dados prontos.
Anteriormente, fizemos a interface do MPU6050 com o Arduino.
Descrição:
Neste artigo, estamos mostrando leituras de temperatura, giroscópio e acelerômetro em LCD usando MPU6050 com Raspberry Pi. Se você é novo no Raspberry Pi, vá até a seção de tutoriais do Raspberry Pi e aprenda a começar a usar o Raspberry Pi.
Neste projeto, primeiro mostramos o valor da temperatura no LCD e depois de algum tempo mostramos os valores do giroscópio e, depois de algum tempo, temos as leituras do acelerômetro, conforme mostrado nas imagens abaixo:
Diagrama de circuito e explicação:
O diagrama de circuito, para a interface do MPU6050 com o Raspberry Pi, é muito simples aqui, usamos um LCD e um MPU6050. Um potenciômetro de 10k é usado para controlar o brilho do LCD. Em conexão com o MPU6050, fizemos 4 conexões nas quais conectamos a fonte de alimentação de 3,3v e o aterramento do MPU6050 ao 3,3v e o aterramento do Raspberry Pi. Os pinos SCL e SDA do MPU6050 são conectados aos pinos físicos 3 (GPIO2) e 5 (GPIO3) do Raspberry. RS, RW e EN do LCD são conectados diretamente ao GPIO18 e 23 do raspberry pi. O pino de dados está conectado diretamente ao pino digital número GPIO24, GPIO25, GPIO8 e GPIO7. Saiba mais sobre a interface do LCD com Raspberry Pi aqui.
Configurando Raspberry Pi para sensor MPU6050 Gyro:
Antes de iniciar a programação, precisamos habilitar o i2c do Raspberry Pi usando o método fornecido:
Etapa 1: Habilite a comunicação I2C
Antes de instalar a biblioteca Adafruit SSD1306, precisamos habilitar a comunicação I2C no Raspberry Pi.
Para fazer isso, digite no console do Raspberry Pi:
sudo raspi -config
E então uma tela azul aparecerá. Agora selecione a opção de interface
Depois disso, precisamos selecionar I2C
Depois disso, precisamos selecionar sim e pressionar enter e então ok
Depois disso, precisamos reiniciar o Raspberry Pi, emitindo o comando abaixo:
reinicialização sodo
Etapa 2: instalar o python-pip e a biblioteca GPIO
sudo apt-get install build-essential python-dev python-pip
Depois disso, precisamos instalar a biblioteca GPIO do raspberry pi
sudo pip instala RPi.GPIO
Etapa 3: instalar a biblioteca smbus
Finalmente, precisamos instalar a biblioteca smbus no Raspberry Pi usando o comando fornecido:
sudo apt-get install python-smbus
Etapa 4: Instale a biblioteca MPU6050
Depois disso, precisamos instalar a biblioteca MPU6050 usando o comando fornecido
sudo pip install mpu6050
Agora podemos encontrar códigos de exemplo nos exemplos. O usuário pode testar esse código enviando diretamente para o Raspberry Pi ou personalizando-o de acordo com a necessidade. Aqui exibimos os valores dos eixos X, Y e Z do MPU6050 no LCD 16x2. Você pode encontrar o código Python completo no final do Tutorial.
Explicação de programação:
O código Python completo é fornecido no final, aqui estamos explicando algumas partes importantes do código.
No programa Python, importamos algumas bibliotecas necessárias, como time, smbus e GPIO.
import smbus import time import RPi.GPIO as gpio
Depois disso, precisamos pegar algum endereço de registro para configurar o MPU6050 e obter valores do mesmo. Também consideramos algumas variáveis para calibrar e inicializar o barramento para I2C.
PWR_M = 0x6B DIV = 0x19 CONFIG = 0x1A GYRO_CONFIG = 0x1B INT_EN = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = 0x38 ACCEL_X = 0x3B ACCEL_Y = 0x3D ACCEL_Z = 0x3F GYRO_X = 0x43 GYRO_Y = 0x45 GYRO_Z = Dispositivo smbus 0x47 = 0 x 0 x 0 0 x 0 x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 endereço AxCal = 0 AyCal = 0 AzCal = 0 GxCal = 0 GyCal = 0 GzCal = 0
Então nós escrevemos algumas funções para Driving 16x2LCD como def begin (), def cmd (ch), write def (ch), def Imprimir (str), def clear () etc . Você pode ainda verificar a interface do LCD com Raspberry Pi.
Depois disso, precisamos inicializar o Módulo MPU6050
def InitMPU (): bus.write_byte_data (Device_Address, DIV, 7) bus.write_byte_data (Device_Address, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data (Device_byte_dress, PWR_M, 1) bus.write_byte_data (Device_Address, CONFIG, 0) bus.write_byte_data, Device_byte_dress_data, GYRO, INT_EN, 1) time.sleep (1)
Depois disso, precisamos escrever algumas funções para ler os valores do MPU6050 e exibi-los no LCD. A função dada é usada para ler dados do MPU6050
def readMPU (addr): high = bus.read_byte_data (Device_Address, addr) low = bus.read_byte_data (Device_Address, addr + 1) value = ((high << 8) - low) if (value> 32768): value = value - 65536 valor de retorno
A função dada é usada para ler dados do acelerômetro e giroscópio
def accel (): x = readMPU (ACCEL_X) y = readMPU (ACCEL_Y) z = readMPU (ACCEL_Z) Ax = (x / 16384.0-AxCal) Ay = (y / 16384.0-AyCal) Az = (z / 16384.0-AzCal) #print "X =" + str (Ax) display (Ax, Ay, Az) time.sleep (.01) def giroscópio (): global GxCal global GyCal global GzCal x = readMPU (GYRO_X) y = readMPU (GYRO_Y) z = readMPU (GYRO_Z) Gx = x / 131,0 - GxCal Gy = y / 131,0 - GyCal Gz = z / 131,0 - GzCal #print "X =" + str (Gx) display (Gx, Gy, Gz) time.sleep (. 01)
Depois disso, escrevemos uma função de leitura de temperatura
def temp (): tempRow = readMPU (TEMP) tempC = (tempRow / 340,0) + 36,53 tempC = "%. 2f"% tempC print tempC setCursor (0,0) Print ("Temp:") Print (str (tempC)) time.sleep (.2)
A função def calibrate () é usada para calibrar o MPU6050 e a função def display () é usada para exibir os valores no LCD. Verifique essas funções no código completo fornecido abaixo.
Depois disso, nós começamos o LCD, inicializar e calibrar o MPU6050 e, em seguida, enquanto ciclo que chamamos toda a todos os três conjunto de valores de MPU- temperatura, acelerômetro e giroscópio e mostrou-lhes mais de LCD.
início(); Print ("MPU6050 Interface") setCursor (0,1) Print ("Circuit Digest") time.sleep (2) InitMPU () calibrar () enquanto 1: InitMPU () limpar () para i no intervalo (20): temp () clear () Print ("Accel") time.sleep (1) para i no intervalo (30): accel () clear () Print ("Gyro") time.sleep (1) para i no intervalo (30): giroscópio ()
O giroscópio e o acelerômetro MPU6050 são usados para detectar a posição e a orientação de qualquer dispositivo. Gyro usa a gravidade da terra para determinar as posições dos eixos x, y e z e o acelerômetro detecta com base na taxa de mudança do movimento. Já usamos o acelerômetro com Arduino em muitos de nossos projetos como:
- Robô controlado por gestos manuais baseado em acelerômetro
- Sistema de alerta de acidentes com veículos baseado em Arduino
- Alarme do detector de terremoto usando Arduino