Cari Kode

Tutorial ESP32 34/55 - Gradasi warna dengan LED RGB dan Knob | Kit Pembelajaran IoT ESP32 SunFounder

Tutorial ESP32 34/55 - Gradasi warna dengan LED RGB dan Knob | Kit Pembelajaran IoT ESP32 SunFounder

Dalam tutorial ini, kita akan membuat efek gradien warna menggunakan LED RGB yang menyesuaikan berdasarkan posisi potensiometer (kenop). Proyek ini menggunakan mikrokontroler ESP32, yang menyediakan kemampuan Wi-Fi dan Bluetooth bawaan, menjadikannya pilihan serbaguna untuk proyek IoT. Dengan memutar potensiometer, kita dapat bertransisi dengan mulus antara berbagai warna, menunjukkan fungsionalitas LED RGB dan kemampuan untuk membaca nilai analog dari potensiometer.

ESO32-34_-Color-Gradient-main

Proyek ini ideal untuk mempelajari PWM (Pulse Width Modulation) dan cara mengontrol perangkat analog dengan mikrokontroler. Sepanjang tutorial ini, kita akan membahas komponen perangkat keras yang diperlukan, instruksi pengkabelan, dan menyediakan potongan kode untuk membantu Anda mengimplementasikan proyek ini. Untuk penjelasan yang lebih visual, pastikan untuk menonton video terkait (di video pada 02:15).

Penjelasan Perangkat Keras

ESO32-34_-Color-Gradient-schematic

Komponen utama yang digunakan dalam proyek ini termasuk mikrokontroler ESP32, LED RGB, dan potensiometer. ESP32 adalah mikrokontroler yang kuat yang dapat menangani berbagai tugas, termasuk komunikasi nirkabel, menjadikannya cocok untuk aplikasi IoT. LED RGB terdiri dari tiga LED individual (merah, hijau, dan biru) yang dapat dicampur untuk menghasilkan berbagai macam warna. Potensiometer berfungsi sebagai resistor yang dapat disesuaikan yang memberikan output tegangan variabel berdasarkan posisinya.

ESP32_rgb_pin

LED RGB dapat dihubungkan dalam dua konfigurasi: anoda bersama atau katoda bersama. Dalam proyek ini, kita akan menggunakan konfigurasi anoda bersama, di mana semua anoda dihubungkan bersama ke tegangan positif, memungkinkan kita untuk mengontrol kecerahan setiap LED secara individual dengan PWM. Potensiometer akan dihubungkan ke input analog pada ESP32 untuk membaca posisinya dan menyesuaikan nilai RGB sesuai.

Detail Datasheet

Produsen SunFounder
Nomor bagian LED RGB
Tegangan logika/IO 3,3 V
Tegangan suplai 5 V
Arus output (per saluran) 20 mA
Arus puncak (per saluran) 30 mA
Panduan frekuensi PWM 5 kHz
Ambang logika input 0,3 V (rendah) / 2,7 V (tinggi)
Penurunan tegangan / RDS(on) / saturasi 1,8 V (khas)
Batas termal Suhu operasi: -40°C hingga +85°C
Kemasan Through-hole
Catatan / varian Konfigurasi anoda bersama

 

  • Gunakan resistor 220 Ohm untuk setiap saluran LED untuk membatasi arus.
  • Pastikan tegangan suplai yang tepat (5V) untuk LED RGB.
  • Hubungkan anoda bersama ke suplai tegangan positif.
  • Gunakan PWM untuk mengontrol kecerahan setiap warna LED.
  • Berhati-hatilah dengan koneksi potensiometer untuk menghindari input mengambang.
  • Verifikasi bahwa ESP32 diberi daya dengan benar sebelum mengunggah kode.

Instruksi Pengkabelan

Untuk menghubungkan LED RGB dan potensiometer ke ESP32, mulailah dengan menghubungkan pin anoda bersama dari LED RGB ke pin daya 3.3V pada ESP32. Pin merah, hijau, dan biru dari LED RGB akan terhubung ke pin 27, 26, dan 25 masing-masing. Pastikan untuk menempatkan resistor 220 Ohm secara seri dengan setiap pin warna LED untuk membatasi arus dan melindungi LED.

Selanjutnya, hubungkan potensiometer ke ESP32 dengan menghubungkan pin kiri ke pin daya 3.3V, pin kanan ke ground, dan pin tengah ke 14 pada ESP32. Konfigurasi ini memungkinkan ESP32 untuk membaca tegangan analog dari potensiometer, yang akan digunakan untuk menyesuaikan warna LED RGB berdasarkan posisinya.

Contoh Kode & Panduan

Dalam fungsi setup, kita mendefinisikan pin untuk LED RGB dan potensiometer, serta menginisialisasi pengaturan PWM. Potongan kode berikut menunjukkan bagaimana kita mengatur pin 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);
}

Dalam potongan ini, kita mendefinisikan pin untuk LED merah, hijau, dan biru, dan menghubungkannya ke saluran PWM dengan frekuensi dan resolusi yang ditentukan.

Fungsi loop membaca nilai potensiometer dan mengubahnya menjadi nilai hue, yang kemudian digunakan untuk menentukan nilai RGB. Kutipan berikut menunjukkan proses ini:

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

Kode ini membaca nilai analog dari potensiometer, menormalkannya, dan menghitung hue yang sesuai. Kemudian memanggil fungsi HUEtoRGB untuk mengonversi hue menjadi nilai RGB, yang diteruskan ke fungsi setColor untuk memperbarui LED.

Demonstrasi / Apa yang Diharapkan

Setelah menyelesaikan perangkaian dan mengunggah kode, Anda seharusnya dapat memutar potensiometer untuk mengubah warna LED RGB secara halus. Saat Anda memutar kenop, LED akan bertransisi melalui berbagai warna berdasarkan nilai hue yang dihitung dari posisi kenop. Jika LED tidak menyala atau berperilaku tidak terduga, periksa perangkaian dan pastikan potensiometer terhubung dengan benar (di video pada menit 10:45).

Stempel Waktu Video

  • 00:00 Mulai
  • 2:11 Pengenalan proyek
  • 4:31 LED RGB
  • 8:18 Warna RGB
  • 12:18 Penjelasan perangkaian
  • 17:59 Penjelasan Kode Arduino
  • 24:12 Memilih Board ESP32 dan Port COM di Arduino IDE
  • 25:54 Demonstrasi

Gambar

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

Sumber daya & referensi

Berkas📁

Tidak ada file tersedia.