Рубрики
Схемы на Arduino

Подключение светодиодной ленты к Arduino и TFT ЖК дисплею

Любой цвет можно создать комбинацией трех цветов: красного, зеленого и синего, поэтому используя трехцветный светодиод (RGB LED) можно сформировать любой цвет. Но трехцветный светодиод имеет три отдельных контакта, поэтому нужно использовать и три контакта микроконтроллера чтобы подключить его. В связи с этим просто физически невозможно подключить несколько сотен светодиодов к одному микроконтроллеру.

Для преодоления этой проблемы компания Adafruit создала специальную светодиодную ленту (NeoPixel LED Strip). В этом случае требуется всего три контакта чтобы управлять несколькими подобными лентами. Два контакта будут задействованы для подачи питания и земли и один для передачи данных (Data In — DI). Контакт Data IN используется для адресации и управления различными светодиодами в ленте: их цветом, яркостью и т.д. Это удобно делать с помощью платы Arduino, чем мы и займемся в этой статье. Об этой ленте больше информации можно узнать на официальном сайте Adafruit. На Amazon’е ее можно купить по следующей ссылке — https://www.amazon.com/Adafruit-NeoPixel-Digital-RGB-Strip/dp/B00R5CDGWA.

В этой статье мы будем управлять светодиодной лентой (NeoPixel LED) с помощью Arduino и сенсорного TFT ЖК дисплея (TFT LCD touch Screen). Мы создадим 7 сенсорных кнопок различных цветов на TFT ЖК дисплее с диагональю 2.4 дюйма и когда мы будем нажимать одну из этих кнопок, то светодиодная лента будет светиться этим цветом (цветом кнопки, которую мы нажали). В данном проекте мы использовали светодиодную ленту с 30 трехцветными светодиодами. Также можете прочитать статью о подключении TFT ЖК дисплея к Arduino для лучшего понимания материала данной статьи.

Но лента из трехцветных светодиодов может светиться абсолютно любым цветом, поэтому при желании количество кнопок различных цветов на экране TFT ЖК дисплея вы можете увеличить. Также с помощью изменения программного кода в этот проект можно добавить различные эффекты мигания и иллюминации подобной ленты.

Необходимые компоненты

  1. Плата Arduino Mega (или другая) (купить на AliExpress).
  2. Шилд TFT ЖК дисплея диагональю 2.4 дюйма с контроллером SPFD5408 (2.4 inch TFT LCD Shield with SPFD5408 controller) (купить на AliExpress).
  3. Светодиодная лента с трехцветными светодиодами (NeoPixel RGB LED Strip).
  4. Соединительные провода.
  5. USB кабель или адаптер на 12 V 1A.

Соединения в схеме

В нашем проекте необходимо будет соединить контакт 5V платы Arduino с контактом NeoPixel’s 5V (ленты) и контакт GND платы Arduino Mega с контактом GND NeoPixel’s (ленты). Затем соединить контакт данных ленты (NeoPixel DI pin) с цифровым контактом 36 платы Arduino Mega. Затем осторожно соединить шилд TFT ЖК дисплея с платой Arduino таким образом чтобы контакт GND платы Arduino лежал ниже GND ЖК дисплея, а контакт 5V Arduino был соединен с контактом 5V ЖК дисплея.

Также не перепутайте контакты GND и 5V светодиодной ленты при подсоединении их к плате Arduino, иначе вы можете повредить светодиодную ленту. Вместо Arduino Mega вы можете использовать и другие платы Arduino.

В следующей таблице представлены необходимые соединения между платой Arduino и светодиодной лентой.

контакты Arduino контакты NeoPixel Strip
5v 5v
GND GND
цифровой контакт № 36 DI (data in)

Объяснение работы схемы

Работа схемы очень проста. Просто нажмите кнопку нужного вам цвета на TFT ЖК дисплее и светодиодная лента зажгется этим цветом. Код программы написан таким образом чтобы вы могли повторять эту операцию до бесконечности без необходимости сброса Arduino Mega. Структурная схема проекта показана на следующем рисунке.

При нажатии какой либо кнопки на экране TFT ЖК дисплея данные передаются в Arduino, а плата Arduino затем передает соответствующие команды светодиодной ленте (NeoPixel Strip). То есть светодиодная лента загорится зеленым цветом если мы нажмем кнопку зеленого цвета на TFT ЖК дисплее.

Исходный код программы

Для подключения и корректного функционирования используемого нами TFT ЖК дисплея нам понадобится библиотека для работы с ним, которую можно скачать по ссылке — https://github.com/JoaoLopesF/SPFD5408. На открывшейся странице нажмите ‘Clone or download’ и затем ‘Download ZIP’. Скачанный архив добавьте в папку библиотек Arduino на вашем компьютере.

#include <SPFD5408_Adafruit_GFX.h> // Core graphics library
#include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
#include <SPFD5408_TouchScreen.h>

Перед тем, как тестировать работу всей схемы, сначала проверьте корректность работы TFT ЖК дисплея. Для этого загрузите в плату Arduino пример из скачанной библиотеки для работы с дисплеем и проверьте правильно ли он работает. Сначала выполните графический тест, потом калибровочный тест и затем тест на рисование. Только после этого переходите к тестированию схемы, рассматриваемой в данной статье.

Для работы со светодиодной лентой (NeoPixel RGB LED) также скачайте библиотеку по следующей ссылке — https://github.com/adafruit/Adafruit_NeoPixel.

#include <Adafruit_NeoPixel.h>

Как было описано выше цифровой контакт 36 платы Arduino MEGA подключен к контакту DI светодиодной ленты, поэтому в программе инициализируем контакт 36. Также желательно инициализировать и количество светодиодов в используемой нами светодиодной ленте – 30 шт.

#define PIN 36
#define NUM_LEDS 30

Дадим удобные имена используемым цветам на ЖК дисплее. Для своего дисплея вы можете использовать и другие цвета.

#define BLACK 0x0000
#define YELLOW 0x001F
#define GREEN 0xF800
#define RED 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define BLUE 0xFFE0
#define WHITE 0xFFFF

Также в коде программы желательно задать такие параметры кнопок как их размер и местоположение.

uint16_t width = 0;
uint16_t height = 0;
uint16_t x = 40;
uint16_t y = height - 20;
uint16_t w = 75;
uint16_t h = 20;

Параметр h используется для регулирования размера кнопок на ЖК дисплее. Если вы сделаете h=40, то тогда размер кнопок увеличится вдвое. Параметр y – это координата y ЖК дисплея.

Сенсорные кнопки обозначаются цифрами как указано в следующем участке кода.

#define BUTTONS 9
#define BUTTON_Red 0
#define BUTTON_DarkRed 1
#define BUTTON_RED 2
#define BUTTON_DarkGreen 3
#define BUTTON_DeepRed 4
#define BUTTON_Blue 5
#define BUTTON_LightBlue 6
#define BUTTON_LightBlue1 7

Также необходимо определить ряд функций чтобы зажигать светодиодную ленту в нужные нам цвета.

void EmitCyan();
void EmitWhite();
void EmitGreen();
void EmitYellow();
void EmitPink();
void EmitBlack();

Для того чтобы определить RGB значения для нужного вам цвета (то есть значения/доли красного, синего и зеленого цветов), можно воспользоваться вот этим сервисом. Введите там нужный вам цвет и сервис выдаст вам нужные RGB значения. Потом просто подставьте эти RGB значения в выше определенные функции (которые зажигают светодиодную ленту в нужный вам цвет).

Функция void initializeButtons() используется для задания цвета кнопок и текста на них, а также для их размещения в необходимом месте на экране ЖК дисплея.

void initializeButtons() {
uint16_t x = 40;
uint16_t y = height - 20;
uint16_t w = 75;
uint16_t h = 40;
uint8_t spacing_x = 5
..... .....
.... ......

Функция void showCalibration() используется чтобы нарисовать кнопки на экране ЖК дисплея.

void showCalibration() {
tft.setCursor (40, 0);
for (uint8_t i = 0; i < 8; i++) {
buttons[i].drawButton();
}
}

Далее приведен полный текст программы. Он немного длинноват, но я думаю с учетом приведенных пояснений вам будет несложно его понять.

Видео, демонстрирующее работу схемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *