Акселерометр для ардуино

Accelerometer to Arduino — Interfacing Tutorial

акселерометр для ардуино

In this article, we are going to interface the GY-521 accelerometer with Arduino. The GY-521 has an InvenSense MPU6050 chip which contains a 3-axis accelerometer and a 3-axis gyro meter.

This makes it a 6 DOF IMU (6 degrees of freedom inertial measurement unit). The chip also includes a 16-bit analog to digital converter on each channel and a DMP (Digital Motion Processor) unit.

The DMP unit is responsible for combining the raw data and performing some calculations to remove the errors in each sensor.

Pin Out Diagram – GY-521

The GY-521 breakout board has a total of 8 pins which are as follows:

VCC: 5V or 3.3V pin

GND: Ground pin

SCL (Serial clock line): Responsible for the primary I2C communication

SDA (Serial data line): Responsible for the primary I2C communication

XCA (Auxiliary clock line): Responsible for the Auxiliary I2C communication

XDL (Auxiliary data line): Responsible for the Auxiliary I2C communication

ADO:  Responsible for slave or master interface

INT: Interrupt Pin

The breakout board has a voltage regulator for converting the voltage level from 5V to 3.3V and also has an InvenSense MPU6050 chip which holds the accelerometer and gyro meter sensors.

Specifications

The specifications of the GY-521 MPU6050 are as follows

  • The accelerometer sensor range is ±2, ±4, ±8, ±16g
  • The gyro meter sensor range is ±250, ±500, ±1000, ±2000 ͦ/s
  • The voltage range is from 3.3V to 5V. We can give 5V input because the sensor module has a voltage regulator for converting the 5V input into 3.3V

Working

The accelerometer sensors measure the acceleration by measuring the change in capacitance. Its structure has a mass attached to a spring which moves along one direction and has fixed outer plates. So, when acceleration is applied in any direction, the capacitance between the plates and the mass will change. This change in capacitance is measured and corresponds to the acceleration value.

The Arduino reads these acceleration values from the sensor and then calculate the pitch and roll values using the functions provided by the MPU6050 library. These pitch and roll values are shown on the serial monitor output screenshot given below. Whenever we move the sensor, the pitch and roll values on the serial monitor will change according to the movement.

Circuit Diagram

Connections of the GY-521 MPU6050 with the Arduino Uno are as follows

  • VCC of GY-521 to 5V or 3.3V of Arduino Uno
  • GND of GY-521 to GND of Arduino Uno
  • SCL of GY-521 to A5 of Arduino Uno
  • SDA of GY-521 to A4 of Arduino Uno

The SDA and SCL pins of the GY-521 are used for I2C communication, so these pins must be connected to the SDA and SCL pins of Arduino. The SCL and SDA pins on Arduino Uno are the A5 and A4 pins (look at analog pins) respectively. Therefore, we connect the SDA and SCL pins of GY-521 to A5 and A4 pins of Arduino Uno.

Источник: https://www.circuitstoday.com/interfacing-accelerometer-to-arduino

MihanEntalpo blog Php, javascript, jquery, yii, webasyst, nginx, Python и все-все-все

акселерометр для ардуино

Купив по дешёвке несколько датчиков для Arduino, я стал придумывать куда их приспособить, и решил создать бортовой компьютер для водяной ракеты, который бы измерял параметры полёта, такие как: ускорение, скорость, высота подъёма, и мог бы в верхней точке траектории дать команду на выпуск парашюта. Также, желательно было иметь возможность после посадки ракеты прочитать «чёрный ящик» и узнать, с каким ускорением она взлетала, как быстро набрала максимальную скорость, и какой была высота взлёта. Если же парашют не раскроется — чёрный ящик помог бы узнать, с какой скоростью ракета врезается в землю

Источник: https://MihanEntalpo.me/2018/02/arduino-%D0%BF%D0%BE%D0%BB%D1%91%D1%82%D0%BD%D1%8B%D0%B9-%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80/

Аналоговые акселерометры ADXL337, ADXL377 и Arduino

акселерометр для ардуино

ADXL337 и ADXL377 — это компактные, тонкие, маломощные 3-х осевые акселерометры, которые на выходе дают аналоговый сигнал в вольтах.

Основная разница между этими акселерометрами — диапазон измерений. ADXL337 измеряет ускорения в диапазоне ±3 g, а ADXL377 работает в диапазоне ±200 g и может использоваться для измерения более резких изменений движений контролируемого объекта, может использоваться для оценки вибраций.

Эта статья поможет вам разобраться с особенностями использования данных акселерометров. Будут раскрыты вопросы подключения акселерометров к Arduino. В результате вы легко и непринужденно сможете их интегрировать в любой ваш проект.

На фото ниже приведены платы с установленными акселерометрами:

Акселерометры ADXL337 и ADXL377 можно (и рекомендуется!) покупать уже интегрированными в отдельный модуль. На модуле предусмотрена необходимая минимальная обвязка и готовые контакты для подключения к Arduino или другому микроконтроллеру.

Как видите, на обоих модулях одинаковое количество контактов. В таблице ниже приведена краткая информация о каждом из контактов на модулях:

Питание акселерометров ADXL337 и ADXL377

Здесь надо быть предельно осторожным. ADXL337 и ADXL377 оба должны запитываться максимальным напряжением 3.6 В! Это напряжение подается к контакту питания и к контакту Self Test. Можно использовать Arduino 5 В или 3.

3 В для считывания значений с отдельных осей акселерометра, а запитывать сам датчик ускорения от 3.3 В. Но не забывайте, что значения, которые вы получите с сенсора после аналогово-цифрового преобразования будут разными при 5 В и при 3.

3 В! Поэтому надо уточнять диапазоны в зависимости от сигнала преобразования.

Одним из достоинств акселерометров ADXL337 и ADXL377 является то, что они потребляют мало тока для работы. Обычно это около 300 мА.

Необходимые пояснения по использованию ADXL337 и ADXL377

Если вы запитываете ADXL337 или ADXL377 от 3.3 В, значение 1.65 В на контакте оси X будет соответствовать ускорению 0 g. Если на пине X у вас показания напряжения составляют 3.3 В, то на ADXL337 это значит, что сила составляет 3g.

В то время как при показаниях 3.3 В на ADXL377 означают, что нагрузка составляет 200g.

По сути оба чипа используются и подключаются одинаково, но показания будут разными, так как они зависят от максимально допустимых значений, которые считывает акселерометр.

На модуле ADXL377 предусмотрены 4 отверстия для крепежа, так как этот датчик ускорения рассчитан на более экстремальные условия нагрузок.

На обоих модулях установлены конденсаторы на 0.01 мкФ возле выходов на оси X, Y, и Z. То есть, максимальные частоты, в пределах которых вы можете оценивать ускорение составляет 500 Гц.

Распайка

Перед тем как устанавливать акселерометр на макетную плату и подключать к Arduino, вам надо припаять контакты. Это могут быть отдельные рельсы или просто провода. Что именно распаивать зависит исключительно от того, где в дальнейшем вы планируете использовать датчик ускорения.

Если вы планируете использовать макетную плату или монтажную плату с расстоянием между контактами 0.1″, рекомендуем припаять прямую рельсу контактов с выходом типа папа. Если в планах у вас подключать акселерометр сразу к контроллеру, без макеток и монтажных плат, используйте провода.

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

Источник: http://arduino-diy.com/arduino-akselerometry-ADXL337-ADXL377

Подключаем гироскоп-акселерометр (MPU-6050) к плате Arduino

Технический рынок наполнен тысячами модулями датчиков, которые стоят недорого и используются в проектном конструировании. Перед этим модули связывают с программируемым микроконтроллером. Акселерометр – инструмент, использующийся для расчета разности между настоящим и гравитационным ускорением предмета. Датчик состоит из платы со встроенной микросхемой.

Прибор применяют везде. Статья ниже – вспомогательная инструкция по подключению акселерометра к Ардуино.

Для проекта понадобятся несколько компонентов:

Микроконтроллер Arduino UNO R3

МК создан с использованием материалов контроллера ATmega328:

  1. цифровые входы и выходы в количестве 14 штук, причем половина приходится на ШИМ-выходы;
  2. аналогичные входы, количество – 6 штук;
  3. резонатор на основе кварца, мощностью 16 МГц;
  4. встроен usb-вход;
  5. контакт для подключения питания;
  6. на МК располагается кнопка, с помощью которой возможен сброс данных и кода;
  7. контакт для программирования данных, находящихся внутри схемы, именуемый ICSP.

Старт работы начинается с подачи электрического питания в плату. Пользователь подключает к плате со схемой блок питания или зарядное устройство. Также процедура осуществляется с помощью usb-кабеля, который подключен к компьютеру и микроконтроллеру. Для разработки программы понадобится бесплатная среда программирования – Arduino IDE.

Внимание! Пользователь разрабатывает приложения с использованием Ардуино, только если платы совместимы с архитектурой микроконтроллера. В противном случае программа не заработает.

Пользователь создает в бесплатной среде код, затем его компилирует и загружает проработанную программу в пространство памяти в Ардуино. Язык, на котором программируется код, Wiring максимально приближен к популярному среди программистов языку – C++. Кроме того МК поддерживает версии для осей Виндовс, Мак ОС и Линукс.

В основе компонента лежит микросхема MPU-6050. В комплект входят 2 предмета – гироскоп и акселерометр. Данные устройства перед конструированием обрабатываются и затем переносятся прямиком в микроконтроллер через интерфейс

Модуль датчика помогает определять место и перемещение инструмента в пространстве. Измеряются дифферент и углы крена посредством вектора силы тяжести и скорости в процессе вращения. Также включена функция измерения температурного режима. Перемещение определяется линейным ускорением и угловой скоростью. Полная картина рисуется по 3 осям.

ЭТО ИНТЕРЕСНО:  Определение местоположения по ip

Компонент нередко сравнивают с человеческим вестибулярным аппаратом, который помогает людям чувствовать силу тяготения и удерживать равновесие.

Макетная плата, предназначенная для прототипирования

Отладка – неотъемлемая часть построения электронных схем. Макетная плата незаменима для конструкции электронной аппаратуры. Ранее в изобретательстве использовали традиционные макетные платы, но сейчас широко распространены макетные платы, которые удобны тем, что не требуют дополнительных спаек.

Таким образом, процесс сборки и отладки электронной схемы в разы ускоряется: не приходится часто использовать паяльник, чтобы поменять сломанные радиодетали.

Материал для изготовления беспаечных макетных плат – пластик. Кроме того, все контакты надежно скреплены к плате, поэтому частые переключения не испортят элемент.

Соединительные провода папа-папа

Обычные провода папа-папа нам подойдут, еще их называют провода-перемычки. Такие стоят недорого и продаются везде, на любом рынке или в любом онлайн-магазине для радиолюбителей.

Шаг 2. Схема подключения акселерометра к микроконтроллеру Arduino

Порядок и схема подключения довольно просты:

GY-521 (MPU-6050)Arduino Uno
VCC 3.3 V
GND GND
SCL A5
SDA A4
  1. Присоединяем модуль датчика к микроконтроллеру.
  2. На МК Ардуино загружаем проработанный код, представленный в разделе ниже.
  3. Открываем среду разработки Arduino IDE и мониторим последовательный порт.
  4. Сверяем выводимые данные акселерометра и гироскопа.
  5. Во время поворота датчика сведения не производят изменений.

Гироскоп – инструмент, который позволяет измерить реакцию тела на перемещение углов и вообще ориентации. Акселерометр же служит измерителем проекции ускорения, которое только кажется.

Шаг 3. Программируем Arduino для обработки информации, полученной с акселерометра

Алгоритм написания программы в последовательности:

// Подключаем необходимые для работы библиотек#include «MPU6050.h»;#include «I2Cdev.h»;#include «Wire.h»; // Создаем объект, символизирующий модуль датчикаMPU6050 axeler; // Создаем объект библиотеки WireWire b; // Создаем объект, который символизирует контакт I2CI2Cdev h; // Вводим цифровые данные, отвечающие за точки в 3-х осяхint16_t axx, axy, axz;int16_t gix, giy, giz; // Объявляем метод, который будет запускать программуvoid setup() {// Начинаем работуWire.begin();h.begin(38400); // Производим инициализацию, отчет выводится после компиляцииh.println(«Initializing I2C devices»);axeler.initialize();delay(100);} // Считываем значения гироскопа и акселерометра с помощью адресов, которые принадлежат описанным выше переменнымvoid loop(){axeler.getMotion6(&axx, &axy, &axz, &gix, &giy, &giz); // Выводим получившиеся значения на экранh.print(«a/g:\t»);h.print(axx); h.print(«\t»);h.print(axy);hl.print(«\t»);hl.print(axz); h.print(«\t»);h.print(gix); h.print(«\t»);h.print(giy); h.print(«\t»);h.println(giz);}

Вуаля! Акселерометр Аrduino запрограммирован.

В принципе, для разнообразия можно написать еще один скетч (ниже), но тогда нам нужна будет еще одна библиотека — Kalman (Gy-521, mpu6050), которая преобразует показания координат X и Y.

#include #include «Kalman.h»Kalman kalmanX;Kalman kalmanY;uint8_t IMUAddress = 0x68;/* IMU Data */int16_t accX;int16_t accY;int16_t accZ;int16_t tempRaw;int16_t gyroX;int16_t gyroY;int16_t gyroZ;double accXangle; // Angle calculate using the accelerometerdouble accYangle;double temp;double gyroXangle = 180; // Angle calculate using the gyrodouble gyroYangle = 180;double compAngleX = 180; // Calculate the angle using a Kalman filterdouble compAngleY = 180;double kalAngleX; // Calculate the angle using a Kalman filterdouble kalAngleY;uint32_t timer;void setup() { Wire.begin(); Serial.begin(9600); i2cWrite(0x6B,0x00); // Disable sleep mode kalmanX.setAngle(180); // Set starting angle kalmanY.setAngle(180); timer = micros();}void loop() { /* Update all the values */ uint8_t* data = i2cRead(0x3B,14); accX = ((data[0]

Источник: https://ArduinoPlus.ru/podkluchaem-akselerometr-k-arduino/

Аналоговый акселерометр ADXL335

ADXL335 — это аналоговый трехосный акселерометр, то есть датчик, с помощью которого можно получить угол относительного отклонения.  Фактически, это три разных акселерометра в одном корпусе, каждый из которых отвечает за свою собственную ось X, Y либо же Z.

Вообще, Акселерометр — приспособление для измерения ускорения.  Однако, из общего курса школьно физики мы знаем, что ускорение бывает двух видов: динамическое и статическое.

 С динамическим ускорением должно быть все понятно — толкнули датчик, придали ему ускорение, он должен это зафиксировать. Статическое ускорение — это воздействие силы тяжести на наш датчик.

Дело в том, что к датчику даже в состоянии полного покоя приложено статическое ускорение равное g (ускорение свободного падения).

Датчик ADXL335 умеет улавливать оба этих ускорения. А зная проекции его вектора можно спокойно вычислить угол на который отклонился наш датчик относительно некого нулевого значения.

На картинке показано, какие будут показания при разных положениях датчика. Относительное положение датчика необходимо отслеживать по маленькому беленькому кружечку-метке.

Для начала разберемся с правой частью картинки, на которой меняет свое значение Zout (ось Z). Согласно этой картинке, если положить наш датчик контактами вниз, то значение по оси Z будет равно единице (точнее одному g). Данное значение, как было сказано —  проекция вектора статического ускорения на ось нашего датчика.

Так как в данном случае вектор совпадает с осью Z, а ускорения свободного падения равняется g, мы и имеет значение Zout = 1g.Если же мы перевернем датчик контактами вверх, то значение Zout изменится на противоположное. Стоит отметить, что все остальные ускорения равны нулю, связано это с уже упомянутым совпадением вектора статического ускорения с осью Z, а так же состоянием покоя всего датчика.

Аналогично можно рассмотреть все остальные пары. Единственное отличие в том, что датчик будет находится на ребре или боку.

Однако, вектор далеко не всегда будет совпадать с какой-либо из осей. Чаще всего этот вектор будет каким-либо распределен по всем трем осям — т.к. пространство трехмерное.

О датчике adxl335

  • Максимально допустимым значение напряжения для ADXL335 является 3,6 вольта
  • Датчик справляется с ускорениями до 3g. Это можно использовать например, чтобы определить находится ли вся конструкция в движении, и даже в каком направлении она двигается. Можно измерять ускорение при начале движения и тем самым делать его более плавным, без резких рывков.

Схема подключения акселерометра

  • Внимание! Для питания выход 3v3 Arduino, а не 5v
  • Выходы X, Y, Z датчика соединить со входами ANALOG IN 0, 1, 2

Пример программного кода — программирование акселерометра

#define ADC_ref 5.0 #define analog_resolution 1024.0 unsigned int value_x; unsigned int value_y; unsigned int value_z; void setup() { Serial.begin(9600); } void loop() { value_x = analogRead(0); value_y = analogRead(1); value_z = analogRead(2); Serial.print(value_x/analog_resolution*ADC_ref, 5); Serial.print(» «); Serial.

print(value_y/analog_resolution*ADC_ref, 5); Serial.print(» «); Serial.println(value_z/analog_resolution*ADC_ref, 5); delay(500); }

#define analog_resolution 1024.0Serial.print(value_x/analog_resolution*ADC_ref, 5); Serial.print(value_y/analog_resolution*ADC_ref, 5); Serial.println(value_z/analog_resolution*ADC_ref, 5);

Обозначаем пару констант. ADC_ref — это максимальное значение в вольтах которое может снять аналоговый вход. analog_resolution — это разрешающая способность нашего аналогового входа. На arduino она равна 210 или 1024.

После объявления констант идет пара переменных в которых мы будем хранить показания снятые с нашего датчика и инициализация серийного порта, чтобы можно было получить какие-то данные на компьютере.

В функции loop мы в начале получаем данные с трех наших аналоговых пинов, к которым и подключен наш датчик, а после этого пересчитываем полученное число в вольты и выводим их на серийный порт. Зальем эту прошивку в нашу Arduino UNO, откроем серийный монитор (ctrl+shift+m) и соберем кое какие данные.

На включенном серийном мониторе можно увидеть:

Где первый столбец — показания по оси X, второй — Y, третий — Z

Источник: https://elekt.tech/arduino/sensors/analogovyj-akselerometr-adxl335.html

Как подключить аналоговый акселерометр ADXL335 к Arduino

Акселерометры используют для определения вектора ускорения. Акселерометр ADXL335 имеет три оси, и благодаря этому он может определять вектор ускорения в трёхмерном пространстве.

Ввиду того, что сила земного притяжения – это тоже вектор, мы можем определять ориентацию акселерометра в трёхмерном пространстве относительно центра Земли.

На иллюстрации приведены рисунки из паспорта на акселерометр ADXL335. Здесь изображены координатные оси чувствительности акселерометра по отношению к геометрическому размещению корпуса устройства в пространстве, а также значения ускорений, принимаемые с 3-х каналов акселерометра в зависимости от его ориентации в пространстве. Данные приводятся для находящегося в состоянии покоя датчика, на который действует только сила земного тяготения.

Принцип снятия измерений с аналогового акселерометра ADXL335

Рассмотрим подробнее, что же показывает нам акселерометр. Пусть датчик лежит горизонтально, например, на столе. Тогда проекция вектора ускорения будет равна «1g» по оси Z, или Zout = 1g. По остальным двум осям будут нули: Xout = 0 и Yout = 0.

При повороте датчика «на спину», он будет направлен в противоположную сторону относительно вектора силы тяжести, т.е. Zout = −1g. Аналогично измерения снимаются по всем трём осям.

Понятно, что акселерометр может быть расположен как угодно в пространстве, поэтому со всех трёх каналов мы будем снимать отличные от нуля показания.

Если датчик сильно тряхнуть вдоль вертикальной оси Z, то значение Zout будет больше, чем «1g». Максимальное измеряемое ускорение составляет «±3g» по каждой из осей («плюс» и «минус» тут обозначают направление ускорения).

Думаю, с принципом работы акселерометра разобрались. Теперь рассмотрим схему подключения.

2Схема подключения акселерометра к Arduino

Чип аналогового акселерометра ADXL335 довольно мелкий и помещён в BGA корпус, и в домашних условиях его сложно смонтировать на плату. Поэтому я буду использовать готовый модуль GY-61 с акселерометром ADXL335.

ЭТО ИНТЕРЕСНО:  Киа сид круиз контроль

Для питания акселерометра необходимо подать на вывод VCC модуля напряжение +3,3 В. Измерительные каналы датчика подключаются к аналоговым выводам Arduino, например, «A0», «A1» и «A2». Это вся схема :)

Схема подключения аналогового трёхосевого акселерометра ADXL335 к Arduino

3Калибровкааналогового акселерометра ADXL335

Arduino имеет 10-разрядный АЦП, а максимальное допустимое напряжение на выводе – 5 вольт. Измеренные напряжения кодируются битами, которые могут принимать только 2 значения – 0 или 1. Это значит, что весь диапазон измерений будет поделён на (1+1)10, т.е. на 1024 равных отрезка. Для того чтобы перевести снимаемые показания в вольты, нужно каждое измеренное на аналоговом входе значение поделить на 1024 (отрезка), а затем умножить на 5 (вольт).

Загрузим вот такой скетч в память Arduino. Будем считывать с аналоговых входов показания по трём каналам, преобразовывать их в напряжение и выводить в последовательный порт.

//определяем аналоговые пины: const int xPin = A0; const int yPin = A1; const int zPin = A2; void setup() { //инициализируем послед. порт: Serial.begin(9600); }void loop() { // считываем показания: int xRead = analogRead(xPin); int yRead = analogRead(yPin); int zRead = analogRead(zPin); //Выводим показания в порт в Вольтах: Serial.print(«x: «); Serial.print(xRead * 5 / 1024.0); Serial.print(» | y: «); Serial.print(yRead * 5 / 1024.0); Serial.print(» | z: «); Serial.println(zRead * 5 / 1024.0); delay(100); //задержка 100 мс }

Посмотрим, что же реально приходит с акселерометра на примере оси Z (см. последний столбец на иллюстрации). Когда датчик расположен горизонтально и смотрит вверх, приходят числа (2,03±0,01). Это должно соответствовать ускорению «1g» по оси Z и углу 0° согласно паспорту на ADXL335. Перевернём датчик. Приходят числа (1,69±0,01), что должно соответствовать «−1g» и углу 180°.

Калибровка аналогового акселерометра ADXL335

4Определение ускоренийпо трём осям акселерометра

Снимем значения с акселерометра при углах 90° и 270° и занесём в таблицу. Таблица показывает углы поворота акселерометра (столбец «A») и соответствующие им значения Zout в вольтах (столбец «B»).

Определение ускорений по трём осям акселерометра ADXL335

Для наглядности приведён график напряжений на выходе Zout в зависимости от угла поворота. Голубое поле – это область значений в спокойном состоянии (при ускорении 1g). Розовое поле на графике – это запас для того чтобы мы могли измерять ускорение до +3g и до −3g.

При угле поворота 90° на ось Z приходится нулевое ускорение. Т.е. значение 1,67 вольт – это условный ноль Z0. Тогда определим ускорение так: g = Zout – Z0 / Sz, здесь Zout – измеренное значение в милливольтах, Z0 – значение при нулевом ускорении в милливольтах, Sz – чувствительность датчика по оси Z, измеренная в мВ/g.

Чувствительность акселерометра приведена в паспорте и равна в среднем 300 мВ/g или 0,3 В/g, но вообще лучше провести калибровку акселерометра и вычислить значение чувствительности конкретно для вашего датчика по формуле: Sz = Z(0°) – Z(90°) В данном случае чувствительность акселерометра по оси Z = 2,03 – 1,68 = 0,35 В/g. Аналогично чувствительность нужно будет посчитать для осей X и Y.

В столбце «С» таблицы приводится расчётное ускорение при чувствительности, равной 350 мВ/g. Как видно, расчёты практически совпадают с номинальными величинами, которые даются на первом рисунке из паспорта на датчик ADXL335, т.е. наш датчик довольно точно показывает свою ориентацию в пространстве (я показал это просто для самопроверки, дальше это не пригодится).

5Определение углов поворота акселерометра

Вспомнив базовый курс школьной геометрии, выведем формулу для вычисления углов поворота акселерометра: angle_X = arctg[ √(Gz2 + Gy2) / Gx ]. Значения получаются в радианах. Чтобы перевести радианы в градусы, поделим результат на число π и умножим на 180°.

В итоге полный скетч, вычисляющий ускорения и углы поворота акселерометра по всем осям, приведён на врезке. В комментариях даны пояснения к коду программы.

const int xPin = A0; //определяем аналоговые пины, const int yPin = A1; //к которым подключим const int zPin = A2; //три канала акселерометра const float Vmax = 5.0; //макс. допустимое напряжение на аналоговом входе const float x0 = 1.71; //значения по осям при нулевых «g»; const float y0 = 1.69; //эти значения вы должны определить const float z0 = 1.68; //самостоятельно (см.шаг 4) const float sens_x = 0.35; //чувствительность по осям в В/g; const float sens_y = 0.35; //эти значения вы должны определить const float sens_z = 0.35; //самостоятельно (см.шаг 4) void setup() { Serial.begin(9600); //инициализация последовательного порта }void loop() { unsigned int value_x = analogRead(xPin); //считываем значения с акселерометра unsigned int value_y = analogRead(yPin); unsigned int value_z = analogRead(zPin); float Gx=(value_x*Vmax/1024.0 − x0)/sens_x; //определяем ускорения по осям float Gy=(value_y*Vmax/1024.0 − y0)/sens_y; float Gz=(value_z*Vmax/1024.0 − z0)/sens_z; Serial.print(«Gx:\t» + String(Gx)); //выводим ускорения в послед. порт Serial.print(«\t| Gy:\t» + String(Gy)); Serial.println(«\t| Gz:\t» + String(Gz)); float angle_x = atan(sqrt(Gz*Gz + Gy*Gy) / Gx)*180 / PI; //ищем углы поворота float angle_y = atan(sqrt(Gx*Gx + Gz*Gz) / Gy)*180 / PI; float angle_z = atan(sqrt(Gx*Gx + Gy*Gy) / Gz)*180 / PI; Serial.print(«x:\t» + String(round(angle_x))); //выводим углы поворота акселерометра Serial.print(«o\t| y:\t» + String(round(angle_y))); Serial.println(«o\t| z:\t» + String(round(angle_z)) + «o»); Serial.println(); delay(500); }

При выводе в порт Serial.print() символ \t обозначает знак табуляции, чтобы столбцы были ровные, и значения располагались друг под другом. Символ + означает конкатенацию (объединение) нескольких строк. Оператор String() явно указывает компилятору, что численное значение нужно преобразовать в строку. Оператор round() округляет угол с точностью до 1°.

Подключение аналогового акселерометра ADXL335 к Arduino с помощью макетной платы

Итак, мы с вами научились снимать и обрабатывать данные с аналогового акселерометра ADXL335 при помощи Arduino.

Полезный совет

Определите «нулевые» значения напряжений и чувствительности по осям X, Y и Z для вашего датчика с помощью скетча, описанного в разделе «Калибровка аналогового акселерометра ADXL335». Иначе углы и ускорения будут вычисляться со значительными ошибками.

Источник: https://soltau.ru/index.php/arduino/item/350-kak-podklyuchit-akselerometr-k-arduino

ADXL345 – подключение модуля акселерометра

Акселерометр представляет собой датчик, измеряющий проекции ускорения на три пространственные оси. Учитывая величину ускорения свободного падения (g) и данные измерения по трем осям, можно определить ориентацию акселерометра в пространстве. Для этих целей его и используют, например, в мобильных телефонах для поворота изображения на экране, а также в играх. В этой статье я рассмотрю модуль с акселерометром ADXL345 позиционирующийся под платформу Arduino.

Я заказывал модуль здесь. Акселерометр ADXL345 способен измерять ускорение величиной до ±16 g, с максимальным разрешением 13 бит, частота измерения может достигать 3200 Гц. Обладает низким энергопотреблением, максимум 140 мкА, напряжение питания может находиться в пределах 23,6 В. Акселерометр поддерживает два распространенных интерфейса связи SPI и I2C, а также имеет два выхода прерываний и встроенный буфер для хранения данных. Схема модуля приведена ниже:

Режимы питания и энергосбережения

Ток потребления акселерометра зависит от частоты измерения (дискретизации) ускорения, ниже в таблице приведены значения тока для различных частот, при напряжении питания 2,5В:

Частота измерения ускорения и обновления выходных данных, Гц Полоса пропускания, Гц Биты задания частоты (Rate), регистр BW_RATE Потребление акселерометра, мкА
3200 1600 1111 140
1600 800 1110 90
800 400 1101 140
400 200 1100 140 (90)
200 100 1011 140 (60)
100 50 1010 140 (50)
50 25 1001 90 (45)
25 12,5 1000 60 (40)
12,5 6,25 0111 50 (34)
6,25 3,13 0110 45
3,13 1,56 0101 40
1,56 0,78 0100 34
0,78 0,39 0011 23
0,39 0,20 0010 23
0,20 0,10 0001 23
0,10 0,05 0000 23

В скобках указаны токи для режима пониженного энергопотребления, который управляется битом LOW_POWER регистра BW_RATE. Уменьшение потребления осуществляется за счет большего шума (снижается точность). Установка других частот в этом режиме не дает никакого преимущества в экономии.

После подачи питания акселерометр находится в режиме ожидания, с минимальным потребление энергии, около 0,1 мкА, при этом ускорение не измеряется.  Для перехода в режим измерения необходимо установить бит Measure регистра POWER_CTL. Функция автоматического перехода в спящий режим при простое, позволяет дополнительно экономить энергию, более подробно о режиме будет сказано ниже.

Интерфейс передачи данных

Передача данных может осуществляться по двум протоколам, SPI и I2C. Для подключения интерфейса I2C, необходимо подтянуть линию CS к высокому логическому уровню. Для интерфейса SPI вывод CS управляется внешним контроллером. Для SPI доступны два режима: 3-х и 4-х проводная схема. В 4-х проводной схеме для передачи данных используется две линии акселерометра (кроме CS и SCLK), это SDI – вход данных, SDO – выход.

Для 3-х проводной схемы используется одна линия SDIO, при этом, внешний контроллер должен перенастраивать свой вход в соответствии с направлением передачи.

В этом случае линию SDO необходимо подтянуть к высокому или низкому уровню через резистор в 10 кОм, в модуле вывод подтянут к низкому уровню.

Во время передачи данных на линии CS необходимо установить низкий логический уровень, линия SCLK должна находиться в высоком логическом уровне, когда передача данных отсутствует. Ниже представлена структура первого байта для пакета SPI:

Структура первого байта для пакета SPI
D7 D6 D5 D4 D3 D2 D1 D0
RW MB A5 A4 A3 A2 A1 A0

Байты передаются старшим битом вперед. Бит RW указывает операцию: 1 – чтение, 0 – запись. Для передачи нескольких байт за сеанс связи, необходимо установить бит MB, нулевое значение соответствует передаче одного байта. Биты A5-A0 задают адрес регистра, к которому идет обращение. Окончание передачи данных выполняется установкой высокого логического уровня на линии CS.

ЭТО ИНТЕРЕСНО:  Обновление навигации lexus

Максимальная частота тактирования SPI интерфейса равна 5 МГц. Для частоты измерения (обновления данных) 3200 и 1600 Гц, SPI интерфейс должен функционировать на частоте не ниже 2 МГц. Для частоты измерения 800 Гц, не ниже 400 кГц и т.д. в такой же пропорции, иначе могут возникнуть пропуски новых данных измерения.

Для интерфейса связи I2C поддерживаются стандартная скорость передачи в 100 кГц, а также высокая 400 кГц. Линия ALT_ADDRESS отвечает за адрес акселерометра на шине I2C. При высоком логическом уровне на линии, акселерометру присваивается 7-ми битный адрес со значением 0011101, при низком уровне 1010011. Для корректного функционирования интерфейса, линии SDA и SCL необходимо подтянуть к питающему напряжению.

Из-за ограничения скорости передачи данных в 400 кГц, максимальная частота измерения ускорения не должна превышать 800 Гц.

Описание регистров ADXL345

Акселерометр ADXL345 имеет достаточно много регистров настройки и управления, перечень которых  представлен в следующей таблице:

Адрес Название Тип Состояние после сброса Описание
0 (0x00) DEVID R 11100101 Номер ID
1-28 (0x01-0x1C) Reserved Зарезервировано
29 (0x1D) THRESH_TAP R/W 00000000 Значение уставки для толчка
30 (0x1E) OFSX R/W 00000000 Смещение для оси X
31 (0x1F) OFSY R/W 00000000 Смещение для оси Y
32 (0x20) OFSZ R/W 00000000 Смещение для оси Z
33 (0x21) DUR R/W 00000000 Длительность толчка
34 (0x22) Latent R/W 00000000 Задержка перед ожиданием второго толчка
35 (0x23) Window R/W 00000000 Время для обнаружения второго толчка
36 (0x24) THRESH_ACT R/W 00000000 Значение уставки функции активности
37 (0x25) THRESH_INACT R/W 00000000 Значение уставки функции бездействия
38 (0x26) TIME_INACT R/W 00000000 Время бездействия
39 (0x27) ACT_INACT_CTL R/W 00000000 Привязка событий активности/бездействия на оси
40 (0x28) THRESH_FF R/W 00000000 Значение уставки свободного падения
41 (0x29) TIME_FF R/W 00000000 Время свободного падения
42 (0x2A) TAP_AXES R/W 00000000 Привязка событий толчка на оси
43 (0x2B)

Источник: https://radiolaba.ru/microcotrollers/adxl345-podklyuchenie-modulya-akselerometra.html

Ловим горизонт с Arduino

В комментариях поста про создание трех-степенной платформы на базе аппаратной платформы Arduino поднимался вопрос управления не только с компьютера, поэтому было решено разобраться с работой акселерометра MMA7260, который можно свободно приобрести в Гонконге на Ebay.

Инструменты и материалы

Для реализации задуманного нам понадобятся следующие комплектующие:

Найменование Количество
Акселерометр MMA7260 1 шт.
Трех-степенная платформа 1 шт.
Макетная плата 1 шт.
Стяжка 1 шт.
Соединительные провода 8 шт.
Белый медведь 1 шт.

Самой необходимой деталью для нашей установки является акселерометр. На просторах сети имеется множество предложения для Arduino в части акселерометров и самый доступный — это трех-осевой акселерометр MMA7260. В продаже он уже поставляется на плате, где уже имеется стабилизатор 3,3в 800мА для питания.

На выходах осей X, Y, Z распаяны фильтры в виде RC-цепочек, а также сам он имеет фильтр низких частот (что не очень заметно при первом знакомстве).

В соответствии с документацией на устройство, имеется возможность выбора чувствительности (4 режима), а также включение и выключения режима сна. Настройка чувствительности датчика осуществляется с помощью входов G1 и G2.

Максимальный уровень чувствительности 1.5g (00), минимальный 6g (11).

Схема подключения

Подключение акселерометра к плате Arduino осуществляется по схеме, представленной ниже: Чтобы акселерометр всегда выдавал значения его принудительно необходимо вывести из режима сна, просто подав на выход SL (Sleep) питание. Выбор режима чувствительности осуществляется с помощью перемычек J1 и J2.

Первоначально данную схему можно собрать на макетной плате, после чего можно распаять длинные проводки. Перемычки ставятся на контактную площадку 3х2, где крайние левые два контакта 3.3в, центральные G1 и G2 соответственно, а крайние правые контакты «земля».

В результате после сборки получается следующая конструкция: Подключение трехстепенной платформы к Arduino осуществляется на три выхода с поддержкой ШИМ, а входы от датчика положения на три аналоговых входа A0A2. Пример подключения узлов к Arduino:

Программирование

Тестирование и проверка работоспособности акселерометра осуществляется с помощью следующей программы:

  1. int x, y, z;
  2. // Калибровка датчика
  3. int dx=357;
  4. int dy=385;
  5. int dz=178;
  6. void setup()
  7. {
  8.    Serial.

    begin(9600);

  9. }
  10. void loop()
  11. {
  12.   // Значения осей с датчика
  13.   x = analogRead(A0) — dx;
  14.   y = analogRead(A1) — dy;
  15.   z = analogRead(A2) — dz;
  16.   // Вывод в Serial monitor
  17.   Serial.print(«X: «);
  18.   Serial.print(x);
  19.   Serial.print(«Y:»);
  20.   Serial.print(y);
  21.   Serial.print(«Z:»);
  22.   Serial.

    println(z);

  23.   //Период опроса
  24.   delay(100);
  25. }

* This source code was highlighted with Source Code Highlighter.

Тестирование

Перед началом работы, необходимо произвести калибровку датчика, по следующей методике: 1) Установить в прошивке контроллера значения калибровки равные нулю, записать прошивку в контроллер; 2) Зафиксировать датчик в горизонтальном положении; 3) Снять показания с датчика в течение 3 секунд; 4) Вычислить средние значения в горизонтальном положении и внести поправку в калибровочные значения.

Данные измерения необходимо делать на минимальной чувствительности или близкой к ней, чтобы исключить лишние показания при ударах стала или любые другие воздействия. До проведения калибровки датчик выдавал следующие значения: По графику видно, что завяленные фильтры низких частот работают довольно странно, так как шумят оси очень сильно.

Для подавления шума необходимо или писать свой фильтр низких частот или нормировать шкалу измерений к меньшей (в случае с сервоприводами шум частично подавляется таким методом).

В результате полученных измерений были получены следующие поправки:

  • dx = 357
  • dy = 385
  • dz = 178

После калибровки показания датчика стали показывать реальную картину: В таком виде уже можно использовать показания датчика в своих проектах.

Результат

UPD. Программная фильтрация сигнала осуществляется по алгоритму, представленному в википедии:

Источник: https://habr.com/post/127165/

Акселерометр и гироскоп mpu6050

10.10.2018

Многие из современных мобильных гаджетов — смартфонов и планшетов — оснащены гироскопами и акселерометрами. Что это за аппаратные компоненты?

статьи

Гироскоп, встраиваемый в мобильный гаджет, это небольшое устройство, способное определять собственный (а значит, и того девайса, на котором оно размещено) угол наклона относительно земной поверхности и передавать соответствующие координаты в то или иное приложение. Например — в игру, установленную на смартфоне либо планшете или иной вид ПО. Использование приложениями данных с гироскопа дает возможность пользователю эффективно управлять интерфейсом девайса или, например, игровыми персонажами.

Гироскопы — это девайсы, которые находят самое широкое применение не только в индустрии мобильных решений, но и в иных сегментах рынка электронных устройств, а также в автомобильной, аэрокосмической промышленности. Принцип их работы вне зависимости от сферы применения одинаковый — они используются для определения положения объекта относительно земной поверхности.

Что такое акселерометр?

Акселерометр в мобильном гаджете — это устройство, позволяющее измерять собственное (а значит, и того девайса, на котором оно размещено) ускорение. Даже если длина «разгона» составляет миллиметры.

Как и гироскоп, акселерометр, инсталлированный на смартфоне или планшете, может передавать сведения об ускорении в игру или приложение.

При этом соответствующий сигнал призван выполнять, в принципе, ту же функцию, что и в случае с задействованием гироскопа — он помогает программе, работающей на гаджете, определить свое положение относительно земной поверхности.

Вместе с тем у акселерометра есть одно важное преимущество — измерение ускорения позволяет устройству весьма точно вычислять расстояние, на которое оно перемещено в пространстве. Поэтому мобильный гаджет с акселерометром можно использовать, к примеру, как шагомер.

Способность акселерометра измерять ускорение исключительно полезна для работы систем защиты некоторых электронных устройств от последствий падения или неудачной «перепасовки» одним пользователем другому.

Подобные системы могут устанавливаться на жестких дисках ноутбуков: если они обнаруживают, что винчестер куда-то летит, то временно блокируют его записывающую головку — самый хрупкий элемент.

Если жесткий диск все же упадет, то сохранится шанс на то, что его кластеры останутся в целости.

Сравнение

Главное отличие гироскопа от акселерометра — в принципах работы данных аппаратных компонентов.

Первый вычисляет свой угол наклона относительно земли, второй подсчитывает собственное ускорение — но, опять же, относительно земной поверхности.

На практике обе функции могут в ряде случаев заменять друг друга или же удачно дополнять. Поэтому многие мобильные девайсы оснащаются как акселерометром, так и гироскопом.

Вместе с тем у акселерометра есть ряд возможностей, недоступных для гироскопа. В частности — формирование сигналов, позволяющих определить расстояние, пройденное пользователем мобильного устройства.

Определив то, в чем разница между гироскопом и акселерометром, зафиксируем ее ключевые критерии в таблице.

Таблица

Гироскоп Акселерометр
Что между ними общего?
Оба устройства позволяют определить их положение относительно земли, а также того гаджета, в котором они инсталлированы, и могут задействоваться в этих целях одновременно
В чем разница между ними?
Определяет собственный угол наклона относительно земли Определяет ускорение относительно земной поверхности
Не может использоваться в целях измерения длительности перемещения устройства Может применяться для измерения длительности перемещения устройства

Источник: https://electshema.ru/elektrotehnika/akselerometr-i-giroskop-mpu6050.html

Понравилась статья? Поделиться с друзьями:
Системы навигации и позиционирования
Лучший видеорегистратор радар детектор

Закрыть