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.

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ı
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.
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
// 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);
}
Common Course Links
Common Course Files
Kaynaklar ve referanslar
-
BelgelendirmeESP32 Tutorial 34/55- SunFounder doc page for Color Gradientdocs.sunfounder.com
Dosyalar📁
Dosya mevcut değil.