Акселерометр GY-521. Определение факта удара.
- Войдите на сайт для отправки комментариев
Коллеги, приветствую!
Вот такой вопрос у меня возник. Есть акселерометр GY-521 c MPU5060 на борту. С модуля читаем данные акселерометра. Они, естественно плавно изменяются при изменении угла наклона модуля по осям. Но вот есть у меня задачка, получить подтверждение наличия удара, т.е. при резком изменении показаний акселерометра получить флаг удара. И вот никак не могу придумать код для этого (уж простите не грамотного, в схемах еще немного понимаю, а вот в программировании совсем новичок).
Задач, по большому счету, в определении резкого изменения уровня сигнала с модуля. Если я правильно понимаю, что от силы удара будет зависеть крутизна переднего фронта. Т в программном коде нужно предусмотреть настройку силы удара, при котором устанавливается флаг удара.
Если провести аналогию, то нужно получить сигнал как на сигнализации машины. Ударили по кузову, получили предупреждение от сигнализации. Сила удара настраивается программно.
Натолкните на мысль, как сие реализовать. Спасибо большое.
Моментальный вектор ускорения больше порога.
Точнее - длина вектора.
Надо считывать ускорение и когда оно резко стало отрицательным по нужной вам оси, значит был удар в этом направлении.
Берете пример в котором вычисляется это ускорение ищите нужную вам ось, по которой отслеживаете удар, и с помощью не хитрых расчетов в коде с этой переменной получаете нужный вам результат.
Не уверен что хорошая идея фиксировать удар акселерометром, это немного из другой оперы. Кстати когда то тоже посещали такие мысли, но вникнув в тему понял, что это тупик. Для получения сигнала о мех. вибрации (ударе) используют пьезоэлектрические датчики с усилителем-компаратором, а для надёжного детектирования регистры прерываний или внешние триггеры.
А почему не подходит обычный датчик вибрации (которые, кстати, и используются в автосигнализациях)?
В акселерометре можно выполнить программное регулирование силы регистрируемого удара. Датчики вибрации, которые я встречал, имею потенциометр на борту и не позволяют настраивать программно чувствительность. Возможно не видел датчиков с электронной регулировкой, если подскажете, какой можно использовать для решения вопроса, буду признателен.
Проще акселерометра некуда уж. Школьная геометрия и 5 строчек кода.
С тригонометрией школьного курса то вопросов нет. Посчитать результирующий вектор по трем осям не сложно. В результате вычислений получаем некие цифры. И вот тут начинается самое интересное, это те самые 5 строчек кода.
Более детально рассказываю о задаче. Блок должен стоять на автомобиле. (сын получил права и начинает ездит). Я, как его отец, переживаю за него, и хочу знать, если с ним что то случится. Так вот блок должен работать при заведенном двигателе и в случае обнаружения удара (что, скорее всего, будет при попадании в аварию), отправлять СМС на мой номер с координатами автомобиля. Эдакая Эра Глонас, но с информированием на мой номер телефона.
И тут возникает сложность в том, что в движении машина так же вибрирует. Нужно настроить так, что бы на штатные вибрации датчик не реагировал, а срабатывал только при настроенной перегрузке, например при 4g. И тут уже 5 строками кода не получится ограничится (по крайней мере я не понимаю, как это сделать) и по этому обратился к уважаемым участникам форума за советом и подсказками.
Соберите устройство, проведите измерения - сигнал при вибрации, сигнал при имитации удара. Может быть станет ясно, как их отличать.
"Самое интересное" это самая простая из 5 строчек кода? Ну-ну.
Вибрация не проблема, а вот отличить легкую аварию от экстренного торможения будет достаточно сложно. Если же СМС требуется посылать только в случае серьезных проблем, то я бы снимал сигнал с подушки безопасности
Ребенок будет учиться на детище Российского автопрома. Не факт, что там будет подушка (пока еще не определились на марке автомобиля). По этому есть желание сделать универсальный прибор.
Да и у экстренного торможения фронт нарастания ускорения будем медленнее, чем у аварии. По этому я изначально и говорил не только о величине результирующего вектора по трем осям, но и скорости его увеличения, т.е. следить нужно за размером и за динамикой изменения вектора.
Схему для себя пока определил вот такую. Возможно будет меняться со временем и в процессе... (JP1 на схеме - конструктивный элемент как перемычка на плате. Возможно есть и другие варианты поставить перемычки на односторонней плате в программе, но я их пока не знаю).
Ребенок будет учиться на детище Российского автопрома. Не факт, что там будет подушка (пока еще не определились на марке автомобиля). По этому есть желание сделать универсальный прибор.
Да и у экстренного торможения фронт нарастания ускорения будем медленнее, чем у аварии. По этому я изначально и говорил не только о величине результирующего вектора по трем осям, но и скорости его увеличения, т.е. следить нужно за размером и за динамикой изменения вектора.
Перед аварией в большинстве случаев, таки, тормозят.А корпус сминается достаточно плавно при небольших авариях. Без проведения экспериментов с битьем критерии подобрать будет трудно. А вот при серьезном ударе модуль вектора будет больше любой вибрации или экстренного торможения. Я бы собрал схему, подключил все к лаптопу для постоянного сохранения логов, и поездил несколько дней поэкстремальнее. Потом найти максимум модуля ускорения добавить к нему процентов 20-30 и считать это за порог срабатывания.
PS А координаты откуда брать будете?
фронт нарастания ускорения будем медленнее, чем у аварии.
Какой кошмарный набор слов. Еще раз: удар это когда длина вектора ускорения больше порога. Всё.
По координатам пока еще не придумал. Решать вопросы буду по мере их поступления. Сначала надо решить вопрос с акселерометром.
Вообще рассматриваю GY-NEO6MV2
Еще раз: удар это когда длина вектора ускорения больше порога. Всё.
Максимальная длина вектора при торможении и ударе может быть одинаковой. А вот скорость изменения ускорения при ударе значительно выше. Ну не может машина начать моментально тормозить, а удар, это, все же, резкое изменение ускорения. Возможно не прав в своих умозаключениях.
Пы.Сы. Уж извините за манеру изложения. Хотел передать мысли и соображения, но получилось кривовато :)
Максимальная длина вектора при торможении и ударе может быть одинаковой. А вот скорость изменения ускорения при ударе значительно выше.
Нет, не будет. Ты путаешь скорость и ускорение.
Вот так, наверное, будет выглядеть схема с GPS модулем.
Рассмотрите вариант с 328PB - в ней 2 UART, будет в отладке проще.
Пьеза всё таки попроще будет видимо, особенно для тазиков с их шумоизоляцией, а может + пьеза...
В акселерометре можно выполнить программное регулирование силы регистрируемого удара. Датчики вибрации, которые я встречал, имею потенциометр на борту и не позволяют настраивать программно чувствительность. Возможно не видел датчиков с электронной регулировкой, если подскажете, какой можно использовать для решения вопроса, буду признателен.
Выше уже рекомендовали - пьезодатчики.
По крайней мере в электронных ударных установках (электронных барабанах) они вполне обеспечивают динамику, т.е. чувствительность к силе удара (которая по стандарту MIDI должна иметь 128 градаций).
Вибрация не проблема, а вот отличить легкую аварию от экстренного торможения будет достаточно сложно. Если же СМС требуется посылать только в случае серьезных проблем, то я бы снимал сигнал с подушки безопасности
Как раз тут проблем нет, при экстренном торможении a < g*k, где k - коэффициент порядка 1 (можно с запасом взять 1.5). А при аварии ускорение существенно больше. Нужно только расположить датчик вдали от источников вибрации.
Я бы собрал схему, подключил все к лаптопу для постоянного сохранения логов, и поездил несколько дней поэкстремальнее. Потом найти максимум модуля ускорения добавить к нему процентов 20-30 и считать это за порог срабатывания.
Вот, кстати, очень полезная мысль. Только для логов лэптоп необязателен - вести логи на SD может и сама Ардуина.
Выше уже рекомендовали - пьезодатчики.
По крайней мере в электронных ударных установках (электронных барабанах) они вполне обеспечивают динамику, т.е. чувствительность к силе удара (которая по стандарту MIDI должна иметь 128 градаций).
Барабанная установка работает в одной оси, а тут нужно 3, и даже если сколхозить три пьезо - совмещение результатов гораздо менее тривиальное.
Барабанная установка работает в одной оси, а тут нужно 3, и даже если сколхозить три пьезо - совмещение результатов гораздо менее тривиальное.
Да, такое имеет место.
Но, с другой стороны, по моим прикидкам 328 вполне успевает обработать 4 барабана, а для автомобиля характерные времена, вроде как, должны быть побольше.
Та к что: нетривиальность - да, невозможность - нет.
PS. И "ось" - это про гироскоп, а для акселерометра - "измерение".
По крайней мере в электронных ударных установках (электронных барабанах) они вполне обеспечивают динамику, т.е. чувствительность к силе удара (которая по стандарту MIDI должна иметь 128 градаций).
мне по душе больше аналог )))
мне по душе больше аналог )))
Ничего удивительного (даже не обращая внимания на "изюминку" этого видео). На самом деле - создание качественного электронного аналога барабана - задача нетривиальная. Удовлетворительная реализация зависимости тембра звука от места удара по барабану пока не создана. Возможно, потому, что не укладывается в стандарт MIDI.
Коллеги, мне вот тут такая мысль в голову пришла (требует проверки на практике). Автомобиль при движении получает ускорение по оси Z, а в случае аварии лобовой или боковой удар - перегрузка будет по оси X или Y. Мне кажется это должно упростить задачу.
Код, подсчитывающий результирующий вектор ускорения, написал. Порог срабатывания прописал. Лог в монитор вывел. Надо прокатиться на машине, посмотреть, какие результаты на практике будут. По результатам отпишусь.
Коллеги, приветствую! Подскажите, кто то работал с модулем GSM GPS SIM808? Вроде как и GSM есть и GPS в одном модуле. Значительно уменьшается размер всего устройства. Есть отзывы по модулю?
Автомобиль при движении получает ускорение по оси Z
Обоснуйте.
del
Автомобиль при движении получает ускорение по оси Z
Обоснуйте.
Это я про вибрации от езды по неровной поверхности. Вектор будет направлен перпендикулярно плоскости дороги. А вот при ударе будет параллелен. Нет? Ошибаюсь?
Это справедливо вот при такой системе координат.
Автомобиль при движении получает ускорение по оси Z
Обоснуйте.
Это я про вибрации от езды по неровной поверхности. Вектор будет направлен перпендикулярно плоскости дороги. А вот при ударе будет параллелен. Нет? Ошибаюсь?
Ну т.е. двигатель, тормоза и рулевое управление не учитываем.
Правда, в отличие от вех остальных именно положительное ускорение по Z может оказаться больше g. Эту особенность необходимо учитывать. Один из простейших способов учета - исключить Z из рассмотрения. В принципе - как вариант.
Один из простейших способов учета - исключить Z из рассмотрения. В принципе - как вариант.
Именно об этом я и говорю. Да, я согласен, что есть ускорение при разгоне, отрицательное ускорение при торможении, центростремительное при поворотах. Но из значения будут не столь значительными, как ускорение от неровностей дороги по оси Z.
И в простейшем алгоритме анализировать можно суммарный вектор по осям X и Y.
м я и говорю. Да, я согласен, что есть ускорение при разгоне, отрицательное ускорение при торможении, центростремительное при поворотах. Но из значения будут не столь значительными, как ускорение от неровностей дороги по оси Z.
А почему вы так считаете? Все это абстрактные рассуждения не подкрепленные ничем. Собирите схему, наберите данных при реальном вождении для анализа, а потом уже можно будет обсуждать, что там больше, а что меньше
Ну так для начала проехать на машине и просмотреть лог. Ну пару раз врезаться куда-нибудь ))). А дальше уже думать.
Почитал тему... не вдаваясь в технические вопросы... с точки зрения отца двух взрослых детей... зачем это все?
Попадет в ДТП - либо сам разрулит, либо сам позвонит...
А эта система - как не отлаживай - точно будет давать ложные срабатывания. Удар при въезде в крупную выбоину точно будет сильнее, чем сотрясение от небольшого ДТП. Вам надо приготовить побольше успокоительного. чтобы при каждой такой СМС-ке в обморок не падать...
До скольки лет вы планируете опекать свое дитятко? Если права получил - значит миним 18 есть. Не пора ему самому свои проблемы решать?
Я не собираюсь контролировать его. Да, я согласен, что при небольшом ДТП разрулит сам или позвонит. А вот если что то серьезное? Я надеюсь, что все мои усилия останутся без прикладного применения, ведь система нужна на СЕРЬЕЗНЫЙ СЛУЧАЙ, когда не может сам позвонить. Хочется верить, что она не пригодится и я не получу уведомления о серьезном событии.
Факт небольшого ДТП меня не интересует.
Потом будете трястись - не завис ли модем, положителен ли баланс и т.п.
Нет смысла в одном экземпляре и на коленке делать событийную систему - надёжность ее неясна. В данном случае поможет только целая система, которая постоянно отчитывается в ЦУП о состоянии гироскопа
Так возможно система такое развитие и получит. Тем не менее я обратился за помощью в технической реализации и Ваш комментарий принимаю как дополнение к функционалу устройства, который должен быть реализован для надлежащей работы. Спасибо большое за участие. Внес в перечень развития изделия.
Кстати, при серьёзной аварии (тьфу-тьфу-тьфу) оперативное прибытие "скорой помощи" значительно полезнее, чем распсихованного отца. А при несерьёзных - вся эта байда не нужна вообще.
А что желательно - заплатить профессиональному инструктору, чтобы он накатал с юным водителем реально достаточное количество часов. Или хотя бы самому поездить рядом.
У мя когда племянница права получила, первый месяц ездила исключительно с ейным мужем, пока он не решил, что она готова к самостоятельным поездкам. И это правильно.
Я не собираюсь контролировать его. Да, я согласен, что при небольшом ДТП разрулит сам или позвонит. А вот если что то серьезное? Я надеюсь, что все мои усилия останутся без прикладного применения, ведь система нужна на СЕРЬЕЗНЫЙ СЛУЧАЙ, когда не может сам позвонить. Хочется верить, что она не пригодится и я не получу уведомления о серьезном событии.
Факт небольшого ДТП меня не интересует.
Если бы любое ДТП, тогда проще: ускорение > 1.5g и все.
А если разделять ДТП по градациям, придется разбить не менее десятка машин для подбора коэффициентов. Не проще ли купить автомобиль тонны на 3 с дюжиной подушек?
Не проще ли купить автомобиль тонны на 3 с дюжиной подушек?
Ну или пусть при выезде на улицы города рассылают СМС-оповещение на манер МЧС : "Рекомендуем автолюбителям отказаться от поездок..."
Коллеги, приветствую!
Никак не пойму, как с модуля GY-521 получить цифры ускорения без лишних данных. По мануалу данные из 0x3B и 0x3С это акселерометр по оси X. Читая из них данные я имею непонятные значения. Если я поворачиваю модуль по оси X, то значения изменяются и остаются. Ощущение, что модуль показывает значение угла в каких то единицах. Ускорение по оси X даже увидеть не могу из за постоянного изменения показаний из за наклона.
Вот скетч: В значениях accX и accY не вижу ускорения по осям :(
По мануалу данные из 0x3B и 0x3С это акселерометр по оси X. Читая из них данные я имею непонятные значения. Если я поворачиваю модуль по оси X, то значения изменяются и остаются.
И почему ты решил, что акселерометр должен реагировать на поворот?
Так в том то и дело, что я решил, что он НЕ должен реагировать на поворот, а должен реагировать на ускорение вдоль оси. А вижу я как раз реакцию на поворот. Примем не на угловое ускорение, как на гироскопе. При повороте показания начинают увеличиваться (уменьшаться) и при остановке вращения изменение останавливается, но не сбрасывается. Очень похоже на показания угла поворота в каких то своих единицах.
И что любопытно... значение растет до поворота на угол 90 градусов... если продолжать поворачивать дальше, что значение начинает уменьшаться.
Изменил скетч. Слежу за максимальным значением данных с акселерометра. И после запуска в максимальных значениях нули. Начинаешь шевелить, значение, естественно, увеличивается. От поворота, кстати, не изменяется максимальное значение. В то время как мгновенное значение изменяется. Ничего не понимаю.
Надеюсь видео получится увидеть по ссылке.
Так ты не вокруг центра координат прибора поворачиваешь, солнце. Не говоря уж о том, что у тебя руки дрожат.
все равно не понимаю, почему показания имею накопительных характер. Понятно, если я начинаю поворачивать, показания увеличились. Перестал поворачивать, снова уменьшились. А тут же в процессе поворота они растут, перестаю поворачивать, перестают расти, но и не сбрасываются.