Код для поиска

ESP32 Урок 34/55 - Цветовой градиент с RGB-светодиодом и ручкой | Обучающий набор SunFounder для ESP32 IoT

ESP32 Урок 34/55 - Цветовой градиент с RGB-светодиодом и ручкой | Обучающий набор SunFounder для ESP32 IoT

В этом руководстве мы создадим эффект цветового градиента с помощью RGB-светодиода, который изменяется в зависимости от положения потенциометра (ручки). В проекте используется микроконтроллер ESP32, который имеет встроенные возможности Wi-Fi и Bluetooth, что делает его универсальным выбором для проектов Интернета вещей. Поворачивая потенциометр, мы можем плавно переходить между различными цветами, демонстрируя как функциональность RGB-светодиода, так и возможность считывания аналоговых значений с потенциометра.

ESO32-34_-Color-Gradient-main

Этот проект идеально подходит для изучения ШИМ (широтно-импульсной модуляции) и управления аналоговыми устройствами с помощью микроконтроллера. В ходе этого руководства мы обсудим необходимые аппаратные компоненты, инструкции по подключению и предоставим фрагменты кода, которые помогут вам реализовать проект. Для более наглядного объяснения обязательно посмотрите соответствующее видео (на видео в 02:15).

Аппаратное обеспечение

ESO32-34_-Color-Gradient-schematic

Основные компоненты, используемые в этом проекте, включают микроконтроллер ESP32, RGB-светодиод и потенциометр. ESP32 — это мощный микроконтроллер, который может выполнять различные задачи, включая беспроводную связь, что делает его подходящим для приложений Интернета вещей. RGB-светодиод состоит из трех отдельных светодиодов (красного, зеленого и синего), которые можно смешивать для получения широкого диапазона цветов. Потенциометр действует как регулируемый резистор, который обеспечивает переменное выходное напряжение в зависимости от его положения.

ESP32_rgb_pin

RGB-светодиод можно подключить в двух конфигурациях: с общим анодом или с общим катодом. В этом проекте мы будем использовать конфигурацию с общим анодом, где все аноды соединены вместе с положительным напряжением, что позволяет нам управлять яркостью каждого светодиода индивидуально с помощью ШИМ. Потенциометр будет подключен к аналоговому входу ESP32 для считывания его положения и соответствующей регулировки значений RGB.

Данные из технического описания

Производитель SunFounder
Номер детали RGB LED
Логическое/IO напряжение 3,3 В
Напряжение питания 5 В
Выходной ток (на канал) 20 мА
Пиковый ток (на канал) 30 мА
Рекомендации по частоте ШИМ 5 кГц
Пороговые значения входной логики 0,3 В (низкий) / 2,7 В (высокий)
Падение напряжения / RDS(on) / насыщение 1,8 В (тип.)
Тепловые пределы Рабочая температура: от -40°C до +85°C
Корпус Выводной (Through-hole)
Примечания / варианты Конфигурация с общим анодом

 

  • Используйте резистор на 220 Ом для каждого канала светодиода, чтобы ограничить ток.
  • Обеспечьте правильное напряжение питания (5 В) для RGB-светодиода.
  • Подключите общий анод к положительному выводу источника питания.
  • Используйте ШИМ для управления яркостью каждого цвета светодиода.
  • Будьте осторожны с подключением потенциометра, чтобы избежать плавающих входов.
  • Убедитесь, что ESP32 правильно запитан перед загрузкой кода.

Инструкции по подключению

Чтобы подключить RGB-светодиод и потенциометр к ESP32, начните с подключения вывода общего анода RGB-светодиода к контакту питания 3,3 В на ESP32. Красный, зеленый и синий выводы RGB-светодиода будут подключены к контактам 27, 26 и 25 соответственно. Обязательно установите резистор на 220 Ом последовательно с каждым цветным выводом светодиода, чтобы ограничить ток и защитить светодиод.

Затем подключите потенциометр к ESP32, соединив левый вывод с контактом питания 3,3 В, правый вывод с землей, а средний вывод с контактом 14 на ESP32. Эта конфигурация позволяет ESP32 считывать аналоговое напряжение с потенциометра, которое будет использоваться для изменения цвета RGB-светодиода в зависимости от его положения.

Примеры кода и пояснения

В функции setup мы определяем выводы для RGB-светодиода и потенциометра, а также инициализируем настройки ШИМ. Следующий фрагмент кода показывает, как мы настраиваем выводы RGB-светодиода:

const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

void setup() {
  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

В этом фрагменте мы определяем выводы для красного, зеленого и синего светодиодов и подключаем их к каналам ШИМ с заданной частотой и разрешением.

Функция loop считывает значение потенциометра и преобразует его в значение оттенка, которое затем используется для определения значений RGB. Следующий отрывок демонстрирует этот процесс:

void loop() {
  int knobValue = analogRead(KNOB_PIN);
  float hueValue = (float)knobValue / 4095.0;
  int hue = (int)(hueValue * 360);
  
  int red, green, blue;
  HUEtoRGB(hue, &red, &green, &blue);
  setColor(red, green, blue);
}

Этот код считывает аналоговое значение с потенциометра, нормализует его и вычисляет соответствующий оттенок. Затем он вызывает функцию HUEtoRGB для преобразования оттенка в значения RGB, которые передаются в функцию setColor для обновления светодиода.

Демонстрация / Что ожидать

После завершения подключения и загрузки кода вы сможете вращать потенциометр, чтобы плавно изменять цвет RGB-светодиода. При повороте ручки светодиод будет переходить через различные цвета в зависимости от значения оттенка, рассчитанного из положения ручки. Если светодиод не загорается или ведет себя неожиданно, проверьте подключение и убедитесь, что потенциометр подключен правильно (на видео на 10:45).

Временные метки видео

  • 00:00 Начало
  • 2:11 Введение в проект
  • 4:31 RGB-светодиод
  • 8:18 RGB-цвет
  • 12:18 Объяснение подключения
  • 17:59 Объяснение кода Arduino
  • 24:12 Выбор платы ESP32 и COM-порта в Arduino IDE
  • 25:54 Демонстрация

Изображения

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
potentiometer
potentiometer
ESO32-34_-Color-Gradient-wiring
ESO32-34_-Color-Gradient-wiring
ESO32-34_-Color-Gradient-schematic
ESO32-34_-Color-Gradient-schematic
ESO32-34_-Color-Gradient-main
ESO32-34_-Color-Gradient-main
835-ESP32 Tutorial 34/55- Arduino code for color gradient
Язык: C++
/*
 * // Определите пины RGB-светодиода
 */
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

 // Определите частоту и разрешение ШИМ.
const int freq = 5000;
const int resolution = 8;

 // Определите штифт для ручки.
#define KNOB_PIN 14

void setup() {
  Serial.begin(115200);
  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

void loop() {
 // Прочитайте значение ручки.
  int knobValue = analogRead(KNOB_PIN);
  Serial.println(knobValue);
 // Нормализуйте значение ручки в диапазоне от 0 до 1.
  float hueValue = (float)knobValue / 4095.0;

 // Преобразуйте нормализованное значение в значение HUE (0-360)
  int hue = (int)(hueValue * 360);

 // Преобразуйте значение HUE в значения RGB.
  int red, green, blue;
  HUEtoRGB(hue, &red, &green, &blue);

 // Обновите RGB-светодиод с новыми значениями цветов.
  setColor(red, green, blue);
}

void setColor(int red, int green, int blue) {
  ledcWrite(redPin, red);
  ledcWrite(greenPin, green);
  ledcWrite(bluePin, blue);
}

 // Преобразовать значение HUE в значения RGB
void HUEtoRGB(int hue, int* red, int* green, int* blue) {
  float h = (float)hue / 60.0;
  float c = 1.0;
  float x = c * (1.0 - fabs(fmod(h, 2.0) - 1.0));
  float r, g, b;
  if (h < 1.0) {
    r = c;
    g = x;
    b = 0;
  } else if (h < 2.0) {
    r = x;
    g = c;
    b = 0;
  } else if (h < 3.0) {
    r = 0;
    g = c;
    b = x;
  } else if (h < 4.0) {
    r = 0;
    g = x;
    b = c;
  } else if (h < 5.0) {
    r = x;
    g = 0;
    b = c;
  } else {
    r = c;
    g = 0;
    b = x;
  }
  float m = 1.0 - c;
  *red = (int)((r + m) * 255);
  *green = (int)((g + m) * 255);
  *blue = (int)((b + m) * 255);
}

Файлы📁

Нет доступных файлов.