Однажды мне в голову пришла идея позабавиться при помощи 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-бит | AT90USB162 | 1 | Поиск в магазине Отрон | ||
R1 | Резистор | 1.5 кОм | 1 | 1206 | Поиск в магазине Отрон | |
R2, R3 | Резистор | 22 Ом | 2 | 1206 | Поиск в магазине Отрон | |
R4 | Резистор | 1 кОм | 1 | 1206 | Поиск в магазине Отрон | |
R5, R6 | Резистор | 10 кОм | 2 | 1 - 0805, 1 - выводной | Поиск в магазине Отрон | |
C1, C6 | Конденсатор | 1 мкФ | 2 | 1206 | Поиск в магазине Отрон | |
C2 | Конденсатор | 100 нФ | 1 | 1206 | Поиск в магазине Отрон | |
C3, C4 | Конденсатор | 22 пФ | 2 | 1206 | Поиск в магазине Отрон | |
C5 | Конденсатор | 10 мкФ | 1 | 1206 | Поиск в магазине Отрон | |
LED1 | Светодиод | Красный | 1 | 1206 | Поиск в магазине Отрон | |
LED2 | Светодиод | Зеленый | 1 | 1206 | Поиск в магазине Отрон | |
Z1 | Кварцевый резонатор | 16 МГц | 1 | Поиск в магазине Отрон | ||
S1, S2 | Тактовая кнопка | IT-1127-5-160G-G | 2 | Поиск в магазине Отрон | ||
X1 | Разъем | miniUSB | 1 | или другой | Поиск в магазине Отрон | |
Jmp1, Jmp2 | Перемычка | Джемпер | 2 | Поиск в магазине Отрон | ||
Штыревое соединение | PLS-4 | 1 | для версии на отладочной плате | Поиск в магазине Отрон | ||
Штыревое соединение | PLS-2 | 1 | для версии на отладочной плате | Поиск в магазине Отрон | ||
Штыревое соединение | PLS-14 | 1 | для версии на отладочной плате | Поиск в магазине Отрон | ||
Штыревое соединение | PLS-8 | 1 | для версии на отладочной плате | Поиск в магазине Отрон | ||
Штыревое соединение | PLS-2 угловой | 2 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- 61.hex (8 Кб)
- 611.rar (117 Кб)
- AT90USB162_final_v_2_0(3).lay6 (91 Кб)
Комментарии (21) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]
Вообще же мне как раз нужно было сделать какого-то бота, который монотонно щелкал по нужным кнопкам, в программировании дуб, а тут статьи подвернулись!
[Автор]
[Автор]
usb_mouse_move(x, y, 0);
И задаю перемещение в системе координат x-y, подбирать только приходится все экспериментально
[Автор]
[Автор]
usb_mouse_click(USB_MOUSE_BTN_RIGHT);
В комплекте со старым Sign0fMisery идёт скрипт - MadMouse - кототрый "сдувает" курсор мыши к правому краю экрана.
[Автор]
[Автор]