Многие из Вас видели часы, которые показывают время в виде цифр, которые как бы висят в воздухе - вот например промышленные вариант:
Или самодельные:
Данные дисплеи работают на эффекте персистенции — способности человеческого глаза соединять быстро сменяющиеся изображения в одно.
и называются POV-дисплеи (от англ. Persistence of vision — «постоянство видения» или «инерция зрения») — оптическая иллюзия, посредством которой несколько дискретных изображений смешиваются в одно изображение в человеческом разуме, т. е. дискретные последовательные события кажутся непрерывными. Самый яркий пример этого явления это когда мы смотрим кино, мы отчетливо видим плавно двигающуюся картинку, а не отдельные кадры.
Чтобы лучше понять как работают такие дисплеи соберем его простенький аналог на базе платформы Arduino. Данный проект я собирал полностью на Российских комплектующих - (разумеется вы можете повторить его используя железки из Китая)
Нам потребуются:
- Макетная плата
- Плата Arduino Nano (Iskra Nano Pro)
- Акселерометр (IMU сенсор который включает в себя Акселерометр )
- 8 светодиодов
- 8 резисторов сопротивлением 220 Ом
- Макетные перемычки
- Источник питания, я использовал PowerBank (9V батарейка крона - разумеется тоже подойдет, только всю схему тогда, необходимо запитать через вход Vin на плате Arduino)
Принципиальная электрическая схема перед Вами. Акселерометр подключен к шине I2C (выходы A4 и A5). Светодиоды подключены к цифровым выходам D9....D2 через токоограничивающие резисторы 220Ом. Светодиод подключенный к пину D9 должен находится снизу макетной платы. Светодиод на пине 2 - сверху.
Светодиоды необходимо разместить в один ряд:
Для того, чтобы была возможность выводить строку произвольной длинны - для дисплея была организована виртуальная память - одномерный байтовый массив длиной в 30 байт.
При каждом движении дисплея с права налево (это определяет установленный акселерометр), программа зажигает светодиоды соответствующие битам каждого байта начиная с 1-ого и заканчивая 30-м. В результате в воздухе мы видим не отдельные вспышки, а буквы. Через каждые 30 взмахов происходит сдвиг всей виртуальной памяти на 1 байт - влево т.е. содержимое первого байта становится равным содержимому второго содержимое второго байта становится равным содержимому третьего и так до конца массива виртуальной памяти. Как только область отмеченная зеленым цветом освобождается - туда подгружается новый символ из нашей строки. Таким образом данный алгоритм позволяет выводить целые предложения да и вообще любой текст произвольной длины. (главное чтобы рука не устала махать). Как только строка заканчивается - вывод символов начинается с первого символа строки.
Данный проект не сложен для повторения. Код можно скачать по ссылке: PovString. Демонстрацию работы дисплея и краткий разбор кода смотрите в видео:
По используемому железу данный проект является несколько доработанной версией проекта "POV строка из 8 светодиодов" от Амперки, но использует другой алгоритм работы и позволяет выводить строки любой длинны используя сдвиг области вывода символов.
Вы можете использовать и исходную версию кода от Амперки для вывода одной строки.
Разобравшись с базовыми принципами работы POV-дисплеев, Вы при желании сможете собрать полноценный RGB экран для вывода большого количества символов - например вот такой:
p.s: в данном дисплее использовался самодельный электродвигатель - но разумеется его использование совсем не обязательно ;-). Всем спасибо за внимание.