Você está na página 1de 14

Como o acelerômetro funciona?

Interface ADXL335 com Arduino


https://lastminuteengineers.com/adxl33
5-accelerometer-arduino-tutorial/

Você já se perguntou como seu smartphone sabe qual é o caminho? É um


dos recursos mais inovadores dos smartphones atuais. Todos eles têm um
pequeno dispositivo chamado acelerômetro embutido no circuito que
detecta quando você inclina o dispositivo de um lado para o outro. É
assim que seu smartphone sabe quando mudar do modo retrato para o
modo paisagem.
Os acelerômetros são amplamente usados em aplicações de detecção de
movimento e inclinação de baixo consumo de energia e baixo custo,
como dispositivos móveis, sistemas de jogos, proteção de unidade de
disco, estabilização de imagem e dispositivos esportivos e de saúde.
Vamos ver o que são, o que fazem e como funcionam.

How Does an Accelerometer Work?


Como funciona um acelerômetro?

To understand how accelerometers work, imagine a ball inside a 3D cube.


Para entender como funcionam os acelerômetros, imagine uma bola
dentro de um cubo 3D.

Supondo que o cubo esteja no espaço sideral, onde tudo não tem peso, a
bola simplesmente flutuará no centro do cubo.

Agora assuma que cada parede representa um eixo específico.

Se movermos repentinamente a caixa para a esquerda com aceleração 1g


(uma única força G 1g é equivalente à aceleração gravitacional 9,8 m/s²), a
bola certamente atingirá a parede X. Se medirmos a força que a bola
exerce na parede X , podemos obter um valor de saída de 1g ao longo do
eixo X.

Vamos ver o que acontece quando colocamos esse cubo na Terra. A bola
simplesmente cairá na parede Z, exercendo uma força de 1g conforme
mostrado no diagrama abaixo:
Nesse caso, a caixa não está se movendo, mas ainda obtemos uma leitura
de 1g no eixo Z. Isso ocorre porque a gravidade (que na verdade é uma
forma de aceleração) está puxando a bola para baixo com uma força de
1g.

Embora esse modelo não represente exatamente como um sensor de


acelerômetro do mundo real é construído, geralmente é útil para
entender por que o sinal de saída de um acelerômetro é normalmente
especificado em ±g ou por que um acelerômetro lê 1g no eixo z em
repouso ou quais leituras do acelerômetro você pode esperar em
diferentes orientações.

No mundo real, os acelerômetros são baseados em sistemas


microeletromecânicos (tecnologia de fabricação de MEMS). Então, vamos
descobrir como funciona um acelerômetro MEMS.

How Does a MEMS Accelerometer Work?


Como funciona um acelerômetro MEMS?

Um acelerômetro MEMS (Micro-Electro-Mechanical System) é uma


estrutura microusinada construída sobre uma pastilha de silício.
Esta estrutura é suspensa por molas de polissilício. Ele permite que a
estrutura desvie quando acelerada ao longo dos eixos X, Y e/ou Z.

Como resultado da deflexão, a capacitância entre as placas fixas e as


placas presas à estrutura suspensa muda. Essa mudança na capacitância é
proporcional à aceleração ao longo desse eixo.

O sensor processa essa mudança na capacitância e a converte em uma


tensão de saída analógica.

Visão geral do hardware do módulo ADXL335

No núcleo do módulo está um pequeno acelerômetro MEMS de eixo


triplo de baixo consumo de energia e baixo ruído da Analog Devices -
ADXL335. Ele pode medir não apenas a aceleração estática causada pela
gravidade, mas também a aceleração dinâmica causada por movimento,
choque ou vibração.
Este módulo compatível com breadboard divide cada pino do ADXL335
em um cabeçalho de pitch de 6 pinos e 0,1”, incluindo 3 saídas analógicas
para medições dos eixos X, Y e Z, 2 pinos de alimentação e um pino de
autoteste.

Power

O ADXL335 opera em 1,8 V a 3,6 VCC (normalmente 3,3 V). No entanto, o


regulador de 3,3 V integrado o torna ideal para interface com
microcontroladores de 5 V como o Arduino.

The sensor consumes only 350μA of current during normal operation.

Measurement Range

O ADXL335 tem uma faixa de detecção completa de ±3g. O que significa


que a quantidade máxima de aceleração que o ADXL335 pode medir com
precisão e representar como uma saída é de ±3g. Se for acelerado a 4g,
por exemplo, o acelerômetro não vai quebrar, mas a saída pode cair.

A aceleração máxima absoluta do ADXL335 é de 10.000 g. Quando


submetido a acelerações superiores a 10.000g, o ADXL335 pode falhar.

Ratiometric Output

A saída do ADXL335 é raciométrica, portanto, a tensão de saída aumenta


linearmente com a aceleração ao longo da faixa. Isso significa que a saída
de medição de 0g está sempre na metade da tensão de alimentação de
3,3V (1,65V), -3g está em 0v e +3g está em 3,3V, com escala total entre.

Technical Specifications

Aqui estão as especificações.

Operating Voltage 1.8V – 3.6V

Operating Current 350μA (typical)

Sensing Range ±3g (Full Scale)

Temperature Range −40 to +85°C

Sensing axis 3 axis

Sensitivity 270 to 330mV/g (Ratiometric)

Shock Resistance Up to 10,000g

Dimension 4mm x 4mm x 1.45mm

Para mais informações, consulte a folha de dados abaixo.

ADXL335 Datasheet

ADXL335 Accelerometer Pinout

Antes de entrarmos na conexão e no código de exemplo, vamos dar uma


olhada em sua pinagem.
VCC fornece energia ao módulo. Conecte-o à saída de 5V do seu Arduino.

X-Out emite uma tensão analógica proporcional à aceleração ao longo do


eixo X.

Y-Out emite uma tensão analógica proporcional à aceleração ao longo do


eixo Y.

Z-Out emite tensão analógica proporcional à aceleração ao longo do eixo


Z.

GND é o pino terra.

ST(Self-Test) pin controle o recurso de autoteste que permite testar a


funcionalidade do sensor na aplicação final. Este recurso é discutido em
profundidade no final do tutorial.

Conectando um acelerômetro ADXL335 a um Arduino

Agora que sabemos como funciona o acelerômetro ADXL335, podemos


conectá-lo ao nosso Arduino.

As conexões são bem simples. Comece montando o acelerômetro na


breadboard. Conecte o pino VCC ao pino 5V do Arduino e o pino GND ao
pino Terra do Arduino. Conecte as saídas X, Y e Z aos pinos analógicos
A0, A1 e A2 do Arduino.

Para obter resultados precisos, precisamos alterar a tensão de referência


analógica (AREF) no Arduino. Isso é feito conectando o pino de 3,3 V do
Arduino ao pino AREF.

A imagem a seguir mostra a fiação.


Arduino Example Code – Reading the ADXL335 accelerometer

O esboço é bastante simples. Ele simplesmente exibe a saída do sensor


calibrado em cada eixo na interface serial. Experimente o esboço antes de
entrarmos nos detalhes.

const int xInput = A0;


const int yInput = A1;
const int zInput = A2;

// inicializar intervalos brutos mínimos e máximos para cada


eixo
int RawMin = 0;
int RawMax = 1023;

// Faça várias amostras para reduzir o ruído


const int sampleSize = 10;

void setup()
{
analogReference(EXTERNAL);
Serial.begin(9600);
}

void loop()
{
// Ler valores brutos
int xRaw = ReadAxis(xInput);
int yRaw = ReadAxis(yInput);
int zRaw = ReadAxis(zInput);

// Converter valores brutos em 'mili-Gs"


long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

// redimensionar para Gs fracionário


float xAccel = xScaled / 1000.0;
float yAccel = yScaled / 1000.0;
float zAccel = zScaled / 1000.0;

Serial.print("X, Y, Z :: ");
Serial.print(xRaw);
Serial.print(", ");
Serial.print(yRaw);
Serial.print(", ");
Serial.print(zRaw);
Serial.print(" :: ");
Serial.print(xAccel,0);
Serial.print("G, ");
Serial.print(yAccel,0);
Serial.print("G, ");
Serial.print(zAccel,0);
Serial.println("G");

delay(200);
}

// Pegue amostras e retorne a média


int ReadAxis(int axisPin)
{
long reading = 0;
analogRead(axisPin);
delay(1);
for (int i = 0; i < sampleSize; i++)
{
reading += analogRead(axisPin);
}
return reading/sampleSize;
}
As imagens abaixo mostram as leituras do acelerômetro em várias
orientações.
Explicação do código:

O esboço começa declarando os pinos de entrada analógica do Arduino aos


quais os pinos de saída X, Y e Z do sensor estão conectados.

const int xInput = A0;


const int yInput = A1;
const int zInput = A2;

Em seguida, duas variáveis, RawMin e RawMax, são definidas. Porque o


Arduino tem um ADC de 10 bits (210 = 1024), ele mapeará as tensões de
saída do ADXL335, que variam de 0 a 3,3 volts, em valores inteiros entre 0
e 1023. Por isso RawMin é definido como 0 e RawMax está definido para
1023.

// inicializar intervalos brutos mínimos e máximos para cada


eixo
int RawMin = 0;
int RawMax = 1023;

O sampleSize A variável especifica o número de amostras que devem ser


tomadas pelo Arduino durante cada conversão. No nosso caso,
definimos sampleSize a 10 para obter resultados mais precisos.
// Faça várias amostras para reduzir o ruído
const int sampleSize = 10;

Na seção de configuração, primeiro definimos a referência analógica


como EXTERNAL chamando analogReference(EXTERNAL) . Em seguida,
iniciamos as comunicações seriais com o PC.

Warning:

Isso é necessário, pois conectamos 3,3 V ao pino AREF do Arduino. Se


você não chamar analogReference(EXTERNAL), você causará um curto-
circuito entre a tensão de referência ativa gerada internamente e o pino
AREF, podendo causar danos ao seu Arduino.

Você pode aprender mais sobre a função analogReference() no site oficial


do Arduino.

analogReference(EXTERNAL);
Serial.begin(9600);

Na seção de loop, lemos as saídas analógicas do sensor a cada 200 ms.


Observe que estamos chamando a função personalizada ReadAxis() em
vez da função analogRead(). Esta função simplesmente leva dez amostras
de conversão ADC e retorna a média.

// Ler valores brutos


int xRaw = ReadAxis(xInput);
int yRaw = ReadAxis(yInput);
int zRaw = ReadAxis(zInput);

Conversão da saída ADXL335 para aceleração (g)

O trecho de código a seguir é a parte mais importante do programa. Ele


mapeia e converte as tensões de saída analógica do sensor em aceleração
gravitacional (G).

O mapeamento é feito pelo IDE built-in map() function. Quando


chamamos map(xRaw, RawMin, RawMax, -3000, 3000) , o valor de RawMin é
mapeado para -3000, o valor de RawMax é mapeado para 3000 e os valores
intermediários são mapeados para valores intermediários.

Os números -3000 e 3000 não são aleatórios. Na verdade, eles


representam a aceleração gravitacional medida pelo sensor em mili-g, ou
seja, ±3g (-3000 mili-g a 3000 mili-g).

Por exemplo,

• Se o sensor emitir 0 volts no eixo x, ou seja, xRaw=0, a função map()


retornará -3000, que corresponde a -3g.

• Se o sensor emitir 1,65 volts no eixo x, ou seja, xRaw=511, a função


map() retornará 0, que corresponde a 0g.

• Se o sensor produzir 3,3 volts no eixo x, ou seja, xRaw=1023, a função


map() retornará 3000, que corresponde a +3g.

O termo Ratiométrico faz mais sentido agora que a tensão de saída


aumenta linearmente com a aceleração em toda a faixa.

// Converter valores brutos em 'mili-Gs"


long xScaled = map(xRaw, RawMin, RawMax, -3000, 3000);
long yScaled = map(yRaw, RawMin, RawMax, -3000, 3000);
long zScaled = map(zRaw, RawMin, RawMax, -3000, 3000);

Por fim, a saída do sensor é reduzida para Gs fracionários, dividindo-a por


1000 e exibida no monitor serial.

// re-scale to fractional Gs
float xAccel = xScaled / 1000.0;
float yAccel = yScaled / 1000.0;
float zAccel = zScaled / 1000.0;

Serial.print("X, Y, Z :: ");
Serial.print(xRaw);
Serial.print(", ");
Serial.print(yRaw);
Serial.print(", ");
Serial.print(zRaw);
Serial.print(" :: ");
Serial.print(xAccel,0);
Serial.print("G, ");
Serial.print(yAccel,0);
Serial.print("G, ");
Serial.print(zAccel,0);
Serial.println("G");
ADXL335 Self Test Feature

O acelerômetro ADXL335 possui um recurso de autoteste que permite


testar a funcionalidade do sensor na aplicação final. O pino ST (autoteste)
no módulo controla este recurso.

Quando o pino ST está conectado a 3,3V, uma força eletrostática é


exercida internamente no feixe do acelerômetro. O movimento resultante
do feixe permite ao usuário determinar se o acelerômetro está
funcionando ou não.

• A variação esperada na produção é

• −1.08 g (−325 mV) on the X-axis

• +1.08 g (+325 mV) on the Y-axis

• +1.83 g (+550 mV) on the Z-axis

O pino ST pode ser deixado aberto ou conectado ao GND durante a


operação normal.

Warning:

Expor o pino ST a tensões superiores a 3,6 V pode danificar


permanentemente o acelerômetro.

Você também pode gostar