Компьютеры Windows Интернет

Датчик движения из мышки своими руками. С точки зрения оптических мышей…. Оптические датчики в старых «мышах»

В простой компьютерной мышке имеется пара оптических датчиков, их можно применить в других целях. Такие же датчики используются например, чтобы определять положение какого то предмета, заперта ли дверь, или считывать количество оборотов вала. Самый оптимальный и удобный вариант, это использование уже готовой платы и микросхемы, особенно тогда, когда в системе нужно использование микроконтроллера, в них как правило уже есть входы поддержки интерфейса RS - 232. В случае если у вас нет такой возможности, то можете использовать схему, которая указана выше.

Этот датчик поделен на две части: принимающая (VD2) и передающая (VD1). Передающей является светодиод, который работает в ИК диапазоне, а принимающая часть, это пара фотодиодов в одном корпусе. Два - нужны для того, чтобы была возможность определять в какую сторону вращается колёсеко мышки (вверх или вниз).

R1 - даёт ток на светодиод. R2 нужен, чтобы преобразовывать ток фотоприёмника в напряжение (не использованная ножка VD2 является выходом второго фотоприёмника). Напряжение на этом сопротивлении изменяется от 1.5 Вольт (свет отсутствует) до 3.4 Вольт (свет присутствует). Нижний предел в 1.5 Вольта очень велик, для того чтобы переключать цифровую TTL схему, потому что порог переключения равен 0.8 Вольт. По этой причине применяется операционный усилок DA1 в режиме компаратора. Напряжение порога для него даёт резистивный делитель R3 и R4, которое составляет 2.5 Вольт. Можете считать, что с выхода DA1 поступает уже цифровой сигнал.

Чтобы уменьшить случайные наводки и ложные срабатывания, можете ввести гистерезис в уровни переключения DA1. Чтобы это сделать, нужно будет включить условно показанные резисторы R6 и R7 (R6 на разрыв между DA1 и R2). Чем ближе будет номинал R6 к R7 тем шире петля гестерезиса и тем дальше друг от друга будут уровни переключения из «0» в «1» и из «1» в «0». Таким образом при приведённых номиналах уровень переключения из «0» в «1» 2.8 Вольт, из «1» в «0» 2.1 Вольт.

Для примера показана простая схема индикации из светодиода и инвектора DD1 . Когда между VD1 и VD2 будет распологаться предмет, который мешает свету проходить, то будет загораться светодиод VD3.

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

Если мышку двигать все быстрее и быстрее, то при некоторой скорости перемещения она начнет подвирать. Это может сопровождаться уменьшением чувствительности, увеличением нестабильности и хаотичности движения, другими "нехорошестями". Очень мне нравилась одна модель офисной мышки Logitech - при резком движении можно было оказаться смотрящем прямо в пол и при этом крутиться. Очень интересное положение в момент схватки на Flak"ах. Этот вопрос я рассмотрю на практическом тестировании реальных мышек, теоретизировать здесь особо не о чем.

Неустойчивость

Мышка, по своей природе, механическое устройство. А значит ей свойственна неустойчивость, жрожжание. Это небольшие хаотические (случайные) перемещения. Сам дефект бывает статическим и динамическим. Статический проявляется в том, что мышка оставляет неровный след при невысокой скорости перемещения. Другой дефект с той же причиной - самопроизвольное перемещение мышки. Природа дефекта в шуме картинки датчика перемещения. Способов лечения болезни много и все они в какой-то степени связаны с фильтрацией. Дефект самопроизвольного перемещения, который был свойственен мышкам ранних выпусков, вроде бы сейчас не проявляется. Это хорошо? Отнюдь.

реклама

Датчик перемещений всё равно выдает шум, а вот в контроллере мышки используют специальный алгоритм, который блокирует перемещение мышки при сверхнизкой скорости передвижения с задержкой выполнения. Задержка нужна для того, чтоб пользователь не получил остановки мыши, когда он сам начал ее двигать слишком уж медленно. Реализовать данный алгоритм можно по-разному, поэтому не удивляйтесь "странностям" новой мышки, когда не удается попасть в иконки - из-за задержки мышка начинает двигаться не с момента начала перемещения рукой. Причем, величина задержки может зависеть от скорости. В результате одновременно происходят два неприятных события разом - мышка "вдруг" скакнула и, если включена настройка в Windows "повышенная точность установки указателя", скачек будет особо резким. Дело в том, что "повышенная точность установки указателя" связана с динамическим ускорением. А если мышь "скакнула", то ей сразу ставится повышенная скорость. После "скачка" динамическое ускорение не видит изменений скорости мышки, поэтому динамическая скорость уменьшается.

На практике это выглядит так - вначале ничего, потом рывок, потом нормальное перемещение. Это происходит быстро и глазом не заметно, но отчетливо замечается рукой - работать с таким "подарком судьбы" не доставляет радости. Этот дефект хорошо заметен, если сразу после такой мышки взять в руки старую-старую светодиодную мышку и попробовать поработать на ней. По счастью, не каждый заметит такой дефект. Если так, то Вам повезло. Но есть и те, кто не сможет пользоваться мышками с такими "умными" алгоритмами. Коль скоро этот дефект плох для работы, то что говорить об использовании такой мышки в играх?

Динамическая неустойчивость имеет те же корни, что и у статическая - шумы изображения. Но к ним добавляются неравномерность поверхности, по которой движется мышь. С неравномерностью борются различными способами адаптации. Обычно этого добиваются управлением тока лазера и коэффициента усиления (яркостью) сигнала с матрицы. Но тут всё запутаннее и сложнее, банальной остановкой мыши не обойдешься, как это делается для устранения статической неустойчивости. Хотя пытаются - некоторые производители внедряют "улучшайзеры". Например, есть алгоритм выравнивания движения мышки, если она перемещается по прямой линии. Ну да, на тестах это будет красиво - раз и прямая линия без какого-либо мусора и дрожания. Раз то раз, а попробуйте этим чудом поиграть? "Мы думаем за Вас". Нет, спасибо, оставьте себе.

Немного поясню о связи шума и точности. Дело в том, что датчик видит поверхность не так, как человек. Во-первых, там инфракрасная, невидимая, подсветка. Во-вторых, эта подсветка лазерная, когерентная. В-третьих, размер окна порядка 0.7 мм, что очень мало. Любое "дуновение" и картинка меняется.

Хватит теории, приведу пример.

Возьмем кольцо и заставим его двигаться.

Движение видно отчетливо. А теперь сравним два соседних кадра:

В верхней части один кадр, в нижней следующий. Один сдвинут относительно другого на 1/4 пикселя. (Чтобы не прищуриваться, я увеличил картинку в 8 раз, сохранив формат разбиения матрицы датчика)

Ну ладно, Вы отчетливо видите разницу между верхней и нижней частью? Отчетливо?

А теперь добавим реальный шум. Чтобы не симулировать "непонятно что", приведу реальные снятые картинки.

При съемке мышка была четко зафиксирована, но программа управления в данной версии не умеет снимать больше одного снимка за раз, что может вызывать "взбрыкивание" яркости. Не обращайте внимание. Хотя, дело может быть и не в программе, вопрос не исследован.

Из этого пока можно сделать вывод, что незначительные смещения между соседними снимками трудно отождествляются датчиком. Обращаю внимание - именно датчиком. Контроллер мышки не имеет доступа картинке. Причина в шуме, который свойственен любой аналоговой аппаратуре. И тут стоит упомянуть другой параметр работы датчика - скорость съемки, частота кадров в секунду.

Frame Rate.

Frame rate - это частота снимков. Из сказанного выше следует, что надо так выбирать частоту снимков, чтоб между соседними кадрами было существенное изменение положения. С другой стороны, это изменение не должно быть слишком большим, иначе датчик не сможет понять, какой из кадров является опорным. Минимальная частота кадров 2000, максимальная чуть больше 7000. Разберемся с цифрами.

При низкой скорости перемещения, менее 1 см в секунду, и минимально допустимой частоте 2000 кадров/сек, получается смещение на изображении в 0.005 мм. Матрица датчика имеет 30*30 точек. При 0.005 мм и размере видимого окна 0.5 мм это составит 1/140 окна или 1/4 точки матрицы. Это как раз примерно то, что изображено выше на анимации симуляции движения кольца. А если мышку двигать еще медленнее? А ведь так и происходит, когда нужно сделать что-то очень точно - попасть или провести линию. Тут уже на 1 точку приходится далеко не 1/4, а гораздо меньше. А это означает, что вклад шумов растет. Уменьшать Frame Rate меньше 2000 нельзя, так сказал датчик. И что? ... да ничего хорошего, мышка будет дрожать.

С другой сторны, при повышенном Frame Rate сам контроллер может опрашивать датчик чаще и считанные значения усреднять. Это существенно уменьшает шум. Теория погрешностей говорит, что при проведении N замеров и их усреднении точность повышается пропорционально корню из N. Поэтому эффективно делать не слишком много замеров на усреднение - растет время, оно прямо пропорционально N, а вот точность уже почти не улучшается.

Современные мышки работают на интерфейсе USB, поэтому их квантование ответа выбирается из ряда 125-250-500-1000 отсчетов в секунду, что задает количество отсчетов усреднения в 16-8-4-2. Т.о., мышка на 125 Гц гораздо устойчивее 1000 Гц при прочих равных условиях. Поэтому вряд ли стоит гнаться за очень высокой скоростью интерфейса, выйдет боком. Точнее, уже выходит боком - заметно. Мышь нестабильна.

реклама

Контроллер лазерных мышек A4 X7 всегда считывает датчик с частотой 1000 раз в секунду. При минимальном частоте снимков в 2000 это уже означает потерю 50% информации, которую можно было-бы направить на усреднение. Альтернативный вариант - применить умную фильтрацию шума. Усреднеие и фильтрация имеют общие корни, но разную эффективность алгоритмов. При низкой скорости степень фильтрации должна быть больше (напоминаю - вредит слишком высокий минимальный Frame Rate), а при высоких скоростях его можно снизить. Кроме того, на высоких скоростях надо фильтровать динамическую нестабильность. Но "фильтровать", а не "исправлять за меня", как это принято в "улучшайзерах". Кстати, любой фильтр вносит задержку в получение отсчетов, поэтому и фильтрацию надо бы делать умно.

В старых офисных мышкам не было никакой фильтрации и "умничанья". И как же приятно ими играть.

Переключатель DPI

В лазерных мышках, особенно игровых, стали ставить переключатель DPI (точек на дюйм). Вообще-то это термин неверный и сейчас его вытесняет CPI (count - число на дюйм). Я буду использовать термин DPI там, где он явно указан в надписях или спецификации, хоть это и не совсем правильно.

Итак, что такое CPI? Это количество отсчетов (точек), которое будет выдано в Windows при перемещении на один дюйм (25.4 мм).

реклама

Чем больше CPI, тем, вроде бы, лучше мышка? Например, у А4 в серии Х7 лазерные мышки имеют по 2400-3600dpi. И это при том, что датчик не может выдать больше 2000 cpi. Нонсенс? ... но откуда же А4 берет такие цифры? Да ровно оттуда же, откуда их берет датчик перемещений. У него, после вычисления наиболее вероятного перемещения изображения на матрице, получается какое-то абстрактное число. Давайте предположим, что это число от 0 до 1. Датчик умножает его на установленное значение cpi и выдает в контроллер. (Хотя, тут наоборот, контроллер считывает информацию из датчика.) Что мешает контроллеру тоже умножить на произвольное число? Ап, и получили "крутую" мышку. Крутую - крутую, только фиговую. Из-за шума датчик может определять смещение картинки с какой-то ограниченной точностью.

Для датчика ADNS-6010 фирма Avago декларирует типичную точность 2300 cpi. Это означает, что при установке чувствительности выше 2300 ошибка датчика превысит единицу отсчета. В среднем. Для конкретно взятой мышки это число может меняться в некоторых пределах и зависеть от множества случайных факторов - состояние поверхности, четкость фиксации блока оптики, старение лазера, мутнение или запыленность оптики. Одно можно сказать более-менее достоверно - лучше 2300 cpi не будет.

Если в настройках мышки поставить маленькое разрешение, значительно меньше 2300 cpi, то мышка будет вести себя очень четко и предсказуемо, только кого порадует лазерная мышка с разрешением 600 cpi? Но и "3600" cpi приносит не больше радости.

Одна особенность настройки cpi, которой следуют мышки А4 серии Х7 - они ставят настройку датчика "от грани и выше". Т.е. для разрешений 400-799 ставится разрешение датчика 400, для 800-1599 на датчик ставится 800 и т.д. Поэтому, для избавления от ненужной экстраполяции рекомендуется ставить разрешения, свойственные аппаратным настройкам датчика - 400, 800, 1600, 2000 cpi.

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

Нормальные герои всегда идут в обход (из к/ф "Айболит 66").

Коврики

Существует множество типов и вариантов исполнения ковриков для мышек. Они могут иметь рабочую поверхностью из ткани, мягкого или твердого пластика, металла. Первый вариант самый дешевый и, как ни странно, один из самых лучших. Для мягкого пластика, да и для жесткого тоже, существуют варианты исполнения под оптические и лазерные мышки.

реклама

Для тестов использовались обычные коврики Nova MicrOptic+ и Defender Ergo opti-laser. Внешний вид у них примерно одинаковый:

По заверениям обоих производителей эти коврики оптимизированы для работы с лазерными мышками. Проверим.

Для начала снимки поверхности с увеличением:

Кое-какие отличия есть, но не особенно заметные. У коврика Nova зерна меньше и не так явно выражены. Значит он хуже?

Теперь посмотрим на коврики глазами оптического датчика:

Согласитесь, что отличие есть и весьма кардинальные. На коврике Nova отчетливо видна высококонтрастная структура, а вот Defender дал какое-то "мыло". Скорее всего, это связано с размерами "гранул". У лазерных датчиков, в отличие от оптических, видимый размер окна уменьшен. Похоже, на коврике Defender размер гранул больше окна и датчик захватывает только их часть, постоянно переключаясь между монотонно светлыми и темными участками. Для сравнения, приведу фотографии поверхности пластика .

Правый рисунок получен из левого повышением контрастности. Мышка эту поверхность видит так:

На такой поверхности "офисные" оптические мышки совсем не работают, а вот лазерные как-то умудряются работать и весьма успешно.

Высота отрыва

Что Вы делаете, когда мышка доходит до края коврика? Вы поднимаете мышку и переставляете на новое место, в центр коврика. Оптический датчик обладает высокой чувствительностью и при подъеме пытается сохранить нормальное функционирование, постоянно подстраивая параметры аппаратуры. Как следствие, при подъеме мышки над поверхностью снижается скорость. Точнее, скорость то не снижается, а довольно резко падает качество и достоверность определения движения. Теоретически, при снижении качества поверхности ниже разумного, оптический датчик должен перестать выдавать движение. То есть, при некотором подъеме мышки он должен бы не замечать, что мышь подняли, а если ее еще хоть чуть поднять, то просто перестать передавать движение. Это в идеале, но в реальных мышках при ухудшении поверхности происходит деградация качества движения, передаваемого мышью. Причем, этот вредный эффект зависит от скорости перемещения, из-за чего к такой мышке труднее привыкнуть.

Высота отрыва светодиодных мышек 1.5-2 мм, для лазерных версий цифра больше и составляет уже 2.5-4 мм. Это все цифры, а в реальности такой мышкой неудобно пользоваться даже для офисных приложений, очень уж высоко приходится поднимать ее над ковриком. По моим личным впечатлениям, высота срыва в 1.5-2 мм довольно комфортна. А что же делать с лазерными мышками и их высотой срыва 4 мм?

Давайте возьмем одну за хвост и посмотрим на внутренности. Сейчас распространены мышки на датчике Avago(ссылка на http://www.avagotech.com) ADNS-6010

Чтоб особо не умничать, взял картинку из документации.

Пояснения:

реклама

  • Sensor - микросхема ADNS-6010, которая и является датчиком, считывающем движение
  • Sensor PCB - печатная плата мышки
  • VCSEL - лазерный излучатель. Просто небольшой полупроводниковый лазер с посредственным углом расхода луча.
  • VCSEL PCB - небольшая печатная платка, на которой смонтирован лазер.
  • VCSEL Clip - пластиковая защелка, фиксирует лазер в оптической системе. На картинке светло желтого цвета.
  • Lens - оптическая система из прозрачного пластика, блекло-желтого цвета.
  • Surface - поверхность, по которой движется мышь.
  • На этом рисунке указана цифра 2.4 мм - это оптимальное расстояние от дна оптической системы до поверхности. Один момент - дно мышки имеет какую-то толщину, поэтому расстояние от поверхности до дна мышки будет меньше на толщину этого дна.

    А от чего же зависит высота отрыва и почему на оптических мышках эта высота меньше? Посмотрим другую картинку:

    Позволил себе проявить самодеятельность раскрасить некоторые важные элементы конструкции.

    реклама

    Желтым цветом выделены линзы оптической системы, серым - световой поток лазера. Зеленый - зона видимости оптического датчика. Зона "видимости" датчика определяется только его фокусом и способностью работать с расфокусированным изображением. Чем выше скорость перемещения картинки, тем должна-бы быть хуже устойчивость для несфокучированных объектов. Если посмотреть данные тестирования, то так и выходит. Высота срыва в 4 мм не функциональна, я попробовал уменьшить эту величину несколько изменив принцип работы - потеря изображения датчиком может быть получена не за счет ухудшения фокусировки, а из-за ухода светового пятна из зоны видимости датчика. Примерно так работают светодиодные мышки. Для этого я увеличил угол луча подсветки с 21 градусов до, примерно, 50 градусов от вертикали.

    При подъеме мышки пятно подсветки (серый луч) выходит из видимого окна датчика (зеленая зона).

    Методика доработки не особо трудна - надо распилить оптический блок по вертикальной черте и не задеть линзы. В крайнем случае, можно чуть-чуть повредить линзу подсветки, она не столь важна. Скрепить две составные части можно термоплавким клеем, на рисунке отмечено коричневым.

    реклама

    Он обладает достаточной жесткостью и прочностью соединения, при этом позволяя осуществлять многократную коррекцию положения склеенных частей оптики. При наклоне подсветки часть его конструкции выйдет за габариты блока оптики и его придется немного подпилить, на рисунке отмечено голубым цветом.

    К сожалению, блок подсветки надо не только наклонить, но и сдвинуть вниз, из-за чего линза подсветки окажется ниже уровня оптики. Это плохо, в дне мышки придется выплавлять небольшую вмятину под выступ. Впрочем, это не сложно и не мешает, ведь линза выходит за габариты совсем чуть-чуть. Лазерный модуль закреплялся на оптике с помощью защелки VCSEL Clip. Сейчас ее придется убрать и закрепить каплей клея или герметика. Хотя, он и так там неплохо держится. У такого построения есть одна особенность - луч подсветки падает на поверхность с другим углом, чем угол зрения датчика. В результате, между плоскостью поверхности и плоскостью отражения образуется угол около 15 градусов.

    Черный - луч на не доработанной оптической системе, зеленый - после доработки. Поверхность для доработанного случая условно поднята, чтобы она не сливалась с нормальным режимом. Датчик смотрит как бы сбоку на поверхность и четче видит все неровности на ней. Дополнительный наклон подсветки дает дополнительную модуляцию яркости при прохождении объемных областей под объективом. Хорошо сие или плохо - зависит от коврика, фактуры его поверхности. К слову, если снять картинки поверхности коврика Nova на этой, доработанной, мышке, то на фото не будет таких четких граней. И, скорее всего, дело не в фокусировке. Просто изменился угол зрения и четкие структуры коврика исчезли. На этой мышке коврик Nova и Defender выглядят почти одинаково. Впрочем, мышка хорошо ходит по обеим поверхностям. Увы, есть и явный недостаток - из-за того, что поверхность отражения наклонена относительно поверхности коврика, уменьшается общий уровнь освещенности и возникает необходимость увеличения тока лазера подсветки. Обычно он составляет цифру в районе восьми миллиампер. После доработки пришлось повысить ток до 12 миллиампер. Это уже многовато, но в пределах доступного.

    Если Вы дорабатывается обычную, серийную мышь, то хорошо бы несколько помочь схеме автоматического управления током лазера. В документации на датчик ADNS-6010 упоминается резистор Rbin с 13 вывода микросхемы. Обычно, его номинал 12.7 ком. Для того, чтобы подправить ток, надо уменьшить его номинал. Для моего случая хорошо-бы увеличить ток в 1.5 раза, что означает припаивание параллельно этому резистору еще одного с номиналом в 2 раза больше, т.е. 24-27-30KOm. И еще пара поверхностей - тканевая и лист алюминия. Довольно часто слышно рекомендации применять эти поверхности, они дают весьма неплохие результаты.

    реклама

    Вначале на мышке с не модифицированной оптикой (W-Mouse 730). Ткань:

    Лист алюминия:

    И мышка после модификации оптического блока (W-Mouse 750).

    реклама

    Ткань:

    Лист алюминия:

    На поверхности с объемным рельефом модификация оптики приводит к большей заметности этого рельефа. А вот картинка с листа алюминия выглядит скорее хуже, но не столь существенно. Бесплатно ничего не бывает. Тронули оптику - получили проблемы с фокусировкой.

    реклама

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

    Есть и более простой способ уменьшить высоту срыва - поставить кнопку на дно мышки и при ее подъеме отключать, блокировать датчик. Средств воздействия много, вначале я пробовал отключать лазер, но контроллер в А4 умный и, если просто размыкать ток лазера, контроллер очень быстро это замечает и отключает мышь. Увы, отключает совсем, приходится перетыкать разъем USB, придется поступать не столь прямолинейно. Есть предложение при отключении лазера подсоединять вместо него пару кремниевых диодов, но это потребует установку дополнительных компонентов. Я поступил иначе - воздействовал на резистор Rbin (смотрите документацию на датчик ADNS-6010), при увеличении его номинала система авторегулирования пытается выставить такой ток. Если Rbin отсоединять или делать очень большим, то лазер фактически отключится, но это не вызовет каких-то проблем внутри системы регулирования.

    Саму "кнопку" я взял из дисковода 3.5" с датчика наличия дискеты. Усилие небольшое, но и его пришлось немного ослабить. Идея работала хорошо, высоту можно подобрать какую заблагорассудится, вот только пластмассовый штифт кнопки быстро стачивается.

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

    Подготовка и немного теории

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

    Погуглив информацию по этой теме и разобрав старую PS/2 мышку Logitech, я увидел знакомую по статьям из интернета картину.

    Не очень сложная схема «мышей первого поколения», оптический сенсор по центру и чип интерфейса PS/2 чуть выше. Попавшийся мне оптический сенсор является аналогом «популярных» моделей ADNS2610/ADNS2620/PAN3101. Я думаю, они и их аналоги были массово произведены на одном и том же китайском заводе, получив на выходе разную маркировку. Документация на него нашлась очень легко, даже вместе с различными примерами кода.

    Документация гласит, что этот сенсор до 1500 раз в секунду получает изображение поверхности размером 18x18 точек (разрешение 400cpi), запоминает его и с помощью алгоритмов сравнения изображений вычисляет смещение по координатам Х и Y, относительно предыдущей позиции.

    Реализация

    Для «общения с сенсором» я использовал популярную вычислительную платформу Arduino, а припаяться решил прямо к ножкам чипа.

    Подключаем 5V и GND к соответствующим выходам Arduino, а ножки сенсора SDIO и SCLK к цифровым пинам 8 и 9.

    Для получения смещения по координатам нужно прочитать значение регистра чипа по адресу 0x02 (X) и 0x03 (Y), а для дампа картинки нужно, сначала записать значение 0x2A по адресу 0x08, а потом 18x18 раз его прочитать оттуда же. Это и будет последнее «запомненное» значение матрицы яркости изображения с оптического сенсора.

    Как я реализовал это на Arduino можно посмотреть тут: http://pastebin.com/YpRGbzAS (всего ~100 строк кода).

    А для получения и отображения картинки была написана программа на Processing.

    Результат

    После небольшого «допиливания» программы для своего проекта, я смог получать картинку прямо с оптического сенсора и производить над ней все необходимые вычисления.

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

    Если начать приподнимать мышку над поверхностью даже на пару миллиметров, четкость сразу пропадает.

    Если вы вдруг захотите повторить это дома, для нахождения мышки с аналогичным сенсором рекомендую искать старые девайсы с интерфейсом PS/2.

    Заключение

    Хотя получаемое изображение и не очень большое, этого вполне хватило для решения моей задачи (сканнер штрих кода). Получилось очень даже экономично и быстро (мышка за ~100р + Arduino + пару дней на написание кода).

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

    Оптический сенсор ADNS-3060, по сравнению со своими «предками», обладает поистине впечатляющим набором характеристик.
    Использование этой микросхемы, упакованной в корпус с 20-ю контактами, обеспечивает оптическим мышам невиданные ранее возможности.
    Допустимая максимальная скорость перемещения манипулятора выросла до 40 дюймов/с (то есть почти в 3 раза!), т.е. достигла «знаковой» скорости в 1 м/с.

    Это уже очень хорошо - вряд ли хоть один пользователь двигает мышь с превышающей данное ограничение скоростью столь часто, чтобы постоянно чувствовать дискомфорт от использования оптического манипулятора, в том числе это касается и игровых приложений.
    Допустимое же ускорение выросло, страшно сказать, во сто раз (!), и достигло величины 15 g (почти 150 м/с²).

    Теперь на разгон мыши с 0 до предельных 1 м/с пользователю отводится 7 сотых секунды - думаю, теперь очень немногие сумеют превзойти это ограничение, да и то, вероятно, в мечтах.
    Программируемая скорость осуществления снимков поверхности оптическим сенсором у новой модели чипа превышает 6400 кадров/с, т.е. «бьет» предыдущий «рекорд» почти в три раза.

    Причем чип ADNS-3060 может сам осуществлять подстройку частоты следования снимков для достижения наиболее оптимальных параметров работы, в зависимости от поверхности, над которой перемещается мышь.
    «Разрешение» оптического сенсора по-прежнему может составлять 400 или 800 cpi.
    Давайте на примере микросхемы ADNS-3060 рассмотрим общие принципы работы именно чипов оптических сенсоров.

    Общая схема анализа перемещений мыши не изменилась по сравнению с более ранними моделями - полученные блоком IAS сенсора микроснимки поверхности под мышью обрабатываются затем интегрированным в этой же микросхеме DSP (процессором), который определяет направление и дистанцию перемещения манипулятора.
    DSP вычисляет относительные величины смещения по координатам Х и Y, относительно исходной позиции мыши.

    Затем внешняя микросхема контролера мыши (для чего он нужен, мы говорили ранее) считывает информацию о перемещении манипулятора с последовательного порта микросхемы оптического сенсора.
    Затем уже этот внешний контроллер транслирует полученные данные о направлении и скорости перемещения мыши в передаваемые по стандартным интерфейсам PS/2 или USB сигналы, которые уже от него поступают к компьютеру.

    Но вникнем чуть глубже в особенности работы сенсора.
    Блок-схема чипа ADNS-3060 представлена выше.
    Как видим, принципиально его структура не изменилась, по сравнению с далекими «предками».
    3.3 В питание к сенсору поступает через блок Voltage Regulator And Power Control, на этот же блок возложена функции фильтрации напряжения, для чего используется подключение к внешнему конденсатору.

    Поступающий с внешнего кварцевого резонатора в блок Oscillator сигнал (номинальная частота которого 24 МГц, для предыдущих моделей микросхем использовались более низкочастотные задающие генераторы) служит для синхронизации всех вычислительных процессов, протекающих внутри микросхемы оптического сенсора.
    Например, частота снимков оптического сенсора привязана к частоте этого внешнего генератора (кстати, на последний наложены не весьма жесткие ограничения по допустимым отклонениям от номинальной частоты - до ± 1 МГц).

    В зависимости от значения, занесенного по определенному адресу (регистру) памяти чипа, возможны следующие рабочие частоты осуществления снимков сенсором ADNS-3060.

    Как нетрудно догадаться, исходя из данных в таблице, определение частоты снимков сенсора осуществляется по простой формуле:
    Частота кадров = (Задающая частота генератора (24 МГц)/Значение регистра отвечающего за частоту кадров).

    Осуществляемые сенсором ADNS-3060 снимки поверхности (кадры) имеют разрешение 30х30 и представляют собой все ту же матрицу пикселей, цвет каждого из которых закодирован 8-ю битами, т.е. одним байтом (соответствует 256 градациям серого для каждого пикселя).
    Таким образом, каждый поступающий в DSP процессор кадр (фрейм) представляет собой последовательность из 900 байт данных.

    Но «хитрый» процессор не обрабатывает эти 900 байт кадра сразу по поступлении, он ждет, пока в соответствующем буфере (памяти) накопится 1536 байт сведений о пикселях (то есть добавится информация еще о 2/3 последующего кадра).
    И только после этого чип приступает к анализу информации о перемещении манипулятора, путем сравнения изменений в последовательных снимках поверхности.

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

    После того как интегрированный DSP процессор обработает данные снимков, он вычисляет относительные значения смещения манипулятора вдоль осей X и Y, занося конкретные данные об этом в память микросхемы ADNS-3060.
    В свою очередь микросхема внешнего контроллера (мыши) через Serial Port может «черпать» эти сведения из памяти оптического сенсора с частой примерно раз в миллисекунду.

    Заметьте, только внешний микроконтроллер может инициализировать передачу таких данных, сам оптический сенсор никогда не инициирует такую передачу.
    Поэтому вопрос оперативности (частоты) слежения за перемещением мыши во многом лежит на «плечах» микросхемы внешнего контроллера.
    Данные от оптического сенсора передаются пакетами по 56 бит.

    Ну, а блок Led Control, которым оборудован сенсор, ответственен за управление диодом подсветки - путем изменения значения бита 6 (LED_MODE) по адресу 0x0a микропроцессор оптосенсора может переводить светодиод в два режима работы: логический «0» соответствует состоянию «диод всегда включен», логическая «1» переводит диод в режим «включен только при необходимости».
    Это важно, скажем, при работе беспроводных мышей, так как позволяет экономить заряд их автономных источников питания.
    Кроме того, сам диод может иметь несколько режимов яркости свечения.

    На этом, собственно, все с базовыми принципами работы оптического сенсора.
    Что еще можно добавить?
    Рекомендуемая рабочая температура микросхемы ADNS-3060, впрочем, как и всех остальных чипов этого рода, - от 0 °C до +40 °C.
    Хотя сохранение рабочих свойств своих чипов Agilent Technologies гарантирует в диапазоне температур от -40 °C до +85 °C.

    Драйвер AMD Radeon Software Adrenalin Edition 19.9.2 Optional

    Новая версия драйвера AMD Radeon Software Adrenalin Edition 19.9.2 Optional повышает производительность в игре «Borderlands 3» и добавляет поддержку технологии коррекции изображения Radeon Image Sharpening.