Учебный проект: записываем анимацию на карточки метро

Этот проект мы сделали совместно с моим сыном Николаем. Я помог на начальной стадии со сборкой устройства, программированием на Python занимался Николай.

Железо

Проект сделан на Raspberry Pi B+, NFC датчике от ELECHOUSE на базе чипа PN532, LED матрице 8*8 на базе MAX7219.

RaspberryPiBplus
PN532-7 matrix

Матрица подключена по интерфейсу SPI, для работы использовались библиотеки из этого проекта. NFC датчик также был подключен по SPI, только уже эмулированному на цифровых пинах. Для работы с ним использовались библиотеки от аналогичного модуля от Adafruit.

MiFare Ultralight

Как известно, Московский метрополитен использует бесконтактные карточки Mifare для прохода на станции. Разумеется, тема чтения/записи таких билетов широко известна в узких кругах. Мы тоже начали со считывания и вывода в консоль количества оставшихся поездок. Но поскольку метро мы часто не пользуемся, дублировать метрошный девайс для отображения аналогичной информации было как-то не интересно.
Изучив теорию в популярной форме, мы заинтересовались возможностью записи на карточки и использования их просто как носителей информации. Вообще на карточках Ultralight есть 12 блоков по 4 байта, доступных для записи. На наших билетах нам удалось перезаписывать нижние 8 блоков по 4 байта, т.е. всего 32 байта.

Софт

В качестве полезного упражнения я подал идею записывать на карточки простенький мультфильм для LED матрицы. Таким образом поднося разные карточки к считывателю, можно проигрывать разные анимации. Первоначальная идея была записывать 4 полных кадра. Николай усовершенствовал систему заменив последний кадр на управляющую последовательность, описывающую, как показывать оставшиеся три кадра (повторения, паузы и т.д.).

1Программа на Python’e разрабатывалась под Windows, с использованием IDE JetBrains PyCharm.  На Raspberry была установлен стандартный Raspbian (Jessy), из специальных настроек – был разрешён SPI. Доступ к Raspberry был только по SSH (SuperPutty), SFTP (Filezilla). Так что заодно оттачивалось мастерство работы в shell 🙂

Выводы

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

С течение времени у нас появлялись и другие идеи использования карточек в играх, например:

  • В играх типа монополии можно сделать “настоящие” кредитки.
  • В играх с карточками, где у героев есть разные способности, можно автоматически рассчитывать результат сражения.
  • Чипы из карточек можно прикреплять к внешне одинаковым предметам для идентификации.
  • Уникальные неперезаписываемые идентификаторы карточек можно использовать для доступа в помещения, открытия ящиков с вещами и т.п.

Возможно что-то из этого мы и сами сделаем, на то они и каникулы 🙂

Часы с “сетевым” временем из ESP8266, LED матриц, зарядки от сотового и коробки от конфет.

Надоело постоянно подстраивать время на настольных часах в спальне. Едва ли не самые важные часы в квартире постоянно уходили и вообще сбрасывались при отключении электричества.
Решил сделать собственные часы, подключенные к сети по Wi-Fi и получающие время по NTP.

Железо

В качестве управляющего модуля я выбрал ESP8266, для которого уже была заточенная Arduino IDE и некоторый опыт разработки.
1 matrixДля разработки и отладки использовал удобную SDK плату для ESP8266. Несколько LED матриц 8*8 были в наличии. Собирался в них поиграть с детьми, поэтому заказывал с запасом. Матрицы используют микросхему MAX7219 для управления светодиодами. Информация передаётся последовательно, и возможно подключение нескольких модулей последовательно. В интернете есть масса библиотек для таких матриц, в том числе с готовыми шрифтами. Но для этого проекта я сделал свой шрифт, лучше подходящий именно для часов.
Ниже показана сборка из трёх матриц, соединённых последовательно.
4
Я использовал разборные соединения между основными модулями, чтобы упростить сборку/разборку и замену деталей.
2Вот как выглядел весь стенд. Блок питания компьютерный, на нём были необходимые 3 и 5 Вольт с запасом по мощности. Полностью включенные три матрицы потребляют приличный ток, и от компьютерного USB порта работать не будут.

Софт

Программа достаточно простая. У меня уже были готовые примеры: работа с LED матрицами для Arduino, и отправка запроса / разбор ответа NTP для ESP8266. Оставалось слить это в одну работающую программу и кое что добавить:

  • Присоединение к моей домашней Wi-Fi сети, + пересоединение если что-то не работает. Аналогично, несколько NTP серверов, запрашиваемых по кругу.
  • Поскольку внутренних часов у ESP8266 нет, то настройку задержек для удовлетворительной точности автономного хода в течение ~15 минут, после чего делается новый NTP запрос.
  • Новый шрифт (только цифры), максимально использующий экран и видимый близорукими людьми с нескольких метров.
  • Некоторую дополнительную индикацию в нижней строке (есть ли связь с сетью и т.д.)

Прототип

После создания софта и нормальной работы устройства на стенде, я перешёл к созданию более портативного блока питания для собственно прототипа. Для получения 5 Вольт я использовал зарядку от мобильного телефона с испорченным мини-USB разъёмом. LED матрицы запитаны напрямую от 5 Вольт, а для работы ESP модуля использован настраиваемый DC-DC конвертер в 3.3 Вольта.
3Вместе сборки соединил жёсткой проволокой, просто припаянной к макетной плате. Была идея напечатать какой-то каркас на 3D принтере, но руки не дошли. Окончательный вид:

5Всё вместе просто замечательно влезает в бережно хранимую несколько лет коробку от конфет:

6

Результат

Конечно, это было краткое изложение истории. В реальности пришлось пару раз переделать девайс, немного пободаться с Wi-Fi и списать один DC-DC конвертер, из которого вышел весь магический синий дым, на котором он работал.

Но получилось очень симпатично:

7

P.S.

В принципе у идеи есть большой потенциал, ведь практически ничего не стоит добавить индикатор для, например, новой почты, погоды бегущей строкой, состояния вверенных серверов, да что угодно. Может, удастся напрячь ребёнка для развития системы 🙂