- Materiais requisitados:
- Diagrama de circuito:
- Potencializando sua configuração:
- Programando seu Arduino:
- Preparando o aplicativo Android usando Processing:
- Trabalho do Inclinômetro Arduino:
O MPU6050 é um acelerômetro IC de 3 eixos e um giroscópio de 3 eixos combinados em uma unidade. Ele também abriga um sensor de temperatura e um DCM para realizar uma tarefa complexa. O MPU6050 é comumente usado na construção de Drones e outros robôs remotos, como um robô de auto-equilíbrio. Neste projeto vamos aprender como usar o MPU6050 é construído um Inclinômetro ou Nivelador de Espírito. Como sabemos, utiliza-se um inclinômetro para verificar se uma superfície está perfeitamente nivelada ou não, eles estão disponíveis tanto em forma de bolha quanto em medidores digitais. Neste projeto, vamos construir um Inclinômetro Digital que pode ser monitorado usando um aplicativo Android. A razão para usar um display remoto como um telefone celular é que podemos monitorar os valores do MPU6050 sem ter que olhar o hardware, isso seria muito útil quando o MPU6050 fosse colocado em um drone ou em outros locais inacessíveis.
Materiais requisitados:
- Arduino Pro-mini (5V)
- MPU6050 Gyro Sensor
- Módulo Bluetooth HC-05 ou HC-06
- Placa FTDI
- Tábua de pão
- Fios de conexão
- Smartphone
Diagrama de circuito:
O diagrama de circuito completo para este projeto de sensor de inclinação Arduino é mostrado abaixo. Ele tem apenas três componentes e pode ser facilmente construído sobre a placa de ensaio.
O MPU6050 se comunica com a ajuda de I2C e, portanto, o pino SDA é conectado ao pino A4 do Arduino, que é o pino SDA, e o pino SCL é conectado ao pino A5 do Arduino. O Módulo HC-06 Bluetooth funciona com o auxílio da comunicação serial, portanto, o pino Rx do Bluetooth é conectado ao pino D11 e o pino Tx do Bluetooth é conectado ao pino D10 do Arduino. Esses pinos D10 e D11 serão configurados como pino serial programando o Arduino. O módulo HC-05 e o módulo MSP6050 operam em + 5V e, portanto, são alimentados pelo pino Vcc do Arduino conforme mostrado acima.
Usei alguns fios de conexão da placa de ensaio e construí a configuração sobre uma pequena placa de ensaio. Assim que as conexões forem feitas, minha placa ficará assim abaixo.
Potencializando sua configuração:
Você pode alimentar seu circuito por meio da placa de programação FTDI, como eu fiz, ou usar uma bateria de 9V ou um adaptador de 12V e conectá-lo ao pino Raw do Arduino pro mini. O Arduino Pro-mini tem um regulador de tensão embutido que converteria essa tensão externa regulada em + 5V.
Programando seu Arduino:
Assim que o hardware estiver pronto, podemos começar a programar nosso Arduino. Como sempre, o código completo para este projeto pode ser encontrado no final desta página. Mas para entender melhor o projeto, quebrei o código em pequenas lacunas e as expliquei nas etapas abaixo.
A primeira etapa seria fazer a interface do MPU6050 com o Arduino. Para este projeto vamos usar a biblioteca desenvolvida por Korneliusz que pode ser baixada do link abaixo
MPU6050 Liberty - Korneliusz Jarzebski
Baixe o arquivo ZIP e adicione-o ao seu IDE Arduino. Em seguida, vá para Arquivo-> Exemplos-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Isso abrirá o programa de exemplo que usa a biblioteca que acabamos de baixar. Portanto, clique em upload e aguarde o upload do programa para o seu Arduino Pro mini. Feito isso, abra o monitor serial e defina a taxa de transmissão para 115200 e verifique se você está obtendo o seguinte.
Inicialmente, todos os três valores serão zero, mas conforme você move seu breadboard, você pode observar esses valores sendo alterados. Se eles mudarem, significa que sua conexão está correta, caso contrário, verifique suas conexões. Observe aqui como os três valores Pitch Roll e Yaw variam de acordo com a maneira como você inclina o sensor. Se você ficar confuso, pressione o botão de reset no Arduino e os valores serão inicializados para zero novamente, então incline o sensor em uma direção e verifique quais valores estão variando. A imagem abaixo o ajudará a entender melhor.
Destes três parâmetros, estamos interessados apenas em Roll e Pitch. O valor Rolo vai nos dizer sobre a inclinação no eixo X eo valor de Pitch vai nos dizer sobre a inclinação em Y-Axis. Agora que entendemos o básico, vamos começar a programar o Arduino para ler esses valores e enviá-lo para o Arduino via Bluetooth. Como sempre, vamos começar incluindo todas as bibliotecas necessárias para este projeto
#incluir
Em seguida, inicializamos o serial do software para o módulo Bluetooth. Isso é possível por causa da biblioteca serial do software no Arduino, os pinos IO podem ser programados para funcionar como pinos seriais. Aqui, estamos usando os pinos digitais D10 e D11, onde D10 id Rx e D11 é Tx.
SoftwareSerial BT (10, 11); // RX, TX
Em seguida, inicializamos as variáveis e objetos necessários para o programa e passamos para a função setup () , onde especificamos a taxa de transmissão para monitor serial e Bluetooth. Para HC-05 e HC-06 a taxa de bauds é de 9600 sendo obrigatória a utilização da mesma. A seguir verificamos se o barramento IIC do Arduino está conectado ao MPU6050 senão imprimimos uma mensagem de alerta e permanecemos lá enquanto o dispositivo estiver conectado. Depois disso, calibramos o Gyro e definimos seus valores de limiar usando suas respectivas funções, conforme mostrado abaixo.
configuração vazia () {Serial.begin (115200); BT.begin (9600); // iniciar a comunicação Bluetooth em 9600 baudrate // Inicializar MPU6050 while (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Não foi possível encontrar um sensor MPU6050 válido, verifique a fiação!"); atraso (500); } mpu.calibrateGyro (); // Calibra o giroscópio durante o início mpu.setThreshold (3); // Controla a sensibilidade}
A linha “ mpu.calibrateGyro ();” calibre o MPU6050 para a posição em que está colocado atualmente. Esta linha pode ser chamada várias vezes dentro do programa sempre que o MPU6050 precisa ser calibrado e todos os valores devem ser ajustados para zero. “Mpu.setThreshold (3);” esta função controla o quanto o valor varia para o movimento no sensor - um valor muito baixo aumentará o ruído, então tome cuidado ao mexer nisso.
Dentro do void loop (), lemos repetidamente os valores do giroscópio e do sensor de temperatura calculamos o valor do pitch, roll e yaw, e enviamos para o módulo Bluetooth. As duas linhas a seguir irão ler os valores brutos do giroscópio e o valor da temperatura
Norma do vetor = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Em seguida, calculamos o pitch, roll e yaw multiplicando com intervalo de tempo e adicionando aos valores anteriores. Um timeStep nada mais é que o intervalo entre leituras sucessivas.
pitch = pitch + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Para entender melhor o intervalo de tempo, vamos dar uma olhada na linha abaixo. Esta linha é colocada para ler os valores do MPU6050 exatamente em um intervalo de 10 ms ou 0,01 segundo. Portanto, declaramos o valor de timeStep como 0,01. E use a linha abaixo para segurar o programa se houver se sobrar mais tempo. (millis () - timer ()) fornece o tempo que o programa levou para ser executado até o momento. Nós apenas subtraímos com 0,01 segundos e, pelo tempo restante, apenas mantemos nosso programa lá usando a função de retardo.
atraso ((timeStep * 1000) - (millis () - temporizador));
Assim que terminarmos de ler e calcular os valores, podemos enviá-los para o nosso telefone via Bluetooth. Mas há um problema aqui. O módulo Bluetooth que estamos usando pode enviar apenas 1 byte (8 bits), o que nos permite enviar números apenas de 0 a 255. Portanto, temos que dividir nossos valores e mapeá-los dentro desta faixa. Isso é feito pelas seguintes linhas
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Como você pode imaginar, o valor de roll é mapeado em 0 a 100 na variável x e pitch é mapeado em 100 a 200 na variável y e temp é mapeado em 200 e acima na variável t. Podemos usar as mesmas informações para recuperar os dados que enviamos. Finalmente, escrevemos esses valores por meio do Bluetooth usando as seguintes linhas.
BT.write (x); BT.write (y); BT.write (t);
Se você entendeu o programa completo, role para baixo para dar uma olhada no programa e carregue-o na placa Arduino.
Preparando o aplicativo Android usando Processing:
O aplicativo Android para este Inclinômetro Arduino foi desenvolvido usando o IDE de processamento. Ele é muito semelhante ao Arduino e pode ser usado para criar aplicativos de sistema, aplicativos Android, designs da web e muito mais. Já usamos o processamento para desenvolver alguns de nossos outros projetos interessantes listados abaixo
- Jogo Ping Pong usando Arduino
- Rádio FM controlado por telefone inteligente usando Processing.
- Sistema de radar Arduino usando processamento e sensor ultrassônico
No entanto, não é possível explicar o código completo de como criar este aplicativo. Portanto, você tem duas maneiras de resolver isso. Você pode baixar o arquivo APK no link abaixo e instalar o aplicativo Android diretamente no seu telefone. Ou role abaixo para encontrar o código de processamento completo e aprender por si mesmo como funciona
Dentro do arquivo ZIP, você pode encontrar uma pasta chamada dados que consiste em todas as imagens e outras fontes que serão carregadas no aplicativo Android. A linha abaixo decide a qual nome o Bluetooth deve se conectar automaticamente
bt.connectToDeviceByName ("HC-06");
Dentro da função draw () , as coisas serão executadas repetidamente aqui desenhamos as imagens, exibimos o texto e animamos as barras com base nos valores do módulo Bluetooth. Você pode verificar o que acontece dentro de cada função lendo o programa.
void draw () // O loop infinito {background (0); imageMode (CENTER); imagem (logotipo, largura / 2, altura / 1,04, largura, altura / 12); load_images (); textfun (); getval (); }
Finalmente, há mais uma coisa importante a explicar, lembre-se de que dividimos o valor de pitch, roll e temp de 0 a 255. Aqui, novamente trazemos de volta aos valores normais, mapeando-os reversamente para valores normais.
if (info <100 && info> 0) x = map (info, 0, 100, - (largura / 1,5) / 3, + (largura / 1,5) / 3); // x = info; else if (info <200 && info> 100) y = map (info, 100, 200, - (largura / 4,5) /0,8, + (largura / 4,5) /0,8); // y = info; else if (info> 200) temp = info -200; println (temp, x, y);
Existem maneiras muito melhores de obter dados de um módulo Bluetooth para o telefone, mas como este é apenas um projeto de hobby, nós os ignoramos, você pode cavar fundo se estiver interessado.
Trabalho do Inclinômetro Arduino:
Depois de se preparar com o Hardware e o Aplicativo, é hora de se divertir com o que construímos. Carregue o código do Arduino para a placa, você também pode remover os comentários nas linhas Serial.println e verificar se o hardware está funcionando conforme o esperado usando o monitor serial. De qualquer forma, isso é totalmente opcional.
Assim que o código for carregado, inicie o aplicativo Android em seu telefone celular. O aplicativo deve se conectar automaticamente ao seu módulo HC-06 e exibirá “Conectar a: HC-06” na parte superior do aplicativo, conforme mostrado abaixo.
Inicialmente, todos os valores serão zero, exceto o valor da temperatura. Isso ocorre porque o Arduino calibrou o MPU-6050 para esta posição como referência, agora você pode inclinar o hardware e verificar se os valores no aplicativo móvel também estão mudando junto com a animação. O funcionamento completo do aplicativo pode ser encontrado no vídeo abaixo. Agora você pode colocar a placa de ensaio em qualquer lugar e verificar se a superfície está perfeitamente nivelada.
Espero que você tenha entendido o projeto e aprendido algo útil com ele. Se você tiver alguma dúvida, use a seção de comentários abaixo ou os fóruns para resolver o problema.