Pull to refresh

Comments 47

  1. почему не выбрали другую мыжь?
  2. почему бы на поверхность не нанести контрастные микронасечки?
1.В итоге другую мышь и взяли, но она просто на расстоянии 100мм дает погрешность 1 мм, а нам нужна 0.01мм
2. Микронасчеки можно, но за нас это сделала природа, например дерево или бумага.

да, но насечки природного происхождения неупорядоченные.

Мда. Совсем неправильный метод решения задачи вы выбрали. Ну ничего — многому научились зато. Ну и, надеюсь, мышь и Распберри не пропали даром?

По поводу пункта 5, чисто мои домыслы в порядке возрастания бредовости:
— Обычно когда двигаешь мышку, ее координаты меняются с учетом ускорения движения, т.е. резкий рывок мышью даст большее значение чем медленный но на то же самое расстояние. Возможно незаметно для себя вы движете мышь вперед со скоростью, отличной от движения мыши назад.
— Это фичереквест менеджеров, чтобы в будущем выпустить мышь с еще более тонкой батареей с увеличенной точностью всего за 99.99$
— Некий инженер со склонностью петь и танцевать в любой непонятной ситуации, написал в коде:

if ( device_move_direction.to_string = g_move_backward.to_string )
{
// it's about time to sing and dance now
g_error_rate = g_error_rate * random();
}

Первый вариант скорее всего верный — для измерительных целей в драйвере нужно выключить аксселерацию.

Возможно, я не прав, но акселерация — это фича аппаратного уровня.
+ Интересует вопрос: а стелко увеличительное с сенсора сняли?(Если оно было)

На данный момент все производители мышей гонятся за DPI, из-за чего прибегают к «грязным трюкам» типа увеличительных стекол.
Идея простая — жертвуем максимальным ускорением мыши (G) но увеличиваем DPI (т.е. передвижение курсора на X точек за Y дюймов)
Данная мышка использует лазеро-оптический тип сенсора, а не «просто оптический», которые грешат положительной акселерацией. В среде геймеров данные параметры (как негативно влияющие на производительность игрока) подробно отслеживаются, созданы списки сенсоров-вендоров где данные погрешности указаны.
Соответственно просто скорость движения вверх и вниз неравномерны отчего и создаётся данная проблема.

Решение — использовать мышь с сенсором не имеющим акселерацию, помимо конечно отключения софтварной акселерации
объясните существенную разницу в погрешностях измерения вперед и назад

разные фронты сигналов
при чем тут «датчик оптический»?
Вы оптический сигнал напрямую в процессор заводите?
На выходе датчика сигнал все-таки электрический.
Фронты электрические передние и задние могут отличаться
Оптический датчик в мышке это буквально небольшая камера, а определение ее перемещения идет за счет сравнения нескольких кадров.

Там датчик — это миникамера, обрабатывается изображение, а не поток импульсов энкодера.

UFO just landed and posted this here
А если использовать тот же принцип что и в оптических мышах, но в качестве «датчика» заюзать вебку и считать перемещение софтом?
PS Столкнулся с той же проблемой, когда делал датчик перемещения для 3D принтера. Но я там оптическую головку крепил прямо на экструдер, а объектив смотрел на потолок корпуса, таким образом я одним датчиком читал и X и Y.
Задача уже решалась на ГТ (там, кстати неплохие комментарии). Я тоже, как додавлю разрешение, напишу. В конце сообщения под спойлером ссылки, во всех есть код и схема, но сначала несколько ремарок:
1. Лучше брать проводную мышь постарше, года так 2010-2015, у них пристойное разрешение и они отдают картинку, и подпаяться просто. Я работал на чипе ADNS-2051 (даташит)
2. С чипом мыши можно общаться двумя способами: через серийный порт (просто, но медленно, не больше 30 fps) или читать квадратурные выходы (до 1500 fps, там вроде по сдвигу генерится прерывание и дергается нога)
3. Чипы среднехреновые, в том числе по шуму и расстоянию между пикселами… По шуму можно откалиброваться, но геморно.
4. Разрешение указывают маркетологи, более точной оценкой является расстояние между центрами пикселов делить на 2,5. Можно улучшить разрешение постпроцессингом, в первую очередь через обработку subpixel shift.
5. Оптическая система важна. Или ставьте на прототип вместе с пластиковой родной линзой, или пересчитывайте фокусное расстояние и увеличение
6. Чтобы уменьшить «плытие» и улучшить результаты постпроцессинга используйте подложку с фактурой. Идеал — диффракционная решетка с шагом в 1/2 пиксела сенсора, но и плотная (ок 80 г/м) матовая немелованная бумага подойдёт, волокна работают каак chaotic test target

Ссылки
1. Сурово: только мышиный сенсор и LPT-порт. Картинки к статье
2. Ардуино и мышь, одна из первых попыток
3. Ардуино и мышь-2, более подробно
4. Ардуино, мышь и JS Хипстота, зато сразу в браузер
5. Арудиновская библиотека для работы с мышиными сенсорами
6. ATMega8 и сенсор
7. AVRовская библиотека AVRCam, чтение мышиного сенсора, постобработка, трекинг. Можно скачать бесплатно, там просто ссылка незаметная
При использовании энкодера ошибка будет всегда накапливаться, достаточно подергать взад-вперед раз сто — и точность будет уже не доли миллиметра, а скорее десятки сантиметров :) Для таких задач лучше применять что-то типа этого:

https://sensing.honeywell.com/honeywell-sensing-longfellow2-linear-position-transducer-productsheet.pdf
Или китайчатина подешевле: https://ru.aliexpress.com/store/product/Free-shipping-Rational-WTB5-0-001mm-600mm-dro-linear-scale-Lathe-accessories-absolute-position-encoder-for/1021179_32386818977.html

Датчик холла и магнитная лента с полюсами.

Очень много мыслей, но нет толкового описания работы с мышью.
Мышь подключается по USB. Дальше идет работа со стандартными драйверами.
— max7219 оказалась с рабочим напряжением 5 В

Я проверял два модуля на этих чипах, никаких проблем они не испытывали пари работе от 3,3В и питание и сигналы, и спокойно работали при 5В питании, и 3.3 логике управления.
По поводу результатов, А что если поставить несколько сенсоров, разнонаправленых, и потом сводить с них результат воедино?
В смысле — разнонаправленных? В мыши квадратная матрица, от 15*15 до 128*128
Один передом стоит, другой задом, чтобы неравномерность движение вперед и назад компенсировались.
Чего уж мелочиться — 3 шт., направление 0 и ±120гр., и усреднять показания
Тянитолкай из двух грызунов, наверное =)
Нужно совместить два разных метода, один точный — на основе сенсора мыши, другой грубый — на основе подсчета рисок на линейке. Грубый используется для калибровки.
Из решения аналогичных задач в свое время родился проект w-mouse.
Его автор — Walkie, как раз использует мышиные сенсоры, на производстве, для определения перемещения.
Если нужен реальный результат советую Вам с ним связатся.
Кстати w-mouse имеет счетчик посланных отсчетов по X и Y, зная текущее дпи легко подсчитывать смещение.
скрин экрана настройки
Здравствуйте, можете попробовать ещё датчик от электронного штангенциркуля, (digital caliper). Он работает по IIC, в основном.
На датчике мыши я делал энкодеры, и они меня не разочаровали. Посмотреть можно здесь:
http://www.rlocman.ru/shem/schematics.html?di=162625 там же и ссылки на некоторые чипы.
У простых электронных штангетов данные относительные, те требуется установка нуля при каждом включении, но читал про штангеты (марку забыл), где данные абсолютные, те штангет после включения сразу выдает показания, в каком бы месте каретка ни находилась. Как это реализовано? На шкалу нанесены кодирующиие метки?
Насколько я понимаю, питание на чип подаётся постоянно, кнопка отключает ЖКИ. Поэтому батарейка и «садится», независимо от того, работает ли он в режиме измерения или просто лежит в футляре. Те, с которыми я работал, все «помнили» показания, но если вытащить батарейку, то «сбрасывались». У всех был разъем для подключения, но вот протокол может быть нескольких типов.

Если это критично, то можно сделать так: микроконтроллер считывает показания в ОЗУ (регистр), цепь питания двухступенчатая, то есть, присутствует ещё что-то вроде конденсатора или ионистора. Напряжение от блока или элементов питания подаётся на один из входов микроконтроллера, и когда оно падает ниже критического уровня, наступает прерывание, в ходе обработки которого показания быстро переписываются в энергонезависимую память. После включения, если они не пусты, то считываются в ОЗУ.

P.S. Раньше микро-ЭВМ успевали всю свою память записывать на диск, когда напряжение 220 Вольт пропадало, но постоянное напряжение ещё держалось на конденсаторах блока питания.
вариант с мышкой тоже относительный. промышленный линейные датчики тоже относительные, но имеют реперные метки.
В промышленности есть и абсолютные датчики, оперирующие кодом Грея.
такие применяются редко. обычный квадратурный выход тоже код грея кстати. но в тз заказчика значится обнуление по кнопке, так что в данном случае абсолютное значение никому не сдалось

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

А если поставить два сенсора с противоположной ориентацией?
И корректировать вперед-назад с двух? И то же самое сделать по второй координате?
И не нашел подключение мыши в картинке названия контактов на RPi.
Неужели не захотелось погуглить прежде чем пробовать?
Все многочисленные проекты использующие мышиный сенсор испытывают примерно одинаковые проблемы, мышиный сенсор пропускает движение.
За последние лет 10-15 ничего особо в этом плане не изменилось.
насчет индикаторов — на али искать по слову tm1637 — два провода = 6 цифр + 16 кнопок (на кнопки ограничение, не поддерживаются одновременные нажатия). хотя наиболее массовые с 4 цифрами, может на будущее пригодится
Мне нужно было измерять линейную скорость перемещения и я выбрал вариант — дисковый энкодер от принтера и привод от зубчатых ремней от 3д принтера. Мозги на stm32. Вроде работает система в целом. Немного допиливаю ее для удобства работы оператора по считыванию данных с устройства. Пробовал начально с колесиков от мышки — но разрешения не хватило. Очень медленные перемещения.

Если использовать редуктор, т.е. большое передаточное число на колесико мышки?
хотя там вылезет другая проблема - как с штангенциркулями или с камерами без глобального затвора - скорость считывания. в процессе считывания будет уходить считываемое значение.

Да можно и редуктор. Но энкодер от принтера вполне дешевое рабочее решение. В редукторах, люфты, да и в целом с редуктором сложнее.

Если использовать Single Track Gray Code (STGC) - то можно частично компенсировать, до полуоборота, потери на считываемый код, т.е. при быстром изменении, высокое разрешение на 1 датчик - есть опасность что скорость сигнала будет выше чем скорость считывания с энкодера на таймер.
А при использовании STGC и например 8 датчиках, чтобы удобно считывать байтами :) , можно достичь контроля до +- 100-120 шагов от предыдущего считывания. точное положение. максимальное количество положений 2**N-4... примерно.

Sign up to leave a comment.

Articles