Здравствуйте. Есть идея сделать цифровую метеостанцию. В частности, речь идет об определении направления ветра. Используем абсолютный угловой энкодер с диском, размеченным кодом Грея. Дискретизация - 4 разряда, т.е. 16 румбов. На выходе датчика 4-х разрядный код Грея. Подскажите, правильно ли думаю по алгоритму: 1. С некоторым интервалом опрашиваем входные линии с кодом Грея (опрашиваем так же как кнопки). 2. Преобразовываем в бинарный код, примерно так: unsigned int graydecode(unsigned int gray) { unsigned int bin; for (bin = 0; gray; gray >>= 1) { bin ^= gray; } return bin; } 3. Дальше. Алгоритм обработки помнит предыдущий результат, и при каждом измерении сравнивает - если изменение больше чем на 1 (по модулю) - то это явная ошибка, так? 4. Берем выводное значение (видимо, символьное, типа Северо-Восток и т.п.) из массива значений по данному (пункт 2) индексу . Верно?
_________________ Придумать бы, ЧТО создавать, остальное - дело техники
Можно и 32 и 64 сектора сделать - ну это "на вкус и цвет" . 2. Преобразовывать в двоичный код необязательно - можно сразу по таблице в символьные строки - и отображать типа : "С-В" 3. Не факт. Надо бы для того знать ещё и скорость ветра. 4. см. отв. п.2
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
ИМХО для розы ветров 16 румбов за глаза. Можно разрядность и увеличить, но это увеличивает геометрию устройства и количество сигнальных линий. Как бы не дошло до отдельного мозгА для этого датчика, передающего данные в "голову" скажем, по SPI. Хотя.. учитывая необходимость статистики (см. ниже) может быть до какого-нибудь простенького мозга и дойдет... типа тини13 или 24.
Переделываю я в двоичный код для того чтобы плюсминус1 ловить, то есть вероятную ошибку. Конечно, можно код Грея через CASE просунуть или через хитросортированный массив... Но хочется как то "колхозить поменьше", что ли... Чтоб алгоритм был понятный и прямой.
Скорость не ветра, а скорость изменения направления ветра, это разные вещи. Скорость ветра это другой датчик - крыльчатка и счетчик оборотов. Этот датчик это электронный флюгер. Хотя надо предусмотреть качания, безусловно, и датчик должен стоять на открытой местности. Ну грубо говоря - утром с запада дует, а вечером с севера - изменение на 3 румба за 12 часов, то есть 1 измерение в 2 часа и нормально))))). Шутка. А насчет качаний - это же аналогия дребезга контактов, вот ее и решать дополнительно в двух направлениях - в механике и в софте (например, делать усреднение за период).
Кстати, вопрос из оптической области. Вот с одной стороны диод, с другой фототранзистор скажем. Между ними шторка или иной загораживающий объект. А дребезг в этом случае как гасится? Свет ведь может проходить и через полузакрытое окошко и т.п.? Поправка - тут видимо не дребезг а "неопределенное состояние". Как его определить? или в любой схеме последний разряд в погрешность уходит?
_________________ Придумать бы, ЧТО создавать, остальное - дело техники
(IMHO) разрядность 6 будет слегка избыточной - 64 сектора - но ведь потом можно будет и округлить запросто, а 6 "треков" и линий соответственно всего лишь в 1.5 раза больше 4 ( кэп "очевидность" ) при увеличении точности вчетверо. Так что лучше сделайте шестиразрядный. SPI выглядит несколько "не в своей тарелке" в данном поделии ( паки IMHO) Переделывать код Грея в двоичный для отслеживания ошибки есмь жуткая ерунда - ибо код Грея как раз таки и решает задачу устранения ошибок - соседние сектора обязаны различаться строго одним разрядом ( в отличие от двоичного кода ). XOR текущего и предыдущего сразу же покажет в скольких разрядах есть различия - если нет отличий или только в одном разряде - тогда больше вероятность правильного значения - и без всяких там "хитрых CASE " .. Дребезг контактов и/или неполное перекрытие тоже почти сами собой "разрулятся" - это тоже одно из свойств кода . ( ну для пущей уверенности - поставьте в конце линий триггеры шмитта навроде 555тл* - их как раз по шесть бывает в одной и.м.с. )
А насчёт скорости ветра - например был слабый южный ветер, и, вдруг, резкий порыв восточного - в таком случае резкая смена сектора на 90 объяснима, а вот слабый южный на слабый восточный быстро переменится навряд ли, что укажет на вероятную ошибку. Всё это вроде как очевидно, даже странно, что Вы ещё не определились по всем этим вопросам.
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Несмотря на, то что это всё вроде как очевидно, у меня катастрофически мало практического опыта. И я не стесняюсь выглядеть тупым. 1. Таки не вижу, куда мне здесь точность выше 1/16. При 1/16 направление ветра хорошо описывается общепринятыми словами: север, северо-северо-восток, северо-восток, восток-северо-восток, восток и т.п. А при повышении точность измерять в чем? в градусах азимута? В них практический смысл слабо виден, неудобно в быту применять. 2. Оговорился, не SPI а I2C, вот как тут http://easyelectronics.ru/avr-uchebnyj- ... c-i2c.html 3. Переделка кода Грея в двоичный... Тут в общем немного криво я выразился. Безусловно, по-быстрому проверить входящее значение это поXORить его на предыдущее. Но для отсечки лишних качаний флюгера я хочу сделать еще вдобавок усреднение данных, то есть так: Организуем очередь данных, скажем из 10 ячеек. Когда возникает новое измерение, самый старый результат выкидывается. Когда нужно снять данные - снимаем среднее со всей очереди. Пусть частота измерения, скажем, 1 раз в минуту. Тогда на выходе будет среднее направление за 10 минут. А мгновенное ИМХО и не несет никакой информации. Даже я бы и еще длиннее усреднение сделал, скажем, из 32 или 64 ячеек, чтоб делить удобнее. Так вот для этой арифметики все равно код Грея проще на старте перевести. 4. Все таки про неопределенное состояние оптического датчика не понял - что значит
Цитата:
почти сами собой "разрулятся" - это тоже одно из свойств кода
?
_________________ Придумать бы, ЧТО создавать, остальное - дело техники
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
почти сами собой "разрулятся" - это тоже одно из свойств кода
Cyber-master писал(а):
.. ?
Поясню насчёт того, что "дребезги" и неопределённости сами "разрулятся" :
wikipedia писал(а):
... Если считыватель настолько медленный, что за время считывания показания несколько раз сменились, код Грея гарантирует, что ошибка будет невелика — меньше, чем реальное изменение сигнала. Например, если за время считывания показания сменились 010G=3 → 110G → 111G=5, то помимо этих трёх значений, можно получить 011G=2 — выходит ошибка на единицу. Если датчик круговой .....
То есть ещё один пунктик "почему" лучше взять большую точность и потом уже огрубить.
Цитата:
при повышении точность измерять в чем?
В быту и так точнее чем восемь направлений как правило не отмечают. А вот в других ситуациях уже и "зюйд-зюйд-вест" говорят, ну а румбы Вы сами изволили упомянуть. В розе ветров иногда рисуют радиальные отрезочки-линейки числом более 16 именуя лишь 8 из них и не именуя промежуточные. Так что всё нормально, можете не заморачиваться на таких мелочах. Если вдруг не "нагуглился" код длиннее 4 бит ( что тоже странно, но .. всякое быввает .. ), то вот , пожалуйста : Спойлер
для пущей уверенности - поставьте в конце линий триггеры шмитта навроде 555тл2 - их как раз по шесть бывает в одной и.м.с.
И , хотя,
Цитата:
код Грея не взвешенный и непригоден для обычных вычислительных операций без предварительного перевода в двоичный код
, но для розы ветров это не очень и нужно - там просто напросто радиальные отрезочки должны быть пропорциональны количеству записей соответствующего направления. То есть не так уж важно будет ли за сутки 24 записи или 86400 например - рисунок розы ветров за N суток будет почти такой же. Тоже можно не заморачиватья. Считали положение(норд-норд-вест например) -> инкрементировали переменную{nord_nord_west} -> в конце недели нарисовали розу ветров . Вместо инкрементирования можно прибавлять силу ветра, тогда будет видно не только какие ветры чаще , но и какие сильнее дуют ..
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Не хватит места для 64-ёх 32-битных переменных ? Что за м.к. такой ? Четырёхбитный какой нибудь - к1820ве1 или км1814ве3 ?
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
А какая разница, особенно если единичное устройство для себя делаете? Кстати, MAG3110 даже на плату распаянный стоит на Али всего 2.50 USD. Пусть даже энкодер Вам даром достанется, начнёте работать с электронным компасом - оцените удобство.
там окромя этого датчика еще много чего предстоит.
А можно посмотреть на схему... для определении направления и скорости ветра? И если есть исполнение в железе.....одним глазом на фото взглянуть... Тоже интересует вопрос по метеостанции....
Лично я не очень понял, каким с какого бока здесь можно приделать магнитометр, разве что саму плату крутить, так ведь опять-же, с неё показания снимать нужно, а вот магнитный датчик угла поворота типа AS5030 от Austriamicrosystems вполне будет уместен, но только для профессиональной метеостанции. Ибо в данном случае, IMHO, он будет давать избыточную точность и потребует относительно точной механики, специального магнита и последующей юстировки. Да и сам чип не из самых дешёвых.
Men1 писал(а):
А можно посмотреть на схему... для определении направления и скорости ветра?И если есть исполнение в железе.....одним глазом на фото взглянуть...
Можно взять электромотор от CD-ROM, сгородить формирователь, чтобы импульсы выдавал и так-же их считать, а можно считывать состояние встроенных в него датчиков Холла. В общем много есть вариантов.
О направлении ветра уже, IMHO, достаточно насоветовали.
.. А почему именно код Грея? А если просто: 16 площадок по кругу и центральный контакт?
Так уже ж говорили - ошибко-устойчивость кода. А "если просто" ,то, ошибки неизбежны и неустранимы никакими мат.методами. Вот почему.
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Сделано вот в таком плане..... 1.Скорость ветра - http://windpower-russia.ru/showthread.php?t=77&page=36 2.Направление ветра 16 герконов и центральный контакт...... 3. Все остальное от китайцев Сейчас в стадии тестирования...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения