Search Code

ESP32 оқулығы 34/55 - RGB жарықдиодымен түс градиенті және тұтқа | SunFounder ESP32 IoT оқу жиынтығы

ESP32 оқулығы 34/55 - RGB жарықдиодымен түс градиенті және тұтқа | SunFounder ESP32 IoT оқу жиынтығы

Бұл оқулықта біз потенциометрдің (тұтқаның) орнына қарай өзгеретін RGB жарықдиоды арқылы түс градиенті эффектісін жасаймыз. Жоба ESP32 микроконтроллерін пайдаланады, ол кірістірілген Wi-Fi және Bluetooth мүмкіндіктерін қамтамасыз етеді, бұл оны IoT жобалары үшін әмбебап таңдау жасайды. Потенциометрді бұру арқылы біз әртүрлі түстер арасында тегіс ауыса аламыз, бұл RGB жарықдиодының функционалдығын және потенциометрден аналогтық мәндерді оқу мүмкіндігін көрсетеді.

ESO32-34_-Color-Gradient-main

Бұл жоба PWM (импульстік ені модуляциясы) және микроконтроллермен аналогтық құрылғыларды басқаруды үйрену үшін өте қолайлы. Осы оқулық барысында біз қажетті аппараттық компоненттерді, сымдарды қосу нұсқауларын талқылаймыз және жобаны жүзеге асыруға көмектесетін код үзінділерін ұсынамыз. Неғұрлым көрнекі түсіндіру үшін байланысты бейнені міндетті түрде қараңыз (бейнеде 02:15).

Аппараттық құрал түсіндірмесі

ESO32-34_-Color-Gradient-schematic

Бұл жобада қолданылатын негізгі компоненттерге ESP32 микроконтроллері, RGB жарықдиоды және потенциометр кіреді. ESP32 - бұл әртүрлі тапсырмаларды, соның ішінде сымсыз байланысты орындай алатын қуатты микроконтроллер, бұл оны IoT қолданбалары үшін қолайлы етеді. RGB жарықдиоды кең түс ауқымын шығару үшін араластыруға болатын үш жеке жарықдиодтан (қызыл, жасыл және көк) тұрады. Потенциометр оның орнына негізделген айнымалы кернеу шығысын қамтамасыз ететін реттелетін резистор ретінде әрекет етеді.

ESP32_rgb_pin

RGB жарықдиоды екі конфигурацияда қосылуы мүмкін: ортақ анод немесе ортақ катод. Бұл жобада біз ортақ анод конфигурациясын қолданамыз, мұнда барлық анодтар оң кернеуге бірге қосылады, бұл әр жарықдиодтың жарықтығын PWM арқылы жеке басқаруға мүмкіндік береді. Потенциометр оның орнын оқу және RGB мәндерін сәйкесінше реттеу үшін ESP32 аналогтық кірісіне қосылады.

Деректер парағының мәліметтері

Өндіруші SunFounder
Бөлшек нөмірі RGB жарықдиоды
Логика/IO кернеуі 3.3 В
Қоректендіру кернеуі 5 В
Шығыс тогы (арнаға) 20 мА
Ең жоғары ток (арнаға) 30 мА
PWM жиілігі бойынша нұсқау 5 кГц
Кіріс логикалық шектері 0.3 В (төмен) / 2.7 В (жоғары)
Кернеудің төмендеуі / RDS(on) / қанығу 1.8 В (тип.)
Жылулық шектеулер Жұмыс температурасы: -40°C-тан +85°C-қа дейін
Қаптама Тесік арқылы орнату
Ескертулер / нұсқалар Ортақ анод конфигурациясы

 

  • Әр жарықдиод арнасы үшін токты шектеу үшін 220 Ом резисторды қолданыңыз.
  • RGB жарықдиоды үшін дұрыс қоректендіру кернеуін (5В) қамтамасыз етіңіз.
  • Ортақ анодты оң кернеу көзіне қосыңыз.
  • Әр жарықдиод түсінің жарықтығын басқару үшін PWM қолданыңыз.
  • Қалқымалы кірістерді болдырмау үшін потенциометрдің қосылымына мұқият болыңыз.
  • Кодты жүктемес бұрын ESP32 дұрыс қоректендірілгенін тексеріңіз.

Сымдарды қосу нұсқаулары

RGB жарықдиоды мен потенциометрді ESP32-ге қосу үшін алдымен RGB жарықдиодының ортақ анод түйреуішін ESP32-дегі 3.3В қуат түйреуішіне қосыңыз. RGB жарықдиодының қызыл, жасыл және көк түйреуіштері сәйкесінше 27, 26 және 25 түйреуіштеріне қосылады. Токты шектеу және жарықдиодты қорғау үшін әр жарықдиод түс түйреуішімен тізбектей 220 Ом резисторды орнатуды ұмытпаңыз.

Әрі қарай, потенциометрді ESP32-ге қосыңыз: сол жақ түйреуішті 3.3В қуат түйреуішіне, оң жақ түйреуішті жерге, ал ортаңғы түйреуішті ESP32-дегі 14 түйреуішіне қосыңыз. Бұл конфигурация ESP32-ге потенциометрден аналогтық кернеуді оқуға мүмкіндік береді, ол оның орнына қарай RGB жарықдиодының түсін реттеу үшін қолданылады.

Код мысалдары және түсіндірме

Орнату функциясында біз RGB жарықдиоды мен потенциометр үшін түйреуіштерді анықтаймыз, сондай-ақ PWM параметрлерін инициализациялаймыз. Келесі код үзіндісі 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);
}

Бұл үзіндіде біз қызыл, жасыл және көк жарықдиодтар үшін түйреуіштерді анықтаймыз және оларды анықталған жиілік пен ажыратымдылықпен PWM арналарына қосамыз.

Цикл функциясы потенциометрдің мәнін оқиды және оны түс реңінің мәніне түрлендіреді, содан кейін 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);
}

Бұл код потенциометрден аналогтық мәнді оқиды, оны қалыпқа келтіреді және сәйкес түс реңін (hue) есептейді. Содан кейін ол HUEtoRGB функциясын шақырып, түс реңін RGB мәндеріне түрлендіреді, ал олар setColor функциясына беріліп, жарықдиодты жаңартады.

Демонстрация / Не күтуге болады

Сымдарды жалғап, кодты жүктегеннен кейін, потенциометрді бұрап, RGB жарықдиодының түсін тегіс өзгерте алуыңыз керек. Тұтқаны айналдырған кезде, жарықдиод түрлі түстер арқылы өтеді, бұл тұтқаның орнынан есептелген түс реңіне негізделген. Егер жарықдиод жанбаса немесе күтпеген әрекет етсе, сымдарды тексеріп, потенциометрдің дұрыс жалғанғанына көз жеткізіңіз (бейнеде 10:45).

Бейне уақыт белгілері

  • 00:00 Басталуы
  • 2:11 Жобаға кіріспе
  • 4:31 RGB жарықдиоды
  • 8:18 RGB түсі
  • 12:18 Сымдарды жалғау түсіндірілді
  • 17:59 Arduino коды түсіндірілді
  • 24:12 Arduino IDE-де ESP32 тақтасын және COM портын таңдау
  • 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++
// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;

// Define the pin for the knob
#define KNOB_PIN 14

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

void loop() {
  // Read the value of the knob
  int knobValue = analogRead(KNOB_PIN);
  Serial.println(knobValue);
  // Normalize the knob value to the range 0-1
  float hueValue = (float)knobValue / 4095.0;

  // Convert the normalized value to a HUE value (0-360)
  int hue = (int)(hueValue * 360);

  // Convert the HUE value to RGB values
  int red, green, blue;
  HUEtoRGB(hue, &red, &green, &blue);

  // Update the RGB LED with the new color values
  setColor(red, green, blue);
}

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

// Convert a HUE value to RGB values
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);
}

Ресурстар мен сілтемелер

Файлдар📁

Файлдар жоқ.