O mundo tecnológico evolui cada vez mais e as novas tecnologias estão aí para comprovar isto, temos celulares inteligentes capazes de mudar a posição de sua tela com a simples inclinação do equipamento e capazes de identificar se os direcionamos para cima, baixo, esquerda ou direita, por trás de cada uma destas características existe um acelerômetro e giroscópio. No post de hoje “Acelerômetro e Giroscópio Arduino na Obtenção de Valores X, Y e Z” vamos trabalhar com alguns modelos desenvolvidos especialmente para microcontroladores.
Neste projeto iremos utilizar o MPU-6050 para realizar a leitura dos valores espaciais de X, Y e Z, utilizando todos os 6 eixos de coordenada oferecidos por este exclusivo equipamento, dos quais 3 eixos irão se referir ao acelerômetro e os outros 3 ao giroscópio.
Diferenciando-se dos demais equipamentos que possuem somente um sentido de medida, este equipamento em questão reúne duas funcionalidades em um único módulo, combinando acelerômetro e giroscópio arduino, além de contar também com um sensor de temperatura incluso que permite leituras de -40 a 85°C.
Falamos tanto em acelerômetros e giroscópios porém muitos ainda nem sabem qual a diferença de um para outro e nem mesmo para que ambos servem e o que podem agregar aos seus projetos, de um modo bem simplificado vamos tentar explicar cada um deles e elencar as suas principais diferenças.
Acelerômetro
De modo geral, um acelerômetro é um equipamento capaz de medir a aceleração de um corpo (como seu próprio nome já dá a entender) em relação à gravidade, ou seja, é um equipamento capaz de medir a aceleração exercida sobre determinados objetos, executando algum tipo de ação dependendo do movimento executado sobre o mesmo.
Giroscópio
O giroscópio não possui uma funcionalidade radicalmente diferente do acelerômetro, ele é um sensor que utiliza da força da gravidade para indicar a posição de um determinado objeto no espaço, podendo identificar se você gira algo em seu próprio eixo ou saber se esta apontando ele para cima ou para baixo.
Acelerômetro X Giroscópio
É difícil identificar uma real diferença entre estes equipamentos, podemos dizer que um vai acabar por complementando o outro e tornando as medições de ambos ainda mais precisa e exata, enquanto um mede a aceleração de um corpo em relação à gravidade, o outro mede a posição do corpo através da força da gravidade.
Teste Prático
Neste projeto, nosso parceiro do canal WR Kits executou um código exemplo capaz de verificar e exibir em tempo real os 6 valores das coordenadas possíveis de verificação através deste exclusivo sensor, exibindo junto ao monitor serial todos estes valores, tudo isto através de um simplificado sistema de conexão I2C e um código de fácil compreensão.
Produtos Utilizados no Projeto
Montagem Física (Hardware)
A montagem física do projeto Acelerômetro e Giroscópio Arduino na Obtenção de Valores X, Y e Z é extremamente simples já que trabalha somente com dois fios de alimentação e dois fios de comunicação I2C, de modo geral esta sua utilização é extremamente simples e rápida, porém este equipamento possui algumas características próprias que podem ser de grande valia no desenvolver do seu projeto.
Por se tratar de uma comunicação I2C, realizada pelos dois pinos de comunicação SCL e SDA conectados aos pinos A5 e A4 respectivamente, podemos observar que além dos pinos de alimentação ainda nos restam outros quatro pinos, neste projeto eles não serão utilizados, porém saiba para que eles servem:
Os pinos XDA e XCL trabalham neste módulo como um tipo de extensão para os pinos de comunicação SDA e SCL, tornando possível a conexão de outro dispositivo de mesmo padrão de comunicação I2C, como um magnetômetro que irá vir a complementar o seu equipamento e aumentar as possibilidades do seu projeto.
Já o pino AD0, por exemplo, possui a capacidade de definir o endereço I2C utilizado para a comunicação, caso o pino AD0 esteja desconectado, ou seja, não esteja sendo utilizado, a comunicação estará definida em 0x68 porém, caso opte em conectar este pino junto ao 3,3V do Arduino, seu endereço será alterado para 0x69.
Funcionamento do Programa (Software)
Este projeto é desenvolvido em cima de um código parcialmente complexo e suas variáveis são dependentes de bibliotecas específicas para o seu funcionamento, isto torna necessária a instalação de duas bibliotecas junto ao seu programa Arduino, bibliotecas ás quais estão disponível para download logo abaixo junto ao código exemplo do projeto.
As bibliotecas necessárias para o funcionamento do código são as seguintes:
1 2 3 4 5 |
#include "I2Cdev.h" #include "MPU6050.h" #include "Wire.h" |
Porém vale lembrar que esta terceira biblioteca, a Wire.h já vem instalada junto com o programa original do Arduino.
Download do código de funcionamento: DOWNLOAD AQUI.
Este código diferente dos que estamos acostumados a ver em nosso blog trabalha com um valor diferenciado do Baundrate, neste caso fixado em 38400, como demonstrado abaixo:
1 |
Serial.begin(38400); |
Um diferencial deste código, é a sua capacidade de testar as conexões e verificar se todas as configurações estão funcionando normalmente, com uma delay de verificação de aproximadamente 1 segundo, os valores dados pelo Módulo MPU-6050 são exibidos em tempo real através da porta serial, e vale lembrar que a mesma deve estar na mesma faixo de Baundrate especificada no código.
Conclusão
De modo geral o projeto Acelerômetro e Giroscópio Arduino na Obtenção de Valores X, Y e Z é simples e extremamente útil para quem deseja desenvolver um código para controle de servos motores, motores DC e diversos outros equipamentos através de um acelerômetro e um giroscópio, realizando o movimento de um braço robótico, por exemplo, alterando o ângulo de alguns motores.
Para quem está desenvolvendo um robô equilibrista e precisa de um equipamento que auxilie o seu robô a permanecer sempre em pé, as funcionalidades e aplicações do Acelerômetro e Giroscópio MPU-6050 são extremamente amplas e com este código como base do seu projeto não possui limites para a sua imaginação.
Monte o seu projeto, pense em alguma aplicação e não se esqueça de comentar aqui em baixo suas ideias e experiências, com este projeto você pode auxiliar seu robô a não perder o controle e tornar a experiência de muitos projetos ainda melhor.
É possível conectar mais de um “giroscópio” ao arduino e lê-los de forma separada ?
Boa tarde!
É possível conectar até dois giroscópios como este em um Arduino através dos pinos de comunicação I2C, isto pois, quando o pino AD0 estiver desconectado o endereço do sensor será 0x68 e caso você conecte o mesmo em 3,3V o endereço passa a ser 0x69. Basta que deixe cada um dos Giroscópios com um endereço diferente do outro.
Qualquer duvida estamos a disposição.
Att Equipe UsinaInfo
Olá !
Estou tendo alguns problemas nas leituras..
quando inicio o serial monitor, ele reconhece com sucesso o sensor, porém os valores volta e meia começam a ou ficar gerando o mesmo valor ou zerar, daí do nada volta aos valores aleatórios novamente.
Sabem me informar o que pode ser ?
Obrigado.
Boa tarde!
Até o momento não lidamos com nenhum problema como este, verificou as soldagens do sensor e se não está ocorrendo algum problema de mal contato? Caso não esteja utilizando um Arduino UNO verificou os pinos de comunicação I2C e o endereço da comunicação?
Bom dia! Você realizou a soldagem dos pinos e verificou se não pode estar ocorrendo algum tipo de mal contato na protoboard, caso esteja utilizando?
Bom dia,
Estive vendo o seu projecto. Você sabe se é possivel aceder às variações fornecidas pelo sensor acelerometro remotamente, através do módulo do arduino + o módulo ethernet ?
Obrigado
Bom dia Miguel!
Sim, as variáveis obtidas podem ser encaminhadas através de diferentes meios de comunicação sem fio, como por exemplo, o módulo Ethernet neste caso.
Olá!
Gostaria de saber se seria possível descrever a tragetória de um objeto que possua sensores como um acelerômetro,giroscópio e magnetrômetro enviando informações em tempo real para fazer um robô seguidor percorrer este trajeto em tempo real?
Olá Eduardo!
É possível sim descrever a trajetória de objetos, basta desenvolver um código compatível com as ações desejadas e acrescentar um equipamento para a comunicação em tempo real.
Quando coloco a biblioteca MPU6050 na pasta librarie do arduino, tudo ok. Mas quando eu chamo pela biblioteca ela não funciona. Se eu tentar usar o atalho: Incluir Biblioteca MPU6050,
#include
#include
#include
#include
é incluido 4 biblioteca diferentes, como devo proceder?
Boa Tarde Eduardo!
Se utilizar nosso código disponível junto ao projeto não é necessária a inclusão das bibliotecas, pois ela já está mencionada.
Uma duvida, nao encontrei referencias sobre os valores que o acelerometro nos retorna neste projeto, há alguma relação para o valor se tornar um valor com valor significativo?
pois ele mostra os numeros, até ai OK, mas o que representam esses numero entende?
Boa Tarde Allan! Os valores fornecidos são valores de referência para o posicionamento do produto nos eixos X, Y e Z. Normalmente este projeto é utilizado para a estabilização de superfícies, então tendem a estar mais próximos um do outro.
Estou obtendo a saída com vários caracteres como “⸮⸮⸮⸮” continuamente, nem mesmo os prints iniciais estão aparecendo. Alguma ideia de qual pode ser o problema?
Bom Dia Mariana! É possível que o problema esteja na velocidade de comunicação, o Baundrate está fixado em 38400? Se regularizar isto acredito que irá funcionar.
Olá gostaria de saber se as coordenadas captadas são em relação ao arduino ou simplesmente em relação as direções mesmo pois estou em duvida se posso usar o arduino na mesma protoboard do giroscópio e acelerômetro.
Olá Carlos! As coordenadas são captadas em relação à posição do sensor, não em relação à posição do Arduino.