Подключение акселерометра ADXL345 к Arduino
Датчик отлично подходит для использования в современных проектах в среде Arduino IDE, например, для измерения ускорения в портативных гаджетах, улучшения «полетности» в современных дронах и квадрокоптерах, разработки ∕ усовершенствования детекторов движения и т.д. Кроме того, модуль имеет ряд дополнительных функциональных преимуществ – это высокая степень разрешения, низкий режим энергопотребления, система интеллектуального контроля и т.п.
Остальные параметры изложим в более лаконичном описании:
- напряжение питания: 2-5V;
- потребление тока в рабочем режиме: 40 - 150 мкА;
- диапазон измерений: + / - 16 г.;
- разрешение: 10 - 13 13bit (4 мг / LSB);
- тип шины: SPI (3- или 4-х проводный) и I2C;
- диапазон температур: -40 до +85;
- габариты: 20х15 мм.
Распиновка выводов сенсора выглядит следующим образом:
Принципиальная схема подключения будет такой:
В ней мы традиционно использовали такие компоненты как: плата расширения Ардуино Uno (можно взять любую совместимую), модуль ADXL345, комплект соединительных проводов.
Для реализации основных проектов и в целом для проверки работоспособности платы советуем пользоваться специализированными библиотеками (они значительно упрощают процесс программирования). В этом конкретном случает нам понадобится библиотека Adafruit_ADXL345. Ее инсталляция производится путём копирования папки с архивом в директорию libraries среды Arduino IDE.
https://github.com/adafruit/Adafruit_ADXL345
Справка: есть множество других неплохих библиотек, например, Sensor-master, MPU6050, I2Cdev и др. (их выбор зависит от целей конструирования).
https://robot-kit.ru/wa-data/public/blog/download/Sensor-master.zip
Пример написания скетча:
#include
// Присваиваем уникальный идентификатор для датчика
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);
void displaySensorDetails(void)
{
sensor_t sensor;
accel.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Датчик: "); Serial.println(sensor.name);
Serial.print ("Версия драйвера: "); Serial.println(sensor.version);
Serial.print ("Уникальный ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Макс значение: "); Serial.print(sensor.max_value); Serial.println(" m/s^2");
Serial.print ("Мин значение: "); Serial.print(sensor.min_value); Serial.println(" m/s^2");
Serial.print ("Разрешение: "); Serial.print(sensor.resolution); Serial.println(" m/s^2");
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
void displayDataRate(void)
{
Serial.print ("Скорость передачи: ");
switch(accel.getDataRate())
{
case ADXL345_DATARATE_3200_HZ:
Serial.print ("3200 ");
break;
case ADXL345_DATARATE_1600_HZ:
Serial.print ("1600 ");
break;
case ADXL345_DATARATE_800_HZ:
Serial.print ("800 ");
break;
case ADXL345_DATARATE_400_HZ:
Serial.print ("400 ");
break;
case ADXL345_DATARATE_200_HZ:
Serial.print ("200 ");
break;
case ADXL345_DATARATE_100_HZ:
Serial.print ("100 ");
break;
case ADXL345_DATARATE_50_HZ:
Serial.print ("50 ");
break;
case ADXL345_DATARATE_25_HZ:
Serial.print ("25 ");
break;
case ADXL345_DATARATE_12_5_HZ:
Serial.print ("12.5 ");
break;
case ADXL345_DATARATE_6_25HZ:
Serial.print ("6.25 ");
break;
case ADXL345_DATARATE_3_13_HZ:
Serial.print ("3.13 ");
break;
case ADXL345_DATARATE_1_56_HZ:
Serial.print ("1.56 ");
break;
case ADXL345_DATARATE_0_78_HZ:
Serial.print ("0.78 ");
break;
case ADXL345_DATARATE_0_39_HZ:
Serial.print ("0.39 ");
break;
case ADXL345_DATARATE_0_20_HZ:
Serial.print ("0.20 ");
break;
case ADXL345_DATARATE_0_10_HZ:
Serial.print ("0.10 ");
break;
default:
Serial.print ("???? ");
break;
}
Serial.println(" Hz");
}
void displayRange(void)
{
Serial.print ("Диапазон: +/- ");
switch(accel.getRange())
{
case ADXL345_RANGE_16_G:
Serial.print ("16 ");
break;
case ADXL345_RANGE_8_G:
Serial.print ("8 ");
break;
case ADXL345_RANGE_4_G:
Serial.print ("4 ");
break;
case ADXL345_RANGE_2_G:
Serial.print ("2 ");
break;
default:
Serial.print ("?? ");
break;
}
Serial.println(" g");
}
void setup(void)
{
Serial.begin(9600);
Serial.println("Проверка акселерометра"); Serial.println("");
// Инициализация датчика
if(!accel.begin())
{
// Если не обнаружен, выводим сообщение о проблеме
Serial.println("Датчик не обнаружен ... проверьте соединение!");
while(1);
}
// Задайте диапазон, в соответствии с вашим проектом
accel.setRange(ADXL345_RANGE_16_G);
// displaySetRange(ADXL345_RANGE_8_G);
// displaySetRange(ADXL345_RANGE_4_G);
// displaySetRange(ADXL345_RANGE_2_G);
// Вывод основной информации о датчике
displaySensorDetails();
// Отображение дополнительных параметров
displayDataRate();
displayRange();
Serial.println("");
}
void loop(void)
{
// Получение нового события датчика
sensors_event_t event;
accel.getEvent(&event);
// Вывод результатов (ускорение измеряется по формуле m/s^2)
Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" ");Serial.println("m/s^2 ");
delay(500);
}
Вывод результатов измерения отдается в виде 16-разрядных чисел в дополнительном коде.Готово! Вы успешно «прошили» прибор. Можно экспериментировать!
Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...
В этой статье мы рассмотрим подключение ADS1115 к Ардуино. Речь идет о 16-битном аналого-цифровом преобразователе, оснащенном 4 входами непосредственно для...
Модуль энкодер KY-040 является электромеханическим устройством, а точнее - датчиком угла поворота и вращения оси различных девайсов. Непосредственно сам прибор...
В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...
В новой информационной статье хотим поговорить с вами о том, как подключить GY-521 (MPU 6050), какие задачи имеет данный модуль, где применяется и т.д. Речь...