Электронный компонент:Плата Xadow с 3-осевым акселерометром

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Плата Xadow с 3-осевым акселерометром[1]

Эта плата оснащена цифровым акселерометром высокого разрешения (3.9mg/LSB) с большим диапазоном измеряемых значений (±16 гал), а также интерфейсом I2C для передачи данных о движении платы. Благодаря этой плате в проект можно добавить функцию распознавания движений вроде качания рукой или ногой, чтобы с помощью этого, к примеру, переключать песни на iPhone.

Купить плату Xadow с 3-осевым акселерометром можно по этой ссылке.

Характеристики

Параметр Значение
Размеры 25,43 мм х 20,35 мм
Рабочее напряжение 3.3 вольта
Разрешение 3.9mg/LSB
Диапазон измеряемых значений ±16g
Шина для передачи данных I2C

Тестовый проект

Давайте сделаем тестовый проект, считывающий с акселерометра информацию о движениях. Сначала подключите плату Xadow с 3-осевым акселерометром к главной плате Xadow (имеется в виду плата Xadow Main Board; она не совместима с модулями Xadow версии 2 и RePhone). Выглядеть это будет примерно так:

Примечание: Подключая кабель, следите за тем, чтобы одна его сторона была подключена к порту, который находится на стороне со срезанными углами, а другая – к порту, который находится на стороне с целыми углами. Пример показан на картинке выше.

Теперь загрузите на плату тестовый код:

#include <Wire.h>

#define ADXL345_DEVICE 0x00
#define ADXL345_POWER_CTL 0x2D
#define ADXL345_DATAX0 0x32
#define ADXL345_DATAX1 0x33
#define ADXL345_DATAY0 0x34
#define ADXL345_DATAY1 0x35
#define ADXL345_DATAZ0 0x36
#define ADXL345_DATAZ1 0x37

#define ADXL345_ADDRESS  0x53
int X_Read,Y_Read,Z_Read;
double ax,ay,az;

 void setup()
{
  Wire.begin();
  Serial.begin(19200);
  delay(100);
  //  включение ADXL345:
  Wire.beginTransmission(ADXL345_DEVICE);  //  начинаем передачу 
                                           //  данных на устройство
  Wire.write(ADXL345_POWER_CTL);
  Wire.write(8);                    // включаем запись
  Wire.endTransmission();           // завершаем передачу

 }

void loop()
{

X_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAX0,ADXL345_DATAX1);
Y_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAY0,ADXL345_DATAY1);
Z_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAZ0,ADXL345_DATAZ1);


 /*Serial.print("The X,Y,Z Value are:");  //  "Значения для X, Y, Z:"
 Serial.print(X_Read);
 Serial.print(" , ");
 Serial.print(Y_Read);
 Serial.print(" , ");
 Serial.println(Z_Read); */

  getAcceleration();
  Serial.print("X=");
  Serial.print(ax);
  Serial.println(" g");
  Serial.print("Y=");
  Serial.print(ay);
  Serial.println(" g");
  Serial.print("Z=");
  Serial.print(az);
  Serial.println(" g");
  Serial.println("**********************");
 delay(500);
}

int readRegister(int deviceAddress,int address1,int address2)
{
    long int value;
    int readValue1,readValue2;
    Wire.beginTransmission(deviceAddress);
     Wire.write(address1);  //  регистр для считывания
     Wire.write(address2);  //  регистр для считывания
     Wire.endTransmission();
     Wire.requestFrom(deviceAddress,2);  //  считываем два байта
     if(Wire.available()<=2)
     {
       readValue1 = Wire.read();
       readValue2 = Wire.read();
     }
     //Wire.endTransmission();
     readValue2 = readValue2<<8;
     value= readValue1 + readValue2;
     delay(100);
     return value;
}

void getAcceleration()
{
  double gains;
  //  скучный код для акселерометра:
  gains = 0.00390625;
  ax=X_Read * gains;
  ay=Y_Read * gains;
  az=Z_Read * gains;

}

Загрузив код, откройте монитор порта, чтобы увидеть результат. Данные 3-осевого акселерометра будут преобразованы в единицы измерения гравитации – галы (g).

Как понимать выходные данные

Ниже две картинки, которые объясняют, как понимать результаты, показанные в мониторе порта. Первая картинка – это направление каждой оси.

Вторая картинка – это несколько примеров того, как расположение платы влияет на изменение данных.

Полезные ссылки

См.также

Внешние ссылки