30 FPS видео на OLED SSD1106 0.96" с Arduino Nano: предел возможностей
Компоненты и материалы
- Arduino Nano R3 — 1 шт.
- OLED-дисплей 0.96" 128×64 на контроллере SSD1106 (SPI) — 1 шт. (ElectroPeak)
Программное обеспечение
- Arduino IDE
- OpenCV (на ПК для захвата и подготовки видео)
- Python-скрипт для стриминга кадров по UART
Суть проекта
SSD1106 обычно используют для текста и простых анимаций. Автор решил проверить, можно ли вывести реальное видео. Главные ограничения: пропускная способность SPI и двухцветный дисплей (нет полутонов). Решение: разгон SPI до 2 МГц (обычно 1–4 МГц, но библиотека оптимизирована), UART на 1 Мбит/с для приёма кадров с ПК, дизеринг (Floyd-Steinberg) для имитации полутонов.
Результат
- Достигнуто ~30 FPS на 128×64 монохромном дисплее.
- Видео захватывается веб-камерой, обрабатывается OpenCV (ресайз, порог/дизеринг), передаётся по UART.
- Arduino только принимает байты и сбрасывает в SPI дисплея — минимальная нагрузка.
Схема подключения (SPI)
- OLED VCC → 3.3V, GND → GND
- SCLK (SCK) → D13
- MOSI (SDA) → D11
- CS → D10
- DC → D9
- RES → D8
Код и ресурсы
Полный проект (Arduino-скетч + Python + OpenCV):
github.com/SaadOjo/SSD1106_monitor
Технические детали
- Библиотека для SSD1106 оптимизирована под быстрый SPI (прямой доступ к регистрам, без лишних проверок).
- UART 1 Мбит/с: на Arduino Nano (16 МГц) это предел без ошибок; используется `Serial.begin(1000000)`.
- Кадр 128×64 = 1024 байта. При 30 FPS нужно 30 КБ/с — UART 1 Мбит/с (125 КБ/с) справляется с запасом.
- Дизеринг делает картинку узнаваемой несмотря на 1 бит на пиксель.
Применение
Демонстрация пределов микроконтроллеров, низкоуровневая оптимизация, проекты с визуальным выводом на микроэкранах (визоры, бейджи, мини-мониторы).
Производственный процесс
- Жидкокристаллические дисплеи (LCD): технология, производство и перспективы
- Освоение перегрузки методов в C#: концепции, примеры и лучшие практики
- Новый конвертер HDMI-APIX3 усиливает тестирование автомобильного видео и ADAS
- Primal Display: создайте монитор температуры на Raspberry Pi с LCD
- Установка дисплея Kuman 3.5″ TFT на RetroPie — Пошаговое руководство
- Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- Автоматизированный игровой помощник: устройство для автонажатия кнопок на геймпаде
- Набор «Инопланетный слот-машин» на ATmega328P — DIY игровой автомат с NeoPixel и I2C дисплеем
- Клеточный автомат «Жизнь» Конвея на Arduino Nano с OLED 128x64