- Arduino и адресная светодиодная лента ws2812b
- Rgb подсветка на ардуино с управлением по bluetooth
- Ардуино – принцип действия
- Настройки в коде
- Особенности:
- Папки
- Подключение светодиодной ленты к ардуино
- Практическая часть часть
- Пример программы
- Принцип управления нагрузкой через ардуино
- С помощью биполярного транзистора
- С помощью полевого транзистора
- Ссылки оставлены на магазины, с которых я закупаюсь уже не один год
- Теоретическая часть
- Через реле
- Экономическая часть
- Вместо заключения
Arduino и адресная светодиодная лента ws2812b
Rgb подсветка на ардуино с управлением по bluetooth
Идея сделать подсветку для рабочего стола возникла давно, концепция несколько
раз изменялась, но в итоге получилось так. К плате ардуино через NPN
транзисторы подключена RGB светодиодная лента, а управление происходит
через bluetooth с помощью специального приложения на андроид-устройстве.
После поиска готовых приложений под андроид стало понятно, что писать
приложение придется самому, потому что те приложения, которые уже есть,
по каким-либо причинам не подходят.
Рис.1
Мы разработали приложение в программе Android Studio:
Рис.2
На данном этапе, устройство умеет только включать один из десяти зашитых
цветов, а программа под андроид может подключиться только к bluetooth модулю,
который был вписан при написании этой программы, в дальнейшем планируется это
исправить, а также реализовать функции, которые пока не работают:
- возможность управлять несколькими лентами;
- управлять белой светодиодной лентой;
- ручная установка цвета;
- различные режимы работы;
- возможность управления подсветкой без использования андроид-устройства.
- Прошивка для arduino
- Программа для android
Тимур Мельников
Файлы :
Тема форума:
http://msevm.ru/forum/index.php?topic=8290Больше.
Ардуино – принцип действия

Плата Arduino состоит из программируемого микроконтроллера. Плата подключена к различным датчикам, регуляторам и энкодерам, и управляет двигателями, светодиодами и другими исполнительными устройствами, включая другие платы Arduino, используя протокол SPI.
Устройствами можно управлять с помощью пульта дистанционного управления, модуля Bluetooth, HC-06, Wi-Fi или ESP, а также кнопок. Одними из самых популярных плат являются Arduino Nano и Arduino Uno, а также Arduino Pro Mini – устройство на базе микроконтроллера ATmega 328
На обычном компьютере Arduino можно программировать в среде с открытым исходным кодом. Программы загружаются через USB.
Настройки в коде
// ------ Дисплей ------
LCD_BACKL 1 // автоотключение подсветки дисплея (1 - разрешить)
BACKL_TOUT 60 // таймаут неактивности отключения дисплея, секунды
CONTRAST 150 // контрастность (яркость) дисплея 0-255
ROTATE_DISP 1 // 0 или 1 - повернуть дисплей на 180 градусов
I2C_ADDRESS 0x3C // адрес дисплея
// примерно на 200 строке можно поменять шрифт дисплея
// ------ Драйвер ------
HIGH_FREQUENCY 2 // 0 - 490 Гц, 1 - 7.8 кГц, 2 - 31.4 кГц, 3 - ручная настройка
PWM_FREQUENCY 15000 // частота ШИМ на настройке №3, Герц
DRIVER_DIRECTION 0 // 0 - обычный (мосфеты), 1 - реверс (LED amplifier)
// ------ Лента ------
MAX_CURRENT 0 // макс. ток в мА, при значении 0 фича не активируется
NUM_LEDS 60 // кол-во светодиодов для расчёта ограничения тока (только для диодов 5050!!!)
SMOOTH_K 0.25 // коэффициент плавности огня
// ------ Bluetooth ------
USE_BT 0 // 1 - использовать Bluetooth, 0 - нет
// ------ ИК пульт ------
USE_IR 1 // 1 - использовать ИК пульт, 0 - нет
IR_STEP 10 // шаг изменения настроек с пульта
// ------ Энкодер ------
USE_ENC 1 // 1 - использовать энкодер, 0 - нет
ENC_REVERSE 1 // 1 - инвертировать направление энкодера
ENC_TYPE 1 // 0 или 1 - тип энкодера
// ------ Напряжение ------
VOLTMETER 0 // 0 или 1 - вкл/выкл вольтметр (делитель напряжения в пин А0)
CHARGE_VAL 1 // вывод напряжения: 0 - в процентах, 1 - в вольтах
CONSTANT_BRIGHT 0 // 0 или 1 - вкл/выкл поддержание яркости при разрядке АКБ (только для диодов 5050!!!) (в схеме должен стоять делитель)
VREF 5.1 // напряжение на пине 5V
R1 10010 // точное значение 10 кОм
R2 4700 // точное значение 4.7 кОм
Особенности:
- Управление 4-контактной светодиодной лентой RGB (R G B 12)
- Частота ШИМ 8 или 31 кГц (регулируемая)
- 10 настраиваемых предустановок, каждая с режимом и настройками для выбранного режима
- 11 режимов работы: 5 статических и 6 динамических
- Управление через энкодер, ИК-пульт или Bluetooth (приложение GyverRGB)
- Вывод меню на OLED-дисплей
- Контроль напряжения батареи и отображение процентов/напряжения
- Полная информация приведена в документации
Папки
В НИМАНИЕ Если это ваш первый опыт работы с Arduino, прочтите инструкции
- Библиотеки – библиотеки проекта. Заменить существующие версии
- Firmware – прошивка для Arduino
- Schematics – электрические схемы для компонентов
- Docs – документация
- Utilities – утилиты – программы поддержки и прошивки
Подключение светодиодной ленты к ардуино

Практическая часть часть
Необходимы Arduino Leonardo, модуль управления двигателем L298N, блок питания 12 В (для питания ленты), сама RGB лента и соединительные провода. Для удобства было использовано расширение Fundruino IO Expansion, однако никакой функциональной нагрузки оно не несет.
На рисунке показана схема электропроводки.
В качестве дополнительного момента, позвольте мне объяснить питание системы. Как показано здесь, питание подается на модуль управления двигателем, который имеет понижающий источник питания 5 В, и я подаю эти 5 В на вход питания Vin Arduino. Вы можете переключаться между несколькими источниками питания, разорвав это соединение (оставив, конечно, заземление подключенным).
P WM-сигналы генерируются путем настройки выхода RGB-ленты с помощью команд analogWrite.
Исходный код Ардуино:.
#define GRBLED_PIN_R 9 // пин для канала R
#define GRBLED_PIN_G 10 // пин для канала G
#define GRBLED_PIN_B 11 // пин для канала B
int rgbled_r=0, rgbled_g=0, rgbled_b=0;
void setup(){
//enable serial datada print
Serial.begin(9600);
Serial.println("RBG LED v 0.1");
// RGBLED
pinMode(GRBLED_PIN_R, OUTPUT);
pinMode(GRBLED_PIN_G, OUTPUT);
pinMode(GRBLED_PIN_B, OUTPUT);
}
void loop(){
// change color
rgbled_r = (rgbled_r 1)24;
rgbled_g = (rgbled_g 2)24;
rgbled_b = (rgbled_b 3)24;
// Output
Z1_output_rgbled();
delay(1);
}
void Z1_output_rgbled() {
analogWrite(GRBLED_PIN_R, rgbled_r);
analogWrite(GRBLED_PIN_G, rgbled_g);
analogWrite(GRBLED_PIN_B, rgbled_b);
}
На видео можно увидеть, как это работает:
Пример программы

Принцип управления нагрузкой через ардуино

На плате предусмотрено большое количество выходов, как цифровых, управляемых двумя состояниями – включено или выключено, так и аналоговых, управляемых ШИМ с частотой 500 Гц.
Этого выхода будет достаточно для питания RGB-индикатора или матричного светодиодного модуля 32*32 мм с током 20-40 мА при напряжении 5 В. Более мощную нагрузку он выдержать не сможет.
Во многих проектах для решения подобной проблемы необходимо подключать дополнительные устройства:
- Реле. Помимо отдельных реле с напряжением питания 5 В, предлагаются целые блоки с различным количеством контактов и со встроенными пускателями.
- Усилители на биполярных транзисторах. Мощность таких устройств ограничена током управления, но можно составить схему из нескольких элементов или использовать набор транзисторов.
- Полевые транзисторы или МОП-транзисторы. Они могут управлять нагрузками с током в несколько ампер и напряжением до 40-50 В. При подключении мосфета к ШИМ и двигателю или другой индуктивной нагрузке необходим защитный диод. Он не требуется при подключении к светодиодам или светодиодным лампам.
- Плата расширения.
С помощью биполярного транзистора

Усилить выходной ток и напряжение можно с помощью биполярного транзистора. При его выборе учитываются ток и напряжение нагрузки. Важно, чтобы ток управления не превышал 20 мА, поэтому используется токоограничивающий резистор от 1 до 10 кОм.
Транзистор NPN с общим эмиттером является лучшим выбором. Схема из нескольких элементов (микросхемный усилитель) или транзисторная сборка могут обеспечить более высокий коэффициент усиления.
С помощью полевого транзистора
Другой метод управления диапазонами – использование полевых транзисторов. Они также известны как МОП-транзисторы или МОП-транзисторы.
В отличие от биполярного элемента, такой элемент управляется не током, а напряжением на затворе. Ток затвора всего в несколько ампер может управлять большими токами нагрузки в десятки ампер.
Токоограничивающий резистор соединяет элемент. Резистор 10 кОм должен быть подключен к выходу контроллера, который также чувствителен к помехам.
Ссылки оставлены на магазины, с которых я закупаюсь уже не один год
Первые ссылки – в основном магазин Great Wall, вторые – WAVGAT. Покупая в одном магазине, вы экономите на доставке!
Мосфеты и резисторы можно купить в любом магазине электронных компонентов (ChipDip итд)
Обращение
Драйвер
Прочее
Питание
Автономная система электроснабжения
Теоретическая часть
Чтобы получить плавное изменение яркости 3 каналов, нам придется сделать собственный диммер. Сделать его очень просто, достаточно взять силовые переключатели и управлять ими с помощью ШИМ-сигнала. Кроме того, наш диммер должен быть программируемым и/или управляемым извне.
Arduino идеально подходит в качестве “мозга”. Это устройство использует любой алгоритм изменения цвета, который вы можете придумать, и им можно управлять с помощью модулей Arduino, а также дистанционно через Ethernet, ИК-порт и Bluetooth с помощью соответствующих модулей.
Для реализации своего замысла я выбрал Arduino Leonardo. Плата Arduino – одна из самых недорогих, и она содержит много выводов с поддержкой ШИМ.
ШИМ: 3, 5, 6, 9, 10, 11 и 13. Обеспечивает 8-битный ШИМ-выход с помощью функции analogWrite().
Итак, у нас есть источник ШИМ, теперь нам нужно разобраться с силовыми переключателями. Если вы заглянете в интернет-магазины, то увидите, что там нет модулей Arduino для управления RGB-лентами. Или просто универсальные модули с силовыми транзисторами. Вы также можете найти множество радиолюбительских сайтов, которые сами изготавливают электрические коммутаторы.
Но есть более простой способ! Пригодится этот модуль управления двигателем Arduino. В этом модуле есть все, что нам нужно – он имеет мощные ключи 12В.
Например, “L298N Module Dual H Bridge Stepper Motor Driver Board Modules for Arduino Smart Car FZ0407” является модулем этого типа. Модули этого типа используют микросхему L298N. Для двигателя мостовое переключение полезно (оно может менять направление вращения), но с RGB-лентой оно бесполезно.
Функциональность этой микросхемы будет использоваться только на ее 3 нижних клавишах, подключенных к ленте так, как показано на рисунке.
Через реле

Реле подключается к устройству, соединенному с цифровым выходом. Оно имеет только два состояния – включено и выключено. Красный-синий-зеленый управляются тремя реле. Мощность катушки ограничивает ток, которым можно управлять (маломощная катушка не может замкнуть большие контакты). К большим источникам питания подключаются блоки реле.
Экономическая часть
Итого 37,65 долларов = 1 300 рублей.
Вместо заключения
На случай, если желающие попробовать описанную здесь схему захотят узнать, что драйверы L298N рассчитаны на ток 3А на канал, тогда как светодиодные ленты RGB со светодиодами 5050 и плотностью 60 светодиодов на метр, продаваемые по 5 метров, будут потреблять до 6А (по 2А на канал).
Здравствуйте ,подскажите как добавить дублирующий выход 12 к имеющемуся выходу 11 чтобы работали синхронно ?
#include
int b1=0;
int b2=0;
int b3=0;
int p_top, p_bottom;
int t_top, t_bottom;
int state_top, state_bottom;
char buf[32];
unsigned long prev_top, prev_bottom;
int pin_bottom = 11;
int pin_top = 13;
int tick = 200;
unsigned long prev_t;
int thermoDO = 4;
int thermoCLK = 5;
int thermoCS_b = 6;
int thermoCS_t = 7;
MAX6675 thermocouple_b(thermoCLK, thermoCS_b, thermoDO);
MAX6675 thermocouple_t(thermoCLK, thermoCS_t, thermoDO);
void setup()
{
Serial.begin(9600);
pinMode(pin_top, OUTPUT);
digitalWrite(pin_top, 0);
pinMode(pin_bottom, OUTPUT);
digitalWrite(pin_bottom, 0);
t_top = 10;
t_bottom = 10;
p_top = 0;
p_bottom = 0;
state_top = LOW;
state_bottom = LOW;
prev_top = millis();
prev_bottom = millis();
}
void loop()
{
if (Serial.available() > 0) {
b3 = b2; b2 = b1;
b1 = Serial.read();
if ((b1 == ‘T’) && (b2 == ‘E’) && (b3 == ‘S’)) {
p_top = Serial.parseInt();
if (p_top 100) p_top = 100;
p_bottom = Serial.parseInt();
if (p_bottom 100) p_bottom = 100;
t_bottom = thermocouple_b.readCelsius();
t_top = thermocouple_t.readCelsius();
sprintf (buf, “OKddddrn”, p_top, p_bottom, t_top, t_bottom);
Serial.print(buf);
}
}
if ((state_top == LOW) && ((millis()-prev_top) >= tick * (100-p_top) / 100)) {
state_top = HIGH;
prev_top = millis();
}
if ((state_top == HIGH) && ((millis()-prev_top) >= tick * p_top / 100)) {
state_top = LOW;
prev_top = millis();
}
digitalWrite(pin_top, state_top);
if ((state_bottom == LOW) && ((millis()-prev_bottom) >= tick * (100-p_bottom) / 100)) {
state_bottom = HIGH;
prev_bottom = millis();
}
if ((state_bottom == HIGH) && ((millis()-prev_bottom) >= tick * p_bottom / 100)) {
state_bottom = LOW;
prev_bottom = millis();
}
digitalWrite(pin_bottom, state_bottom);
}