Тази статия е своеобразно продължение на статията от преди три години – Един отворен хардуерен проект (или как да си направим LED матрица).
Тогава ви показах как с минимално количество компоненти, можете да си направите светодиодна матрица, изписваща произволен (избран от вас) текст.
Преди няколко дни, ровейки се из стари „боклуци“ в един шкаф, намерих същата тази матрица, и ми дойде нова идея за нея – върху полето от 5×8 светодиода, да се симулира играта на „Живот“ (Conway’s Game of Life).
Накратко за играта „Живот“:

Играта „Живот“ (на английски: Game of Life, Conway’s Game of Life) е популярна игра с нула на брой играчи, измислена през 1970 година от Джон Хортън Конуей (John Horton Conway), която се явява най-известният пример за клетъчен автомат. Пространството на играта е (крайна или безкрайна) двумерна решетка от квадратни клетки, всяка от които може да се намира в едно от общо две възможни състояния: жива или мъртва. Всяка клетка от решетката взаимодейства с осемте си съседа, т.е. клетките разположени в съседство от нея по хоризонтал, вертикал и диагонал. На итеративен принцип, състоянието на всяка клетка в решетката запазва или променя състоянието си в зависимост от предварително зададен списък от правила.

Оригиналните правила на играта „Живот“ са следните:

  1. Всяка жива клетка с по-малко от две живи съседни клетки умира (от самота).
  2. Всяка жива клетка с повече от три живи съседни клетки умира (от пренаселеност).
  3. Всяка жива клетка с две или три живи съседни клетки остава жива и на следващата итерация.
  4. Всяка мъртва клетка с точно три живи съседни клетки се превръща в жива клетка.

Източник: Wikipedia.

И така, въпреки че игрално поле от 5×8 не е особено голямо, е достатъчно за да повиши нивото на geekiness в стаята ми поне с 1-2 нива 😀
Добавил съм няколко допълнителни условия, за да може устройството да работи без човешка намеса:

  • ако всички клетки на игралното поле са мъртви, се генерира ново поле с произволни клетки
  • ако клетките достигнат повече от 30 поколения, игралното поле се изчиства и се почва с нова произволна конфигурация. Това се налага, понеже има някои конфигурации, които са „стабилни“ и зациклят – повтарят се завинаги.

Схемата на свързване е абсолютно същата като преди (щракнете върху картинката за по-голям размер):

Можете да свалите схемата и в Eagle формат (ако искате да я променяте): k-picxie.sch

От тук пък можете да свалите дизайна на платка в PDF и в Protel-ски формат: K-Picxie-PCB.zip (благодарение на Пепо от коментарите към оригиналната статия).
Сорс-кодът плюс предварително компилиран hex-файл се намират в архива: k-life.tar.gz (може да го компилирате с безплатния MPLAB IDE – работи безпроблемно и през WINE под Линукс).
Ако нямате програматор за PIC микроконтролери, може да си направите този – uJDM.sch (схемата е в Eagle формат). Схемата е много проста, и работи.
Ако сте под Windows, може да ползвате PonyProg за да запишете hex-файла, а под Линукс най-лесно става с picprog (има го в хранилищата на УСУ и Ubuntu). Командата е:

picprog --burn --input k-life.hex --pic /dev/ttyS0

Накрая – демонстрация:

Ако матрицата беше по-голяма щеше да е много по-яко, но пък нямаше да е толкова лесно и евтино за изпълнение 🙂

Допълнение към 2011-08-30:
Същата джаджа, но направена с готова 5×7 матрица с общ анод (Para Light A-3507G). Тъй като оригиналната смеха и код са предназначени за схема с общ катод и 8 реда светодиоди вместо 7, се налагат няколко минимални промени в кода (файлът k-life-5×7.c в архива k-life.tar.gz). А схемата е аналогична, просто не се използва реда RB7 и светодиодите са с обратен поляритет.
Ето демонстрация с готовата матрица (отново върху универсална платка, този път всичко е много по-миниатюризирано):

Снимка:

Колкото и да е странно, готовата матрица харчи повече ток и свети по-слабо отколкото правената със светодиоди. Но пък изглежда яко 🙂