Встречаем 2021 год с Raspberry Pi: верхушка для новогодней елки с симуляцией огня

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Скоро Новый Год, и если у вас есть пара часов свободного времени, можно сделать hi-tech украшение для новогодней елки, пальмы или мандаринового дерева. Без разницы — оно будет неплохо смотреться везде.


Под катом — гифка с демонстрацией работы этой штуки

Основа конструкции — светодиодная гибкая лента NeoPixel 32x8, Raspberry Pi и хорошее настроение. Ну и да, понадобится немного кода на Python.

Что нужно для работы



  • Raspberry Pi 3, Raspberry Pi 4 или Raspberry Pi Zero W с GPIO разъемом.
  • Источник питания, мышь, монитор, клавиатура и HDMI кабель для Raspberry Pi
  • Гибкая лента 32x8 NeoPixel RGB LED Matrix
  • Набор джамперов (M-to-F, M-to-M и F-to-F)
  • 5В источник питания
  • Конденсатор 1000 µF
  • Еще можно взять полоску ткани для рассеивания света LED-ленты
  • Напечатанная на 3D-принтере основа для всей конструкции.

Часть 1. Подготовка RGB-матрицы


На этом этапе нужно будет припаять пару контактов и воспользоваться примером кода от Adafruit’s NeoPixel Uberguide. Для нашего проекта нужно два источника питания — для «малинки» и светодиодной ленты. Для последней нужно будет подключить не только питание, но и данные. Здесь все просто.


При желании можно добавить еще полоску ткани, чтобы рассеивать яркий свет светодиодов.

Подключаем данные

Берем любую «землю» от «малинки» и подключаем ее к GND-линии данных светодиодной ленты.


Подключаем источник питания

Это можно сделать либо при помощи обычного кабеля, по схеме, уже показанной выше, либо воспользоваться USB-кабелем. В этом случае нужно выполнить подключение вот по этой схеме.


Теперь давайте проверим матрицу, запустив код от Adafruit

Запускаем «малинку» подключаем питание RGB-матрицы, открываем терминал и устанавливаем зависимости:

sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
sudo python3 -m pip install --force-reinstall adafruit-blinka


Загружаем код из репозитория автора статьи:

git clone https://github.com/carolinedunn/RGBTreeTopper

Выбираем папку scrollingTextMask:

cd RGBTreeTopper

Запускаем тестовый код fillMatrix.py:

sudo python3 32-fillMatrix.py


Если получилась радуга, как на гифке выше, все работает, можно двигаться к следующему этапу. Если что-то пошло не так, скорее всего, какие-то контакты неверно подключены.

Советы: Если система не работает с пином 21 GPIO «малинки», попробуйте пины 10, 12 или 18. Затем нужно открыть 32-fillMatrix.py из папки scrollingTextMask и обновить вывод GPIO. В этом случае нужно будет соответствующим образом изменить и другие файлы проекта.

Останавливаем скрипт при помощи комбинации Ctrl+C.

Часть 2. Зажигай!


Теперь в терминале, который все еще открыт, набираем команду:

sudo python3 treeTopper.py


В папках, которые мы взяли с GitHub, есть папка «fire», которая содержит 10 картинок в формате jpeg. Вот что делает код treeTopper.py:

Объявляет библиотеки, которые используются в коде. Внимание нужно обратить на PIL (Pillow Imaging Library), это библиотека, которая добавляет возможность обработки изображений в интерпретатор Python.


  • Сообщает Pi, куда отправлять данные на матрицу, указав 21 пин GPIO (строка 8).
  • Указывает параметры матрицы, включая размер, яркость и время паузы между демонстрацией каждой из картинок (строки 9-13).
  • Создает массив с данными тех самых 10 JPEG файлов в последовательном порядке (строки 28-32).
  • Анализирует пиксели изображений и преобразовывает их в RGB-матрицу с выводом изображения на матрицу RGB (строки 35-41).
  • Делает паузу на 0.2 секунды, затем повторяет процесс для следующего изображения (строка 42).
  • Процесс выполняется до момента выполнения комбинации Ctrl+C.

А если хочется собственных картинок?

Параметры должны быть следующими:

  • Формат — JPEG.
  • Ширина — 32 пикселя.
  • Высота — 8 пикселей.

Каждый файл нужно сохранять под названиями 1-10.JPG в соответствующую папку.

Для отображения картинок нужно задать новый путь к картинкам. При желании можно сменить и последовательность их отображения.


Запуск при загрузке

Как только мы подготовили все изображения, используем Python для запуска скрипта при загрузке устройства. Лучший вариант — Crontab.

В консоли открываем Crontab: crontab -e

Вводим 1 и нажимаем Enter.


Таким образом открывается новый файл crontab. Внутри опускаемся вниз и enter ->

sudo python3 /home/pi/RGBTreeTopper/treeTopper.py

@reboot sudo python3 /home/pi/RGBTreeTopper/treeTopper.py

Нажимаем Ctrl+X, а затем crontab для сохранения.

Выключаем «малинку» и отключаем все, что собрали.

Часть 3. Финальная сборка


На этом шаге уже можно продемонстрировать новогодний огонек на вершине не менее новогодней елки.

  • Печатаем корпус на 3D-принтере.
  • Пропускаем в нужные места провода и фиксируем их.
  • Изгибаем LED-матрицу, сильно давить не нужно.
  • Водружаем конструкцию на вершину елочки. Включаем и радуемся.


Кстати, автор в курсе, что его изобретение по форме напоминает рулон туалетной бумаги.


Она шутит, что на фоне происходящего в 2020 году это вполне адекватно. Но вообще ее можно и изменить — конструкция при желании легко модифицируется, так что рулон бумаги превращается… да во что угодно.

Источник: https://habr.com/ru/company/selectel/blog/531756/


Интересные статьи

Интересные статьи

По состоянию на 10 января 2021 года, в открытом реестре PMI числится 1978 сертификатов и 1893 уникальных человека. Важно уточнить, что это количество людей, указавших сво...
То, что выглядит как забавная шутка, иногда оказывается вполне серьезным проектом. Это редко, но случается. Буквально на этой неделе было анонсировано техническое превью гипервизора...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
В интернет-магазинах, в том числе сделанных на готовых решениях 1C-Битрикс, часто неправильно реализован функционал быстрого заказа «Купить в 1 клик».
В статье описаны необходимые параметры сервера для оптимальной работы сайта на платформе 1С-Битрикс.