Иногда хочется, чтобы самодельное устройство не только работало, но и выглядело эффектно. Особенно это актуально, если вы делаете настольные часы, вольтметр, датчик температуры или просто информационное табло. Чтобы устройство сразу цепляло взгляд — нужен нестандартный подход к оформлению.
🔷 Именно для таких случаев мы и подготовили пример с “объёмным шрифтом” — без специальных библиотек и графических ресурсов. Только 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.
🎯 А главное — теперь вы знаете, как сделать даже простой дисплей интересным. Потому что настоящие самодельщики ценят не только функциональность, но и стиль.
📌 Если тебе понравилось — поддержи пост, поделись с друзьями и напиши, в каких проектах ты бы использовал такой эффект.