Подключение акселерометра ADXL345 к Arduino

27-02-2020, 15:23 0 комментариев
Сегодня поговорим о таком цифровом устройстве как акселерометр, его технических характеристиках и схеме подключения к Ардуино. Для чего обычно необходимы подобные модули? - Они позволяют достаточно точно и корректно измерять статическое и динамическое ускорение. Модель ADXL345 – трех-осевой, небольшой по размеру (размер корпуса - 3×5×1 мм.), но достаточно мощный и простой в сборке акселерометр высокого разрешения.

Датчик отлично подходит для использования в современных проектах в среде Arduino IDE, например, для измерения ускорения в портативных гаджетах, улучшения «полетности» в современных дронах и квадрокоптерах, разработки ∕ усовершенствования детекторов движения и т.д. Кроме того, модуль имеет ряд дополнительных функциональных преимуществ – это высокая степень разрешения, низкий режим энергопотребления, система интеллектуального контроля и т.п.

Остальные параметры изложим в более лаконичном описании:
  • напряжение питания: 2-5V;
  • потребление тока в рабочем режиме: 40 - 150 мкА;
  • диапазон измерений: + / - 16 г.;
  • разрешение: 10 - 13 13bit (4 мг / LSB);
  • тип шины: SPI (3- или 4-х проводный) и I2C;
  • диапазон температур: -40 до +85;
  • габариты: 20х15 мм.
Теперь рассмотрим главный аспект статьи - подключение акселерометра ADXL345 к Arduino.
Распиновка выводов сенсора выглядит следующим образом:

Принципиальная схема подключения будет такой:

В ней мы традиционно использовали такие компоненты как: плата расширения Ардуино 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-разрядных чисел в дополнительном коде.
Готово! Вы успешно «прошили» прибор. Можно экспериментировать!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

В этой статье мы рассмотрим подключение ADS1115 к Ардуино. Речь идет о 16-битном аналого-цифровом преобразователе, оснащенном 4 входами непосредственно для...

Модуль энкодер KY-040 является электромеханическим устройством, а точнее - датчиком угла поворота и вращения оси различных девайсов. Непосредственно сам прибор...

В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...

В новой информационной статье хотим поговорить с вами о том, как подключить GY-521 (MPU 6050), какие задачи имеет данный модуль, где применяется и т.д. Речь...

Оставить комментарий