Камера из компьютерной мыши или измеритель перемещений
В обычной механической, компьютерной мышки есть два оптических датчика, которые можно использовать для своих нужд. Такие датчики применяются для определения положения предметов, например: закрыта ли дверь, или сколько раз провернулся вал. Самый оптимальный способ, это использовать уже готовую платку и микросхемку, особенно если в системе предполагается использовать микроконтроллер, они обычно уже имеют входы поддержки интерфейса RS-232. Если же такой возможности нет, можно использовать схему на рисунке.
Датчик разделен на две части передающая (VD1) и принимающая (VD2). Передающая это светодиод работающий в инфракрасном диапазоне, а принимающая это два фотодиода в одном корпусе. Понятно, что два - для того чтобы можно было определить в какую сторону крутится колосеко мышки.
R1 - задает ток для светодиода. R2 служит для преобразования тока фотоприемника в напряжение (не использованная ножка VD2 это выход второго фотоприемника). Напряжение на этом сопротивлении меняется от 1.5В (нет света) до 3.4В (есть свет). Нижний предел в 1.5В слишком велик для переключения цифровой TTL схемы, в которой порог переключения составляет 0.8В. Поэтому используется операционный усилитель DA1 в режиме компаратора. Пороговое напряжение для него задает резистивный делитель R3, R4 которое составляет 2.5В. Можно считать, что с выхода DA1 идет уже цифровой сигнал.
Для уменьшения случайных наводок и ложных срабатывания, можно ввести гистерезис в уровни переключения DA1. Для этого нужно включить условно показанные резисторы R6, R7 (R6 в разрыв между R2 и DA1). Чем ближе номинал R6 к R7 тем шире будет петля гестерезиса или тем дальше друг от друга будут уровни переключения из "0" в "1" и из "1" в"0". Так при приведенных номиналах уровень переключения из "0" в "1" 2.8В, а из "1" в "0" 2.1В.
Далее для примера изображена простенькая схемка индикации из инвектора DD1 и светодиода. Когда между VD1 и VD2 будет находится предмет мешающий прохождению света, будет гореть светодиод VD3.
Необходимо учитывать возможность внешних, мешающих, воздействий. Датчик также хорошо принимает излучение, как на стороне передатчика так и с противоположной. Когда я испытывал схему, она реагировала на настольную лампу. Поэтому датчик нужно помещать в какой ни будь корпус, защищающий его от внешнего света.
Задача: быстро сделать датчик линейного перемещения из компьютерной мышки.
В обычных мышках прячется высокочувствительный оптический датчик. Там скрывается своя маленькая «камера» и процессор обработки, который отслеживает передвижения малейших точек на поверхности. В топовых мышках разрешающая способность составляет всего 3 мкм!
С какими подмышиными камнями мы столкнулись, плюс техническая часть, расскажем дальше!
Следующее ТЗ дал заказчик: сделать как можно скорее, с любой мышкой (возможно беспроводной), выводить на 7 сегментный индикатор, обнулять по кнопке, компьютер не подходит, нужна разрешающая способность 0.01 мм, максимальное расстояние 1000 мм.
Для начала как все это делалось:
В итоге, под нож хирурга легла Малина пи 3. Четыре 64 битных ядра A-53 по 1GHz, 512 МБ оперативки и много других космических для этой задачи циферок.
Задачка: Индикация должна быть на выданных 7-сегментных индикаторах. Получается нам необходимо по 6 цифр на одну координату, итого 12 индикаторов. Каждый индикатор имеет 7 ножек на цифры+ ножка на светодиод точки (dp), общий провод не считаем. Итого после простых расчетов получаем, что мы должны управлять 96 проводниками плюс нужна кнопка. 96 резисторов не очень хотелось тратить.
Послушайте!
Ведь, если светодиод зажигают — значит — это нужно один резистор?
Управлять сразу таким массивом ножек нету возможности. Выход есть! И даже несколько!
1) Использовать дополнительные микросхемы по типу max7219, или сдвиговые регистры, мультплексоры, и т.д.
+ Можно почти бесконечно наращивать количество индикаторов
— Max7219 оказалась с рабочим напряжением 5 В
— Не было под рукой ничего подходящего.
2) Можно сделать динамическую индикацию. В один момент времени зажигать только один светодиодный индикатор. Если индикаторы переключать очень быстро, то человеческий глаз не заметит подставы.
+ Нужно только 8 проводов и резисторов на один индикатор и 12 на переключение индикаторов. Плюс не забываем кнопку. Итого: всего 21 ножка против 96. Берем!
— Так как мы пытаемся управлять целым индикатором через один пин распберри, то максимальный ток у нас ограничен 50 мА. Всегда берем запас, и берем 35 мА на все 8 светодиодов (что не шибко). Еще к этому добавим быстрое переключение индикаторов. В итоге у нас каждый светит в 12 раз меньше положенного. Доработать можно 12 транзисторами, но оставил я это на потом, т.к. яркости в конечном счете хватило.
Теперь начинается софт:
На распберри пи надо поставить linux. Я поставил минимальный дистрибутив
RASPBIAN JESSIE LITE.
Далее через программу putty подключился к IP малинки, и дальше все через командную строку.
Чтобы было проще работать с GPIO(портами ввода и вывода) есть замечательная библиотека WiringPi.
Как устанавливать её и управлять портами, вы сможете найти много информации в сети, поэтому не буду подробно останавливать на этом.
Дальше надо создать папочку нашего проекта:
Дальше открываем редактор и вставляем код с гита. ВАЖНО! Код писал на очень скорую руку!
для выхода из редактора надо нажать Alt+x и сохранить файл с названием blinker.c. Дальше надо обязательно скомпилировать с указанием wiring pi:
Все! Теперь подключаем мышку, вставляем провода и запускаем!
// pin number declarations. We're using the Broadcom chip pin numbers.
const int p21pin = 2;
const int p22pin = 3;
const int p23pin = 4;
const int p24pin = 17;
const int p25pin = 27;
const int p26pin = 22;
const int p11pin = 10;
const int p12pin = 9;
const int p13pin = 11;
const int p14pin = 5;
const int p15pin = 6;
const int p16pin = 13;
const int papin = 8;
const int pbpin = 23;
const int pcpin = 12;
const int pdpin = 20;
const int pepin = 21;
const int pfpin = 24;
const int pgpin = 18;
const int pdppin = 16;
const int butpin = 26;
Автозапуск при загрузке:
Работать с этой прогой очень просто. по нажатию кнопки мыши или просто кнопки на плате идет обнуление. При долгом нажатии кнопки переходим в режим регулировки DPI. Это важный параметр который задается мышкой и показывает сколько отсчетов мы получим при движении на один дюйм. Соответственно копка на плате и на мышке прибавляет и убавляет DPI. Долго нажимаем, наше значение записалось в файл и надежно хранится до следующей загрузки системы. Для чистоты эксперимента в программе, индикация, получение информации с мышки и кнопка обрабатываются а параллельных процессах.
Дальше самое интересное! Тестирование и результаты!
Какие есть нюансы работы с мышкой:
1. Оси X и Y на моей мышке были не параллельны боковым граням, приходилось для высчитывания реального расстояния пользоваться «пифагоровыми штанами».
2. Разрешающая способность не равно погрешность!
Простым языком — разрешающая способность действительно показывает минимальное перемещение, которое увидит мышка, (отсчеты в компьютере должны быть дискретны минимальной разрешающей способности). А вот что мышка ничего не пропустит, ничем не гарантируется. Можно уменьшить эту величину используя хорошие поверхности (чтобы оптический сенсор мог отслеживать перемещения), использовать небольшие скорости. Но пропуски будут всегда! Для пользователя это означает постоянный уход нуля и непрогнозируемую погрешность измерения.
3. USB HID по которому работает мышь не гарантирует доставку информации в компьютер! То есть неизвестно пропустил ли компьютер какую нибудь информацию с мышки или нет. Вероятность пропажи информации малая, но все же есть.
4. Настройки чувствительности(разрешающей способности) иногда хранятся не в мышке, а в программе для мышки.
В итоге: недостатки перевесили все плюсы мышки как измерительного прибора. Поэтому проект закрыл и выкладываю для дорогих моих читателей на GeekTimes.
В этой схеме микросхема сенсора от компьютерной мыши используется для измерения вращения диска, который может быть механически связан с любым типом оборудования или приборов. Одной из особенностей схемы является возможность выполнения подстройки соотношения числа импульсов на оборот изменением позиции сенсора вдоль радиуса диска.
Оптический датчик мыши представляет собой КМОП микросхему, предназначенную для построения оптико-электронных следящих систем. Внутри микросхемы изображения захватываются, оцифровываются и обрабатываются в цифровом виде.
Для примера рассмотрим простой и дешевый сенсор OM2. Это устройство измеряет позицию, основываясь на полученных кадрах изображения поверхности, и путем математической обработки определяет направление перемещения и его величину. Разработанный для использования со светодиодом повышенной яркости датчик помещен в полистирольный оптический корпус. Датчик не имеет подвижных частей, не требует точной оптической подстройки и позволяет создать законченную, компактную следящую систему. OM02 вырабатывает квадратурный выходной сигнал для обоих направлений перемещения (X и Y). Разрешающая способность составляет примерно 0.06 мм, а скорость перемещения может достигать 0.4 м/с.
Микросхема датчика формирует квадратурный сигнал по направлению X, эмулирующий выход обычного энкодера. Для двухмерной системы могут быть использованы обе координаты X и Y. X1 и X2 генерируются с максимальной частотой около 25 кГц. Диаграммы на Рисунке 1 иллюстрируют временные характеристики для оси координат X (направление движения — вправо). При необходимости квадратурный выходной сигнал может быть использован для непосредственного управления шаговым мотором.
Схема включения датчика OM02 приведена на Рисунке 2. Согласно документации на микросхему, допускается использование ее внутреннего тактового генератора. В этом случае конденсатор Сosc может не потребоваться. Rosc определяет частоту кадров: меньшим значениям сопротивления соответствуют более высокие частоты.
Подключив выходы X1 и X2 к входу логического элемента исключающее «ИЛИ», можно удвоить выходную частоту данных, при этом потеряв информацию о направлении перемещения.
Физическая реализация
Используемый диск (или другая поверхность) должен иметь некоторую текстуру, узор, царапины или грубую шлифовку для того, чтобы получить хорошие результаты оптического распознавания элементов поверхности (Рисунок 3).
Конструкция, показанная на Рисунке 4, успешно использовалась для обеспечения синхронного движения в составе технологических линий, транспортеров, этикетировочного оборудования и печати на движущихся объектах. Было изготовлено более 100 экземпляров, все они работают спустя несколько лет.
Рисунок 4. |
Принципиальные схемы для интерфейса SPI
Доступны также и другие микросхемы оптических сенсоров, различающихся используемыми типами источников света, интерфейсами, скоростями и так далее. Например, в оптическом КМОП датчике мыши PAN3101 (Рисунок 5) используется последовательный интерфейс SPI, а оптический навигационный КМОП датчик PAN101B (Рисунок 6) имеет оба типа выходов, как SPI, так и квадратурный.
Датчики с интерфейсами SPI (или USB при использовании дополнительной микросхемы) не позволяют отслеживать каждый отдельный импульс, поскольку передают данные пакетами. Для приложений, работающих в жестком реальном времени, предпочтительнее датчики с квадратурным выходом.
Было бы также интересно построить энкодер на базе беспроводной компьютерной мыши, и, возможно, еще интереснее, на основе датчика от цифрового штангенциркуля, так как большинство из них имеют интерфейс I 2 C. Но это уже другая история.
Если разобрать оптическую компьютерную мышь,можно увидеть светодиод подсветки который светит красным светом,фокусирующие линзы и микросхему с 8 выводами.Эта микросхема является простой видеокамерой с низким разрешением съемки и называется она матричным сенсором или КМОП оптическим сенсором.
как устроена и работает компьютерная мышь что из нее можно сделать как устроена и работает компьютерная мышь что из нее можно сделатьСветодиод светит ярко в линзу,от нее красный свет попадает на поверхность и ее освещает(на коврик и др).Другая линза проецирует свет с поверхности на сенсор,находящийся в микросхеме через небольшое отверстие в ней.Микросхема содержит систему сбора изображений и процессор DSP обработки изображения,также она каждую секунду делает до нескольких тысяч снимков изображения поверхности в секунду.Эти снимки представляют из себя черно-белые квадратики,тысячи этих квадратиков соединяются в один кадр.Если переместить мышь,то снимок с поверхности будет уже другой и эти изменения кадров обработает микросхема и подаст сигнал на компьютер,в котором установлен драйвер и мы увидим перемещение курсора по экрану монитора.
матричные сенсоры из оптической компьютерной мыши из них делают примитивные видеокамеры матричные сенсоры из оптической компьютерной мыши из них делают примитивные видеокамерыНа основе матричных сенсоров любители делают различные устройства,например примитивную видеокамеру,которая снимает с низким разрешением вблизи или измеритель угловых или линейных перемещений.Подключил матричный сенсор PAN3101DB по схеме на фото.Подключение восьми-выводных сенсоров в основном идентичное,наверное это из-за одного производителя.
подключение сенсора из компьютерной мыши PAN3101DB подключение сенсора из компьютерной мыши PAN3101DBСветодиод на схеме является подсветкой,частота резонатора может быть другой,вроде 18.432 МГц по даташиту. Вывод SCLK-это часы последовательного интерфейса.SDIO-интерфейс двунаправленных данных.К выводу SCLK подключил вход осциллографа,осциллограммы при затенении и освещении сенсора показаны на фото.
С помощью микросхемы можно проверять работоспособность кварцевых резонаторов.Устанавливаете рядом радиоприемник настроенный на частоту кварца,а кварц подключаете к выводам 1-2,в приемнике услышите несущую при исправном кварце.Проверял кварцами от 3.5 до 27 МГц.
«Удаленка» открыла множество возможностей для вчерашних офисных трудяг: теперь рабочее время можно тратить на более полезные вещи, чем разговоры с коллегами.
Хорошо, если менеджеры компании умеют ставить пул задач в таскере. Сделал, закрыл и свободен если уложишься в отведенное время .
Хочешь — иди в магазин, хочешь — устрой дополнительный перекус. Можно даже вздремнуть в неурочный час.
К сожалению, существуют программы для учета рабочего времени, работающие в автономном режиме. Какие-то из них собирают скриншоты, другие пытаются отслеживать работу конкретных программ, третьи предлагают менеджерам напрямую подключаться и проверять происходящее.
В ряде случаев работодатель следит только за активностью компьютера. Самый простой, доступный и простой в реализации вариант (о прочих поговорим как-нибудь в другой раз).
Для обхода такого отслеживания наши китайские друзья выпустили замечательное устройство Mouse Jitter, позволяющее имитировать бесконечную работу оптической мыши.
Правда, первоначальная цель устройства была в поддержании активного состояния компьютера, необходимого при работе некоторых программ.
Гаджет представляет собой простейшую коробочку с вращающейся вставкой. Из органов управления доступна только кнопка включения.
Больше и не нужно, поскольку USB-кабель используется только для подключения питания. При отсутствии такового можно использовать внешний аккумулятор.
Устройство работает вне зависимости от аппаратной конфигурации и операционной системы компьютера. Программные проверки тоже не станут помехой — нет подключения к компьютеру, нет проблем.
Для физических офисов это актуально, ведь зачастую порты на рабочих компьютерах заблокированы для пользы самих же пользователей.
Достаточно включить питание и поставить на устройство мышь так, чтобы её датчик оказался на вращающейся платформе.
С учетом габаритов Mouse Jitter, он подойдет для любых оптических и лазерных манипуляторов, включая те из них, что разборчиво относятся к используемым поверхностям.
Вставка после включения самостоятельно вращается случайным образом, заставляя оптический датчик установленной мыши думать, что происходит перемещение по столу и двигать курсор.
От сложных средств мониторинга не спасет. Но скринсейвер не включится, активное окно останется таковым даже при проверке активности.
Стоит Mouse Jitter совсем немного по сравнению с приносимой пользой: всего 2787 рублей. С купоном GZDZZ5M5EGCV можно дополнительно сэкономить.
Читайте также: