Иногда хочется, чтобы самодельное устройство не только работало, но и выглядело эффектно. Особенно это актуально, если вы делаете настольные часы, вольтметр, датчик температуры или просто информационное табло. Чтобы устройство сразу цепляло взгляд — нужен нестандартный подход к оформлению.
🔷 Именно для таких случаев мы и подготовили пример с “объёмным шрифтом” — без специальных библиотек и графических ресурсов. Только Arduino, OLED-дисплей и немного магии кода.
🛠 В чём фишка?
Мы имитируем эффект свечения и объёма за счёт многократного вывода текста с небольшим смещением и разной яркостью. Это создаёт красивую “подсветку” за символами — будто они светятся изнутри.
✨ Смотрится отлично даже на простом дисплее 128×32, особенно при выводе времени или цифровых значений. Например:
- Время:
12:45
- Напряжение:
14.2V
- Температура:
28°C
⚡ Где можно использовать?
- Часы-будильники с креативным оформлением.
- Вольтметры и термометры — чтобы показания были заметны с расстояния.
- Проекты для детей или оформления выставок.
- Подарки и DIY-гаджеты, в которых важна визуальная эстетика.
🔌 Что нужно?
- Arduino Nano или Uno
- OLED-дисплей 128×32 I2C (на SSD1306)
- Немного провода и вдохновения
Программа работает без дополнительных библиотек, кроме стандартных для OLED-дисплея:Adafruit_GFX
и Adafruit_SSD1306
.
🧪 Как это работает?
В коде реализован эффект “пульсации яркости” — цифры как будто «дышат». Это достигается за счёт изменения виртуальной яркости и рисования текста с небольшим сдвигом и разной насыщенностью.
cppКопировать
Редактировать
for (int i = 3; i >= 1; i--) { display.setTextColor((i == 1) ? SSD1306_WHITE : SSD1306_INVERSE); display.setCursor(x + i, y + i); display.print(buf); }
В итоге, даже простой текст на экране выглядит по-настоящему стильным и уникальным.
📥 Где взять код?
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> // Дисплей #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Виртуальная яркость текста float brightness = 0.0; int dir = 1; // Время запуска (имитация часов, без RTC) int hours = 12; int minutes = 0; unsigned long lastUpdate = 0; void setup() { Wire.begin(); // Использует стандартные пины: A4 (SDA), A5 (SCL) if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { while (true); // ошибка дисплея } display.clearDisplay(); display.setTextSize(3); display.setTextColor(SSD1306_WHITE); // Установка стартового времени (можно поменять вручную) hours = 12; minutes = 34; lastUpdate = millis(); } void loop() { // Простейшие «часы»: обновляем время каждую минуту if (millis() - lastUpdate >= 600) { minutes++; if (minutes >= 60) { minutes = 0; hours++; if (hours >= 24) hours = 0; } lastUpdate = millis(); } // Подготовка строки времени char buf[6]; sprintf(buf, "%02d:%02d", hours, minutes); // Плавная пульсация яркости (виртуальная) if (dir == 1) { brightness += 0.02; if (brightness >= 1.0) dir = -1; } else { brightness -= 0.02; if (brightness <= 0.2) dir = 1; } display.clearDisplay(); int16_t x1, y1; uint16_t w, h; display.getTextBounds(buf, 0, 0, &x1, &y1, &w, &h); int x = (SCREEN_WIDTH - w) / 2; int y = (SCREEN_HEIGHT - h) / 2; // Эффект свечения for (int i = 3; i >= 1; i--) { display.setTextColor((i == 1) ? SSD1306_WHITE : SSD1306_INVERSE); display.setCursor(x + i, y + i); display.print(buf); } display.setTextColor(SSD1306_WHITE); display.setCursor(x, y); display.print(buf); display.display(); delay(30); }
Полный скетч с комментариями и пояснениями уже доступен в нашем Telegram-канале [Азбука Радиосхем] — не забудь подписаться, если хочешь больше таких идей!
📎 Подходит для Arduino Nano, Uno и даже ATmega328P-плат.
🔧 Идеи на будущее:
- Добавить RTC-модуль и сделать стильные часы.
- Выводить не только время, но и температуру, влажность, уровень заряда и т.д.
- Расширить эффект: например, анимация мигания, смена цветов на дисплеях SH1106.
🎯 А главное — теперь вы знаете, как сделать даже простой дисплей интересным. Потому что настоящие самодельщики ценят не только функциональность, но и стиль.
📌 Если тебе понравилось — поддержи пост, поделись с друзьями и напиши, в каких проектах ты бы использовал такой эффект.