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

Код Arduino – чтение показаний акселерометра ADXL335

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

Скетч начинается с объявления аналоговых входных выводов Arduino, к которым подключены выходные выводы X, Y и Z датчика.

Далее мы определяем минимальные и максимальные значения, которые Arduino собирается предоставить. Поскольку плата Arduino содержит 10-разрядный аналого-цифровой преобразователь, она отобразит выходные напряжения датчика в диапазоне от 0 до 3,3 В в целочисленные значения в диапазоне от 0 до 1023. Именно поэтому для установлено значение 0, а для установлено значение 1023.

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

В функции мы должны установить аналоговое опорное напряжение на , так как мы подключили 3,3 В к выводу AREF на Arduino. Это делается путем вызова .

Кроме этого, мы инициализируем здесь и последовательную связь с компьютером.

ПРЕДУПРЕЖДЕНИЕ

Если вы не вызовите , вы закоротите вместе активный источник опорного напряжения (внутренний) и вывод AREF, что, возможно, приведет к повреждению микроконтроллера на плате Arduino..

В функции мы считываем аналоговые выходы датчика каждые 200 мс. Вместо вызова функции мы вызываем пользовательскую функцию . Эта функция просто берет 10 выборок АЦП и возвращает среднее значение.

Шаг 4: измерение угла наклона с помощью гироскопа

Гироскоп в MPU6050 измеряет угловую скорость (скорость вращения) вдоль трех осей. Для нашего самобалансирующегося робота угловая скорость вдоль оси x достаточна для измерения скорости падения робота.
Загрузите скетч Sketch2.ino. В нём считываются данные гироскопа по оси x, преобразуются в градусы в секунду, а затем умножаются на время цикла, чтобы получить изменение угла. Мы добавляем этот полученный угол к предыдущему углу, чтобы получить текущий угол.
Положение, в котором при запуске программы находится MPU6050 — это точка нулевого наклона. Угол наклона будет измеряться относительно этой точки.
Удерживайте робота под фиксированным углом и увидите, что значение угла не будет стабильным, он будет постоянно увеличиваться или уменьшаться. Это связано с дрейфом, который присущ гироскопу.
В приведенном выше коде время цикла вычисляется с помощью функции millis(), встроенной в Arduino IDE. Для более точных интервалов между считыванием данных, позже будет использоваться прерывание таймера. Этот интервал времени между считыванием данных также будет использоваться при в ПИД-регуляторе.

Соединение электроники

Закрепите карту Arduino в лотке. Мы предлагаем разместить Карту Arduino на один слот дальше центра электроникой наружу.

Закрепите Breadboard Плату в лотке за Arduino. Макетная плата должна быть расположена противоположно от Arduino Uno, для удобства использования в дальнейшем.

Поместите лицо перед картой Arduino, что бы провода от светодиодов были со стороны Arduino Uno

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

Расположите провода так что бы все контакты находились рядом с макетной платой.

Подключите провода от держателя батареи к макетной плате.

Возьмите провод минуса (черный) и подключите его снизу слева от макета. Подключите положительный Провод (красный) в нижнем правом углу макета.

Мы покрасили макет, чтобы показать, что в гнездах теперь есть сигнал.

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

  • Один подключите над проводом плюса от держателя батареи (справа)
  • Второй подключите на два гнезда левее.
  • Переключатель будет пропускать тока в режиме вкл, и не будет пропускать в режиме выкл.

Мы будем использовать перемычки для подключения дополнительных гнезд на макетной плате. У нас есть один черный (минус) и один положительный (красный) перемычка.

Красный: поместите один конец перемычки выше провода выключателя, а другой конец — в гнездо колонки левее.

Черный: поместите один конец провода перемычки выше Провод от держателя батареи, а другой конец — в колонку правее.

Мы покрасили в макет, чтобы показать, что Гнезда теперь имеют сигнал.

Подключение MPU6050 к Wemos d1

Модуль работает по I2C, поэтому подключить его весьма просто, соединим акселерометр с платой Wemos D1: VCC -> 3V3, GND -> GND, SCL -> D1, SDA -> D2.

Для проверки давайте зальём в плату следующий скетч:

#include <Wire.h>

const int MPU_addr = 0x68; // I2C address of the MPU-6050
int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B); // PWR_MGMT_1 register
  Wire.write(0);    // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
}

void loop() {
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr, 14, true); // request a total of 14 registers

  AcX = Wire.read() << 8 | Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
  AcY = Wire.read() << 8 | Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ = Wire.read() << 8 | Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp = Wire.read() << 8 | Wire.read(); // 0x41 (TEMP_OUT_H)  & 0x42 (TEMP_OUT_L)
  GyX = Wire.read() << 8 | Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY = Wire.read() << 8 | Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ = Wire.read() << 8 | Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp / 340.00 + 36.53); // temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);

  delay(500);
}

Скачать архив со скетчем: MPU6050.zip

Теперь, если вы откроете терминал com порта, то
увидите примерно следующую картину: ускорение по трём осям, температура, углы
положения по трем осям.

Из даташита, мы знаем, что при настройке чувствительности акселерометра до 2g на каждую единицу g приходится 16384 единиц измерения датчика. Самые наблюдательные наверно уже заметили по фото, что лежа на столе датчик почему-то показывает ускорения по горизонтальным осям, а по вертикальной показывает значение больше 16384 (я надеюсь все помнят со школы, что на все объекты на земле действует сила тяжести в 1g). Это проблема всех подобных акселерометров – они очень шумят. Их обязательно нужно калибровать и фильтровать получаемые данные.

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

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

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

Стоимость MPU-теста

Цена прохождения теста зависит от тяжести проступка водителя. На этот счёт существует немецкий закон „Gebührenordnung für Maßnahmen im Straßenverkehr“.

Для инвалидов и хронически больных людей тест стоит дешевле, так как на исследование они попадают не по своей вине — 204€. А 338€ придётся заплатить тому, кто попался на вождении в состоянии алкогольного опьянения.

Дополнительно взимается плата за предоставление отчёта о прохождении MPU в случае, если это необходимо для предъявления в суде или других инстанциях.

Размер платы за отчёт в зависимости от проступка:

  • 347,48€ — когда в карточке нарушений 7 пунктов или совершено преступление
  • 402,22€ — вождение в нетрезвом виде
  • 554,54€ — под действием наркотических веществ
  • 575,96€ — алкогольное опьянение в совокупности с набранным количеством пунктов
  • 728,28€ — под действием наркотиков в комбинации с набранными очками
  • 755,65€ — в нетрезвом виде и под воздействием наркотических средств

Отдельно оплачиваются и необходимые анализы.

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

30-05-2017, Степан Бабкин

Назначение

MPU необходим для исключения изменения какой-либо информации, находящейся в ОП. Блок защиты памяти (БЗП) является средством, которое обеспечивает мультипрограммную работу ЭВМ. Когда на ЭВМ исполняется несколько программ, каждая из них обладает своим адресным пространством, назначенным процессором именно ему. При этом любая программа может работать только в своем адресном пространстве и обращения «чужим» адресам могут вызвать прерывание и прекращение работы программы. Обращение к таким адресам может произойти из-за неправильной разработке ПО или неисправности оборудования.
Конструктивно МОЗУ совмещено с блоком защиты памяти, который предохраняет массивы информации, хранящиеся в запоминающем устройстве, от ошибочной записи в них посторонних кодов.

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

Фиксация сигналов о сбоях производится в регистре ошибок (РО); регистр РБЗ является информационным для блока защиты памяти; эти регистры также относятся к числу служебных регистров.

В состав процессора могут входить сверхоперативная быстродействующая память небольшой емкости (СОЗУ), блок прерывания, блок защиты памяти, блок контроля правильности работы и диагностики процессора и другие блоки. Оперативное запоминающее устройство и каналы связи с периферийными устройствами выполняются в виде отдельных устройств, хотя в небольших ЭВМ могут конструктивно объединяться с процессором.

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

  • запретов пользовательским приложениям на доступ к данным, используемыми важными процессами (например, ядром операционной системы).
  • запретов на исполнение кода из определенных участков памяти для предотвращения непроизвольного доступа и порчи данных.
  • специальных атрибутов доступа к памяти.

По сравнению с MMU, MPU не имеет буфера ассоциативной трансляции (TLB – Translation lookaside buffer), а также в нем нет таблицы страниц. (рис. 1)

Рисунок 1 – Сравнение MMU и MPU

Но в системах реального времени с ограничениями по скорости отклика использование MMU имеет серьезный недостаток: при трансляции из виртуального адресного пространства в физическое может произойти промах кэш-памяти (то есть транслируемый адрес может не оказаться в кэше). Это приводит к тому, что приходится считать физический адрес по таблице страниц. Таким образом, использование MMU может привести к непостоянному времени отклика.

В MPU все виртуальное адресное пространство сопоставляется к физическому как 1 к 1. По этой причине использование MPU популярно в системах реального времени.

Краткий ликбез

Выбор параметров акселерометра из даташита

  • Смещение нуля акселерометра — Zero-G Initial Calibration Tolerance ( для компонент , для компоненты ) — для расчётов переводим в единицы домножив на
  • Погрешность масштабного коэффициента — Initial Tolerance () — выражается в процентах. Для расчётов надо перевести в разы, домножив на
  • Перекосы осей — Cross Axis Sensitivity () — также умножаем на
  • Спектральная плотность мощности шума акселерометра — Noise Power Spectral Density — переводим числитель в домножая все на
  • Полоса пропускания — Low Pass Filter Response — приведены границы, в пределах которых её можно изменять. Установим максимальную полосу. Все равно ошибки будут определяться не шумами;

Зная спектральную плотность мощности шума и полосу пропускания датчика можно рассчитать СКО шума на выходе датчика:

  • Смещение нуля — Bias Repeatability () — переводим в домножая на
  • Погрешность масштабного коэффициента — (Sensitivity) Repeatability () — переводим из процентов в разы;
  • Перекосы осей — Misalignment Axis to frame () — в градусах, переводим в разы (радианы, поскольку величины малые);
  • Спектральная плотность мощности шума — Noise Density — переводим числитель в
  • Полоса пропускания — — выберем такой же, как у MPU-9250;

Выбор параметров магнитометра из даташита

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

  • смещение нуля —
  • погрешность масштабных коэффициентов —
  • перекосы осей — предположим, что они такие же, как у акселерометров —
  • шум на выходе —
  • Смещение нуля — Initial Bias Error — будем считать, что мы его откалибровали до ;
  • Погрешность масштабного коэффициента — Initial Sensitivity Tolerance
  • Перекосы осей — Misalignment Axis to axis — в градусах, переводим в разы (радианы, так как величина маленькая);
  • Спектральная плотность мощности шума — Noise Density — переводим в
  • Полоса пропускания — возьмем для модели значение

Теория

В теории управления, удерживая некоторую переменную (в данном случае позицию робота), требуется специальный контроллер, называемый ПИД (пропорциональная интегральная производная). Каждый из этих параметров имеет «прирост», обычно называемый Kp, Ki и Kd. PID обеспечивает коррекцию между желаемым значением (или входом) и фактическим значением (или выходом). Разница между входом и выходом называется «ошибкой».

ПИД-регулятор уменьшает погрешность до наименьшего возможного значения, постоянно регулируя выход. В нашем самобалансирующем роботе Arduino вход (который является желаемым наклоном в градусах) устанавливается программным обеспечением. MPU6050 считывает текущий наклон робота и подает его на алгоритм PID, который выполняет вычисления для управления двигателем и удерживает робота в вертикальном положении.

PID требует, чтобы значения Kp, Ki и Kd были настроены на оптимальные значения. Инженеры используют программное обеспечение, такое как MATLAB, для автоматического вычисления этих значений. К сожалению, мы не можем использовать MATLAB в нашем случае, потому что это еще больше усложнит проект. Вместо этого мы будем настраивать значения PID. Вот как это сделать:

  1. Сделайте Kp, Ki и Kd равными нулю.
  2. Отрегулируйте Kp. Слишком маленький Kp заставит робота упасть, потому что исправления недостаточно. Слишком много Kp заставляет робота идти дико вперед и назад. Хороший Kp сделает так, что робот будет совсем немного отклоняться назад и вперед (или немного осциллирует).
  3. Как только Kp установлен, отрегулируйте Kd. Хорошее значение Kd уменьшит колебания, пока робот не станет почти устойчивым. Кроме того, правильное Kd будет удерживать робота, даже если его толькать.
  4. Наконец, установите Ki. При включении робот будет колебаться, даже если Kp и Kd установлены, но будет стабилизироваться во времени. Правильное значение Ki сократит время, необходимое для стабилизации робота.

Поведение робота можно посмотреть ниже на видео:

Обзор аппаратного обеспечения акселерометра ADXL335

Основой модуля является небольшой трехосный MEMS акселерометр с низким энергопотреблением и с чрезвычайно низким уровнем шума от Analog Devices – ADXL335. Датчик имеет полный диапазон чувствительности ±3g. Он может измерять статическое ускорение, вызванное силой тяжести в приложениях, чувствительных к наклону, а также динамическое ускорение, вызванное движением, ударом или вибрацией.

Рисунок 5 – Обзор аппаратного обеспечения модуля акселерометра ADXL335

Датчик работает при питании от 1,8 до 3,6 В (оптимально 3,3 В) и обычно потребляет ток всего 350 мкА. Однако встроенный стабилизатор 3,3 В делает его идеальным выбором для взаимодействия с микроконтроллерами 5 В, такими как Arduino.

Эта дружественная макетная плата разводит каждый вывод ADXL335 на 6-выводный разъем с шагом 0,1 дюйма. Сюда входят 3 аналоговых выхода для измерений по осям X, Y и Z, 2 вывода питания и вывод самотестирования, который позволяет проверить работу датчика в конечном приложении.

Аналоговые выходы являются относительными, что означает, что выходной сигнал 0g номинально равен половине напряжения питания 3,3 В (1,65 В), -3g соответствует выходному напряжению 0 В, и 3g соответствует 3,3 В с полным масштабированием между ними.

Ниже приведена таблица с основными характеристиками микросхемы акселерометра ADXL335.

Характеристики микросхемы акселерометра ADXL335.
Рабочее напряжение 1,8 В — 3,6 В
Рабочий ток 350 мкА (типовой)
Диапазон чувствительности ±3g (полная шкала)
Диапазон температур от -40° до + 85° C
Чувствительные оси 3 оси
Чувствительность от 270 до 330 мВ/g (относительно)
Ударопрочность до 10000g
Размер 4мм х 4мм х 1,45 мм

Что представляет из себя MPU-тест

MPU-тест состоит из трех частей

  • Медицинской
  • Теста реакции – «Leistung Test»
  • Психологической

Вся проверка занимает в общей сложности от трех до четырех часов.

Медицинский осмотр

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

Тест на реакцию

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

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

Беседа с психологом

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

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

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

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

Причины, по которым отправляют на MPU

Алкоголь. Если в результате дорожной проверки в крови был обнаружен алкоголь от 1,6 промилле, водителю придётся пройти MPU, чтобы вернуть права. Неоднократно задержанным на нарушении правил с невысоким содержанием алкоголя крови от 0.5 промилле, также назначается это обследование.

Наркотики. Доказанное употребление наркотических препаратов является поводом для прохождения MPU. Достаточно наличия следов наркотиков в крови при проверке водителя, чтобы его лишили прав.

Штрафные пункты. Когда водитель набирает восемь штрафных пунктов в реестр “Фленсбург”, его лишают водительских прав и назначается медицинское психологическое обследование.

Нарушения ПДД. Если водитель неоднократно нарушает правила дорожного движения и к тому же демонстрирует агрессивное поведение.

Инвалидность. Если человек страдает от какого-либо физического или душевного недуга, то чаще всего ему придется пройти MPU, чтобы претендовать на получение водительского удостоверения в Германии.

Когда назначают MPU-тест

Медицинско-психологическое обследование (MPU) — это проверка на пригодность к вождению автомобиля в Германии. Немцы эту проверку часто называют “тест для идиотов” („Idiotentest”).

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

Медицинско-психологическое обследование назначается органом, выдающим права в Германии — Führerscheinstelle и проводится такими учреждениями, как TÜV и AVUS. Обследование является добровольным, но если жителя Германии лишили водительского удостоверения, то очень часто права возвращают только после успешного прохождения MPU-теста.

Работа схемы

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

Наш проект мы запитали по кабелю USB от компьютера. Потенциометр 10 кОм используется для регулировки яркости ЖК дисплея. У датчика MPU6050 мы задействовали 5 контактов:

  • контакт питания – к контакту 3.3v платы Arduino;
  • землю – к земле платы Arduino;
  • контакты SCL и SDA датчика MPU6050 – к контактам A4 и A5 платы Arduino;
  • контакт прерывания (INT) MPU6050 – к контакту прерывания 0 (D2) платы Arduino.

Контакты RS, RW и EN ЖК дисплея непосредственно подключены к контактам 8, gnd и 9 платы Arduino. Контакты данных ЖК дисплея подключены к контактам 10, 11, 12 и 13 платы Arduino.

1Принцип действияцифрового акселерометра

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

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

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

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

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

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

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

Подготовка к тесту MPU

Менее половины тестируемых проходят тест с первого раза. У 38% подвергнутых проверке не получается её пройти, даже после повторов. Пройти тест не так просто, особенно без подготовки. В Германии существует целая индустрия трейнингов и занятий по сдаче медицинско-психологического обследования. Не мало на этом поприще и мошенников, обещающих стопроцентный положительный результат за небольшие деньги.

Курсы подготовки в группе стоят около 500€, а индивидуальные занятия обойдутся в 1500€. Есть возможность потренироваться и онлайн, особенно это касается разговора с психологом.

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