С тех пор, как у меня появился гуглофон, периодически бродят в голове мысли «а что бы такого забавного сделать с этим самым телефоном?» Поиграв в игрушки с управлением акселерометром, подумал — а что еще можно с помощью этого датчика сотворить? Конечно же, измерить ускорение! И, как следствие, вычислить скорость и пройденный путь. Разумеется, использование лишь акселерометра накладывает ряд ограничений на измеряемое: во-первых, движение должно быть прямолинейное, во-вторых — ориентация аппарата в пространстве не должна меняться, в третьих — желательно откалибровать датчик перед стартом измерения. Сразу скажу — есть способы смягчить эти требования, но об этом потом.
Главный вопрос, как обычно, «зачем?». Зачем это, если есть GPS? Что ж, верное замечание. Однако, GPS работает не везде, а акселерометр — он с собой в телефоне. Например, пробовали поймать спутники в метро.
С «Зачем» разобрались, переходим к «Как».
Для того, чтобы реагировать на изменение ускорения, необходимо реализовать где-нибудь интерфейс SensorEventListener. Так как мы еще не придумали, что с ним делать, создадим абстрактный класс
ЭХОЛОТ В ТВОЁМ ТЕЛЕФОНЕ. КАК ИСКАТЬ МЕСТА ДЛЯ РЫБАЛКИ. ЛАЙФХАК
public abstract class Accelerometer implements SensorEventListener < protected float lastX; protected float lastY; protected float lastZ; public abstract Point getPoint(); public void onAccuracyChanged(Sensor arg0, int arg1) < >>
И, заодно, класс для хранения показания счетчика датчика:
public class Point < private float x = 0; private float y = 0; private float z = 0; private int cnt = 1; public float getX() < return x/(float)cnt; >public float getY() < return y/(float)cnt; >public float getZ() < return z/(float)cnt; >public Point(float x, float y, float z, int cnt) < this.x = x; this.y = y; this.z = z; this.cnt = cnt; >>
И подумаем, что же делать дальше. Период обновления информации с сенсора в режиме SENSOR_DELAY_GAME — примерно 20 миллисекунд. Это достаточно часто, наша задача такого не требует. С другой стороны, снимая показания реже, мы рискуем попасть на «выбросы», и потерять точность. Логично каким-то образом регулярно получать усредненное значение ускорения, скажем, за последнюю секунду.
Хранить массив и вычислять среднее значение — накладно, гораздо проще складывать все получаемые значения и делить на количество. Также, предусмотрим dX, dY, dZ — нашу еще не реализованную калибровку.
Вот что получится:
public class XYZAccelerometer extends Accelerometer < private static final int BUFFER_SIZE = 500; // calibration private float dX = 0; private float dY = 0; private float dZ = 0; // buffer variables private float X; private float Y; private float Z; private int cnt = 0; // returns last SenorEvent parameters public Point getLastPoint()< return new Point(lastX, lastY, lastZ, 1); >// returrns parameters, using buffer: average acceleration // since last call of getPoint(). public Point getPoint() < if (cnt == 0)< return new Point(lastX, lastY, lastZ, 1); >Point p = new Point(X, Y, Z, cnt); reset(); return p; > // resets buffer public void reset() < cnt = 0; X = 0; Y = 0; Z = 0; >public void onSensorChanged(SensorEvent se) < float x = se.values[SensorManager.DATA_X] + dX; float y = se.values[SensorManager.DATA_Y] + dY; float z = se.values[SensorManager.DATA_Z] + dZ; lastX = x; lastY = y; lastZ = z; X+= x; Y+= y; Z+= z; if (cnt < BUFFER_SIZE-1) < cnt++; >else < reset(); >> public void setdX(float dX) < this.dX = dX; >public void setdY(float dY) < this.dY = dY; >public void setdZ(float dZ) < this.dZ = dZ; >>
С Вашего позволения, я пропущу описания методов калибровки датчика. Достаточно сказать, что необходимо в течении некоторого времени снимать покания, затем установить у нашего XYZAccelerometer соответствующие dX, dY, dZ. Пренебрегать этой процедурой нельзя, т.к. пока мы спим постоянно действует ускорение свободного падения, и датчик его измеряет.
Смартфон в качестве спидометра
Для пущей важности, обзаведемся классом для хранения и вычисления параметров движения на интервале:
public class MeasurePoint < private float x; private float y; private float z; private float speedBefore; private float speedAfter; private float distance; private float acceleration; private long interval; public MeasurePoint(float x, float y, float z, float speedBefore, long interval) < this.x = x; this.y = y; this.z = z; this.speedBefore = speedBefore; this.interval = interval; speedAfter = 0; calc(); >private void calc() < //Acceleration as projection of current vector on average acceleration = Math.sqrt(this.x*this.x+this.y*this.y*+this.z*this.z); float t = ((float)interval / 1000f); speedAfter = speedBefore + acceleration * t; distance = speedBefore*t + acceleration*t*t/2; >// add getters >
И классом для хранения информации обо всем эксперименте:
public class MeasureData < // points from accelerometr private LinkedList accData; private LinkedList data; // timer interval of generating points private long interval; public MeasureData(long interval) < this.interval = interval; accData = new LinkedList (); data = new LinkedList (); >public void addPoint(Point p) < accData.add(p); >public void process() < for(int i = 0; i < accData.size(); ++i)< Point p = accData.get(i); float speed = 0; if(i >0) < speed = data.get(i-1).getSpeedAfter(); >data.add(new MeasurePoint(p.getX(), p.getY(), p.getZ(), speed, interval)); > > public float getLastSpeed() < return data.getLast().getSpeedAfter(); >public float getLastSpeedKm() < float ms = getLastSpeed(); return ms*3.6f; >>
Думаю, тут все просто и понятно. Осталось только использовать это в нашей Activity… которой, кстати, еще нет. Начнем с layout:
Вот и все. Удивительно, но на ровной траектории такой метод дает весьма неплохую точность измерения.
Прилагаю график одного эксперимента: синяя линяя — скорость, расчитанная акселерометром, красная — снимаемая с GPS с максимальной частотой. Черная клякса — скорость по спидометру в конце эксперимента.
Источник: habr.com
Как проверить скорость интернета в Омске
Проверка скорости интернета — процедура совершенно нелишняя, а вполне полезная. С помощью ее измерения можно (и нужно!) контролировать качество предоставления услуги провайдером. Полезно замерять скорость в тех случаях, когда страницы начинают медленно открываться, и есть подозрение, что интернет стал заметно медленнее. Проверить скорость интернета в Омске можно с помощью многих сервисов, большинство из которых работают онлайн.
Жители Омской области Сибирского федерального округа имеют возможность проверить качество соединения на нашем сайте. Для этого может быть использована одна из программ, которую можно установить на компьютер. Но быстрее это сделать с помощью онлайн-сервиса, нажав на кнопку вверху этой страницы.
Как проверить скорость интернета в Омске при помощи специального сервиса?
Каждый омич для проверки качества интернета может воспользоваться многочисленными сервисами, имеющимися в глобальной сети. Например, speedtest, интернетометр, сервис РТ… Измерение скорости для всех омичей осуществляется бесплатно, уходит на это обычно не больше минуты. Работают все подобные программы по одному и тому же принципу, разобраться в них смогут даже не очень опытные пользователи.
Перед тем, как воспользоваться тестером скорости, нужно подготовить к этому проверяемое устройство. Для этого на нем необходимо закрыть все программы, которые могут использовать трафик. Приложения, скачивающие данные из интернета, могут заметно повлиять на результат спидтеста.
Далее можно запускать проверку. Для этого обычно на сайте имеется большая кнопка, которая подписана «Начать тест» (или что-то похожее, в нашем случае на кнопке написано «Go»). Работа сервиса предельно проста:
- сначала с выбранного сервера (в идеале он должен быть в Омской области) отправляется пакет данных на компьютер и по затраченному на загрузку файла времени вычисляется входящая скорость;
- затем файл отправляется с компьютера на сервер и аналогично вычисляется исходящая скорость;
- далее на экран выводятся полученные результаты актуальные здесь и сейчас именно для Омска.
Сервер Вы можете выбрать самостоятельно из автоматически предоставляемого списка имеющихся в Омске, в непосредственной близости от Вас провайдеров. Либо программа сделает это за Вас, выбрав сервер по умолчанию.
Тест скорости интернета — это простая задача, не отнимающая много времени. И она забирает совсем небольшой трафик, потому даже у тех омских пользователей интернета, у которых интернет не безлимитный (хм, если такие ещё существуют) это не вызовет серьёзных трат, можно не брать во внимание такой расход трафика.
Как правильно измерять скорость интернета омичу?
Чтобы получить достоверные результаты спидтеста, жителю города Омска нужно соблюсти такие требования:
- к линии должно быть подключено только проверяемое устройство;
- на проверяемом устройстве нужно закрыть все приложения, которые могут забирать трафик;
- по возможности, устройство нужно подключить к интернету по кабелю;
- в браузере должна быть открыта только одна вкладка (с сайтом проверки скорости).
Также нужно учесть характеристики сетевых адаптеров, которые установлены в компьютере. И сетевая карта, и адаптер wi-fi имеют определенную пропускную способность. Если она ниже, чем трафик, который предоставляется провайдером, то скорость будет ограничена возможностями устройства. Если же параметры аппаратной части достаточны и все перечисленные выше требования выполнены, то speedtest должен показать скорость, максимально близкую к заявленной провайдером.
Важно! Если в помещение заходит кабель «витая пара», с помощью которого предоставляется интернет, нужно подключить компьютер к нему непосредственно, произвести необходимые настройки сети и запустить спидтест. Полученные данные будут наиболее достоверными.
Тест скорости интернета на мобильном устройстве
Если нужно проверить скорость интернета в Омской области на мобильном устройстве, подключенном к сети wi-fi, то порядок действий будет примерно таким же, как и в случае со стационарным устройством. Если смартфон или планшет подключен к общественной сети, то никаких дополнительных действий не требуется. В случае же с домашней сетью рекомендуются следующие меры:
- при наличии стационарного устройства лучше спидтест провести на нем, подключив его непосредственно к кабелю;
- если проверку скорости можно провести исключительно на мобильном гаджете, нужно убедиться, что к сети wi-fi подключено только одно проверяемое устройство. Отдельно стоит обратить внимание на возможность несанкционированного подключения со стороны соседей, некоторых омичей, к сожалению, прельщает халява;
- для получения более объективной картины замер скорости следует сделать несколько раз в разное время суток при разной нагрузке на сеть. Эта рекомендация актуальна для проверки скорости на любых устройствах при любых вариантах подключений.
Сама же проверка скорости на мобильном устройстве в Омске производится аналогично подобной процедуре на компьютере. Для этого используются те же сервисы, и работают они так же.
- Измерители скорости
- Как замерить
- Как проверить скорость
- Онлайн
- Полезная информация
Источник: speedly.ru
Скачать GPS Спидометр на андроид 1.32.3
GPS Спидометр – это уникальный цифровой трекер скорости у вас на ладони. В нем есть аналоговый спидометр, одометр, компас, навигатор и некоторые другие инструменты. Высокая точность проводимых измерений убережет вас от получения штрафов на дороге. Измеряйте скорость в милях и километрах, замеряйте расстояние, отслеживайте необходимые параметры в программе и наслаждайтесь интуитивно понятным интерфейсом. Отличное мобильное приложение теперь всегда у вас под рукой.
Скачать GPS Спидометр на андроид бесплатно