23.12.2017

Акселерометр

На самом деле, первым моим желанием было написать не кренометр, а акселерометр, что бы замерять ускорение с места, с 0 до 100 км/ч.
Дело в том, что пару лет назад (о, как время-то летит) я прикупил себе маленький кроссовер, Tiguan. А автопроизводители, как известно, барыги жадные, вовсю используют ценовую дискриминацию для того, что бы максимизировать прибыль. Например, за порт USB в мультимедиа-системы некоторые просят доплатить 10 тыс. рублей или больше.
Или за форсирование двигателя просят несколько сотен тысяч рублей. Ну, то есть физически двигатель один и тот же, меняется только константы в блоке управления (может быть, и сам алгоритм в каких-то случаях, но мне известно только про данные). Разница в мощности одного и того же дефорсированного двигателя и его самой мощной модификации может составлять в районе сотни л.с., а разница в ценнике - в несколько сотен тысяч рублей. Это вот как раз мой случай.
Ну, а коли изменение параметров двигателя меняется так легко, то (спрос рождает предложение) появились мелкие конторки, которые за гораздо меньшую сумму, чем автопроизводитель, меняют прошивку в блоке управления двигателем на более мощную. Естественно, именно так я и поступил.
Не менее естественно, мне было интересно, реально ли были внесены изменения в прошивку или я заплатил деньги за воздух? Проще всего проверить это можно, замерив разгон до 100 км/ч. Если разгон занял меньше времени, чем по заводским характеристикам, значит, прошивка прошла успешно.
Понятно, что первым делом я выполнил такой замер, правда, вручную. Ручной замер показал, что прошивка прошла удачно. Одновременно с этим (банально, да?), выяснилось, что вручную замерять очень не удобно, соответственно, страдает точность измерений. Захотелось написать программку для замера ускорения, но так получилось, что сначала я сделал кренометр.
Но оно и к лучшему. Дело в том, что пользуясь калибровочной информацией кренометра можно очень точно получить информацию о момента начала заезда. Это можно сделать, во-первых, автоматически, а во-вторых, гораздо точнее, чем при использовании данных GPS.
Вот один из последних результатов, полученных при проверке готовой версии:
По-моему, неплохой результат, с учетом того, что он был получен на зимней шипованной резине при температуре +8 и на мокром асфальте. Заводские данные для дефорсированного мотора - 9.9 сек. Летом повторю заезд в сухих условиях и на нормальной резине. По идее, должен выехать из 8.5 сек, так это время соответствует 200 л.с., а у меня, теоретически, должно быть 239.
Теперь об особенностях разработки акселерометра. Основная проблема - получение точных данных. Несколько моментов:
1. GPS координаты могут быть очень неточны. Например, в условиях плотной застройки точность может быть около 5 м. Это значит, что с вероятность 68% реальное местонахождение находится в окружности радиусом 5 м вокруг переданных системой GPS координат. И с вероятностью 32%, что за пределами этого радиуса. Максимальная точность, что удавалось мне получить на моем смартфоне - 2 м. И если для больших скоростей (и больших перемещений за единицу времени) такая погрешность относительно не высока, то для медленных перемещений может приводить к совершенно не корректным результатам.
Вертикальная точность может быть еще хуже. Например, при отладке приложения я прошел пешком около 20-30 минут, от Октябрьского по Дружбе до Тольятти и далее в сторону Кирова. Так данные GPS показали, что за это время по высоте я переместился на несколько сотен метров, хотя реальный перепад высот не превышает и 10 метров.
Но в этом отношении есть и хорошая новость. С 2018 года некоторые смартфоны будут оснащаться новыми GPS-приемниками, которые принимают сигнал L-5, что повысить точность даже в условиях плотной застройки до нескольких десятков сантиметров.
2. Частота опроса GPS-приемника у большинства смартфонов не превышает 1 Гц. Для замера ускорения достаточно медленных машин, с разгоном более 10 сек. проблем тут особых нет. А вот если разгон занимает меньше 5-6 сек, то точность уже оставляет желать лучшего. Попытался найти смартфоны, которые могут возвращать данные GPS чаще, но найти их не смог. Но знаю, что есть профессиональные GPS-приемники, которые выдают сигнал 5 и 10 раз в секунду. Их периодичности будет вполне достаточно для автомобильного акселерометра даже в случае спортивного автомобиля.

Для более точного определения скорости я сначала планировал аппроксимировать траекторию автомобиля с помощью полинома. У меня есть серьезные основания полагать, что такой подход даст более точные результаты. Однако он усложняет автоматическое определение завершение заезда и повышает требование к торможение.
Поэтому пока остановился на самой простой схеме. Скорость определяется по левым производным по узлам траектории, а точное значение в заданных точка (40, 60, 80, 90, 100, 200 км/ч) - линейным приближением между рассчитанными скоростями в узлах.
Может быть, имеет смысл перейти на центральные производные, вроде бы у них меньше погрешность. Однако не понятно, даст ли это существенное улучшение при столь крупном шаге по времени.


06.12.2017

Кренометр

Как-то у одного френда в бложике увидел загадочную штуковину на торпеде с двумя круглыми шкалами-индикаторами. Поинтересовался у него, что это такое. Оказалось - кренометр.
Короче, такой приборчик, который замеряет крен и тангаж автомобиля в процессе движения. На самом деле при движении по шоссе вообще не нужен. А вот при движении вне дорог может пригодиться. Что бы ненароком не сделать уши перевернуться. Хотя опытные джиперы говорят, что настоящим профессионалам такие приборчики вообще ни к чему, у них отменные опыт и интуиция. 😉
У меня у самого скромненький паркетник, тем не менее, бывает, езжу по всяким буеракам. И реально не очень понимаю, не перевернется ли машина на сильном уклоне. Поэтому решил, что для меня кренометр - вещь полезная.
Посмотрел, таких приборчиков вагон и маленькая тележка, да и стоят не дорого. Но надо как-то их крепить, да и место занимают, а у меня и так там наставлено: радар-детектор, видеорегистратор, ну и иногда смартфон в качестве навигатора.

О! У меня же смартфон! А из него можно сделать отличный кренометр. 😀 В общем, решил запилить кренометр своими руками.
Сначала, по привычке, пытался писать на Delphi под Android. Но очень скоро понял, что это - совсем не торт. Поэтому перешел на нативный инструмент - Android Studio.

В общем, долго-долго я с ним возился, сделал более-менее рабочую версию. Думаю, дай-ка закину ее в Google Play. Зашел туда, глянул, а там - мама моя дорогая - этих кренометров/inclinometers каких только нету. И платных, и бесплатных, и с рекламой и без нее... Все такие красивые, с продвинутым интерфейсом и работают получше моего, похоже.
Но, тем не менее, закинул, пусть лежит.

В общем, основная проблема, с которой я столкнулся при разработке, это сглаживание данных с акселерометра. Дело в том, что ДВС нехило так вибрирует при работе. Гибкий подвес смартфона может частично гасить вибрации, а может и наоборот, войти в резонанс и добавить еще своих чуток. Жесткий попроще, но все  высокочастотные помехи от двигателя ловит только так.
Когда я разрабатывал свой кренометр, еще про фильтры особо ничего не знал, решил зайти со стороны сглаживания и сейчас использую для фильтрации данных двойное экспоненциальное сглаживание.
На самом деле скорее такое сглаживание относится к прогнозированию временных рядов. Но, пожалуй, слегка похоже на рекурсивный низкочастотный фильтр. А особенностью всех достаточно сильных фильтров является появление серьезных фазовых искажений. Вот и мой сглаживающий фильтр слегка отстает по фазе от реальной дороги.
Впрочем, когда передвигаешься по дороге с серьезным поперечным уклоном, то едешь медленно, там эта фазовая задержка не так заметна.
В общем, пока думаю, как ее побороть, идеи имеются, главное, как-нибудь добраться до их проверки и реализации.

Кстати, очень интересны всякие датчики в смартфонах, можно собирать и обрабатывать данные и что-нибудь с ними делать. Что  касается акселерометра, то он меня с одной стороны удивил своей чувствительностью, а с другой - своей неточностью.
В частности, вектор гравитации по длине может превышать 10 м/с2, а с другой стороны, его длина еще зависит от ориентации смартфона относительно поверхности Земли. Хотя, возможно, это особенность лишь моего экземпляра.

24.08.2017

Акустический (звуковой) кондиционер

Расскажу я вам сейчас такую историю. Сон у меня очень чуткий, поэтому при наличии фоновых звуков, даже относительно негромких, возникает проблема. Ну и как-то давно, соседи начали сдавать свою квартиру всяким разным интересным личностям. Жизнь превратилась реально в мучения.
Помог решить проблему случай. Включил как-то тепловентилятор в режиме без обогрева. Он при этом издавал такой негромкий, приятный, успокаивающий звук. Если его включить вечером, то он еще и маскировал эти негромкие мешающие звуки от соседей. Таким образом, пусть и частично, но удалось решить проблему со сном.

Началась эта история очень давно, еще в 90-х годах. За это время тепловентилятор износился полностью и напрочь отказался работать. Попытки найти ему замену были безрезультатны.
Сначала был куплен другой тепловентилятор.Он, хоть и исправно обогревал, звучал надоедливо и плохо маскировал звуки. Я подумал, что в XXI веке можно решить проблему более технологичным способом и решил найти что-нибудь подходящее в интернете. Вот что я там обнаружил.
Один предприимчивый американец (как ни странно, не думал, что в США есть подобные проблемы) продает подобную механическую свистелку. Правда, с совершенно конским ценником, на который можно купить несколько тепловентиляторов.
Есть и электронные устройства, но предназначены они для защиты конфиденциальных переговоров от аудио прослушки по периметру. Стоимость у них еще больше. И не понятно, можно ли их использовать для таких бытовых целей.
Я же хотел найти какую-нибудь простенькую программу для компьютера, но почему-то ничего не нашлось. Может быть, я плохо искал, а может, такие проблемы, как у меня - редкость. И у большинства людей крепкая, устойчивая нервная система.

Так что не долго думая, я взял и накатал для себя такую простенькую программу, которая выполняет функцию акустического (звукового) кондиционера. Белый шум сгенерировать было очень легко, но он не очень подходит для засыпания, так как достаточно назойлив.Гораздо лучше использовать в этих целях серый шум. Отличается он от белого тем, что у него на средних частотах слышимого диапазона провал 6 дБ на октаву.
С серым шумом было сложнее, так как с цифровой обработкой звука я не очень знаком. В общем, получить чисто серый шум мне пока не удалось, но несколько более приятных на слух вариантов по сравнению с белым шумом у меня получились. Назвал я их Сероватый 1, 2 и 3. Лично мне нравится больше последний вариант.
Выбор вариантов оставил, так как они могут пригодится в том случае, если посторонние мешающие звуки находятся как раз в среднем диапазоне частот. Тогда их придется маскировать более "белым" шумом.
Саму программу генератора шума можно скачать здесь. Сам ею регулярно пользуюсь. После скачивания ее нужно куда-нибудь распаковать и просто запускать, никаких специальных требований у нее нет. Правда, запускается она в полное окно и показывает в нем содержимое этого блога. 😉
И да, при первом запуске сначала поставьте уровень громкости на минимум. Ведь белый шум - очень мощная штука. 😋