StatTrak - счетчик убийств из игры CS GO

10952

У меня есть друг Евгений, который на своем Ютуб канале deadcraftstation крафтит различные штуки из игр и фильмов. Именно он сделал копию AWP Dragon Lore и M4A4 Howl, от которых так тащатся поклонники CS GO.  Года два назад он попросил меня сделать StatTrek. Я ему пообещал, но... как известно обещанного три года ждут. Я не выдержал и сделал на второй год. :) Жаль что Counter Strike сейчас уже не так популярен. Я в CS GO не силен, раньше поигрывал тллько в CS Source. Поэтому, что такое StatTrek, я знаю по видосам летсплейщиков и нескольким картинкам из поиска Google.

Что такое StatTrak

StatTrak ™ является дополнительным компонентом оружия в CS:GO и может быть найден только в оружейный кейсах. Оружие с технологией StatTrak ™ имеют светодиодную панель , прикрепленную к оружию. Этот счетчик отслеживает количество фрагов.

История развития идеи

Много времени потерял на разработку устройства максимально похожего на оригинал из игры. Для этого был куплен дисплей 2.2 дюйма. Он поставляется без обвязки. Развел плату специально под него. Но не стал травить ее, т. к. подумал что это слишком сложно в реализации. И под руку попалось готовое устройство TTGO на базе микроконтроллера ESP8266 с OLED дисплеем 0,9 дюйма. Как опция у нас доступен WiFi, который легко позволяет сделать например, счетчик подписчиков Youtube канала или количество фрагов в оригинальной игре. Также на плате имеется все для работы от литиевого аккумулятора. Присутствует разъем micro USB, для зарядки аккумулятора и прошивки напрямую с компьютера.

Подобных прикольных модулей существует огромное множество. Нужно сделать их обзор, но никак руки не доходят.

Что касается большого дисплея — если аудитория заинтересуется, сделаю аутентичный StatTrak на его базе.

Т.к. это устройство максимально простое но, в то же время, интересное, постараюсь сделать статью максимально доступной для новичков. Лить воду про то с какими трудностями я сталкивался по пути особо не буду :) Но основные нюансы расскажу. Может для кого-то это будет ключем в удивительный мир микроэлетроники.

Начал я с того, что решил попробовать как это будет выглядеть. Решение проблемы неправильного цвета пришло сразу, как только я взял этот модуль в руки. Содрал с дисплея тонировочную пленку, чтобы было поярче, и обклеил каптоновым скотчем в несколько слоев. А когда моделировал корпус додумался что в качестве цветового фильтра можно использовать кусочек коричневой пластиковой бутылки из под кваса, но цвет получился не совсем тот. Пришлось совместить оба способа.

История написания кода

А вот со шрифтом возникли трудности. Наш дисплей имеет разрешение 128*32 пикселя. А на оригинальном статраке светодиодная матрица на 6 символов разрешением 5*7. Нам нужно сэмитировать ее с помощью шрифта. Внутри всех найденных мной библиотек, не было подходящего шрифта — только распространенные. Подходящий шрифт под названием ledboard был найден довольно быстро в интернете, но как вы понимаете, просто взять и вставить в прошивку шрифт в формате TTF нельзя. После нескольких часов гугления и перебора разных конверторов и программ, удалось выяснить что в папке с библиотекой Adafruit_GFX лежит простой консольный конвертор - fontconvert в исходниках… В той же папке лежат инструкции как его скомпилировать и использовать. Хорошо, что я линуксойд, а то под виндой уж как-то больно сложно это все делать. Короче говоря, сконвертировал я этот шрифт и на выходе вышло почти идеально. Конечно некоторые «светодиоды» слиплись, но увы исправить это не представлялось возможным. Может кто-то из подписчиков сможет сделать идеальный шрифт. Я пока не знаю как.

Все, почти победа, остальное дело техники. В прошивке осталось добавить кнопку, которая по короткому нажатию добавляет фраг, а если зажать на 10 секунд его обнуляет. Значение счетчика сохраняется в EEPROM, чтобы при выключении результат не терялся. Если в прошивке указаны название WiFi сети, пароль к ней, ключ Youtube API и ID вашего канала, то при включении будет показываться количество подписчиков вашего канала. А если в этом режиме нажать на кнопку, включится режим счетчика убийств. С показом данных из Steam, похожая ситуация. В статье есть оба варианта прошивок.

Знакомство с Steam Web API

Как тебе такое Илон Маск? Случайно обнаружил что существует API и у стима. Быстренько допилил прошивку чтобы на дисплей выводилось количество убийств из CS GO. Теоретически, можно получить любую информацию и статистику по любой игре или пользователю. В архиве из статьи есть специальный файлик (arduinojson_steam_ansver.h) в котором перечислены методы получения данных начиная с количества выигранных раундов и заканчивая количеством килов из определенного оружия. Этот файлик был сгенерирован на чудесном сайте https://arduinojson.org/v5/assistant/ из json овтета сервера Steam. Если люди проявят интерес, можно будет сделать более информативное устройство и крутую прошивку.

Подготовка компьютера и прошивка

Для новичка следующие манипуляции могут показаться очень сложными, но на самом деле все просто. Главное делать все внимательно и не бояться проблем. Если все же проблемы возникнут, не стесняйтесь спрашивать в комментариях, предварительно погуглив. В интернете огромное количество информации по этой теме на русском языке.

  1. Идем на сайт http://arduino.cc и скачиваем последнюю версию Arduino IDE под вашу операционную систему.
  2. Устанавливем ее так же как и любой друго софт. Во время установки выскачет несколько запросов на установку драйвера - соглашаемся.
  3. Запускаем Arduino IDE
  4. Первым делом нам нужно добавить поддержку нашей платы TTGO в среде разработки Arduino IDE.
  5. Идем "Фаил ->Настройки" и в поле "Дополнительные настройки менеджера плат " вписываем следующую строчку:
    http://arduino.esp8266.com/stable/package_esp8266com_index.json


  6. Далише идем "Инструменты -> Плата -> Менеджер плат". В открывшемся окне в стрке поиска набираем "esp8266" и устанавливаем последнюю версию"esp8266 by ESP8266 Community". Заодно в "Инструменты -> Плата" выбираем пункт NodeMCY 1.0 (ESP-12E Module), а "Upload speed" ставим равным 921600.

  7. Займемся процессом установки многочисленных библиотек необходимых для работы нашего устройства. Большинство библиотек устанавливается из "Скетч -> Подключить библиотеку -> Управлять библиотеками", там через поиск ищем и устанавливаем следующуе библиотеки:
    • YoutubeApi (ver 1.1.0)
    • ArduinoJson (ver 5.13.3)
    • Adafruit_GFX Library (ver 1.3.0)
    • Adafruit_SSD1306 (ver 1.1.2)
    • Bounce2 (ver 2.52.0)
    • ESP_EEPROM (James Watson ver 2.0.0)

  8. Теперь все готово для прошивки нашего устройства. Открывайте файлы StatTrak_YouTube.ino или StatTrak_Steam.ino в зависимости от ваших предпочтений. По желанию, заполняйте параметры подключения к WiFi и ключи для доступа к API. Попробуйте скомпилировать скетч, если вылаязят ошибки, попрбуйте разобраться какая библиотек ругается, и поставьте ту версию которую использоваля. Специально, в списке библиотек, в скобках я указал те версии которые у меня работают.


  9. Подключите плату к компьютеру. В пункте меню "Инструменты -> Порт" появится что-то вроде "COM3"? Выбирайте его и нажимайте кнопку загруки скетча на плату. Все должно пройти успешно.

Получение Steam Web API Key

Чтобы у вас заработал показ статистики килов из игры CS GO, нужно получить ключ api и проверить чтобы у вас был включен публичный доступ к статке. Проверить доступ к статитсике можно на странице редактирования профиля в настройках приватности ( https://steamcommunity.com/id/ваш ID/edit/settings)

Узнать свой ID есть несколько путей. Можно посмотреть в исходном коде страницы вашего профиля. Но есть способ проще. Авторизуемся на сайте https://steamcommunity.com , и открываем свой пофиль. Из адресной строки копируем адрес, который потом вводим на сайте https://steamidfinder.com. Нас интересует steamID64.

Полученные значения вписывайте в соответсвуюшие поля в прошивке между ковчек.

//настройки Steam 
#define STEAMID "STEAMID" 
#define STEAMKEY "STEAMKEY"

Чтобы получить ключ, достаточно пройти по ссылке — https://steamcommunity.com/dev/apikey . В поле «домен» можно вписать любой домен. Я вписал свой «estunt.ru».

Получение Yotube API Key

Чтобы заработал этот вариант прошивки и на дисплее показывалось количество подписчиков вашего канала, вам необходимо получить "google apps API Token". После получения внести изменения в соответсвующие строки в прошивке. ID канала можно узнать из адресной строки браузера или в творческой студии.

//настройки YouTube API
#define API_KEY "API_KEY"  //  google apps API Token
#define CHANNEL_ID1 "CHANNEL_ID1" // ID вашего канала на YouTube

Процедура получения ключа для ютуба сложнее чем для стима, но проблем вызвать не должна.

  1. Переходим по ссылке: https://console.developers.google.com/project/ (предварительно авторизовавшись в Google);
  2. Нажимаем "СОЗДАТЬ ПРОЕКТ";
  3. В появившемся окошке задаем произвольное имя проекта и нажимаем кнопку  "создать" внизу;

  4. Дальше Вас перебросит в панель управления, где вам нужно нажать на "включить API и создать ключи"

  5. На открывшейся странице нажимаем кнопку "показать все", потом нажимаем на "YouTube Data API v3" и включаем API


  6. Дальше нужно создать учетные данные. Нажимаем соответсвующую кнопку.

  7. На этой странице выбираем как на картике. Не важно что вы выбирите в пункте "Откуда вы будете вызывать API?", главное в следующем пункте выбрать "Общедоступные данные" и нажать кнопку "Вбрать тип учетных данных"

  8. Все, копируем наш ключ и нажимаем кнопку "Готово"

Разработка корпуса

Корпус я смоделировал в онлайн 3D редакторе — tinkercad. И не надо кидать в меня тапки, для таких простых моделей — отличное решение. Корпус я распечатал на 3d принтере. Если у вас его нет можете сделать корпус из подручных материалов. Но давайте будем честны, тема 3D печати сильно развилась в последние годы. Уже сейчас 3D принтеры достаточно дешевы и просты в использовании, а еще через несколько лет станут бытовой техникой на равне с обычными принтерами. Кому интересна эта тема подписывайтесь на мой канал о 3d принтерах. И естественно, тут тоже не обошлось без нюансов. Сначала начал петчатать на принтере TEVO Michelangelo. Он всем хорош. Печатает быстро и четко, но там установлено сопло диаметром 0.4мм, чего не совсем достаточно для мелкой детализации моего корпуса. Попробовал поставиnm сопло 0.2мм, но оно забилось и давлением филамента вырвало клапан на экструдере. Поэтому пришлось печатать на принтере Anet A8. Он у меня сильно модернизирован, конструкция укреплена и стоит сопло 0,3м. Напечатал корпус, получилось неплохо. Но, поскольку я пытаюсь сделать девайс максимально простым для повторения, переработал и упростил модель для того, чтобы можно было печатать стандартным соплом 0.4мм на любом принтере. Напечатал все на принтере TEVO Tornado.

Все модели доступны по ссылке - https://www.tinkercad.com/things/gAUpO2E5jAC или тут можно скачать все подготовленное к печати https://www.thingiverse.com/thing:3306560

Постобработка корпуса

Постобработка ограничилась удалением поддержек и зашкуриванием. Если слайсер настроен должным образом, горизонтальные плоскости получаются идеально ровными. А если толщину слоя поставить меньше 0,1мм то и боковые стенки выходят почти идеально гладкими, но это увеличивает время печати. Тут выбор за вами.

Т.к. корпус разбит на части для удобства печати, его придется склеить. Первым делом вырезаем окно из пластиковой бутылки дымчатого цвета размером 37мм*15мм и вклеиваем ее с внутренней стороны корпуса. Хотя, можно обойтись и наклеиванием каптонового скотча на дисплей.

Дальше идет покраска из балончика, перед которой необходимо склеить все детали в единое целое. Как расположить бобышки без разницы, но мне кажется, что удобнее когда кнопка ближе к спусковому крючку (Бобышки немного отличаются размереом. У той что для выключателя, отверстие немного больше.). Не забывайте что, когда красите пластик из балончика, нельзя допускать полного высыхания слоев. Если сверху высохшего слоя нанести свежую краску, сухой слой вспучится.

Сборка

Сборка устройства также проста, но попаять все-же придется. Нам понадобится кнопочка 6*6, маленький кнопочный выключатель, два тонких проводка длинной около 5 см., и маленький литиевый аккумулятор. Проводок питания с разъемом идет в комплекте с платой.

Первым делом удаляем родные кнопки с платы. Я отпаял их феном, если такового нет удалите их паяльником или кусачками. Провод питания припаивается напрямую к аккумулятору, для этого придется аккуратно расклеить его. А после запайки в соответствии с цветами, заклеить. Выключатель питания впаивается вразрез любого из питающих проводов. У выключателя 6 ножек, две из которых не используются, а 4 оставшиеся можно попарно запаралелить. Кнопку припаиваем к земле и выводу D1 (5 в среде Arduino IDE), так-же к этому выводу подключаем подтягивающий резистор, который вторым концом подключаем к 3,3V. Теперь распихиваем все по своим местам, и наше устройство практически готово. Осталось только вставить заднюю крышку, можно на клей. Нюанс — чтобы заряжать устройство вам понадобится кабель с удлиненным micro USB. У меня такого не нашлось, и я подрезал изоляцию на обычном.

Сделал несколько аксессуаров. Во первых — подставку чтобы можно было поставить эту штуку на столе. Во вторых — крепление на планку пикатини, чтобы можно было установить StatTrak на страйкбольное оружие или макет. Для себя я распечатал макет пистолета Five-SeveN. Внешне выглядит неплохо.

В итоге у нас получился настоящий StatTrak. Я думаю применение ему найдут страйкболисты. Для страйкбола можно выпилить интернет функции из прошивки. Поклонники CS могут поставить его под монитором и в реальном времени наблюдать за своим прогресом в игре.

Комментарии

Комментарии