Neste projeto, descrevemos e estudamos o trabalho realizado com o ESP01 e o acelerômetro MPU6050. O objetivo do projeto era desenvolver uma bateria virtual, onde com os dados do acelerômetro analisaria o movimento da baqueta e geraria um sinal de saída, que nesse caso foi lido por um sistema externo que tocava um instrumento.
Descrição
O ESP01 é um módulo Wi-Fi baseado no chip ESP8266, desenvolvido pela empresa Espressif Systems. Ele é amplamente utilizado na área de Internet das Coisas (IoT) devido à sua capacidade de se conectar a redes sem fio e interagir com outros dispositivos e serviços online. O módulo ESP01 possui um processador de baixo consumo de energia e um conjunto de recursos que o tornam uma escolha popular para projetos de IoT devido à sua facilidade de uso, tamanho compacto e baixo custo.
- Chip ESP8266 com suporte para Wi-Fi 802.11 b/g/n.
- Antena embutida para conexão sem fio.
- Possui 4MB de memória flash para armazenamento de código e dados.
- Interface de comunicação UART para interação com outros dispositivos.
- Possui GPIOs (General Purpose Input/Output) para conexão com componentes externos.
- Suporte a protocolos de rede TCP/IP.
- Baixo consumo de energia.
- Programável utilizando a linguagem de programação Arduino, Micropython ou linguagens de programação suportadas pelo ESP8266 SDK.
O MPU6050 é um acelerômetro e giroscópio de 6 eixos, desenvolvido pela InvenSense (atualmente TDK). Ele é amplamente utilizado em projetos que envolvem medição de movimento e orientação em aplicações como drones, robótica, realidade virtual, entre outros. O módulo MPU6050 combina um acelerômetro de 3 eixos e um giroscópio de 3 eixos em um único chip, permitindo a medição precisa de aceleração linear e angular. Principais características do MPU6050:
- Medição de aceleração linear em três eixos (X, Y, Z) com resolução programável.
- Medição de velocidade angular em três eixos (X, Y, Z) com resolução programável.
- Faixa de medição configurável para aceleração e velocidade angular.
- Interface de comunicação I2C para integração com outros dispositivos.
- Possui um registrador FIFO interno para armazenar dados brutos temporariamente.
- Filtro passa-baixa embutido para redução de ruído.
- Um sensor de temparatura.
- Faixa de operação: ±2g, ±4g, ±8g (com ou sem filtro);
Funcionamento do acelerômetro
Um acelerômetro funciona segundo o princípio do efeito piezoelétrico. Imagine uma caixa cuboide com uma pequena bola dentro dela, como na foto abaixo. As paredes desta caixa são feitas de cristais piezoelétricos. Sempre que você inclina a caixa, a bola é forçada a se mover na direção da inclinação devido à gravidade. A parede com a qual a bola colide cria pequenas correntes piezoelétricas. Existem três pares de paredes opostas em um cuboide. Cada par corresponde a um eixo no espaço 3D: eixos X, Y e Z. Dependendo da corrente produzida pelas paredes piezoelétricas, podemos determinar a direção de inclinação e sua magnitude.

Princípio do efeito piezoelétrico.
Metodologia
Para a realização do projeto foi usado dois tipos de comunicações I2C(Entre o MPU6050 e o ESP-01), via UART(entre o ESP-01 e o HC-12) e via radio(Entre o HC-12 e outro HC-12). OS materias usados e a motangem foi a seguinte:
- Acelerômetro MPU6050.
- Esp-01.
- Modulo de transmissão de radio HC-12.
- PowerBank
- Adptador Esp-01
- Jumpers para conexão
A Figura abaixo apresenta o esquemático do projeto proposto.

assim esse é o resultado esperado:

Padrões e protocolos utilizados
No projeto, foram utilizados os seguintes padrões e protocolos:
- Protocolo I2C para comunicação entre o ESP01 e o MPU6050.
- Protocolo HTTP para transmitir os dados coletados para o servidor.
com o projeto montado foi então foi-se feito o desenvolvimento do código. O código é relativamente bem simples trata apenas de um loop que pega os dodos do MPU6050 e verifica através de uma condição se é maior que um valor pre-determinado, comprido esse requisito ele envia um sinal. Esse é o resultado:
- Linhas 1-3: Importação das bibliotecas necessárias para o MPU6050 e a comunicação I2C.
- Linha 5: Criação da instância do objeto \texttt{mpu} do tipo \texttt{Adafruit\_MPU6050}.
- Linhas 7-16: Função \texttt{setup} executada uma única vez no início do programa.
- Linha 8: Inicialização da comunicação serial com uma taxa de transmissão de 9600 bits por segundo.
- Linha 9: Inicialização da comunicação I2C nas portas 0 e 2.
- Linhas 10-12: Aguarda até que a comunicação serial seja estabelecida.
- Linhas 14-19: Impressão de uma mensagem no console serial.
- Linhas 21-29: Verificação se o chip MPU6050 foi encontrado. Em caso negativo, uma mensagem de falha é exibida e o programa entra em um loop infinito.
- Linhas 31-33: Configuração da faixa de medição do acelerômetro, giroscópio e largura de banda do filtro.
- Linha 35: Pausa de 100 milissegundos.
- Linhas 37-46: Função \texttt{loop} executada continuamente.
- Linhas 38-39: Verificação se o chip MPU6050 foi encontrado. Em caso negativo, uma mensagem de falha é exibida e o programa entra em um loop infinito.
- Linhas 41-43: Configuração da faixa de medição do acelerômetro, giroscópio e largura de banda do filtro, nesse caso usamos somente o acelerômetro que está configurado para medir ate 8g de aceleração.
- Linhas 45-47: Declaração das variáveis para armazenar as leituras do acelerômetro, giroscópio e temperatura(nesse caso usamos apenas a aceleração e apenas no eixo Z, o eixo vertical).
- Linha 48: Obtenção das leituras do MPU6050 e armazenamento nas variáveis correspondentes.
- Linhas 50-52: Verificação se a aceleração no eixo Z é maior ou igual a 9.4$m/s^2$(Valor escolhido considerando o erro normal de medição do modulo e a já presente aceleração da gravidade). Se verdadeiro, é exibido o símbolo de percentual no console serial, que envia para o instrumento.
- Linha 54: Pausa de 500 milissegundos antes de repetir o loop.