Приветствую, Хабр!
Как Вы уже догадались по фотографии, речь сегодня пойдет не о классификации коньяка. Я буду делать игру крестики-нолики… Кому интересно – прошу под кат ->
Идея, как всегда, родилась спонтанно. Как-то тихим осенним вечером я нарисовал на листике девять клеточек и предложил дочке сыграть в новую для нее игру. Сыграв несколько раз, я увидел, что есть неподдельный интерес … и тут Остапа понесло.
Казалось бы, что проще продолжать рисовать клеточки на листке или скачать программу на телефон, но разве это интересно? Нет!
Что хотелось получить:
Обо всем по порядку.
1. Итак, было решено взять контроллер STM32F100. На нем я вполне смогу реализовать простую логику игры для начала. На корпусе с 48 ногами получились занятыми все GPIO (без использования мультиплексоров и расширителей). Для каждого крестика и нолика используется по 8 светодиодов (соединенные параллельно), которые коммутируются полевиками (IRLML6401).
Девайс состоит из двух плат, одна со светодиодами и тачкнопками, вторая с контроллером, зарядкой, аккумом и т.д. Соединяются разъемами с шагом 2мм, между платами стоит аккумулятор 1250мА.
Рис. 1. Плата контроллера
Рис. 2. Плата светодиодов
Через несколько дней платы наконец пришли с производства. Меня не покидало чувство, что игра получится неудобной из-за размеров или тачкнопок. Забегая вперед скажу, что играть очень прикольно! Кнопки отлично срабатывают через оргстекло 1,5-2мм.
Рис. 3. Сторона TOP платы контроллера и светодиодов
Рис. 4. Сторона BOTTOM платы контроллера и светодиодов
2. Схема зарядки самая простая, которую я тыкаю в подобные устройства.
Рис. 5. Схема контроллера заряда.
3. Все бы ничего, но компонентов оказалось больше, чем я ожидал, и паять я замучался. Вот что получилось после пайки.
Рис. 6. Плата контроллера с компонентами
Рис. 7. Плата светодиодов с компонентами
Рис. 8. Плата светодиодов с компонентами со стороны тачкнопок.
Первый, и пока единственный, вариант софта я сделал на if’ах и в одном бесконечном цикле. Просто и работает без багов. При выигрыше гаснет все поле и дважды моргает выигравшая комбинация.
4. Сенсорные кнопки решил реализовать на микросхемах TTP223, я их уже использовал в одном из своих проектов. Они не требовательны к разводке и к наличию/отсутствию полигона под сенсором.
Рис. 9. Схема включения тачкнопки.
Их у меня было больше 9шт и поэтому я решил не использовать мультиплексор и повесить каждую кнопку на свой GPIO контроллера.
5. Дальше планирую интегрировать алгоритм игры с контроллером (уже нашел несколько приличных вариантов). Переключение пока планируется сделать зажатием центральной сенсорной кнопки перед включением (но это пока не окончательно).
6. Долго думал как по простому реализовать включение/выключение одной кнопкой. Самый быстрый и правильный вариант, на мой взгляд – это на транзисторах и используя два GPIO контроллера, которых у меня нет. Поэтому поставил микросхему CD4013BM. Включение производится нажатием около 1с, выключение – быстрым нажатием. Работает отлично.
Рис. 10. Схема включения CD4013BM.
Пин «OUT_KEY» идет на ногу включения (EN) DC/DC AP3418 (он делает 3V3). Таким образом потребление минимально.
Рис. 11. Плата с микроконтроллером и аккумулятором.
7. Корпус пока находится на стадии проектирования. Планируется просто аккуратненькая коробочка с матовым оргстеклом 1,5мм сверху.
Когда я положил сверху несколько листов бумаги, чтобы посмотреть, как идет просвечивание, я понял, что это фиаско. Нет, просвечивает отлично, а вот разлиновки поля не видно. Поэтому на «Рис. 2.» видны установленные еще 4 дополнительных светодиода по углам центрального квадрата (их нет на моей спаянной плате). Если все получится как это выглядит у меня в голове, то если сделать фрезеровку с обратной стороне на оргстекле, то эти 4 синих светодиода дадут 4 тонких луча, которые образуют разметку поля, которая будет включаться при включении девайса. Если лучей не получится, то в любом случае будет видно фрезеровку.
На плате имеется спикер, но со встроенным генератором не влезает по высоте, а без генератора у меня нет. Думаю, что на это место встанет вибромотор от телефона и будет вибро отклик при нажатии и выигрыше.
По итогу могу сказать, что игрушка получилась очень интересной. Фотография не передает всего эффекта, но крестики и нолики выглядят отлично, без засветов. Играть одно удовольствие! Кнопки срабатывают идеально и размер поля очень удобный. Когда будет готов корпус я обязательно выложу фотку.
До новых встреч!
UPD:
Добавил цены при покупки компонентов на 1 устройство, может что-то забыл. Платы и сборку не считал. Что-то можно поменять на более дешевое.
1. STM32F100C4T6B – 1шт – 130р.
2. CD4013BM – 1шт – 16р.
3. LTC4054 – 1шт – 5р.
4. AP3418KTR – 1шт – 30р.
5. IRLML6401TRPBF (Si2307DS) – 18шт – 11р.
6. LP503759 – 1шт – 300р
7. C191KRCT/ C191KGCT – 148шт – 436р.
8. TTP223 – 8шт – 40р.
9. Кнопка, разъем, пассив – куча – 100р.
10. Платы
11. Сборка
Итого: 1068р.
UPD:
Ссылка на видео
Как Вы уже догадались по фотографии, речь сегодня пойдет не о классификации коньяка. Я буду делать игру крестики-нолики… Кому интересно – прошу под кат ->
Идея, как всегда, родилась спонтанно. Как-то тихим осенним вечером я нарисовал на листике девять клеточек и предложил дочке сыграть в новую для нее игру. Сыграв несколько раз, я увидел, что есть неподдельный интерес … и тут Остапа понесло.
Казалось бы, что проще продолжать рисовать клеточки на листке или скачать программу на телефон, но разве это интересно? Нет!
Что хотелось получить:
- Компактный девайс на батарейке (всякие емкостные тачи и MIPI дисплеи отпадают сразу).
- Соответственно, зарядка от USB (желательно с индикацией).
- Минимум затрат по времени на плату и ПО (ну как обычно, в общем).
- Сенсорные кнопки.
- Интеллектуальный девайс с возможностью играть с контроллером (без второго игрока). Переключение на одного и двух игроков.
- Включение/выключение одной кнопкой и желательно не сенсорной, чтобы не происходило случайных включений.
- Корпус напечатать на 3D принтере + матовое стекло чтобы закрыть светодиоды.
Обо всем по порядку.
1. Итак, было решено взять контроллер STM32F100. На нем я вполне смогу реализовать простую логику игры для начала. На корпусе с 48 ногами получились занятыми все GPIO (без использования мультиплексоров и расширителей). Для каждого крестика и нолика используется по 8 светодиодов (соединенные параллельно), которые коммутируются полевиками (IRLML6401).
Девайс состоит из двух плат, одна со светодиодами и тачкнопками, вторая с контроллером, зарядкой, аккумом и т.д. Соединяются разъемами с шагом 2мм, между платами стоит аккумулятор 1250мА.
Рис. 1. Плата контроллера
Рис. 2. Плата светодиодов
Через несколько дней платы наконец пришли с производства. Меня не покидало чувство, что игра получится неудобной из-за размеров или тачкнопок. Забегая вперед скажу, что играть очень прикольно! Кнопки отлично срабатывают через оргстекло 1,5-2мм.
Рис. 3. Сторона TOP платы контроллера и светодиодов
Рис. 4. Сторона BOTTOM платы контроллера и светодиодов
2. Схема зарядки самая простая, которую я тыкаю в подобные устройства.
Рис. 5. Схема контроллера заряда.
3. Все бы ничего, но компонентов оказалось больше, чем я ожидал, и паять я замучался. Вот что получилось после пайки.
Рис. 6. Плата контроллера с компонентами
Рис. 7. Плата светодиодов с компонентами
Рис. 8. Плата светодиодов с компонентами со стороны тачкнопок.
Первый, и пока единственный, вариант софта я сделал на if’ах и в одном бесконечном цикле. Просто и работает без багов. При выигрыше гаснет все поле и дважды моргает выигравшая комбинация.
4. Сенсорные кнопки решил реализовать на микросхемах TTP223, я их уже использовал в одном из своих проектов. Они не требовательны к разводке и к наличию/отсутствию полигона под сенсором.
Рис. 9. Схема включения тачкнопки.
Их у меня было больше 9шт и поэтому я решил не использовать мультиплексор и повесить каждую кнопку на свой GPIO контроллера.
5. Дальше планирую интегрировать алгоритм игры с контроллером (уже нашел несколько приличных вариантов). Переключение пока планируется сделать зажатием центральной сенсорной кнопки перед включением (но это пока не окончательно).
6. Долго думал как по простому реализовать включение/выключение одной кнопкой. Самый быстрый и правильный вариант, на мой взгляд – это на транзисторах и используя два GPIO контроллера, которых у меня нет. Поэтому поставил микросхему CD4013BM. Включение производится нажатием около 1с, выключение – быстрым нажатием. Работает отлично.
Рис. 10. Схема включения CD4013BM.
Пин «OUT_KEY» идет на ногу включения (EN) DC/DC AP3418 (он делает 3V3). Таким образом потребление минимально.
Рис. 11. Плата с микроконтроллером и аккумулятором.
7. Корпус пока находится на стадии проектирования. Планируется просто аккуратненькая коробочка с матовым оргстеклом 1,5мм сверху.
Когда я положил сверху несколько листов бумаги, чтобы посмотреть, как идет просвечивание, я понял, что это фиаско. Нет, просвечивает отлично, а вот разлиновки поля не видно. Поэтому на «Рис. 2.» видны установленные еще 4 дополнительных светодиода по углам центрального квадрата (их нет на моей спаянной плате). Если все получится как это выглядит у меня в голове, то если сделать фрезеровку с обратной стороне на оргстекле, то эти 4 синих светодиода дадут 4 тонких луча, которые образуют разметку поля, которая будет включаться при включении девайса. Если лучей не получится, то в любом случае будет видно фрезеровку.
На плате имеется спикер, но со встроенным генератором не влезает по высоте, а без генератора у меня нет. Думаю, что на это место встанет вибромотор от телефона и будет вибро отклик при нажатии и выигрыше.
По итогу могу сказать, что игрушка получилась очень интересной. Фотография не передает всего эффекта, но крестики и нолики выглядят отлично, без засветов. Играть одно удовольствие! Кнопки срабатывают идеально и размер поля очень удобный. Когда будет готов корпус я обязательно выложу фотку.
До новых встреч!
UPD:
Добавил цены при покупки компонентов на 1 устройство, может что-то забыл. Платы и сборку не считал. Что-то можно поменять на более дешевое.
1. STM32F100C4T6B – 1шт – 130р.
2. CD4013BM – 1шт – 16р.
3. LTC4054 – 1шт – 5р.
4. AP3418KTR – 1шт – 30р.
5. IRLML6401TRPBF (Si2307DS) – 18шт – 11р.
6. LP503759 – 1шт – 300р
7. C191KRCT/ C191KGCT – 148шт – 436р.
8. TTP223 – 8шт – 40р.
9. Кнопка, разъем, пассив – куча – 100р.
10. Платы
11. Сборка
Итого: 1068р.
UPD:
Ссылка на видео
Комментарии (40)
evgenij_byvshev
12.11.2018 18:45+1Сначала долго смотрел на рис. 1 и пытался понять, что спрятано за серыми прямоугольниками? :)
DMGarikk
12.11.2018 19:17+1Прикольно.
Но надо было поле побольше, крестики-нолики 3x3 игра не интересная, в ней всегда ничьяtormozedison
13.11.2018 06:52Да, классические крестики-нолики 3х3 неинтересны тем, что там есть готовый выигрышный алгоритм.
Но реализация красивая и качественная.
dunaldo
12.11.2018 20:35Тут находится редактированный комментарий, во избежании недопониманий.
Отличная работа, нет слов, ооочень хочу повторить, аффтар молодец, ждем корпус.
А это первые мысли в голове после прочтенияНу шож ты делаешь-то в преддверии нового года!(ничего что на ты?) И без того глаза разбегаются чего бы сделать/купить… У меня в голове теперь только:
дай...
evgenij_byvshev
Шикарная реализация! Спасибо за статью!
the_bat Автор
Спасибо! Сам тащусь!