Olá a todos
!
Hoje venho-vos mostrar um dispositivo bastante interessante. Com certeza que já todos conhecem aqueles telemóveis que quando são girados o ecrã também roda. Pois é, isso normalmente é feito à custa de um pequeno integrado chamado acelerómetro.
Para este tutorial vou usar o pequeno acelerómetro da Freescale, o MMA7260. Este é um acelerómetro de 3-eixos, isto é, consegue detectar acelerações em 3 direcções (X, Y e Z), isto é bom para aplicações 3D.
A Sparkfun vende este acelerómetro
Sparkfun MMA7260Q, mas pelo preço compensa comprar a board feita pela Sparkfun já com os componentes necessários todos soldados e com os pinos de modo a que seja só preciso encaixa-la na breadboard! Link
Sparkfun MMA7260Q Breakout Board.
A Freescale também envia gratuitamente samples deste acelerometro
aqui.
ATENÇÃO O CHIP DE SAMPLE É SMD, É NECESSÁRIO BASTANTE EXPERIÊNCIA E TÉCNICA DE SOLDADURA PARA FAZEREM A VOSSA PCB E SOLDAREM LÁ ESTE CHIP. Pelo trabalho mais vale comprarem a Breakout Board da Sparkfun!
O
datasheet MMA7260Q (este acelerómetro) é muito bom e simples, explica tudo o que é necessário saber para trabalhar com o acelerómetro!
Lendo o datasheet tiramos a seguinte informação:
• O Output dos valores dos 3-eixos é analógico;
• Alimentação 0 GND / 3.3v VCC
• Tem 4 modos de operação, 1.5G / 2G / 4G / 6G (Valores G máximos)
• 2 Selectores para seleccionar o modo de funcionamento, GS1 e GS2
• Pino Sleep, 3,3v – acelerómetro ligado, 0v – acelerómetro desligado
• Estes 3 pinos podem ser controlados por um microcontrolador (Arduino por exemplo com os pinos digitais)
GS1 GS2 G-range SensitivityGND GND 1.5g 800mV/g
GND 3.3V 2g 600mV/g
3.3V GND 4g 300mV/g
3.3V 3.3V 6g 200mV/g
Quadro que mostra a relação entre os pinos GS1, GS2 e a sensibilidade do aceletrometro/modo de funcionamento.Neste tutorial vou usar o primeiro modo, para manter tudo simples.
Começamos por ligar o acelerómetro, se estiverem a usar a placa da Sparkfun a cerigrafia é bastante boa e intuitiva. Os pinos GND, GS1, GS2 ligam a 0V e os pinos VCC e Sleep ligam a 3,3V. Tem de ter cuidado pois este integrado é bastante sensível e 3,3V é mesmo o máximo que lhe podem dar!
A sensibilidade deste acelerómetro pode ser alterada “on the fly”, isto é, se ligarem os pinos GS1 e GS2 a um microcontrolador podem alterar-lhe a sensibilidade mudando o valor lógico dos pinos. O mesmo aplica-se ao pino Sleep.
Não se esqueçam de usar a electrónica necessária para garantirem que no máximo fornecem 3,3v neste pinos!
Se estiverem interessados em usar uma placa feita por vocês, nos anexos deste tópico estão dois PDFs com o desenho de uma pcb que podem imprimir para fazer a vossa, um feito por mim e outro pelo metro_ (Obrigado metro_
; O do metro tem pistas mais fininhas pelo que se forem fazer por metodos arcaicos não o aconcelho). Se fizerem a vossa placa têm mesmo de usar os filtros constituídos por uma resistência de 1Kohm e um condensador de 0.1uF (ou 100nF) em cada output dos eixos. Têm também de usar um condensador de 0.1uF entre GND e VCC para fazer “Decoupling” da fonte. Estes filtros eliminam bastante ruído e poupam o acelerómetro.
Esquema de ligação do acelerómetro MMA7260Q
Fiz um código para o Arduino para poderem testar o vosso acelerómetro. O eixo X liga ao pino analógico 0 do Arduino, o eixo Y liga ao pino 1 analógico e o eixo Z liga ao pino analógico 2.
Este código envia 3 bytes consecutivamente por Serial a um
baudrate de 9600, no pc fiz uma aplicação em
Processing (muito boa esta ferramenta; Baseei-me no código de Tom Igoe) que os recebe e tradu-los (os 3 bytes) para um gráfico. Nesta aplicação se carregarem na tecla
X começa a desenhar o gráfico com os valores obtidos da Serial relativamente ao eixo
X, se carregarem na tecla
Y e
Z o comportamento repete-se para os eixos respectivos.
Deixo-vos um vídeo que fiz para vos elucidar um pouco.
O eixo de Z é o mais traiçoeiro, parece-me que é feito à custa do eixo X e Y mas não tenho a certeza. Contudo funciona tudo bastante bem
, mas é preciso ter mesmo muito cuidado pois é um dispositivo bastante sensível à tensão fornecida :S.
Quando o acelerómetro está no seu estado normal e quieto, tem à saída dos seus pinos de X e Y metade da tensão fornecida, sensivelmente 1.65V. No pino Z tem 2,45V isto porque a terra já está a fazer uma força de 1G, ora se no modo 1.5G temos uma sensibilidade de 0,8v/G e se 0G são 1,65V então:
1,65v + 0.8v < = > 0G + 1G = 2,45V.
Quando é feita uma aceleração no sentido positivo dos eixos o valor da tensão no seu pino aumenta e quando é feita uma aceleração no sentido negativo dos eixos o valor da tensão no seu pino diminui.
Expero que entendam tudo e se houver alguma dúvida é só dizer!
Agora ficam aqui dois videos que fiz onde jogo GTA IV com este novo "comando" : ehehe
Playing GTA IV with an Arduino + MMA7260Q 3-Axis Accelerometer - Part 1Playing GTA IV with an Arduino + MMA7260Q 3-Axis Accelerometer - Part 2