Акселерометр: инструкция, схемы и примеры использования

Используйте акселерометр для определения величины ускорения свободного падения по осям X, Y, Z. Датчик отвечает за поворот дисплея в современном телефоне или подсчёт шагов в фитнес-браслете.

Если вам необходимо определить положение вашего девайса в пространстве, обратите внимания на IMU-сенсор на 10 степеней свободы.

Видеообзор

Акселерометр в обзоре IMU-модуля.

Пример работы для Arduino и XOD

В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например, Uno.

На аппаратном уровне инерционный модуль общается с управляющей электроникой по шине I²C. Но не переживайте о битах и байтах: используйте библиотеку TroykaIMU и на выходе получите готовы данные.

Схема устройства

Подключите акселерометр к пинам питания и шины I²C — SDA и SCL платформы Arduino Uno. Для коммуникации используйте соединительные провода «мама-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.

С Troyka Slot Shield провода не понадобятся вовсе.

Вывод данных

В качестве примера выведем в Serial-порт величины ускорения свободного падения по осям X, Y и Z.

accelerometer-read-data.ino
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулями IMU
#include <TroykaIMU.h>
 
// создаём объект для работы с акселерометром
Accelerometer accel;
 
void setup()
{
  // открываем последовательный порт
  Serial.begin(115200);
  // выводим сообщение о начале инициализации
  Serial.println("Accelerometer init...");
  // инициализация акселерометра
  accel.begin();
  // устанавливаем чувствительность акселерометра
  // 2g — по умолчанию, 4g, 8g
  accel.setRange(RANGE_2G);
  // выводим сообщение об удачной инициализации
  Serial.println("Initialization completed");
}
 
void loop()
{
  // вывод направления и величины ускорения в м/с² по оси X
  Serial.print(accel.readAX());
  Serial.print("\t\t");
  // вывод направления и величины ускорения в м/с² по оси Y
  Serial.print(accel.readAY());
  Serial.print("\t\t");
  // вывод направления и величины ускорения в м/с² по оси Z
  Serial.print(accel.readAZ());
  Serial.print("\t\t");
  Serial.println("");
  delay(100);
  /*
  // вывод направления и величины ускорения в м/с² по X, Y и Z
  float x, y, z;
  accel.readAXYZ(&x, &y, &z);
  Serial.print(x);
  Serial.print("\t\t");
  Serial.print(y);
  Serial.print("\t\t");
  Serial.print(z);
  Serial.println("");
  delay(100);
  */
}

Пример для Espruino

В качестве мозга для считывания показаний с датчика рассмотрим платформы из серии Espruino, например, Iskra JS.

Схема устройства

Подключите акселерометр к пинам питания и шины I²C — SDA и SCL платформы Iskra JS. Для коммуникации используйте соединительные провода «мама-папа».

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая одевается сверху на Iskra JS методом бутерброда. Для коммуникации используйте трёхпроводной шлейф «мама-мама», который идёт в комплекте с датчиком.

С Troyka Slot Shield провода не понадобятся вовсе.

Вывод данных

В качестве примера выведем в консоль величины ускорения свободного падения по осям X, Y и Z.

accelerometer-read-data.js
// Настраиваем шину I2C
I2C1.setup({sda: SDA, scl: SCL, bitrate: 400000});
 
// Подключаем модуль
var accel = require('@amperka/accelerometer').connect(I2C1);
 
// Инициализируем модуль
accel.init();
 
setInterval(function(){
  // Отображаем силы, действующие на акселерометр
  print(accel.read('G'));
}, 500);

Пример для Raspberry Pi

В качестве мозга для считывания показаний с датчика рассмотрим одноплатные компьютеры Raspberry Pi, например, Raspberry Pi 4.

Схема устройства

Подключите акселерометр к пинам SDA и SCL шины I²C компьютера Raspberry Pi.

Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Cap, которая надевается сверху на малину методом бутерброда.

Программная настройка

Вывод данных

А написать пример кода для Raspberry Pi оставим вам домашним заданием.

Элементы платы

Акселерометр на LIS331DLH

Акселерометр выполнен на чипе LIS331DLH и представляет собой миниатюрный датчик ускорения, разработанный по технологии MEMS от компании STMicroelectronics. Адрес устройства по умолчанию равен 0x18, но может быть изменен на 0x19. Подробности читайте в разделе смена адреса модуля.

Регулятор напряжения

Линейный понижающий регулятор напряжения NCP698SQ33T1G обеспечивает питание MEMS-чипа и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 150 мА.

Преобразователь логических уровней

Преобразователь логических уровней PCA9306DCT необходим для сопряжения датчика с разными напряжениями логических уровней от 3,3 до 5 вольт. Другими словами сенсор совместим как с 3,3 вольтовыми платами, например, Raspberry Pi, так и с 5 вольтовыми — Arduino Uno.

Troyka-контакты

Датчик подключается к управляющей электронике через две группы Troyka-контактов:

  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — соедините с землёй микроконтроллера.
  • Сигнальный (D) — пин данных шины I²C. Подключите к пину SDA микроконтроллера.
  • Сигнальный (C) — пин тактирования шины I²C. Подключите к пину SCL микроконтроллера.

Смена адреса модуля

Иногда в проекте необходимо использовать несколько акселерометров. Для этого на модуле предусмотрены контактная площадка. Для смена адреса капните каплей припоя на отведённую контактную площадку.

Модуль Адрес без перемычки Адрес с перемычкой
Акселерометр 0x18 0x19

Принципиальная и монтажная схемы

Габаритный чертёж

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

  • MEMS-датчик: акселерометр LIS331DLH
  • Интерфейс: I²C
  • I²C-адрес:
    • без перемычки: 0x18
    • с перемычкой: 0x19
  • Максимальная чувствительность: 9,8×10-3 м/с²
  • Диапазон измерений: ±2 / ±4 / ±8 g
  • Напряжение питания: 3,3–5 В
  • Потребляемый ток: до 10 мА
  • Размеры: 25,4×25,4×10,1 мм

Ресурсы