Як підключити акселерометр до Arduino

В цей раз ми займемося підключенням аналогового тривісного акселерометра 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

 

Related posts

 
 

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

http://poradumo.com.ua/154506-iak-pidkluchiti-akselerometr-do-arduino/