Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

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

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2703 статей для сайта.

Контакты:

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


Ambox content.png Черновик


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

Xadow Accelerometer 01.jpg

Эта плата оснащена цифровым акселерометром высокого разрешения (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). Выглядеть это будет примерно так:

Xadow3AxisAcce 2.jpg

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

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

  1. #include <Wire.h>
  2.  
  3. #define ADXL345_DEVICE 0x00
  4. #define ADXL345_POWER_CTL 0x2D
  5. #define ADXL345_DATAX0 0x32
  6. #define ADXL345_DATAX1 0x33
  7. #define ADXL345_DATAY0 0x34
  8. #define ADXL345_DATAY1 0x35
  9. #define ADXL345_DATAZ0 0x36
  10. #define ADXL345_DATAZ1 0x37
  11.  
  12. #define ADXL345_ADDRESS  0x53
  13. int X_Read,Y_Read,Z_Read;
  14. double ax,ay,az;
  15.  
  16.  void setup()
  17. {
  18.   Wire.begin();
  19.   Serial.begin(19200);
  20.   delay(100);
  21.   //  включение ADXL345:
  22.   Wire.beginTransmission(ADXL345_DEVICE);  //  начинаем передачу
  23.                                            //  данных на устройство
  24.   Wire.write(ADXL345_POWER_CTL);
  25.   Wire.write(8);                    // включаем запись
  26.   Wire.endTransmission();           // завершаем передачу
  27.  
  28.  }
  29.  
  30. void loop()
  31. {
  32.  
  33. X_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAX0,ADXL345_DATAX1);
  34. Y_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAY0,ADXL345_DATAY1);
  35. Z_Read = readRegister(ADXL345_ADDRESS,ADXL345_DATAZ0,ADXL345_DATAZ1);
  36.  
  37.  
  38.  /*Serial.print("The X,Y,Z Value are:");  //  "Значения для X, Y, Z:"
  39.  Serial.print(X_Read);
  40.  Serial.print(" , ");
  41.  Serial.print(Y_Read);
  42.  Serial.print(" , ");
  43.  Serial.println(Z_Read); */
  44.  
  45.   getAcceleration();
  46.   Serial.print("X=");
  47.   Serial.print(ax);
  48.   Serial.println(" g");
  49.   Serial.print("Y=");
  50.   Serial.print(ay);
  51.   Serial.println(" g");
  52.   Serial.print("Z=");
  53.   Serial.print(az);
  54.   Serial.println(" g");
  55.   Serial.println("**********************");
  56.  delay(500);
  57. }
  58.  
  59. int readRegister(int deviceAddress,int address1,int address2)
  60. {
  61.     long int value;
  62.     int readValue1,readValue2;
  63.     Wire.beginTransmission(deviceAddress);
  64.      Wire.write(address1);  //  регистр для считывания
  65.      Wire.write(address2);  //  регистр для считывания
  66.      Wire.endTransmission();
  67.      Wire.requestFrom(deviceAddress,2);  //  считываем два байта
  68.      if(Wire.available()<=2)
  69.      {
  70.        readValue1 = Wire.read();
  71.        readValue2 = Wire.read();
  72.      }
  73.      //Wire.endTransmission();
  74.      readValue2 = readValue2<<8;
  75.      value= readValue1 + readValue2;
  76.      delay(100);
  77.      return value;
  78. }
  79.  
  80. void getAcceleration()
  81. {
  82.   double gains;
  83.   //  скучный код для акселерометра:
  84.   gains = 0.00390625;
  85.   ax=X_Read * gains;
  86.   ay=Y_Read * gains;
  87.   az=Z_Read * gains;
  88.  
  89. }

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

Xadow 3-Axis Accelemeter Result 3.jpg

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

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

ADXL345 Axes of Acceleration Sensivity 4.jpg

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

Sensing Direction 2.jpg

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

См.также

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

  1. wiki.seeed.cc - Xadow - 3-Axis Accelerometer