ВОЛЬТ
Джойстик-диммер: управляем яркостью пальцем 🕹️
Двигаете джойстик вверх, и светодиод разгорается. Вниз, и он темнеет. Нажали на джойстик, и лампа включается или выключается. На экране видно проценты и полоску яркости, как в настоящем приборе.
Джойстик подаёт напряжение на Arduino, а плата меняет яркость через транзистор. Он работает как усилитель: слабый сигнал с платы управляет светодиодом.
Что понадобится:
Arduino Uno
транзистор NPN
светодиод
резисторы 1 кОм, 330 Ом, 10 кОм
джойстик
экран LCD 1602 с модулем I2C
Подключение:
D9 → резистор 1 кОм → база (Б)
5V → резистор 330 Ом → светодиод (длинной ножкой к резистору) → коллектор (К)
эмиттер (Э) → GND
резистор 10 кОм: между базой и GND
джойстик: VRy → A1, SW → D2, +5V и GND к плате
экран: SDA → A4, SCL → A5, VCC → 5V, GND → GND
Код (нужна библиотека LiquidCrystal_I2C):
cpp
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // если экран пустой, попробуйте 0x3F
const int JOY_Y = A1; // ось джойстика (яркость)
const int JOY_SW = 2; // кнопка джойстика
const int LAMP = 9; // база транзистора через 1 кОм
int level = 0; // 0..255
bool lampOn = true;
bool lastBtn = HIGH;
void setup() {
pinMode(LAMP, OUTPUT);
pinMode(JOY_SW, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
void loop() {
int y = analogRead(JOY_Y); // 0..1023, центр около 512
int dir = 0;
if (y > 700) dir = 1; // вверх: ярче
if (y < 320) dir = -1; // вниз: темнее
level = constrain(level + dir * 3, 0, 255);
bool btn = digitalRead(JOY_SW);
if (lastBtn == HIGH && btn == LOW) { // нажатие
lampOn = !lampOn;
delay(30);
}
lastBtn = btn;
analogWrite(LAMP, lampOn ? level : 0);
int percent = map(level, 0, 255, 0, 100);
int blocks = map(level, 0, 255, 0, 16);
lcd.setCursor(0, 0);
lcd.print(lampOn ? "Svet: " : "Vykl: ");
lcd.print(percent);
lcd.print("% ");
lcd.setCursor(0, 1);
for (int i = 0; i < 16; i++) lcd.print(i < blocks ? (char)255 : ' ');
delay(20);
}
Что можно менять:
число 3 в строке level + dir * 3: скорость разгорания
числа 700 и 320: чувствительность джойстика
Что проверить: отклоняете джойстик вверх, яркость растёт, на экране бегут проценты и заполняется полоска.
Если не работает:
экран пустой: поменяйте в коде адрес 0x27 на 0x3F или покрутите контраст на модуле
светодиод тусклый: поменяйте местами коллектор и эмиттер
яркость «ползёт» сама: проверьте, что джойстик в центре, при необходимости поменяйте числа 700 и 320 Если у вас установлено приложение,
вы можете сразу перейти в канал