Акселерометр — это прибор, позволяющий измерять ускорение тела под действием внешних сил. Подробно об устройстве этого датчика мы уже рассказывали на одном из уроков: Акселерометр: что это такое и как им определять наклон тела.
На этом уроке мы подключим к контроллеру и напишем программу для MEMS акселерометра SC7A20, который является полным аналогом LIS2DH12. Сам датчик выполнен в корпусе LGA 12 и имеет крошечные размеры 2×2, поэтому для эксперимента мы используем модуль RobotClass SC7A20.
Модуль снабжён разъёмами QIIC, с помощью которых к нему удобно подключать другие модули и контроллеры с поддержкой QIIC.
Характеристики модуля SC7A20
- напряжение питания: 3,3 В;
- рабочий ток: 20 мкА (при частоте 100 Гц);
- акселерометр, диапазон: ± 2, 4, 8, 16g;
- разрядность АЦП: 12;
- интерфейс: SPI либо I2C (QIIC).
Список необходимых компонентов
Для выполнения простого примера с датчиком RobotClass SC7A20, кроме самого модуля датчика, потребуется отладочная плата Графит-32S или аналогичная на основе ESP32, переходник и кабель для шины QIIC, а также немного проводов розетка-розетка. Если вам не хватает что-то из этого, можно добавить эти компоненты в корзину прямо здесь и затем оформить заказ в нашем интернет-магазине.
Подключение
Датчик SC7A20 работает с напряжением 3.3 Вольта, а значит мы должны подключать его к контроллеру с такими же уровнями, либо использовать преобразователь уровней. В этом уроке мы используем отладочную плату Графит-32S (подойдет также любой Node-MCU).
Подключаем датчик к плате Графит-32S по стандартной схеме для I2C интерфейса:
Графит-32S | Gnd | 3.3 | SDA/23 | SCL/22 |
SC7A20 | G | VCC | SDA | SCL |
Адрес I2C
По умолчанию, датчик имеет адрес 0x19. Чтобы сменить его на альтернативный — 0x18, необходимо соединить перемычку ADR на лицевой стороне платы.
Подтяжка I2C
Для правильной работы шины I2C необходимо, чтобы линии SDA и SCL были подтянуты к питанию с помощью резистора соответствующего номинала. Эту подтяжку нужно сделать всего один раз на всей линии I2C.
На лицевой стороне платы имеется тройная перемычка I2C-PU. Её необходимо полностью соединить для обеспечения подтяжки шины I2C.
Программа
Поскольку датчик SC7A20 общается по I2C по такому же протоколу, что и оригинальный LIS2DH12, то для работы будем использовать библиотеку SparkFun_LIS2DH12_Arduino_Library. Единственное отличие от старшего брата — это идентификатор, который у SC7A20 равен 0x11. Чтобы библиотека не вредничала, в самом начале программы переопределим константу LIS2DH12_ID.
Программа будет слушать шину I2C и выводить в COM-порт свежие данные по всем трём осям.
#include <Wire.h>
#include "SparkFun_LIS2DH12.h"
// принудительно устанавливаем идентификатор датчика SC7A20,
// так как он отличается от идентификатора LIS2DH12
#define LIS2DH12_ID 0x11U
SPARKFUN_LIS2DH12 accel;
void setup(){
Serial.begin(115200);
Serial.println("SparkFun Accel Example");
Wire.begin();
// если датчик не обнаружен, вводим программу в бесконечный цикл
if (accel.begin() == false){
Serial.println("Accelerometer not detected");
while (1);
}
}
void loop(){
// если от датчика получены свежие данные, выводим их
if (accel.available()){
int rawX = accel.getRawX();
int rawY = accel.getRawY();
int rawZ = accel.getRawZ();
Serial.print("Acc raw: ");
Serial.print(rawX);
Serial.print(" x, ");
Serial.print(rawY);
Serial.print(" y, ");
Serial.print(rawZ);
Serial.print(" z");
Serial.println();
}
}
Загружаем программу на контроллер и открываем монитор COM-порта. Не забываем указать скорость обмена — 115200 бод.
Полезные ссылки
Библиотека для Arduino IDE:
https://github.com/sparkfun/SparkFun_LIS2DH12_Arduino_Library
Также библиотеку можно установить через менеджер библиотек в Arduino IDE. В поисковой строке менеджера необходимо ввести «SparkFun LIS2DH12«.
Спецификация производителя: