Arduino:Примеры/ADXL3xx

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

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


Акселерометр серии ADXL3xx [1]

Этот пример показывает, как считывать данные с акселерометров серии ADXL3xx (вроде ADXL320, ADXL321, ADXL322, ADXL330) от компании Analog Devices, а затем передавать эти данные на персональный компьютер.

В этом примере использовались оценочные платы для акселерометров от SparkFun. Впрочем, подойдут и оценочные платы от adafruit, но им, возможно, потребуется другой тип подключения.

Данные о каждой оси передаются акселерометром в виде аналогового напряжения диапазоном от 0 до 5 В. Чтобы прочитать эти данные, надо будет воспользоваться функцией analogRead().

Необходимое оборудование

Цепь

Акселерометру требуется очень небольшая сила тока, поэтому его можно подключить прямо к цифровым контактам Arduino. То есть три входных аналоговых контакта Arduino будут использоваться как цифровые контакты (для питания, заземления и самодиагностики), а еще три аналоговых контакта будут считывать аналоговые данные акселерометра.

Рис. 1. Схема соединения платы Arduino и акселерометра ADXL3xx
Рис. 1. Схема соединения платы Arduino и акселерометра ADXL3xx

Схема

Рис. 2. Схема соединения платы Arduino и акселерометра ADXL3xx
Рис. 2. Схема соединения платы Arduino и акселерометра ADXL3xx

Вот схема подключения контактов для конфигурации выше (для оценочной платы):

Оценочная плата Самодиагностика Ось Z Ось Y Ось X «Земля» Напряжение
Входные аналоговые контакты Arduino 0 1 2 3 4 5

Аналогичная схема для настоящего акселерометра:

Контакт на ADXL3xx Самодиагностика Z-выход Y-выход X-выход «Земля» Напряжение
Входные аналоговые контакты Arduino Не подсоединяется 1-ый входной аналоговый контакт 2-ой входной аналоговый контакт 3-ий входной аналоговый контакт GND 5V

Код

/*
 Акселерометр серии ADXL3xx
 
 Считывает данные от акселерометра серии ADXL3xx (от компании Analog Devices),
а затем передает их на компьютер.
 Контакты Arduino специально спроектированы для совместимости 
с оценочными платами от SparkFun, которые доступны тут:
http://www.sparkfun.com/commerce/categories.php?c=80

 http://www.arduino.cc/en/Tutorial/ADXL3xx

 Цепь:
 0-ой входной аналоговый контакт – самодиагностика акселерометра
 1-ый входной аналоговый контакт – ось Z
 2-ой входной аналоговый контакт – ось Y
 3-ий входной аналоговый контакт – ось X
 4-ый входной аналоговый контакт – «земля»
 5-ый входной аналоговый контакт – напряжение
 
 Создан 2 июля 2008 Дэвидом А. Меллисом (David A. Mellis),
 модифицирован 30 августа 2011 Томом Иго (Tom Igoe).
 
 Этот код не защищен авторским правом.

*/

// это константы, т.е. значения, которые не изменятся. 
// воспользуемся ими для обозначения контактов:
const int groundpin = 18;             // 4-ый входной аналоговый контакт – «земля»
const int powerpin = 19;              // 5-ый входной аналоговый контакт – напряжение
const int xpin = A3;                  // X-ось акселерометра
const int ypin = A2;                  // Y-ось акселерометра
const int zpin = A1;                  // Z-ось акселерометра (только для моделей с тремя осями)

void setup()
{
  // инициализируем последовательную передачу данных:
  Serial.begin(9600);
  
  // создаем для акселерометра «землю» и напряжение,
  // используя входные аналоговые контакты Arduino в качестве цифровых контактов.
  // благодаря этому оценочную плату можно подключить к Arduino напрямую.
  // если вы вместо этого используете
  // обычные 5-вольтовый и заземляющий контакты Arduino,
  // эти строчки кода можно удалить.
  pinMode(groundpin, OUTPUT);
  pinMode(powerpin, OUTPUT);
  digitalWrite(groundpin, LOW);
  digitalWrite(powerpin, HIGH);
}

void loop()
{
  // выводим данные от датчика на Serial Monitor:
  Serial.print(analogRead(xpin));
  // вбиваем Tab между значениями:
  Serial.print("\t");
  Serial.print(analogRead(ypin));
  // вбиваем Tab между значениями:
  Serial.print("\t");
  Serial.print(analogRead(zpin));
  Serial.println();
  // делаем задержку между считываниями:
  delay(100);
}

{{#set: Код примера= /*

Акселерометр серии ADXL3xx

Считывает данные от акселерометра серии ADXL3xx (от компании Analog Devices),

а затем передает их на компьютер.

Контакты Arduino специально спроектированы для совместимости 

с оценочными платами от SparkFun, которые доступны тут: http://www.sparkfun.com/commerce/categories.php?c=80

http://www.arduino.cc/en/Tutorial/ADXL3xx
Цепь:
0-ой входной аналоговый контакт – самодиагностика акселерометра
1-ый входной аналоговый контакт – ось Z
2-ой входной аналоговый контакт – ось Y
3-ий входной аналоговый контакт – ось X
4-ый входной аналоговый контакт – «земля»
5-ый входной аналоговый контакт – напряжение

Создан 2 июля 2008 Дэвидом А. Меллисом (David A. Mellis),
модифицирован 30 августа 2011 Томом Иго (Tom Igoe).

Этот код не защищен авторским правом.
  • /

// это константы, т.е. значения, которые не изменятся. // воспользуемся ими для обозначения контактов: const int groundpin = 18; // 4-ый входной аналоговый контакт – «земля» const int powerpin = 19; // 5-ый входной аналоговый контакт – напряжение const int xpin = A3; // X-ось акселерометра const int ypin = A2; // Y-ось акселерометра const int zpin = A1; // Z-ось акселерометра (только для моделей с тремя осями)

void setup() {

 // инициализируем последовательную передачу данных:
 Serial.begin(9600);
 
 // создаем для акселерометра «землю» и напряжение,
 // используя входные аналоговые контакты Arduino в качестве цифровых контактов.
 // благодаря этому оценочную плату можно подключить к Arduino напрямую.
 // если вы вместо этого используете
 // обычные 5-вольтовый и заземляющий контакты Arduino,
 // эти строчки кода можно удалить.
 pinMode(groundpin, OUTPUT);
 pinMode(powerpin, OUTPUT);
 digitalWrite(groundpin, LOW);
 digitalWrite(powerpin, HIGH);

}

void loop() {

 // выводим данные от датчика на Serial Monitor:
 Serial.print(analogRead(xpin));
 // вбиваем Tab между значениями:
 Serial.print("\t");
 Serial.print(analogRead(ypin));
 // вбиваем Tab между значениями:
 Serial.print("\t");
 Serial.print(analogRead(zpin));
 Serial.println();
 // делаем задержку между считываниями:
 delay(100);

} }}

Данные

Ниже – фрагмент данных, считанных во время перемещения акселерометра ADXL322 2g под разными углами относительно оси Y (т.е. относительно земли). Для других осей данные будут высчитываться примерно также, но могут варьироваться в зависимости от чувствительности устройства. Если акселерометр будет находиться ровно по горизонтали (т.е. параллельно к земле под углом в 0°), считанные данные будут около 512, но значения для других углов у разных акселерометров (например, если взять ADXL302 5g) могут варьироваться.

Угол -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40 50 60 70 80 90
Данные 662 660 654 642 628 610 589 563 537 510 485 455 433 408 390 374 363 357 355

См.также

  1. pinMode()
  2. digitalWrite()
  3. analogRead()
  4. serial.begin()
  5. serial.print()
  6. AnalogInput
  7. AnalogInOutSerial
  8. Memsic2125
  9. Knock
  10. Ping


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