Acelerômetro ADXL345 e Arduino Mega 1280

Boa Noite,

00:23 hrs, e consegui finalmente compreender e programar o Arduino para interfacear com o Acelerometro ADXL345, inicialmente. Esse será um breve tutorial de como fazer isso, já que isso não é hora de gente ficar acordada.

O que é um acelerômetro: (Tecmundo)
Segundo a primeira lei de Newton: ”Todo corpo permanece em repouso até que alguma força externa aja sobre ele.” Já a segunda lei define a força aplicada como o produto da massa do corpo pela sua aceleração. Logo, medindo a aceleração aplicada sobre um corpo (e seu peso), é possível determinar a força aplicada sobre ele.

Acelerômetro do iPhone (imagem de divulgação)

Um acelerômetro nada mais é que um instrumento capaz de medir a aceleração sobre objetos. Ao invés de posicionar diversos dinamômetros (instrumento para medir a força) em lugares diferentes do objeto, um único acelerômetro é capaz de calcular qualquer força exercida sobre ele.

Leia mais em: http://www.tecmundo.com.br/2652-o-que-e-um-acelerometro-.htm#ixzz1gBn98TBJ

O ADXL 345

Datasheet: http://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf

O ADXL345 é bem adequado para medidas de aceleração estática da gravidade em aplicações tilt-sensing, bem como aceleração dinâmica resultante do movimento ou choque. Sua alta resolução (4 mG/ LSB) permite a medição de mudanças de inclinação inferiores a 1,0 °.

Várias funções especiais de detecção são fornecidas. A detecção de atividade e inatividade detecta a presença ou ausência de movimento e se a aceleração em qualquer eixo excede um nível definido pelo usuário. Detecção de queda livre detecta se o dispositivo está caindo. Estas funções podem ser mapeados para um dos dois pinos de saída de interrupção.

Bom vamos ao trabalho

Para interfacear o Adxl 345 tive de soldar 4 fios nele para liga no Arduino. Utilizei o Padrão i2c para comunicação então o hardware e bem simples siga a tabela que não vai haver problemas.

Pino Arduino    Pino Adxl

3v3                         vcc e cs

gnd                          gnd

20                            sda

21                             scl

Se você usar outra versão do arduino os pinos scl e sda vão variar, mas dai e so dar uma olhada no site do Arduino…

Depois da pinagem vale a pena dar uma olhada e créditos nos dois sites a seguir:

http://www.sparkfun.com/tutorials/240

https://www.loveelectronics.co.uk/Tutorials/12/adxl345-accelerometer-arduino-tutorial

No segundo site eu consegui baixar a biblioteca que trabalha com o acelerômetro. Porém ela foi escrita para o compilador 0022 do Arduino, e estamos na versão 0023, portanto depois de baixar a biblioteca, você deve abrir o arquivo .c dela e proceder com as seguintes modificações:

– substituir #include<Wprogram.h> por #include<Arduino.h>

– substituir wire.send por wire.write

– substituir wire.receive por wire.read

E depois você coloca a biblioteca na pasta librarie do seu Arduino.

Pronto agora basta executar o exemplo que vem na própria biblioteca e ele vai funcionar. O exemplo pode ser conferido tambem abaixo:

/*
ADXL345_Example.pde - Example sketch for integration with an ADXL345 triple axis accelerometer.
Copyright (C) 2011 Love Electronics (loveelectronics.co.uk)

This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

// Include the Wire library so we can start using I2C.
#include <Wire.h>
// Include the Love Electronics ADXL345 library so we can use the accelerometer.
#include <ADXL345.h>

// Declare a global instance of the accelerometer.
ADXL345 accel;

// Set up a pin we are going to use to indicate our status using an LED.
int statusPin = 2; // I'm using digital pin 2.

void setup()
{
  // Begin by setting up the Serial Port so we can output our results.
  Serial.begin(9600);
  // Start the I2C Wire library so we can use I2C to talk to the accelerometer.
  Wire.begin();

  // Ready an LED to indicate our status.
  pinMode(statusPin, OUTPUT);

  // Create an instance of the accelerometer on the default address (0x1D)
  accel = ADXL345();

  // Check that the accelerometer is infact connected.
  if(accel.EnsureConnected())
  {
    Serial.println("Connected to ADXL345.");
    digitalWrite(statusPin, HIGH); // If we are connected, light our status LED.
  }
  else
  {
    Serial.println("Could not connect to ADXL345.");
    digitalWrite(statusPin, LOW); // If we are not connected, turn our LED off.
  }

  // Set the range of the accelerometer to a maximum of 2G.
  accel.SetRange(2, true);
  // Tell the accelerometer to start taking measurements.
  accel.EnableMeasurements();
}

void loop()
{
  if(accel.IsConnected) // If we are connected to the accelerometer.
  {
    // Read the raw data from the accelerometer.
    AccelerometerRaw raw = accel.ReadRawAxis();
    //This data can be accessed like so:
    int xAxisRawData = raw.XAxis;

    // Read the *scaled* data from the accelerometer (this does it's own read from the accelerometer
    // so you don't have to ReadRawAxis before you use this method).
    // This useful method gives you the value in G thanks to the Love Electronics library.
    AccelerometerScaled scaled = accel.ReadScaledAxis();
    // This data can be accessed like so:
    float xAxisGs = scaled.XAxis;

    // We output our received data.
    Output(raw, scaled);
  }
}

// Output the data down the serial port.
void Output(AccelerometerRaw raw, AccelerometerScaled scaled)
{
   // Tell us about the raw values coming from the accelerometer.
   Serial.print("Raw:\t");
   Serial.print(raw.XAxis);
   Serial.print("   ");
   Serial.print(raw.YAxis);
   Serial.print("   ");
   Serial.print(raw.ZAxis);

   // Tell us about the this data, but scale it into useful units (G).
   Serial.print("   \tScaled:\t");
   Serial.print(scaled.XAxis);
   Serial.print("G   ");
   Serial.print(scaled.YAxis);
   Serial.print("G   ");
   Serial.print(scaled.ZAxis);
   Serial.println("G");
}

2 ideias sobre “Acelerômetro ADXL345 e Arduino Mega 1280”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Please type the characters of this captcha image in the input box

Por favor, digite os caracteres desta imagem na caixa de entrada