Однажды мне в голову пришла идея позабавиться при помощи USB шутки, генерирующей случайные нажатия клавиатуры и некоторых сочетаний клавиш. Сейчас я немного видоизменил эту пакость – теперь у нас случайным образом будет передвигаться курсор мышки. Тоже достаточно забавно. Особенно наблюдать за человеком, который внезапно обнаруживает неисправность мышки в своем компьютере. К сожалению, первое апреля это совсем не ближайший праздник, но ведь подшутить над друзьями и коллегами не запрещается в другой день.
Все началось с того, что принесли мне мышку как хлам, оказалось бракованную, и вся беда заключалась в том, что датчик не отслеживал правильно перемещение – в рабочем положении курсор мышки постоянно дрожал и дергался, стоило поднять мышку в воздух и дергание прекращалось. Одним словом – брак, заводской брак, ведь мышка была новая. После этого, вспомнив про USB шутку, было принято решение сделать ещё одну пакость, на этот раз симулирующую неисправность мышки.
Для всего этого нам понадобится сделать схему (если она ранее не была изготовлена) и корпус (по желанию или вкусу), чтобы замаскировать умысел пошутить. В моем случае я буду использовать ранее изготовленную отладочную плату на базе микроконтроллера AT90USB162. Файл печатной платы можете скачать в конце статьи. Либо же пойти своим уникальным путем и сделать печатную плату под более компактный корпус от USB флешки. В этом случае не забывайте делиться своими фотографиями по кнопке «Я собрал» так же в конце статьи. Думаю, всем будет интересно. Если же вы уже ранее собрали что-то подобное в корпусе по варианту USB шутки, которая симулирует случайные нажатия клавиш, то тут хорошие новости – любое устройство на базе микроконтроллера AT90USB162 можно перепрограммировать по тому же интерфейсу USB, если предусмотрены кнопочки сброса и загрузки встроенного bootloader’a. Программирование данного микроконтроллера занимает секунду времени.
Если вам все ещё интересно, то переходим к схеме устройства:
Схема построена на микроконтроллере AT90USB162, питание которого берется от порта 5 вольт. Микроконтроллер внутри содержит стабилизатор на 3,3 вольта для питания линий USB (которые как раз и работают именно на таком напряжении). Конденсатор C6 выполняет функцию фильтра для этого внутреннего стабилизатора напряжения. Номинал можно увеличить. Резисторы R2, R3 необходимы для корректной работы по линиям данных USB порта. Даташит рекомендует использовать 22 Ом. Кварц используется номиналом 16 МГц, потому что микроконтроллер питается от 5 вольт, что позволяет поставить кварцевый резонатор на более высокую частоту. При питании 3,3 вольта, согласно даташиту, максимальная частота кварца для этого микроконтроллера составила бы 8 МГц. Резисторы R5 и R6 подтягивают 5 вольт к линиям микроконтроллера для правильной работы кнопок и исключения воздействия помех на этих линиях. Резистор R6 подключается через перемычку к выводу микроконтроллера, который при замыкании на землю в связке с кнопкой reset активирует bootloader. Это необходимо для возможной перепрошивки устройства во что-то более полезное. Конденсаторы C1, C2, C5 фильтрующие конденсаторы напряжения питания всей схемы. Конденсаторы C3 и C4 необходимы для запуска и правильной работы кварцевого резонатора Z1. Светодиод LED1 выполняет индикацию присутствия напряжения питания на схеме, а светодиод LED2 после инициализации устройства три раза моргнет как, например, моргает светодиод у флешек. На моей плате светодиод LED2 можно отключить перемычкой Jmp1. Резисторы R1 и R4 ограничивают ток, протекающий через светодиоды, чтобы те не вышли из строя. Номинал выбран с избытком, потому что примененные светодиоды сверхъяркие и им достаточно небольшого тока, чтобы они достаточно ярко светились. Такой выбор немного повысит их надежность. Номиналы этих резисторов можно варьировать в разумных пределах. Сами же светодиоды можно выбрать любой формы и способа монтажа, но на моей плате можно использовать лишь для поверхностного монтажа типоразмера 1206 (по факту на эти же площадки нормально садится типоразмер 0805). Ограничительный резистор для красного светодиода имеет больший номинал, потому что падение напряжения на красных светодиодах, как правило, всегда меньше, чем на остальных. Чем больше падение напряжения на светодиоде, тем меньше нужен ограничивающий резистор. Расчет выглядит следующим образом: напряжение питания отнять напряжение падения на светодиоде и это все разделить на ток, протекающий через светодиод, ответом будет сопротивление ограничивающего ток резистора.
Итак, в моем исполнении готовое устройство выглядит так (не совсем похоже на флешку, зато печатная плата не на один раз, можно использовать и для других проектов):
Для прошивки микроконтроллера используется программа Flip, скачать ее последнюю версию можно с официального сайта Atmel. Подробно процесс программирования рассмотрен в статью про отладочную плату на базе микроконтроллера AT90USB162. Напомню, что никаких фьюз битов прошивать не нужно, лишь саму прошивку во флэш память и все.
После того, как прошивка будет записана в микроконтроллер, при рестарте схемы появится новое устройство в диспетчере устройств компьютера. Так как устройство использует протокол HID, установка драйвера не требуется и схема работает сразу же без каких-либо настроек и определяется в системе как стандартная USB мышка.
В процессе работы микроконтроллер генерирует случайные числа, которые определяют случайные положения курсора относительно текущего положения, количество случайных перемещений курсора, время задержки между перемещениями. Задержки по времени две – одна короткая, другая длинная. Первая в зависимости от количества случайных перемещений определяет время между самими перемещениями, вторая задержка как бы дает задержку между циклами хаотических дерганий курсора. Таким образом, в зависимости от настроек этих случайных чисел можно получить как редкие короткие срабатывания помех для курсора, так и постоянное срабатывание случайных перемещений.
while (1)
{
// Place your code here
nn = (rand())%300;
time2 = (rand())%10000;
for (k=0;k<nn;k++) {
xx = (rand())%30;
yy = (rand())%30;
time = (rand())%10;
x = 15-xx;
y = 15-yy;
usb_mouse_move(x, y, 0);
delay_ms(time);
}
delay_ms(time2);
}
nn – количество случайных передвижений, которые случаются с коротким промежутком времени
time – короткий промежуток времени
time2 – длинный промежуток времени, используется для того, чтобы усыплять бдительность (другими словами случайные перемещения будут происходить пачками с периодом в этот промежуток времени, его можно задать либо статически, либо также при помощи функции случайных чисел)
x, y – относительные координаты перемещения курсора мышки, формируются при помощи переменных xx и yy
К статье прилагается прошивка для микроконтроллера AT90USB162, исходный код в программе CodeVisionAVR, файл печатной платы, а также небольшое видео.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
IC1
МК AVR 8-битAT90USB1621
R1
Резистор1.5 кОм1
1206R2, R3
Резистор22 Ом2
1206R4
Резистор1 кОм1
1206R5, R6
Резистор10 кОм2
1 — 0805, 1 — выводнойC1, C6
Конденсатор1 мкФ2
1206C2
Конденсатор100 нФ1
1206C3, C4
Конденсатор22 пФ2
1206C5
Конденсатор10 мкФ1
1206LED1
СветодиодКрасный1
1206LED2
СветодиодЗеленый1
1206Z1
Кварцевый резонатор16 МГц1
S1, S2
Тактовая кнопкаIT-1127-5-160G-G2
X1
РазъемminiUSB1
или другойJmp1, Jmp2
ПеремычкаДжемпер2
Штыревое соединениеPLS-41
для версии на отладочной плате
Штыревое соединениеPLS-21
для версии на отладочной плате
Штыревое соединениеPLS-141
для версии на отладочной плате
Штыревое соединениеPLS-81
для версии на отладочной плате
Штыревое соединениеPLS-2 угловой2
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- 61.hex (8 Кб)
- 611.rar (117 Кб)
- AT90USB162_final_v_2_0(3).lay6 (91 Кб)