Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Робототехника

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2015, 14:14   #21
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Цитата:
Ну да. Зато это не будет "жрать" процессорное время и можно будет решать попутно и иные задачи, кроме "замеров".
Согласен. Может посмотреть в сторону прерываний PCINT?
Admin вне форума   Ответить с цитированием
Старый 16.06.2015, 17:42   #22
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

А время считывать через micros()? В целом, мысля может оказаться продуктивной, однако. В плане "количества возможных ног", а следовательно и датчиков...
Arhat109 вне форума   Ответить с цитированием
Старый 16.06.2015, 18:24   #23
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Цитата:
А время считывать через micros()?
Да.
Admin вне форума   Ответить с цитированием
Старый 17.06.2015, 07:38   #24
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Посмотрел, вроде "решаемый" вариант.

Кстати, почто во всех либах используется коэффициент пересчета в виде 58..59 при вычислении расстояний по величине задержки? На этот коэффициент приходится ДЕЛИТЬ (деления нет!).

Предлагаю пересчитать на умножательный коэффициент и добавить его в Cyberlib, примерно так:

335 м/сек. - Это "средняя" скорость звука. = 335000 мм/сек. Звук у датчика бегает "туда и обратно", стало быть 1/2 = 167500 или 0.1675 мм/мксек.

Далее. Таймер стандартно измеряет тиками по 4 мксек. 0.1675 * 4 = 0.67 и не надо переводить тики в микросекунды. Можно сразу смотреть сколько накапало напрямую в таймере и его переполнении.

Число не "совсем круглое" для умножения. домножаем его на 512 и потом делаем сдвиг в право на 9 бит. Итого получим (67/100)*(512/512)=(67*5.12)/512 = 343>>9.

То есть, если подсчитанное количество тиков таймера умножить на 343 (целое умножение!), а потом результат сдвинуть вправо на 9 бит - получим расстояние в миллиметрах без "делений" и вычисления "микросекунд" в таймере.

Проверяем.
Макс. расстояние этого датчика = 5м. = 5000*512 = 2 560 000 (в разрядную сетку long - лезет "с запасом"). 2560000/343 = 7463,5 тика таймера. В разрядную сетку счетчика переполнений таймера тоже лезет. 7463*4 = 29852 микросекунды, что для скорости 335м/сек дает расстояние
335 * (0,029852/2) = 5,00021 метра. Ошибка округления составила 0.21мм.

Итого, вместо того, чтобы высчитывать "микросекунды", а потом делить мат. либой, вполне можно получить данные счетчика прерываний таймера (time_ovf_cont для wiring.c) и текущее значение TCNT0 и сделать следующее:

/* запоминаем начало импульса эхи */
Dt = (time_ovf_count<<8+TCNT0);
/* обработка конца импульса */
Dt -= (time_ovf_count<<8 + TCNT0);
Distance = (Dt * 343) >> 9;

Можно это втыкнуть куда-то в типовое место?

P.S. Коэффициент можно предвычислять препроцессором для "разных" машинок и их тиков таймеров...

P.P.S. Если учесть, что старшая часть сдвигается влево на 8 бит, а потом "все вместе" двигаем вправо на 9 ... то возможно что текущее значение TCNT0 и не нужно вовсе.
P.P.P.S. Все-таки нужен и сам счетчик. Без него макс. ошибка составит 3.5% от дальности. Это - много.

Последний раз редактировалось Arhat109; 17.06.2015 в 07:52.
Arhat109 вне форума   Ответить с цитированием
Старый 17.06.2015, 11:03   #25
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Цитата:
Кстати, почто во всех либах используется коэффициент пересчета в виде 58..59 при вычислении расстояний по величине задержки?
Это коэффициент для перевода переменной времени в расстояние. Используется всего одна математическая операция

Цитата:
Проверяем.
Макс. расстояние этого датчика = 5м. = 5000*512 = 2 560 000 (в разрядную сетку long - лезет "с запасом"). 2560000/343 = 7463,5 тика таймера. В разрядную сетку счетчика переполнений таймера тоже лезет. 7463*4 = 29852 микросекунды, что для скорости 335м/сек дает расстояние
335 * (0,029852/2) = 5,00021 метра. Ошибка округления составила 0.21мм.
Я думаю что это не критично, так как погрешность измерений еще зависит от температуры и влажности воздуха и в гораздо больших пределах
Admin вне форума   Ответить с цитированием
Старый 17.06.2015, 14:39   #26
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Мне только кажется, что целочисленное умножение и сдвиг - значительно дешевле вызова библиотечной функции "целочисленное длинное деление"?
Arhat109 вне форума   Ответить с цитированием
Старый 03.08.2015, 17:19   #27
kulverstukas
Junior Member
 
Регистрация: 27.10.2014
Сообщений: 26
Вес репутации: 0
kulverstukas is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

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

В Вашем (найденом на форуме) фильтре кстати который я применил часто выбрасываются именно нулевые измерения при том что нет препятствий, не исключено что это математика творит, а не железо.
А если бы не приходилось измерять пять раз для более точного результата, а достаточно было бы одного! я бы мог гораздо больше и тщательнее просканировать!

Последний раз редактировалось kulverstukas; 03.08.2015 в 17:22.
kulverstukas вне форума   Ответить с цитированием
Старый 03.08.2015, 17:56   #28
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Цитата:
Сообщение от Arhat109 Посмотреть сообщение
Мне только кажется, что целочисленное умножение и сдвиг - значительно дешевле вызова библиотечной функции "целочисленное длинное деление"?
Сдвигом можно поделить только на кратное 2
Admin вне форума   Ответить с цитированием
Старый 03.08.2015, 22:55   #29
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Делить сдвигом - да, можно только на кратно 2-ке. Но! Предварительно целочисленно умножить на нужное, так чтобы потом осталось только сдвинуть ... об этом и было "описание методы"

Выложу, как только вернусь ибо "в отъезде": готовый код и Ардуинка - дома, а восстановить по памяти и без возможности проверки кода - не возьмусь. Это случится не ранее начала сентября.
Arhat109 вне форума   Ответить с цитированием
Старый 08.02.2016, 19:46   #30
Arhat109
Senior Member
 
Регистрация: 14.06.2015
Адрес: СССР
Сообщений: 122
Вес репутации: 0
Arhat109 is an unknown quantity at this point
По умолчанию Re: Ультразвуковой дальномер HC-SR04

Собственно выложено уже давно в соседней теме: http://cyber-place.ru/showthread.php?t=1909
Arhat109 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:00. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика