Search Code

د ESP32 ټیوټوریل 34/55 - د RGB LED او کنوب سره رنګ ګریډینټ | د SunFounder د ESP32 IoT زده کړې کټ

د ESP32 ټیوټوریل 34/55 - د RGB LED او کنوب سره رنګ ګریډینټ | د SunFounder د ESP32 IoT زده کړې کټ

په دې ټیوټوریل کې به موږ د RGB LED په کارولو سره د رنګ تدریجي اغېز جوړ کړو چې د پوټینشیومیټر (کنوب) د موقعیت پر بنسټ تنظیمیږي. دا پروژه د ESP32 مایکروکنټرولر کاروي، کوم چې جوړ شوی Wi-Fi او Bluetooth وړتیاوې لري، چې دا د IoT پروژو لپاره یو څو اړخیز انتخاب ګرځوي. د پوټینشیومیټر په ګرځولو سره، موږ کولی شو په اسانۍ سره د مختلفو رنګونو ترمنځ لیږد وکړو، چې د RGB LED فعالیت او د پوټینشیومیټر څخه د انلاګ ارزښتونو لوستلو وړتیا دواړه ښیي.

ESO32-34_-Color-Gradient-main

دا پروژه د PWM (Pulse Width Modulation) زده کړې او د مایکروکنټرولر سره د انلاګ وسایلو کنټرول لپاره مثالی ده. د دې ټیوټوریل په اوږدو کې به موږ د اړینو هارډویر اجزاوو، تارونو لارښوونو په اړه بحث وکړو، او د کوډ برخې به چمتو کړو ترڅو تاسو سره د پروژې په پلي کولو کې مرسته وکړي. د لا زیات بصري توضیحاتو لپاره، ډاډ ترلاسه کړئ چې اړونده ویډیو وګورئ (په ویډیو کې په 02:15 کې).

هارډویر تشریح شوی

ESO32-34_-Color-Gradient-schematic

په دې پروژه کې کارول شوي اصلي اجزاوې د ESP32 مایکروکنټرولر، یو RGB LED، او یو پوټینشیومیټر شامل دي. ESP32 یو پیاوړی مایکروکنټرولر دی چې کولی شي مختلف دندې ترسره کړي، پشمول د بېسیم اړیکه، چې دا د IoT غوښتنلیکونو لپاره مناسب کوي. RGB LED د دریو جلا LED څراغونو (سور، شین، او نیلي) څخه جوړ دی چې کولی شي د رنګونو پراخه لړۍ تولیدولو لپاره مخلوط شي. پوټینشیومیټر د یو تنظیم وړ مقاومت په توګه کار کوي چې د خپل موقعیت پر بنسټ یو متغیر ولټاژ تولیدوي.

ESP32_rgb_pin

RGB LED په دوه ترتیبونو کې وصل کیدی شي: عام انوډ یا عام کاتوډ. په دې پروژه کې، موږ به د عام انوډ ترتیب وکاروو، چیرې چې ټول انوډونه یوځای مثبت ولټاژ ته وصل دي، چې موږ ته اجازه راکوي د هر LED روښانتیا په انفرادي ډول د PWM سره کنټرول کړو. پوټینشیومیټر به د ESP32 په انلاګ انپټ سره وصل شي ترڅو د هغې موقعیت ولولي او د RGB ارزښتونه په مطابق تنظیم کړي.

ډیټاشیټ تفصیلات

جوړونکی SunFounder
د برخې شمېره RGB LED
منطق/IO ولټاژ 3.3 V
د بریښنا ولټاژ 5 V
د تولید جریان (په هر چینل) 20 mA
د لوړ جریان (په هر چینل) 30 mA
د PWM فریکونسي لارښود 5 kHz
د انپټ منطق حدونه 0.3 V (ټیټ) / 2.7 V (لوړ)
د ولټاژ کمښت / RDS(on) / سنتریشن 1.8 V (ټیپ.)
حرارتي حدونه د عملیاتو تودوخه: -40°C څخه تر +85°C پورې
بسته بندي Through-hole
یادښتونه / ډولونه د عام انوډ ترتیب

 

  • د هر LED چینل لپاره د جریان محدودولو لپاره 220 اوم مقاومت وکاروئ.
  • د RGB LED لپاره د مناسب بریښنا ولټاژ (5V) ډاډ ترلاسه کړئ.
  • عام انوډ مثبت ولټاژ ته وصل کړئ.
  • د هر LED رنګ د روښانتیا کنټرول لپاره PWM وکاروئ.
  • د پوټینشیومیټر د اړیکې په اړه محتاط اوسئ ترڅو د فلوټینګ انپټونو څخه مخنیوی وشي.
  • ډاډ ترلاسه کړئ چې ESP32 د کوډ اپلوډ کولو دمخه په سمه توګه بریښنا لري.

د تارونو لارښوونې

د RGB LED او پوټینشیومیټر د ESP32 سره د تارونو لپاره، د RGB LED د عام انوډ پن په ESP32 باندې د 3.3V بریښنا پن سره وصل کولو سره پیل وکړئ. د RGB LED سور، شین، او نیلي پنونه به په ترتیب سره د 27، 26، او 25 پنونو سره وصل شي. ډاډ ترلاسه کړئ چې د هر LED رنګ پن سره په لړۍ کې 220 اوم مقاومت ځای په ځای کړئ ترڅو جریان محدود کړئ او LED خوندي کړئ.

بیا، پوټینشیومیټر د ESP32 سره وصل کړئ د کیڼ پن په 3.3V بریښنا پن سره، ښی پن په ځمکه (ground) سره، او منځنی پن په ESP32 باندې 14 سره وصل کولو سره. دا ترتیب ESP32 ته اجازه ورکوي چې د پوټینشیومیټر څخه انلاګ ولټاژ ولولي، کوم چې به د هغې د موقعیت پر بنسټ د RGB LED رنګ تنظیمولو لپاره وکارول شي.

د کوډ مثالونه او واک ترو

د سیټ اپ فنکشن کې، موږ د RGB LED او پوټینشیومیټر لپاره پنونه تعریف کوو، او همدارنګه د PWM ترتیبات پیل کوو. لاندې کوډ برخه ښیي چې موږ څنګه د RGB LED پنونه تنظیم کوو:

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

په دې برخه کې، موږ د سور، شین، او نیلي LED لپاره پنونه تعریف کوو، او دوی د تعریف شوي فریکونسي او ریزولوشن سره د PWM چینلونو سره نښلوو.

د لوپ فنکشن د پوټینشیومیټر ارزښت لولي او دا د هغه (hue) ارزښت ته بدلوي، کوم چې بیا د RGB ارزښتونو ټاکلو لپاره کارول کیږي. لاندې اقتباس دا پروسه ښیي:

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

دا کوډ د پوټینشیومیټر څخه انلاګ ارزښت لولي، یې نورمال کوي، او اړونده رنګ (hue) محاسبه کوي. بیا د HUEtoRGB فنکشن غږوي ترڅو رنګ په RGB ارزښتونو بدل کړي، کوم چې د LED تازه کولو لپاره setColor فنکشن ته لیږل کیږي.

ښودنه / څه تمه وکړو

د تارونو اړیکې بشپړولو او کوډ اپلوډ کولو وروسته، تاسو باید وکولی شئ پوټینشیومیټر وګرځوئ ترڅو د RGB LED رنګ په نرمۍ سره بدل کړئ. لکه څنګه چې تاسو دستګاه ګرځوئ، LED به د دستګاه موقعیت څخه محاسبه شوي رنګ ارزښت پر بنسټ په بیلابیلو رنګونو بدلیږي. که LED روښانه نشي یا غیر متوقع چلند وکړي، تارونه وګورئ او ډاډ ترلاسه کړئ چې پوټینشیومیټر په سمه توګه وصل دی (په ویډیو کې په 10:45 کې).

د ویډیو وخت نښې

  • 00:00 پیل
  • 2:11 د پروژې پیژندنه
  • 4:31 RGB LED
  • 8:18 RGB رنګ
  • 12:18 د تارونو اړیکې تشریح شوې
  • 17:59 د Arduino کوډ تشریح شوی
  • 24:12 په Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
  • 25:54 ښودنه

Images

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

Resources & references

Files📁

No files available.