Search Code

Samouczek ESP32 34/55 - Gradient kolorów z diodą RGB i pokrętłem | Zestaw edukacyjny SunFounder ESP32 IoT

Samouczek ESP32 34/55 - Gradient kolorów z diodą RGB i pokrętłem | Zestaw edukacyjny SunFounder ESP32 IoT

W tym samouczku stworzymy efekt gradientu kolorów przy użyciu diody LED RGB, która dostosowuje się do pozycji potencjometru (pokrętła). Projekt wykorzystuje mikrokontroler ESP32, który zapewnia wbudowaną łączność Wi-Fi i Bluetooth, co czyni go wszechstronnym wyborem do projektów IoT. Obracając potencjometr, możemy płynnie przechodzić między różnymi kolorami, demonstrując zarówno funkcjonalność diody LED RGB, jak i możliwość odczytu wartości analogowych z potencjometru.

ESO32-34_-Color-Gradient-main

Ten projekt jest idealny do nauki PWM (modulacji szerokości impulsu) i sterowania urządzeniami analogowymi za pomocą mikrokontrolera. W trakcie tego samouczka omówimy niezbędne komponenty sprzętowe, instrukcje podłączenia oraz udostępnimy fragmenty kodu, które pomogą Ci wdrożyć projekt. Aby uzyskać bardziej wizualne wyjaśnienie, koniecznie obejrzyj powiązane wideo (na wideo o 02:15).

Objaśnienie sprzętu

ESO32-34_-Color-Gradient-schematic

Główne komponenty użyte w tym projekcie to mikrokontroler ESP32, dioda LED RGB i potencjometr. ESP32 to wydajny mikrokontroler, który może obsługiwać różne zadania, w tym komunikację bezprzewodową, co czyni go odpowiednim do zastosowań IoT. Dioda LED RGB składa się z trzech pojedynczych diod (czerwonej, zielonej i niebieskiej), które można mieszać, aby uzyskać szeroką gamę kolorów. Potencjometr działa jak regulowany rezystor, który zapewnia zmienne napięcie wyjściowe w zależności od jego pozycji.

ESP32_rgb_pin

Diodę LED RGB można podłączyć w dwóch konfiguracjach: wspólna anoda lub wspólna katoda. W tym projekcie użyjemy konfiguracji ze wspólną anodą, gdzie wszystkie anody są połączone razem do dodatniego napięcia, co pozwala nam indywidualnie sterować jasnością każdej diody za pomocą PWM. Potencjometr zostanie podłączony do wejścia analogowego na ESP32, aby odczytać jego pozycję i odpowiednio dostosować wartości RGB.

Szczegóły z karty katalogowej

Producent SunFounder
Numer części Dioda LED RGB
Napięcie logiczne/IO 3,3 V
Napięcie zasilania 5 V
Prąd wyjściowy (na kanał) 20 mA
Prąd szczytowy (na kanał) 30 mA
Zalecana częstotliwość PWM 5 kHz
Progi logiczne wejścia 0,3 V (niski) / 2,7 V (wysoki)
Spadek napięcia / RDS(on) / nasycenie 1,8 V (typ.)
Ograniczenia termiczne Temperatura pracy: -40°C do +85°C
Obudowa Przewlekana (THT)
Uwagi / warianty Konfiguracja ze wspólną anodą

 

  • Użyj rezystora 220 omów dla każdego kanału LED, aby ograniczyć prąd.
  • Zapewnij prawidłowe napięcie zasilania (5 V) dla diody LED RGB.
  • Podłącz wspólną anodę do dodatniego źródła napięcia.
  • Użyj PWM do sterowania jasnością każdego koloru diody LED.
  • Zachowaj ostrożność przy podłączaniu potencjometru, aby uniknąć pływających wejść.
  • Sprawdź, czy ESP32 jest prawidłowo zasilany przed wgraniem kodu.

Instrukcje podłączenia

Aby podłączyć diodę LED RGB i potencjometr do ESP32, zacznij od podłączenia pinu wspólnej anody diody LED RGB do pinu zasilania 3,3 V na ESP32. Piny czerwony, zielony i niebieski diody LED RGB zostaną podłączone odpowiednio do pinów 27, 26 i 25. Upewnij się, że umieściłeś rezystor 220 omów szeregowo z każdym pinem koloru diody LED, aby ograniczyć prąd i chronić diodę.

Następnie podłącz potencjometr do ESP32, łącząc lewy pin z pinem zasilania 3,3 V, prawy pin z masą, a środkowy pin z pinem 14 na ESP32. Ta konfiguracja pozwala ESP32 odczytać napięcie analogowe z potencjometru, które zostanie użyte do dostosowania koloru diody LED RGB w zależności od jego pozycji.

Przykłady kodu i omówienie

W funkcji setup definiujemy piny dla diody LED RGB i potencjometru, a także inicjalizujemy ustawienia PWM. Poniższy fragment kodu pokazuje, jak konfigurujemy piny diody LED 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);
}

W tym fragmencie definiujemy piny dla czerwonych, zielonych i niebieskich diod LED oraz podłączamy je do kanałów PWM z określoną częstotliwością i rozdzielczością.

Funkcja loop odczytuje wartość potencjometru i konwertuje ją na wartość odcienia, która jest następnie używana do określenia wartości RGB. Poniższy fragment demonstruje ten 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);
}

Ten kod odczytuje wartość analogową z potencjometru, normalizuje ją i oblicza odpowiadający jej odcień. Następnie wywołuje funkcję HUEtoRGB, aby przekształcić odcień na wartości RGB, które są przekazywane do funkcji setColor w celu aktualizacji diody LED.

Demonstracja / Czego się spodziewać

Po zakończeniu podłączania i wgraniu kodu powinieneś być w stanie obracać potencjometrem, aby płynnie zmieniać kolor diody RGB. Podczas obracania pokrętła dioda LED będzie przechodzić przez różne kolory w zależności od wartości odcienia obliczonej z pozycji pokrętła. Jeśli dioda LED nie świeci się lub zachowuje się nieoczekiwanie, sprawdź połączenia i upewnij się, że potencjometr jest podłączony prawidłowo (na filmie o 10:45).

Znaczniki czasu w filmie

  • 00:00 Start
  • 2:11 Wprowadzenie do projektu
  • 4:31 Dioda RGB
  • 8:18 Kolor RGB
  • 12:18 Wyjaśnienie podłączeń
  • 17:59 Wyjaśnienie kodu Arduino
  • 24:12 Wybór płytki ESP32 i portu COM w Arduino IDE
  • 25:54 Demonstracja

Obrazy

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
Język: 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);
}

Zasoby i odniesienia

Pliki📁

Brak dostępnych plików.