Search Code

Tutorial ESP32 34/55 - Gradient de culoare cu LED RGB și Buton Rotativ | Kitul de învățare IoT ESP32 de la SunFounder

Tutorial ESP32 34/55 - Gradient de culoare cu LED RGB și Buton Rotativ | Kitul de învățare IoT ESP32 de la SunFounder

În acest tutorial, vom crea un efect de gradient de culoare folosind un LED RGB care se ajustează în funcție de poziția unui potențiometru (buton). Proiectul utilizează un microcontroler ESP32, care oferă capacități integrate Wi-Fi și Bluetooth, fiind o alegere versatilă pentru proiecte IoT. Prin rotirea potențiometrului, putem trece lin între diferite culori, demonstrând atât funcționalitatea LED-ului RGB, cât și capacitatea de a citi valori analogice de la potențiometru.

ESO32-34_-Color-Gradient-main

Acest proiect este ideal pentru învățarea despre PWM (Modulare pe Durată de Impuls) și despre cum să controlezi dispozitive analogice cu un microcontroler. Pe parcursul acestui tutorial, vom discuta despre componentele hardware necesare, instrucțiunile de cablare și vom oferi fragmente de cod pentru a te ajuta să implementezi proiectul. Pentru o explicație mai vizuală, asigură-te că urmărești videoclipul asociat (în videoclip la 02:15).

Hardware Explicat

ESO32-34_-Color-Gradient-schematic

Principalele componente utilizate în acest proiect includ microcontrolerul ESP32, un LED RGB și un potențiometru. ESP32 este un microcontroler puternic care poate gestiona diverse sarcini, inclusiv comunicarea wireless, fiind potrivit pentru aplicații IoT. LED-ul RGB constă din trei LED-uri individuale (roșu, verde și albastru) care pot fi amestecate pentru a produce o gamă largă de culori. Potențiometrul acționează ca un rezistor reglabil care oferă o tensiune de ieșire variabilă în funcție de poziția sa.

ESP32_rgb_pin

LED-ul RGB poate fi conectat în două configurații: anod comun sau catod comun. În acest proiect, vom folosi o configurație cu anod comun, unde toți anozii sunt conectați împreună la o tensiune pozitivă, permițându-ne să controlăm luminozitatea fiecărui LED individual cu PWM. Potențiometrul va fi conectat la o intrare analogică pe ESP32 pentru a citi poziția sa și a ajusta valorile RGB în consecință.

Detalii din Fișa Tehnică

Producător SunFounder
Număr de piesă LED RGB
Tensiune logică/IO 3,3 V
Tensiune de alimentare 5 V
Curent de ieșire (pe canal) 20 mA
Curent de vârf (pe canal) 30 mA
Ghid de frecvență PWM 5 kHz
Praguri logice de intrare 0,3 V (scăzut) / 2,7 V (ridicat)
Cădere de tensiune / RDS(on) / saturație 1,8 V (tip.)
Limite termice Temperatură de operare: -40°C până la +85°C
Pachet Prin gaură
Note / variante Configurație cu anod comun

 

  • Folosește un rezistor de 220 Ohmi pentru fiecare canal LED pentru a limita curentul.
  • Asigură o tensiune de alimentare adecvată (5V) pentru LED-ul RGB.
  • Conectează anodul comun la sursa de tensiune pozitivă.
  • Folosește PWM pentru a controla luminozitatea fiecărei culori a LED-ului.
  • Fii atent la conexiunea potențiometrului pentru a evita intrările flotante.
  • Verifică că ESP32 este alimentat corect înainte de a încărca codul.

Instrucțiuni de Cablare

Pentru a cabla LED-ul RGB și potențiometrul la ESP32, începe prin conectarea pinului cu anod comun al LED-ului RGB la pinul de alimentare de 3,3V de pe ESP32. Pinii roșu, verde și albastru ai LED-ului RGB se vor conecta la pinii 27, 26 și, respectiv, 25. Asigură-te că plasezi un rezistor de 220 Ohmi în serie cu fiecare pin de culoare al LED-ului pentru a limita curentul și a proteja LED-ul.

Apoi, conectează potențiometrul la ESP32 legând pinul din stânga la pinul de alimentare de 3,3V, pinul din dreapta la masă, iar pinul din mijloc la 14 pe ESP32. Această configurație permite ESP32 să citească tensiunea analogică de la potențiometru, care va fi folosită pentru a ajusta culoarea LED-ului RGB în funcție de poziția sa.

Exemple de Cod & Explicații

În funcția de configurare, definim pinii pentru LED-ul RGB și potențiometru, precum și inițializăm setările PWM. Următorul fragment de cod arată cum setăm pinii LED-ului 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);
}

În acest fragment, definim pinii pentru LED-urile roșu, verde și albastru și îi atașăm la canale PWM cu o frecvență și o rezoluție definite.

Funcția loop citește valoarea potențiometrului și o convertește într-o valoare de nuanță, care este apoi folosită pentru a determina valorile RGB. Următorul extras demonstrează acest proces:

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);
}

Acest cod citește valoarea analogică de la potențiometru, o normalizează și calculează nuanța corespunzătoare. Apoi apelează funcția HUEtoRGB pentru a converti nuanța în valori RGB, care sunt transmise funcției setColor pentru a actualiza LED-ul.

Demonstrație / Ce să te aștepți

După finalizarea cablajului și încărcarea codului, ar trebui să poți roti potențiometrul pentru a schimba culoarea LED-ului RGB lin. Pe măsură ce rotești butonul, LED-ul va trece prin diverse culori pe baza valorii nuanței calculate din poziția butonului. Dacă LED-ul nu se aprinde sau se comportă neașteptat, verifică cablajul și asigură-te că potențiometrul este conectat corect (în video la 10:45).

Marcaje temporale video

  • 00:00 Început
  • 2:11 Introducere în proiect
  • 4:31 LED RGB
  • 8:18 Culoare RGB
  • 12:18 Cablaj explicat
  • 17:59 Cod Arduino explicat
  • 24:12 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
  • 25:54 Demonstrație

Imagini

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
Limba: 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);
}

Resurse și referințe

Fișiere📁

Nu sunt disponibile fișiere.