...

суббота, 26 апреля 2014 г.

[Из песочницы] Arduino UNO играет в 2048 с размером поля 8х8

Относительно недавно в сети появилась увлекательная игра 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? В таком случае можно купить отдельно конвертер подобный этому.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий