Іграшка в кишені. Студентський hardware-проєкт портативної гральної консолі.

В рамках дисципліни вільного вибору “Мікропроцесорна техніка з відкритим кодом” студенти кафедри Електричних станцій, взялись за розробку власного pet-проєкту.    Використавши знання, отримані в контексті електроенергетичної сфери, застосування вони взялись втілити давнє бажання — спробувати розробити власний гаджет.

Нижче доповідь головних виконавців проєкту про хід розробки.

 

Вступ

Мабуть кожен хоч раз замислювався: “А як же насправді створюється електроніка? Невже людина здатна створити щось настільки складне та геніальне?”. Ця думка довгий час бентежила і мене.

 Микита Новаков, team lead / software engineer

Може скластися враження, що розробкою проєкту, подібного нашому, можуть займатися лише багатомільйонні компанії, із залученням тисяч спеціалістів. Але як ми з’ясували – це не так. Для створення простого прототипу не треба бути ні доктором наук, ні мільйонером.

Базові відомості

Почнемо екскурс з фундаменту – мікроконтролера. Можна сказати, що електричне живлення схеми – це серце, а мікроконтролер – мозок системи.

Посилаючись на вікіпедію, можна сказали що “мікроконтролер — це монокристальний комп’ютер, здатний виконувати прості завдання“. При розробці, ми абстрактно уявляли його як штуку, якій ми можемо наказати щось робити, а вона, в свою чергу, буде керувати системою та виконувати накази. Це дає можливість усвідомити, що можливості, загалом, обмежені лише нашою фантазією.

Яскравим прикладом мікроконтролерів є платформа Arduino. Вона дешева, а головне – проста в освоєнні. Слід сказати, що Arduino – це колекція плат, з якої можна обрати ту, що ідеально підходить для конкретної сфери застосування. Ось приклад деяких з них:

  • Arduino Mega
  • Arduino Uno 
  • Arduino Mini
  • Arduino Nano

Візуалізація друкованох плати. Arduino NANO позначена синім кольором.

Саме Arduino Nano ми і використали у своєму проєкті. Її особливості – повна ідентичність “начинки” Arduino Uno, але у меншому типорозмірі.Для роботи з Arduino нам знадобиться програма Arduino IDE і баові навички програмування на C++. Для якихось нескладних проєктів, можна обійтися без програмування, але тоді прийдеться шукати чужий код. Ще з мінусів – у вас не буде можливості корегувати програму за вашим бажання.

Початок проєкту

Наш проєкт – портативна приставка. Іграшка, що буде поміщатися у кишені. Щоб не загубитися у такій об’ємній роботі, ми відтворили для себе план:

  • Ідея
  • Підбір комплектуючих
  • Схема та модель візуалізації
  • Програмна частина
  • Тестова фізична модель
  • Розробка плати
  • 3D модель корпусу
  • Остаточна фізична модель

Ідея

Ми хотіли розробити невеликих розмірів та ваги іграшку, котра б могла у собі містити збірку ігор. За бажанням список ігор можна буде оновлювати.

Віталій Щербак, software engineer

Необхідні комплектуючі

Ми вже встановили, що розумом приладу буде Arduino. Так як це приставка, повинен бути екран, кнопки чи джойстики (від джойстиків ми відмовились через велікі розміри).

Ще не треба забувати про живлення схеми, а там все на так просто. На етапі проєктування, Arduino живиться через USB напругою 5V. Цей варіант не підходить бо не є портативним. Тому ми обрали другий – живити схему через пін Vin (6-12 В)

Тут ми стикнулися з другою проблемою живлення. Акумуляторів необхідного розміру з такою напругою не існує (а якщо б існували, то коштували б дуже багато). Для рішення цієї задачі знадобився перетворювач напруги.

Ну і третя проблема елементу живлення – зарядка. У проєкті був застосований Li-On акумулятор. Для таких акумуляторів потрібен особливий контроль заряду. Для цього була використана плата контролю живлення.

Зібравши все до купи, маємо ось такий список необхідних комплектуючих:

1. Контролер. Ми обрали Arduino Nano на базі ATmega328P
2. Дисплей OLED I2C / IIC LCD 128×64 0.96″
3. Кнопки формату 12*12*7,3 мм / розімкнуті в нормальному положенні
4. Елементом живлення виступив б/в акумулятор з плеєру. Таким чином, ми заодно ще й трішки допомогли екології відмовившись від купівлі нового.
5. Для контролю заряду ми обрали модуль TypeC TC4056 для Li-ion акумуляторів / із захистом (28*7,3 мм)
6. Підвищуючим перетворювачем став ckcs bs01 / DC-DC від 3.7V до 12V (22*11 мм)
7. Вимикач обрали звичайний з двома положеннями (8,5*3,5*11,2)

Моделювання у WOKWI.

Почати ми вирішили з віртуальної моделі у Wokwi.

  1. OLED I2C 128×64 має чотири контакти: VCC, GND, SCL, SDA.
  2. VCC підключаємо до 5V
  3. GND до GND
  4. SCL до A5
  5. SDA до A4

Кнопки розташовують між цифровим піном (D2-D13) та землею. В нашому випадку задіяні D2, D3, D4, D8, D9.

Інші елементи схеми нас поки не цікавлять. Для моделі у WOKWI вистачить і цього.

Результатом моделювання стало ось таке тестове середовище, яке повністтю повторює функціонал майбутньої розробки: (за кліком на зображення відкріється веб-інтерфейс моделі)

Програмна частина

Як на мене, це найцікавіша частина проєкту. Програмування – це невичерпний простір для творчості. Думка про те, що ти через набір звичайних символів можеш створити що завгодно, по справжньому надихає.

Новаков Данило, product manager

Перейдемо від слів до діла. Однією з найважчих проблем для нас було підібрати бібліотеки.

Бібліотеки в Arduino IDE – це готові напрацювання у вигляді файлів з кодом. Їх завантажують, щоб заощадити час на розробку. Можна провести аналогію з модулями для Arduino, котрі ми використали. Це також сукупність готових наборів рішень, призначених для пришвидшення роботи.

Так ось. Нам довелося тричі замінити бібліотеку, призначену для праці з дисплеєм. З першою виходило виводити лише статичну картинку. Частота оновлення становила не більше 5 кадрів / с.. Друга бібліотека працювала нормально до моменту, поки кеш Arduino був зайнятий менше ніж на половину. Далі почали утворюватися різні аномалії у вигляді шуму на картинці та непромальованих анімаціях.

Згодом ми прийшли до такого набору бібліотек:

Докладу інформацію ви отримаєте перейшовши по відповідному посиланню.

Коли модель готова, можна приступати до софту. Першою грою ми вирішили обрати класичну гру – Ping Pong. Заслужено одна з кращих аркадних казуалок. Вона проста у реалізації, але все одно цікава.

Олександр Стрілець, software engineer

У програмній частині навіть описувати нічого. Гра має лише 5 механік:

  • рух платформи гравця
  • алгоритмом руху платформи ШІ
  • рух м’яча
  • взаємодія м’яча з платформами та границями екрану

На цьому базові механіки закінчуються. Тут навіть помилитися не було змоги, тому ми вирішили трішки ускладнити код, та додати можливість вибору режиму гри: гравець проти комп’ютера та гравець проти гравця.

Цікавий момент: При русі вверх ми віднімаємо координату Y, а при русі вниз – додаємо. При цьому координатна сітка дисплею починається з верхнього лівого кута і рухається до нижнього правого.

Fish on Hook

Це взагалі перлина нашого проєкту. Саме ця гра принесла проєкту особливість. Річ у тім, що у проєкті майже не було індивідуальності. Основні моменти були натхнені чи запозичені з інших проєктів. Ідея портативної приставки не нова. На Arduino частенько відтворюють подібне. Скільки разів був запрограмований Ping Pong взагалі неможливо порахувати.

А ось що до гри Fish on Hook – подібний жанр також не новий. Але подібних проєктів саме на Arduino ми не знайшли. Тому від початку – ідеї, і до кінця – реалізації, гра Fish on Hook являється повністю оригінальною частиною нашого проєкту.

Цікавий момент: впродовж написання програми була одна помилка, що не дозволяла її закінчити. Виражалася вона у тому, що в момент запуску гри віднімалося одне умовне життя гравця. Проблема виявилася банальною. Перша риба генерувалася в запланованих координатах х та y, на відміну від наступних. І ці координати були задані за зоною робочого діапазону координат програми, тому гра віднімала життя як за пропущену рибку.

Розробка плати

Працювали в програмі EasyEDA, так як вона безкоштовна та інтегрована у площадку jlcpcb – компанія, в котрої замовляли друк плат.

Загалом, проєктування виявилося не складним. Схема плати відносно проста.  Та це був наш перший досвід у розведенні плат. Тому і тут без проблем не вийшло.

Нам не вистачило уваги. Як ви можете побачити, на платі не вистачає місця під вимикач так акумулятор. Та це не головна проблема. Arduino знаходиться точнісінько під екраном. Припаяти звичайним паяльником другий компонент (наприклад екран після Arduino) без великого проміжку неможливо. На етапі проєктування це не було враховано.

Тому стало питання, залишити великий проміжок між екраном та зробити невистачаючу частину схеми навісним монтажем чи зробити іншу версію плати. Ми пішли другим шляхом.

Представляю вам другу версію плати. Крутий дизайн, зручне розташування компонентів, грамотне використання кожного сантиметру простору. Ідеальна плата. Так ми вважали на той момент. Виявилося, що до площадки плати VIN було під’єднано пін V5 Arduino. За схемою, плата заживлена від 9В.
До речі, ця плутанина стала причиною “смерті” одного з тестових екземплярів, але в решті решт всі недоліки прототипування були усунені.

Висновок

Метою нашої роботи було ознайомлення з специфікою проєктів на базі мікроконтролера Arduino, та подальше застосування цих знань у більш складних та серйозних проєктах. І я вважаю, що з цією задачею ми повністю впорались. Якщо ви згодні, або навпаки, зпрошуємо виразити підтримку і критику в коментарях.

1 thought on “Іграшка в кишені. Студентський hardware-проєкт портативної гральної консолі.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *