Pull to refresh

Arduino UNO играет в 2048 с размером поля 8х8

Reading time 3 min
Views 67K
Относительно недавно в сети появилась увлекательная игра 2048. Много народу затянула с первых дней её появления в сети. И все ради того чтоб собрать заветное число 2048. Наигравшись вдоволь в эту игру, мне попалась новая версия игры, в которой число клеток строк и столбцов увеличилось до восьми.

Тут-то все и началось, после трех часов игры я так и не проиграл, а азарт только возрастал пропорционально полученным очкам. Убив почти половину дня, складывая циферки, мне стало интересно. Сколько по времени можно играть в эту игру? Но нарочно проигрывать я не хотел, (не зря ведь целый день играл) решил написать скетч который будет за меня выполнять не сложные действия, перемещая строки и столбцы с цифрами. Сразу хочу уточнить, что идею написать программку для выполнения на ПК я отбросил, ибо это давно избитая тема. Алгоритм в видео отличается от того что использовал я при написании скетча.
Итак, приступим, что нам понадобится:
  • Arduino UNO
  • Фирменная утилита Atmel – Flip
  • Провод и перемычка
Цель была достаточно простой: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре. Чтоб при подключении устройства к компьютеру запускался скетч и на мониторе стали передвигаться циферки игры 2048.
Алгоритм наших действий:
  1. Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  2. Прошиваем загрузчик Arduino, usb контроллер ATmega8U2
Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard. Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.
Немного теории.
Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.
Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB <-> COM (FT232R). Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB. Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino. Видимо разработчики его специально создали, чтоб пользоваться DFU-режимом интерфейсного контроллера. В интернете много пишут о том, что следует припаять резистор на 10кОм на специально предусмотренное для него место на обратной стороне платы.
Формально сложности никакой нет, вот только не каждый рискнет паять. Да и честно это ни к чему. Есть способ намного удобней.
После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU.
Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – AT90USB82. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.

  1. Выбираем в меню Device > Select > AT90USB82
  2. Выбираем в меню Setting > Communication > USB
  3. Жмем Open
  4. Приступаем к прошивке, жмем Run
По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.
Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому.
Tags:
Hubs:
+24
Comments 17
Comments Comments 17

Articles