контроль скорости объекта
- Войдите на сайт для отправки комментариев
Пнд, 23/12/2013 - 22:12
Помогите с программой.Нужно написать скетч для дистационной контроля скорости объекта.Используется range finder в качестве дисплея.Данные передаются по каналу в ISM дипазоне
Схема ? Код ? Вопрос ?
Если нужна полностью программа, то это в ветку Ищу исполнителя. И всеравно потребуется схема.
ЗЫ: Если я правильно понял range finder - это не дисплей а камера то на 8-ми битном проце это вообще не реально. Да и устройство понадобится по серьезней для сохранения и обработки изображений с двух матриц.
Летят два крокодила, один зеленый, другой тоже на север.
ВОПРОС: сколько лет моему ежику? (с)
Ладно,проехали. Тогда другой вопрос. Как с помощью ультразвукового датчика расстояния определить скорость объекта?
Доброго времени суток !
Никак ! Разве только скорость будет малая и дистанция не большая, тогда повторными замерами расстояния и вычитанием разницы.
Вообще скорость меряется доплеровским эффектом, но для этого нужно специальное оборудование.
Вы б написали что вы хотите, может кто и подсказал решение.
Ну эти датчики и так, вроде работает, на небольших расстояних.Где-то 5 м.
У меня такая задача и стоит. Примерно таким ультразвуковым датчиком http://robocraft.ru/blog/electronics/772.html мне нужно определять текущую скорость объекта. По идее нужно через какие то промежутки времени измерять изменение расстояния до объекта и делить на длительность этого промежутка. Но я не знаю как это осуществить
позвольте в вашей ссылке все разжеванно очень подробно, с примерами, так в чем же вопрос ? Попробуйте перебит код из примера, запустите, а дальше пробуйте его адаптировать под себя.
Зависит от объекта и скорости.
У меня такой датчик человека с растояния 1,5 м. Определяет невнятно.
Ладонь стабильно обнаруживает на растоянии 40 см., дальше тоже начинаются ошибки.
Да,более менее внятно там все разжевано.Но ту ссылку я кинул что-бы показать как выглядить датчик.Наверное более наглядным примером будет это http://www.mini-tech.com.ua/index.php?route=product/product&product_id=102 . Но мне нужно что-бы дисплей показывал еще(или) и скорость объекта. Ту же движущую ладонь от и до датчика будет достаточно. И мне нужно что-бы вычисляло и выводило скорость движения ладони на дисплей. Погрешности,в принципе,не важны. Как это можно осуществить?
Ну так делайте. Там и схема и скетч, в который нужно добавить определение скорости.
Но практичское применение такогоо измерителя мне не представляется
Если я бы знал как определить скорость,я бы наверное здесь не спрашивал. Я не знаю как сравнивать изменение расстояния за время и это время.
Вам рассказать из курса физики как определяется скорость?
Или просто готовый и отлаженный скетч дать?
Если нужна помощь в разработке, так разбирайтесь и спрашивайте что именно не понятно
Если хоть немного изучите найденные вами же материалы - все должно стать ясно
Но если хотите чтобы за вас это разработали и отладили, врядли встретите желающих
В первой ссылке доходчиво писан алгоритм измерения растояния. Вам нужно сделать второе такоеже измерение, через строго определенный период времени задаваемый функцией delay, далее на основании школьного курса физики узнать скорость перемещения, перевести в нужные единицы и вывести на экран, это описано по второй ссылке.
Проблема в том что датчик неуверенно реагирует на отдаленные и небольшие объекты, а темболее перемещающиеся небольшие, поэтому гемора с доведением этой конструкци до более менее приемлевого вида, если это вообще возможно, будет много
Т.е вы предлагаете делать примерно так?
distance1=distance/58;
delay(100);
V= (distance1-distance1)/100;
Или я неправильно понял?
Можно по другому, в цикле измерять расстояние и фиксировать в массиве, вместе с временем измерения(функция millis)и отбросом явных ошибок( расстояние больше 4х метров), если тренд изменился или пошли одни ошибки - на основании заполненного массива вычислить среднюю скорость, вывести на экран, начать следующее измерение
Т.е вы предлагаете делать примерно так?
distance1=distance/58;
delay(100);
V= (distance2-distance1)/100;
Или я неправильно понял?
Да, получите в см/миллисекунду
И объект может как приближаться, так и отдаляться, поэтому вычитайте из большего.
И как я уже сказал датчик может выдавать бред, поэтому на основании двух измерений можете скорость не узнать. Лучше пользоваться алгоритмом кот.привел выше
Ваш алгоритм более правильный,но я не пойму как его осуществить
скорость - время, деленное на расстояние, да ведь? :)
расстояние вы знаете. осталось замерить интервал времени, прошедшего между измерениями. в этом вам поможет millis().
примерно так
уточню - прошедшее время надо соотносить не с расстоянием, а с изменением расстояния. и вычисленная скорость будет правдой только в случае, если предмет двигается только к/от датчику
...Вам нужно сделать второе такоеже измерение, через строго определенный период времени задаваемый функцией delay
нельзя! кроме задержки есть еще время, потраченное на собственно измерение и прочие вычисления
скорость - время, деленное на расстояние, да ведь? :)
расстояние вы знаете. осталось замерить интервал времени, прошедшего между измерениями. в этом вам поможет millis().
примерно так
Неа,скорость это расстояние деленной на время). Так а как я нахожу расстояние?. Мне ж ее нужно находить его не один раз,а потом делить на время за которое это изменение произошло.
определение расстояния разжевано в примерах до уровня кашицы для грудничков
Прочих вычислений несколько тактов по 1/16 000 000 сек., "собственно измерение" -12 микросекунд.
Погрешность измерения, думаю незначительная по сравнению с тем что выдает датчик.
определение расстояния разжевано в примерах до уровня кашицы для грудничков
Та понял я как найти расстояние. Но мне нужно измерять все время изменение этого расстояния,и времени за которое это изменение произошло. Вот этого я не понял. А потом из этих данных определить скорость.
Сделайте как предложил com, совсем просто и максимально точно если объект движется в одном направлении, а другие варианты все равно не змерим. Будет в реальном времени показывать скорость.
Измеряете растояние
Фиксируете время
Определятет изменение времени и растояния к предыдущему измерению, вычисл. Скорость
Выводите на экран
Сохраняете полученные растояние и время, для расчетов в следующей итерации цикла
Прочих вычислений несколько тактов по 1/16 000 000 сек., "собственно измерение" -12 микросекунд.
Погрешность измерения, думаю незначительная по сравнению с тем что выдает датчик.
кроме измерений у датчика есть еще время ожидания конца эхи, 38 миллисекунд минимум.
поэтому точность будет зависеть от того, в какое место кода вставлен delay()
Конечно лучше этой задержки избежать, но в рассматриваемом "приборе" она не критична
кроме измерений у датчика есть еще время ожидания конца эхи, 38 миллисекунд минимум
За 30 миллисекунд, мой датчик производит до 20 измерений, вернее ардуина плучает до 20 результатов измерений от датчика.
На расстоянии 4м, эхо придет через 23 миллисекунды, что при задержке в 100 миллисекунд составит почти четверть
Согласен, delay в 100 миллисекунд тут лучше не использовать
И ожидания "конца эхи" нет, почитайте "разжеванный в кашицу" принцип работы датчика. Триггер посылает сигнал, эхо ждет его появления, промежуток времени в микросекундах считается контроллером
flopikpc, в приведенном выше скетче практически готовый алгоритм расчетов усредненной скорости, нужно массив с длительносями сделать двумерным и заносить туда значения millis. где вывод в консоль, делать расчеты скорости
Зы
Нет, извиняюсь, нужно будет переделывать
На расстоянии 4м, эхо придет через 23 миллисекунды, что при задержке в 100 миллисекунд составит почти четверть
И ожидания "конца эхи" нет, почитайте "разжеванный в кашицу" принцип работы датчика. Триггер посылает сигнал, эхо ждет его появления, промежуток времени в микросекундах считается контроллером
эхо ждет? вот насмешили :) пин "эхо" датчика не имеет никакого отношения к эху при измерениях.
вы путаете эхо, которое получает приемник и эхо, которое датчик выдает ардуине. приемник - да, получит начало эха и начнет считать расстояние. и конец эха ему не важен. а сам датчик выдаст сигнал контроллеру, который тоже называется "эхо", у которго конец важен не меньше, чем начало, потому что длительность этого сигнала прямо пропорциональна расстоянию до объекта. собственно говоря, длительность этого сигнала и есть по сути ответ датчика. чем длиннее сигнал, тем больше расстояние.
На расстоянии 4м, эхо придет через 23 миллисекунды, что при задержке в 100 миллисекунд составит почти четверть
И ожидания "конца эхи" нет, почитайте "разжеванный в кашицу" принцип работы датчика. Триггер посылает сигнал, эхо ждет его появления, промежуток времени в микросекундах считается контроллером
эхо ждет? вот насмешили :) пин "эхо" датчика не имеет никакого отношения к эху при измерениях.
вы путаете эхо, которое получает приемник и эхо, которое датчик выдает ардуине. приемник - да, получит начало эха и начнет считать расстояние. и конец эха ему не важен. а сам датчик выдаст сигнал контроллеру, который тоже называется "эхо", у которго конец важен не меньше, чем начало, потому что длительность этого сигнала прямо пропорциональна расстоянию до объекта. собственно говоря, длительность этого сигнала и есть по сути ответ датчика. чем длиннее сигнал, тем больше расстояние.
Я путаю и насмешил? Ну раскажите мне как работает ультразвуковой датчик _управляемый_контроллером. И зачем в коде управления нужнен вызов функии pulseIn, ожидающий появления высокого уровня на выводе Echo, сразу после выключения триггера.
Постеснялись бы чтоли нести такую пургу, даже не глядя в букварь, в который только что с надменным апломбом тыкали носом ТС, не говоря уж о том чтобы просто немного подумать
You can calculate the range through the time interval between sending trigger signal and receiving echo signal. Formula: uS / 58 = centimeters or uS / 148 =inch; or: the range = high level time * velocity (340M/S) / 2;
Т.е. измерять можно как считая промежуток между выключением триггера и появлением эха, так и подсчетом длительности высокого уровня, который и считает pulseIn в скетче, Т.е. вы тоже правы. Извиняюсь за резкость