Arduino e Giroscópio MPU6050

mpu-6050
mpu-6050

Giroscópio MPU6050

O MPU6050 é um sensor que contém giroscópio, acelerômetro e um termômetro na mesma board. É um dispositivo de alta precisão e baixo custo, com bibliotecas consolidadas para Arduino.

I²C

O barramento de comunicação é I²C, interfaceando com o Arduino através dos pinos SDA e SCL, como pode ser visto no wiring.

Nível lógico

O nível lógico é 3.3v, mas a board tem um regulador de tensão e alguns resistores de 2k2, 10k, etc. Desse modo, a interface com o Arduino é transparente, podendo ser conectado a 5v sem problemas, sem divisores de tensão ou buffers não-inversores. De verdade, prefira alimentá-lo com 5v, uma vez que ele tem um regulador de tensão; garanta tensão e corrente adequada e sem perda.

O consumo é menor do que um LED, portanto também não é necessário fazer alimentação externa por conta de corrente.

Interrupção

O pino INT (o último, como pode ser visto em wiring) é utilizado para avisar ao Arduino quando o dado está pronto para leitura (dado esse, bufferizado pelo MPU6050).




Digital Motion Processor

Esse módulo conta com um recurso chamado DMP, que combina os dados raw do sensor e executa cálculos complexos que feitos diretamente no sketch do Arduino seria chato e entediante. O legal é que esse recurso não era amplamente divulgado pelo fornecedor, mas com a expertise da comunidade e generosidade deles, hoje podemos utilizar esse recurso e ter um sofrimento de moderado à nulo. Para concluir, o DMP tem internamente um recurso de auto-calibragem que vem bem a calhar.

Múltiplos MPU6050

Utilizando seu próprio barramento, você pode interconectá-lo a mais um módulo, mas nada impede que você utilize outros pinos do Arduino ou um multiplexador, ou seja, limites existem, mas dificilmente você os atingirá em seus projetos domésticos. Ainda, você pode interconectar uma búsola a esses pinos extras e ter 9 eixos, coisa que não imagino o quão preciso seria, mas estou me segurando pra não comprar uma pra testar.

Onde comprar

Se você ainda não tem, já passou da hora de ter um. Foi com essa belezinha que fiz o robô de auto-balanço utilizando PID (Proporcional Integral Derivativa). O dispositivo você pode comprar com nosso parceiro Fulltronic.

Biblioteca

Estou utilizando essa do Jeff. Clique em Download do lado direito da página do GitHub, depois extraia-a em qualquer diretório. Depois copie o diretório Arduino/MPU6050 para o diretório libraries do da sua IDE de desenvolvimento do Arduino. Proceda do mesmo modo com o diretório I2CDev e então, se a IDE já estiver aberta, feche o programa e reabra-o.

Wiring

mpu6050_bb

A conexão com o dispositivo é bastante simples como você pode reparar na imagem. Clicando na imagem você a verá ampliada e poderá notar mais detalhadamente. o grande problema que vejo é realmente em relação ao posicionamento para calibrá-lo devido à solda dos pinos, mas a solução pode ser prendê-lo ao canto da mesa como fiz, ou então apoiá-lo sobre um palito de sorvete, ou até mesmo palitos de dente, o importante é que realmente fique o mais nivelado possível. De qualquer modo, a calibragem pode ser feita quando bem queira e se preferir, pode inicialmente testar o dispositivo sem maiores preocupações nesse primeiro momento.

Calibrar o dispositivo

A primeira coisa a fazer obviamente é calibrar o sensor. Isso é fundamental, e para maior acuidade, certifique-se de que o dispositivo esteja o mais próximo possível de 0, colocando-o na superfície mais plana que encontrar. Eu utilizei o Smart Tools no meu Android para validar a superfície utilizada para calibrar o MPU6050. Além disso, soldei os pinos previamente e para mantê-lo devidamente alinhado após isso, fui obrigado a prendê-lo com fita adesiva à borda da mesa, deixando seus pinos de fora (outros meios seriam válidos, fiz o que estava mais à mão).





Troubleshooting

Fiz uma solda bonitinha, bem bonita. Me deu até orgulho! 48 horas depois de testar com Arduino UNO, Leonardo, trocar protoboard, retirar buffer não inversor CD4050, trocar até os cabos, colocar resistor de pull-up, usar 3.3v e 5v do Arduino, regulador de tensão com fonte de alimentação externa e enfim, testar todas as bibliotecas e versões de bibliotecas nas versões de IDE 1.6.5 e 1.6.6 nas últimas 2 versões do Linux Mint e não obter sucesso, optei por usar um scanner de i2c que encontrei pesquisando por alguma idéia para solucionar o problema (e viva o Google). O código não é meu, é simples, limpo e funcional, experimente-o se estiver com problemas também:




E então, após abrir o terminal serial e ver a mensagem de “dispositivo não encontrado”, cheguei a triste conclusão de que realmente, o giroscópio está com algum defeito. Por outro lado, cheguei à feliz conclusão de que o problema não era eu.

Comprei 2, portanto o que fiz imediatamente com o segundo foi não ter o cuidado que tive com o primeiro; o apoiei sobre a protoboard e encaixei os jumpers sem solda. Então puxei com a mão, pressionando-o contra os jumpers até que o LED dele se acendesse. Após isso, com a outra mão abri o terminal serial novamente para executar o scanner e voilá! Lá estava ele, 0x68.

O que dizer a respeito? Bem, os dispositivos vieram na embalagem anti-estática, mas não estavam lacrados. Comprei mais 2 mas agora com outro vendedor. Não estou acusando nem ele, nem eu, só que como tive essa desventura, optei por aliar-me a outra fonte de energia universal que não esse vendedor, depois passo o link do próximo MPU6050, caso ambos estejam lacrados e funcionarem no teste. E sim, já fiz a solda e o teste, agora tenho tudo funcionando com a segunda peça da primeira compra.

Depois de ter certificado o funcionamento do dispositivo, você pode abrir o exemplo disponível na IDE de desenvolvimento – cujo exemplo você terá após instalar a biblioteca supracitada. Use o MPU6050_DMP6. Valores deverão ser exibidos na tela e esses valores serão necessário para fazer os offsets para sua aplicação.

Enfim, o propósito desse post é justamente ser um adendo referencial ao post que ainda virá (suspense poético), porque não quero escrever nenhum post tedioso mas também não quero deixar escapar detalhes. Ainda assim, espero que consiga ter satisfeito de alguma forma sua necessidade de uma boa leitura!

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Próximo post a caminho!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Um comentário em “Arduino e Giroscópio MPU6050

Deixe uma resposta