Бинарные пятнашки
Mon 01 April 2013
Всё началось вот с этой игрушки, взятой у друга (такие раздавали на автовыставке, поэтому кому-то она может быть знакомой).
Рисунок 1. Десятичные пятнашки (вариант от Subaru)
Наигравшись в неё и начитавшись статей про бинарные часы на habrahabr.ru, идея "бинарных пятнашек" как-то сама собой родилась в голове.
Корпус для игрушки решено было печатать на 3D-принтере. До этого с 3D моделированием, да и печатью дел не имел - очень хотелось попробовать. Модели рисовались в SketchUp. На тот момент ничего лучшего не знал.
Для написания этой статьи импортировал созданные в SketchUp stl файлы в SolidWorks и там придавал им цвет, поэтому они получились немного страшненькими. Именно по этим моделям и выполнялась печать.
Рисунок 2. Основная часть корпуса
1 - отверстие для "выдавливания" батарейки
2 - защёлки
3 - выпуклость для прижима держателя батарейки
4 - отверстия под винты (2 шт.)
5 - отверстие под батарейку CR2032
6 - отверстие под переключатель
7 - отверстие под кнопку "памяти" (при нажатии расположение текущей игры записывается в EEPROM)
Рисунок 3. "Выравниватель" диодов
1 - отверстия под диоды (64 шт.)
2 - вырез для кнопки
Рисунок 4. Задняя крышка и кнопки
1 - защёлки
2 - выпуклости для прилегания к плате
3 - отверстия под винты
На рисунках цвета не совсем соответствуют желаемым. Зелёный хотелось чуть поярче, а то, что нарисовано серым было напечатано черным (у черных моделей все грани сливаются). Мне хотелось примерно такого сочетания.
Что же получилось.
Рисунок 5. Первые испытания
Рисунок 6. "Выравниватель" для диодов одет и укорочены ножки для прошивки
Рисунок 7. В собранном корпусе
Рисунок 8. Кнопок пока что нет.
Рисунок 9.
Как вы наверное заметили, из отсека батарейки торчит какой-то непонятный скотч) Дело в том, что отверстие для "выдавливания" батарейки оказалось неработоспособным. По задумке, давя сбоку скрепкой на батарейку, она должна была выдавливаться в перпендикулярном к направлению давления направлении. Но не тут-то было! Силы трения оказались сильнее и эта задумка, к сожалению, накрылась.
Ничего лучше, чем приклеить к батарейке кусок скотча я на тот момент не придумал. "Нет ничего более постоянного, чем временное", и кусок скотча позволяет вынимать батарейки и по сей день =)
Зелёный цвет оказался не тем зелёным, на который я расчитывал, но это не принципиально.
С кнопками отдельная история. Они получились больше нужного размера (при печати размеры немного плавают - это нужно учитывать) и не влезли в отверстия. Еще пара неудач, и было решено отрезать "юбку" у кнопок и приклеить их снаружи вместо того, чтобы вставлять изнутри. Не элегантное решение, однако враз избавило от мучений.
Это первая двухслойная плата в моей жизни. А как известно, первый блин комом - слои немного смещены относительно друг друга, поэтому и пайка выглядит "так себе".
Рисунок 10. Задняя сторона платы
Как видно на рисунке, "защелки", которые должны были цепляться друг за друга, не были напечатаны 3D-принтером. С чем это связано сказать мне сложно, но видно, что даже попыток их печатать принтер не делал. На модели они есть (рисунок 2).
Теперь к тому, что УДАЛОСЬ =)
Первый запуск. В прошивке отсутствовала возможность случайной расстановки чисел
На видео показано, как работает запись в EEPROM и случайная расстановка чисел.
64 диода, конечно же не могут индивидуально управляться микросхемой у которой 32 ножки. Поэтому была использована динамическая индикация.
Принцип по которому управляется игрушка понятен из видео. Двигается кнопками не пустая ячейка, а ячейки с цифрами по направлению к пустой ячейке. Получается, что мы как бы берем и сдвигаем ячейку с цифрой на пустое место, а направление этого движения и задается кнопками, как в настоящих пятнашках пальцем. Мне такой подход показался наиболее удобным. Мысли, что нужно делать иначе, даже не было.
Прошивка написана в Bascom-AVR. В прошивке не предусмотрено какого-либо визуального эффекта при прохождении игры. Это вполне можно добавить.
Для расстановки чисел в случайном порядке использовался таймер ATMega8. Если кому-то интересно, как именно, выложу исходники (посмотрел на них только что - ничего не понятно =).
Было два варианта, как расставлять числа: либо по счету (от 1 до 15), но в случайные ячейки, либо по порядку в ячейки, но случайные числа. Сделал как сделал. Думаю, так интереснее. Во-первых, можно понять как выглядит каждое число, если они идут по порядку от 1 до 15, а во-вторых, интереснее когда числа загораются в случайных ячейках, нежели они бы выводились строго по очереди.
И наверное самое главное. Как же понять, на какое число мы смотрим?
Рисунок 11. Схема чтения чисел
Думаю, тут всё достаточно понятно. "Читаем" слева-направо сверху-вниз (как мы умеем).
На этом, кажется, всё.
Надо сказать, что я так ни разу ещё и не прошел свои технологичные пятнашки. К моменту, когда закончил делать игрушку, интерес к пятнашкам ослаб. К тому же в бинарном варианте, по понятным причинам, пройти игру сложнее)