Search Code

ESP32 Eğitimi 34/55 - RGB LED ve Düğme ile Renk Geçişi | SunFounder'ın ESP32 IoT Öğrenme Kiti

ESP32 Eğitimi 34/55 - RGB LED ve Düğme ile Renk Geçişi | SunFounder'ın ESP32 IoT Öğrenme Kiti

Bu eğitimde, bir potansiyometrenin (düğme) konumuna göre ayarlanan bir RGB LED kullanarak renk geçişi efekti oluşturacağız. Proje, yerleşik Wi-Fi ve Bluetooth özellikleri sunan ve IoT projeleri için çok yönlü bir seçim olan bir ESP32 mikrodenetleyicisini kullanır. Potansiyometreyi çevirerek farklı renkler arasında sorunsuz bir şekilde geçiş yapabilir, hem RGB LED'in işlevselliğini hem de potansiyometreden analog değerleri okuma yeteneğini gösterebiliriz.

ESO32-34_-Renk-Geçişi-ana

Bu proje, PWM (Darbe Genişliği Modülasyonu) ve bir mikrodenetleyici ile analog cihazların nasıl kontrol edileceğini öğrenmek için idealdir. Bu eğitim boyunca gerekli donanım bileşenlerini, bağlantı talimatlarını tartışacağız ve projeyi uygulamanıza yardımcı olacak kod parçacıkları sağlayacağız. Daha görsel bir açıklama için ilgili videoyu (videoda 02:15'te) mutlaka izleyin.

Donanım Açıklaması

ESO32-34_-Renk-Geçişi-şematik

Bu projede kullanılan ana bileşenler ESP32 mikrodenetleyicisi, bir RGB LED ve bir potansiyometredir. ESP32, kablosuz iletişim dahil çeşitli görevleri yerine getirebilen ve IoT uygulamaları için uygun olan güçlü bir mikrodenetleyicidir. RGB LED, geniş bir renk yelpazesi üretmek için karıştırılabilen üç ayrı LED'den (kırmızı, yeşil ve mavi) oluşur. Potansiyometre, konumuna bağlı olarak değişken bir voltaj çıkışı sağlayan ayarlanabilir bir direnç görevi görür.

ESP32_rgb_pin

RGB LED iki konfigürasyonda bağlanabilir: ortak anot veya ortak katot. Bu projede, tüm anotların pozitif bir voltaja bağlandığı ve her LED'in parlaklığını PWM ile ayrı ayrı kontrol etmemizi sağlayan ortak anot konfigürasyonunu kullanacağız. Potansiyometre, konumunu okumak ve RGB değerlerini buna göre ayarlamak için ESP32 üzerindeki bir analog girişe bağlanacaktır.

Veri Sayfası Detayları

Üretici SunFounder
Parça numarası RGB LED
Mantık/G/Ç voltajı 3,3 V
Besleme voltajı 5 V
Çıkış akımı (kanal başına) 20 mA
Tepe akımı (kanal başına) 30 mA
PWM frekans kılavuzu 5 kHz
Giriş mantık eşikleri 0,3 V (düşük) / 2,7 V (yüksek)
Voltaj düşümü / RDS(on) / doyum 1,8 V (tipik)
Termal sınırlar Çalışma sıcaklığı: -40°C ile +85°C
Paket Delikli
Notlar / varyantlar Ortak anot konfigürasyonu

 

  • Akımı sınırlamak için her LED kanalı için 220 Ohm'luk bir direnç kullanın.
  • RGB LED için doğru besleme voltajını (5V) sağlayın.
  • Ortak anodu pozitif voltaj kaynağına bağlayın.
  • Her LED renginin parlaklığını kontrol etmek için PWM kullanın.
  • Yüzen girişleri önlemek için potansiyometrenin bağlantısına dikkat edin.
  • Kod yüklemeden önce ESP32'nin doğru şekilde beslendiğini doğrulayın.

Bağlantı Talimatları

RGB LED'i ve potansiyometreyi ESP32'ye bağlamak için, RGB LED'in ortak anot pinini ESP32 üzerindeki 3.3V güç pinine bağlayarak başlayın. RGB LED'in kırmızı, yeşil ve mavi pinleri sırasıyla 27, 26 ve 25 numaralı pinlere bağlanacaktır. Akımı sınırlamak ve LED'i korumak için her LED renk piniyle seri olarak 220 Ohm'luk bir direnç yerleştirdiğinizden emin olun.

Ardından, potansiyometreyi ESP32'ye bağlayın: sol pini 3.3V güç pinine, sağ pini toprağa ve orta pini ESP32 üzerindeki 14 numaralı pine bağlayın. Bu konfigürasyon, ESP32'nin potansiyometreden gelen analog voltajı okumasını sağlar; bu voltaj, RGB LED'in rengini konumuna göre ayarlamak için kullanılacaktır.

Kod Örnekleri ve Açıklama

Kurulum fonksiyonunda, RGB LED ve potansiyometre için pinleri tanımlar ve PWM ayarlarını başlatırız. Aşağıdaki kod parçacığı, RGB LED pinlerini nasıl kurduğumuzu gösterir:

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

Bu parçacıkta, kırmızı, yeşil ve mavi LED'ler için pinleri tanımlar ve bunları tanımlı bir frekans ve çözünürlükle PWM kanallarına bağlarız.

Döngü fonksiyonu potansiyometrenin değerini okur ve bunu bir renk tonu değerine dönüştürür; bu değer daha sonra RGB değerlerini belirlemek için kullanılır. Aşağıdaki alıntı bu süreci gösterir:

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

Bu kod, potansiyometreden analog değeri okur, normalleştirir ve karşılık gelen renk tonunu hesaplar. Ardından, renk tonunu RGB değerlerine dönüştürmek için HUEtoRGB fonksiyonunu çağırır ve bu değerler LED'i güncellemek için setColor fonksiyonuna iletilir.

Gösterim / Beklentiler

Kablolamayı tamamlayıp kodu yükledikten sonra, RGB LED'in rengini değiştirmek için potansiyometreyi çevirebilmelisiniz. Düğmeyi çevirdikçe, LED, düğme konumundan hesaplanan renk tonu değerine göre çeşitli renkler arasında yumuşak bir şekilde geçiş yapacaktır. LED yanmıyorsa veya beklenmedik davranıyorsa, kablolamayı kontrol edin ve potansiyometrenin doğru bağlandığından emin olun (videoda 10:45'te).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 2:11 Projeye giriş
  • 4:31 RGB LED
  • 8:18 RGB Renk
  • 12:18 Kablolama açıklaması
  • 17:59 Arduino Kodu açıklaması
  • 24:12 Arduino IDE'de ESP32 Kartı ve COM portu seçimi
  • 25:54 Gösterim

Görseller

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

Kaynaklar ve referanslar

Dosyalar📁

Dosya mevcut değil.