В цей раз ми займемося підключенням аналогового тривісного акселерометра ADXL335 до Arduino.

Аналоговый акселерометр ADXL335

Вам знадобиться

  • – Arduino;
  • – акселерометр ADXL335;
  • – персональний комп’ютер з середовищем розробки Arduino IDE.

Інструкція

1. Акселерометри використовують для визначення вектора прискорення. Акселерометр ADXL335 має три осі, і завдяки цьому він може визначати вектор прискорення в тривимірному просторі. Зважаючи на те, що сила земного тяжіння – це теж вектор, то акселерометр може визначати свою власну орієнтацію в тривимірному просторі щодо центру Землі. На малюнку наведено зображення з паспорта (http://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) на акселерометр ADXL335. Тут зображені координатні осі чутливості акселерометра по відношенню до геометричного розміщення корпусу пристрою в просторі, а також таблиця значень напруги з 3-х каналів акселерометра в залежності від його орієнтації у просторі. Дані в таблиці наводяться для знаходиться в стані спокою датчика.Розглянемо докладніше, що ж показує нам акселерометр. Нехай датчик лежить горизонтально, наприклад, на столі. Тоді проекція вектора прискорення дорівнює 1g по осі Z, або Zout = 1g. По іншим двом осям будуть нулі: Xout = 0 і Yout = 0. При повороті датчика “на спину”, він буде направлений в протилежну сторону щодо вектора сили тяжіння, тобто Zout = -1g. Аналогічно вимірювання знімаються по всім трьох осях. Зрозуміло, що акселерометр може бути розташований як в просторі, тому зі всіх трьох каналів ми будемо знімати відмінні від нуля свідчення.Якщо датчик сильно труснути уздовж вертикальної осі Z, то значення Zout буде більше, ніж “1g”. Максимальна вимірювана прискорення – “3g” по кожній з осей в будь-якому з напрямів (тобто як з “плюсом”, так і з “мінусом”).

Оси чувствительности акселерометра и таблица выходных значений

2. Думаю, з принципом роботи акселерометра розібралися. Тепер розглянемо схему підключення.Чіп аналогового акселерометра ADXL335 досить дрібний і поміщений в корпус BGA, і в домашніх умовах його складно змонтувати на плату. Тому я буду використовувати готовий модуль GY-61 з акселерометром ADXL335. Такі модулі в китайських інтернет-магазинах коштують практично копійки.Для живлення акселерометра необхідно подати на висновку VCC модуля напруга +3,3 Ст. Вимірювальні канали датчика підключаються до аналоговим висновків Arduino, наприклад, “A0”, “А1” та “А2”. Це вся схема :)

Схема подключения акселерометра ADXL335 к Arduno

3. Завантажимо ось такий скетч в пам’ять Arduino. Будемо зчитувати з аналогових входів показання по трьох каналах, перетворювати їх у напругу і виводити їх у послідовний порт.Arduino має 10-розрядний АЦП, а максимальна допустима напруга на виводі – 5 вольт. Виміряні напруги кодуються бітами, які можуть приймати тільки 2 значення – 0 або 1. Це означає, що весь діапазон вимірювань буде поділений на (1+1) у 10-ой ступеня, тобто на 1024 рівних відрізка.Для того щоб перевести знімаються свідчення в вольти, потрібно кожне виміряне на аналоговому вході значення поділити на 1024 (відрізка), а потім помножити на 5 (вольт).Подивимося, що ж реально приходить з акселерометра на прикладі осі Z (останній стовпець). Коли датчик розташований горизонтально і дивиться вгору, приходять числа (2,03 +/-0,01). Значить, це повинно відповідати прискорення “+1g” по осі Z і кутку 0 градусів. Перегорнемо датчик. Приходять числа (1,69 +/-0,01), що має відповідати “-1g” та кутом 180 градусів.

Скетч для считывания показаний акселерометра

4. Знімемо значення з акселерометра при кутах 90 і 270 градусів і занесемо в таблицю. Таблиця показує кути повороту акселерометра (стовпець “A”) і відповідні їм значення Zout у вольтах (стовпець “B”).Для наочності наведено графік напруги на виході Zout в залежності від кута повороту. Блакитне поле – це область значень в спокійному стані (при прискоренні 1g). Рожеве поле на графіку – це запас для того, щоб ми могли вимірювати прискорення до +3g і до -3g.При повороті на 90 градусів на вісь Z доводиться нульове прискорення. Тобто значення 1,67 вольт – це умовний нуль Zo для осі Z. Тоді знайти прискорення можна так:g = Zout – Zo / sensitivity_z, тут Zout – виміряне значення в милливольтах, Zo – значення при нульовому прискоренні милливольтах, sensitivity_z – чутливість датчика по осі Z. Чутливість наведена в паспорті і дорівнює в середньому 300 мВ/g, але взагалі краще провести калібрування акселерометра і обчислити значення чутливості конкретно для вашого датчика за формулою:sensitivity_z = [Z(0 град.) – Z(90 град.)] * 1000. У цьому випадку чутливість акселерометра по осі Z = (2,03 – 1,68)*1000 = 350 мВ. Аналогічно чутливість треба буде порахувати для осей X і Y. У стовпці “С” таблиці наводиться прискорення, обчислене для п’яти кутів при чутливості, що дорівнює 350. Як видно, вони практично збігаються з тими, які показані на рисунку 1.

Соответствие  углов поворота акселерометра снимаемым показаниям

5. Згадавши базовий курс геометрії, отримаємо формулу для обчислення кутів повороту акселерометра:angle_X = arctg[ sqrt(Gz^2 + Gy^2) / Gx ]. Значення виходять в радіанах. Щоб перевести їх у градуси, поділимо на число “Пі” і помножимо на 180.У підсумку повний скетч, який обчислює прискорення і кути повороту акселерометра по всіх осях, наведений на малюнку. У коментарях дано пояснення до коду програми. При виведенні в порт “Serial.print()” символ “t” означає знак табуляції, щоб стовпці були рівні і значення розташовувалися один під одним. “+” означає конкатенацию (з’єднання) рядків. Причому оператор “String()” явно вказує компілятору, що чисельне значення потрібно перетворити на рядок. Оператор “round()” округлює кут з точністю до 1 градуса.

Скетч, вычисляющий ускорения и углы поворота акселерометра

6. Отже, ми з вами навчилися знімати і обробляти дані з аналогового акселерометра ADXL335 за допомогою Arduino. Тепер ми можемо використовувати акселерометр у своїх розробках.

Аналоговый акселерометр ADXL335 подключён к Arduino

НАПИСАТИ ВІДПОВІДЬ

Please enter your comment!
Please enter your name here