Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

USB шутка 2

Однажды мне в голову пришла идея позабавиться при помощи 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-G2 Поиск в магазине ОтронВ блокнот
X1 РазъемminiUSB1 или другойПоиск в магазине ОтронВ блокнот
Jmp1, Jmp2 ПеремычкаДжемпер2 Поиск в магазине ОтронВ блокнот
Штыревое соединениеPLS-41 для версии на отладочной платеПоиск в магазине ОтронВ блокнот
Штыревое соединениеPLS-21 для версии на отладочной платеПоиск в магазине ОтронВ блокнот
Штыревое соединениеPLS-141 для версии на отладочной платеПоиск в магазине ОтронВ блокнот
Штыревое соединениеPLS-81 для версии на отладочной платеПоиск в магазине ОтронВ блокнот
Штыревое соединениеPLS-2 угловой2 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 4
Я собрал 1 4
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 4.9 Проголосовало: 4 чел.

Комментарии (21) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
андрей #
По идее можно же сделать алгоритм так, чтобы выполнять заданные клики в окне?
Ответить
0
BARS_ #
Только если будешь точно знать положение самого окна, органов управления окном и время его открытия
Ответить
0

[Автор]
Gauss #
Да, верно Барс сказал, нужно знать положение элементов относительно курсора и перемещать его на заданные координаты, и да - такое сделать можно, это не сложно
Ответить
0
Hepo #
Самое простое это выключить комп жертве. Благо расположение кнопок выключения всегда постоянно. Вопрос только с разрешением.
Ответить
0

[Автор]
Gauss #
Вообще с симуляцией мышки не так много простора для пакостей как с симуляцией клавиатуры
Ответить
0
андрей #
На самом деле, забавно будет, если сидишь, работаешь, а тут вдруг мышка поползла выключать комп!
Вообще же мне как раз нужно было сделать какого-то бота, который монотонно щелкал по нужным кнопкам, в программировании дуб, а тут статьи подвернулись!
Ответить
0

[Автор]
Gauss #
Пользуйтесь!
Ответить
0
андрей #
И много нужно поменять в коде для переделки?
Ответить
0

[Автор]
Gauss #
Вот тот кусок в статье заменить на перемещение курсора и добавить симуляцию нажатий кнопок мыши, вместо рандомных значений в функцию перемещения курсора ставим точные значения и все
Ответить
0
андрей #
Найду время - попробую, отпишусь
Ответить
0
андрей #
Короче все просто, я использую только вот такую строку:
usb_mouse_move(x, y, 0);
И задаю перемещение в системе координат x-y, подбирать только приходится все экспериментально
Ответить
0

[Автор]
Gauss #
Ну верно все, ничего особенного
Ответить
0
андрей #
Это все хорошо, да похоже и получается! Но, как делать нажатие кнопки мыши?
Ответить
0

[Автор]
Gauss #
usb_mouse_click(USB_MOUSE_BTN_LEFT);
usb_mouse_click(USB_MOUSE_BTN_RIGHT);
Ответить
0
lvl #
Это элементарно делается через скрипт на NeoS0M-е.
В комплекте со старым Sign0fMisery идёт скрипт - MadMouse - кототрый "сдувает" курсор мыши к правому краю экрана.
Ответить
0
андрей #
Вот эти слова вообще первый раз вижу...
Ответить
0

[Автор]
Gauss #
Да все же программное и аппаратное решения задачи немного разные вещи, где удобно одно будет неудобно второе и наоборот, мое мнение
Ответить
0
neopccombine #
Движение мышки напоминает перелеты мух. Еще бы программно поменять указатель на картинку мухи и будет полный улет. Мышки нет, только муха на экране
Ответить
0

[Автор]
Gauss #
Рисунок курсора поменять можно, а программно можно реализовать наверно все действия в командной строке
Ответить
0
Sver #
Алгоритм гугления инфы на тему: BadUSB, rubber ducky, duckduino (Можно изучить скетчи для ардуины)
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Набор начинающего радиолюбителя Макетная плата для пайки (10 шт)
вверх