آموزش آردوینوپروژه های آردوینو

اتصال LED نواری WS2811 به آردوینو (آموزش جامع)

در این راهنما، پروسه اتصال و کنترل نوار ال ای دی WS2811 با میکروکنترلر آردوینو را آموزش خواهید دید. نوار ال ای دی WS2811 به دلیل آدرس پذیری جداگانه لامپ های ال ای دی خود معروف است که امکان ایجاد جلوه های نوری را در پروژه های مختلف مثل دکوراسیون منزل، تاسیسات هنری و الکترونیک DIY را فراهم میکند.

پروژه ساخت بازی آرکید با نوار ال ای دی WS2811 قبلا در سایت بارگذاری شده است که میتوانید آن را هم مطالعه کنید.

در این مطلب، قدم های ضروری برای راه اندازی سخت افزاری و نرم افزاری نوار را پوشش خواهیم داد. هم چنین اتصالات ضروری بین نوار ال ای دی، برد آردوینو و منبع تغذیه همراه با کتابخانه های لازم برای کنترل ال ای دی ها را توضیح میدهیم. به علاوه، کدهای نمونه و توضیحات آن هم قرار داده شده تا هر چه سریع تر بتوانید پروژه خود را انجام دهید.

مواردی که در ابتدا باید بدانید…

ال ای دی RGB، همان دیود انتشاردهنده و ساطع کننده نور در سه رنگ قرمز، سبز و آبی است. این نوع از لامپ های LED، شامل سه LED جداگانه در یک پکیج و بسته بندی است و هر لامپ به طور مستقل میتواند یکی از سه رنگ نامبرده را از خود ساطع کند.

با ترکیب کردن شدت های مختلفی از این سه رنگ اصلی، میتوانیم رنگ های متفاوتی از جمله طیف کامل رنگ ها را تولید کنیم.

پایه های LED RGB

پایه های LED RGB

اتصال آند: بلندترین پایه لامپ LED آند مشترک، پایه آند یا پایه مثبت است که به منبع تغذیه مثبت ( معمولا 5 ولت) متصل است و بین سه رنگ LED به اشتراک گذاشته میشود یعنی هر سه رنگ به این پایه متصل هستند.

اتصال کاتد: سه پایه کوتاه تر نیز وجود دارند که هر کدام نشانگر اتصال کاتد یا اتصال منفی هر کدام از رنگ ها هستند. (قرمز، سبز، آبی). پایه های کاتد از هم مستقل اند و به یک دیگر متصل نمیشوند.

انواع ال ای دی RGB

ال ای دی RGB کاتد و آند مشترک

سه نوع اصلی از لامپ های ال ای دی RGB داریم.

1. ال ای دی آند مشترک (common anode)

در این نوع، پایه مثبت یا آند هر سه رنگ به هم متصل اند و مثل یک پایه مشترک از آن استفاده میکنند. اما هر پایه منفی یا کاتد رنگ ها به پایه متفاوتی متصل میشود. برای روشن کردن یک رنگ خاص، پایه مشترک به ولتاژ مثبت متصل میشود و کاتد لامپ موردنظر با مقاومت های مناسب به زمین متصل میشود. ( زمین میشود.)

2. ال ای دی کاتد مشترک (common cathode)

در این نوع، پایه منفی یا کاتد هر سه رنگ به هم متصل اند و مثل یک پایه مشترک از آن استفاده میکنند و پایه مثبت تا آند هر کدام از رنگ ها به پایه های متفاوتی متصل میشوند. برای روشن کردن یک رنگ خاص، پایه مشترک یا کاتد زمین میشود و آند لامپ مورد نظر با مقاومت مناسب به ولتاژ مثبت متصل میشود.

3. ال ای دی آدرس پذیر RGB

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

ای نوع LED ، به نام ال ای دی RGB دیجیتال هم شناخته میشود که در آن لامپ های LED به صورت جداگانه آدرس دهی میشوند. تراشه ها توکارند و به صورت مدارمجتمع درون هر پکیج وجود دارند. این تراشه ها امکان کنترل جداگانه هرلامپ را فراهم میکنند و به این صورت است که میتوانیم الگوها و جلوه های نوری پیچیده هم بسازیم.

این LED ها معمولا از طریق یک خط داده مثل پروتکل های WS2811، WS2812 و APA102 کنترل میشوند.

نحوه کار ال دی های RGB

کنترل رنگ ها:

برای روشن کردن یک رنگ به خصوص، باید یک مسیر جریان از پایه مثبت آندمشترک به پایه های کاتد رنگ های قرمز، سبز یا آبی ایجاد کنیم. با اتصال پایه های کاتد به زمین (GND) با مقاومت های محدودکننده جریان، شدت هر رنگ قابل کنترل است.

برای روشن کردن لامپ قرمز، باید کاتد LED قرمز(R) را از طریق فعال سازی پایه GPIO مربوطه روی میکروکنترلر یا آردوینو به زمین متصل کنیم.

به طور مشابه، میتوانیم LED سبز (G) یا LED آبی (B) را از طریق اتصال پایه کاتد به زمین و پایه های GPIO کنترل کنیم.

ترکیب رنگ ها:

همان طور که گفته شد، با تنظیم شدت هر کدام از رنگ ها می توانیم ترکیب رنگ های متفاوتی بسازیم. تغییر جریان گذرنده از هر پایه کاتد به ما امکان انجام این امر و در نتیجه تولید محدوده وسیعی از رنگ ها را میدهد. برای مثال، برای ساخت رنگ بنفش، باید LED قرمز(R) و LED آبی (B) را از طریق اتصال کاتدهایشان به زمین، فعال کنیم درحالی که LED سبز (G) همچنان غیرفعال بماند.

با کنترل on/off بودن و شدت هر اتصال کاتد، میتوانیم به رنگ های متنوعی از جمله سفید ( وقتی هر سه لامپ روشن هستند) تا تناژهای مختلف قرمز، سبز و آبی و ترکیبات آن ها برسیم.

پایه های درایور یا راه انداز WS2811

پایه های درایور یا راه انداز WS2811

  • GND: این پایه به زمین (GND) یا 0 ولت منبع تغذیه متصل میشود.
  • DATA: این پایه، ورودی راه انداز WS2811 است و داده کنترلی را از میکروکنترلر یا آردوینو و معمولا  هم از پایه خروجی دیجیتال آن دریافت میکند.
  • VCC: این پایه به ولتاژ مثبت منبع تغذیه (VCC) متصل است. WS2811 معمولا با ولتاژ 5 ولت کار میکند پس این پایه هم معمولا به +5V منبع تغذیه متصل میشود.
  • R-OUT: این پایه خروجی کانال رنگ قرمز ال ای دی آدرس پذیر RGB است و به آند یا پایه مثبت LED قرمز در پکیج ال ای دی متصل میشود.
  • G-OUT: این پایه خروجی کانال رنگ سبز ال ای دی آدرس پذیر RGB است و به آند یا پایه مثبت LED سبز در پکیج ال ای دی متصل میشود.
  • B-OUT: این پایه خروجی کانال رنگ آبی ال ای دی آدرس پذیر RGB است و به آند یا پایه مثبت LED آبی در پکیج ال ای دی متصل میشود.
  • DOUT: این پایه داده خروجی تراشه های WS2811 در زنجیره است که داده را به تراشه WS2811 بعدی در زنجیره منتقل میکند.

مدار داخلی راه انداز WS2811

مدار داخلی راه انداز WS2811

در این مدار، یک منبع تغذیه 5 ولت برای تولید جریان خروجی ثابت در حدود 18.5 میلی آمپر به ازای هر پایه خروجی راه انداز WS2811 داریم که درخشندگی و دمای رنگ ( میزان آبی یا زرد بودن نور سفید یا میزان گرم یا سرد بودن نور سفید) ثابت ال ای دی RGB را تضمین میکند.

یک خازن 104 (0.1 میکروفارادی) به عنوان خازن بای پس بدون قطب عمل کرده و المان های AC را در ریل برق فیلتر میکند. هم چنین دو مقاومت 33 اهمی اختیاری در پورت داده برای تطبیق امپدانس داریم. مدار پیکربندی ال ای دی RGB آندمشترک را در بالا میبینیم.

نحوه کار ال ای دی WS2811

راه انداز WS2811 داده را در یک فرمت خاص که بیانگر رنگ و شدت دلخواه هر LED است، دریافت میکند. داده کنترلی به صورت سریال ارسال میشود و هر LED درون زنجیره با استفاده از قسمتی از داده که مربوط به خودش است، رنگ خروجی خود را تعیین میکند.

هر بیت داده ای که به راه انداز ارسال میشود، شامل سطح low  یا high سیگنال است که از آن برای تعیین شدت رنگ یا لامپ خاص استفاده میکنیم. مدت زمانی که سیگنال high یا  low  میماند، بسیار مهم است. WS2811 از این زمان ها برای تفاوت قائل شدن بین دو بیت 0 و 1 استفاده میکند. مثلا یک پالس کوتاه high که به دنبال آن یک پالس طولانی low  می آید، میتواند نشان دهنده بیت 0 باشد در حالی که یک پالس طولانی high که به دنبال آن یک پالس کوتاه low هست میتواند نشان دهنده بیت 1 باشد.

راه انداز انتظار دارد که داده در قالب فریم هایی ارسال شود و هر فریم هم از یک سری بیت که رنگ دلخواه برای همه LED های متصل را نشان میدهند تشکیل شده باشد. زمان بندی بین فریم ها برای جدا کردن یک فریم از فریم بعدی بسیار است تا سنکرونیزاسیون حفظ شود. معمولا یک سیگنال کوتاه low برای نشان دادن انتهای یک فریم و شروع فریم بعدی استفاده میشود.

راه انداز WS2811 به یک پالس ریست برای آغاز پروسه دریافت داده نیاز دارد. این پالس ریست باید از 50 میکروثانیه بیشتر باشد تا مطمئن شویم تراشه WS2811 در وضعیت مناسب برای شروع دریافت داده قرار گرفته است.

الزام رعایت زمان بندی های WS2811 بسیار سخت  است. برای عملکرد مطمئن، زمان بندی های درنظر گرفته شده باید تلورانس مشخصی داشته باشند چون اگر انحرافات در زمان بندی ها بیشتر از این تلورانس ها باشد منجر به مخدوش شدن داده و نمایش رنگ اشتباه میشود.

ترکیب رنگ: راه انداز WS2811، ال ای دی های آدرس پذیر RGB را کنترل میکند. برای اینکه رنگ های متفاوتی داشته باشیم، شدت هر رنگ را با تنظیم چرخه کار یا duty cycle سیگنال PWM تغییر میدهد و با ترکیب اندازه های متفاوتی از قرمز، سبز و آّبی، راه انداز دامنه وسیعی از رنگ ها را میسازد. مثلا ترکیب قرمز و سبز با شدت کامل، رنگ زرد را تولید میکند در حالی که ترکیب دو رنگ قرمز و آبی رنگ ارغوانی را میسازد.

کنترل PWM: PWM تکنیکی برای مدوله کردن عرض پالس در سیگنال دیجیتال برای کنترل میانگین توان یا شدت خروجی مربوطه است. راه انداز ازPWM برای کنترل روشنایی هر لامپ استفاده میکند. به این صورت که لامپ را با فرکانس مشخص روشن و خاموش میکند و با تنظیم زمان on بودن (duty cycle) آن، روشنایی اش را کنترل میکند. پس با تغییر چرخه کار سیگنال PWM کانال هر رنگ، راه انداز میتواند شدت متفاوتی از سه رنگ نام برده ایجاد کند و آن را به صورت دقیق کنترل کند.

اجزای ال ای دی WS2811

قسمت های WS2811

مدار ساده WS2811 از المان های زیر تشکیل شده است:

تراشه WS2811: این تراشه قلب مدار است و مدار کنترل و مدار راه انداز لازم برای کنترل LED ها را یکپارچه میکند.

ال ای دی های RGB: WS2811 برای کنترل این LED ها طراحی شده که شامل سه LED متفاوت برای قرمز و سبز و آبی هستند. هر LED میتواند به طور مستقل برای تولید طیف گسترده ای از رنگ ها تنظیم شود.

تراشه های WS2811 زنجیره وار هستند به این معنی که داده خروجی یک تراشه، داده ورودی تراشه بعدی است پس میشود لامپ ها را به صورت متوالی کنترل کرد.

اتصال پشت سر هم ال ای دی WS2811

شرح پین نوار ال ای دی WS2811

پین های کانکتور WS2811

همان طور که در عکس مشاهده میکنید، یک سر مرد و یک سر زن داریم ( میل کانکتر و فیمیل کانکتر) که میتوان سر زن را به سر مرد متصل کرد تا طول سیم افزایش یابد. اما همان طور که میخواهیم طول سیم را افزایش دهیم باید بدانیم که رگولاتور ولتاژ آردوینو تنها اجازه میدهد حداکثر جریان به 1 آمپر برسد پس پیشنهاد ما این است که از یک منبع تغذیه خارجی 5 ولت استفاده کنید.

مدار اتصال آردوینو به نوار LED WS2811

اتصال WS2811 به آردوینو

  1. ترمینال مثبت منبع تغذیه 5 ولت را به پایه +5V نوار ال ای دی متصل کنید.
  2. ترمینال منفی منبع تغذیه 5 ولت را به پایه زمین یا GND نوار ال ای دی متصل کنید.
  3. پایه داده نوار را به پایه دیجیتال 5 آردوینو متصل کنید. شماره این پایه را برای استفاده بعدی به یاد بسپارید.

کد های راه اندازی WS2811 با آردوینو

IDE آردوینو را باز کنید و کتابخانه FastLED را در آردوینو نصب کنید. از ترتیب پایین استفاده کنید.

(Sketch -> Include Library -> Manage Libraries -> Search for “FastLED” -> Install).

نصب کتابخانه FASTLED

کدهای زیر را کپی پیست کرده و روی برد آردوینو نانو خود آپلود کنید.

کد الگو 1:

#include <FastLED.h>
#define LED_PIN 5    // Replace with the pin number you used for DATA connection
#define NUM_LEDS 50  // Replace with the number of LEDs in your strip
#define DELAY_TIME 20  // Delay between LED movements (in milliseconds)
CRGB leds[NUM_LEDS];
void setup() {
  FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
  // Turn off all LEDs
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Black;
  }
  // Move the LED chaser
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Blue;  // Set the current LED to blue
    FastLED.show();  // Update the LED strip
    delay(DELAY_TIME);  // Delay between LED movements
  }
  // Move the LED chaser in reverse
  for (int i = NUM_LEDS - 1; i >= 0; i--) {
    leds[i] = CRGB::Green;  // Set the current LED to green
    FastLED.show();  // Update the LED strip
    delay(DELAY_TIME);  // Delay between LED movements
  }
}

کد الگو 2:

#include <FastLED.h>
#define LED_PIN 5    // Replace with the pin number you used for DATA connection
#define NUM_LEDS 50  // Replace with the number of LEDs in your strip
#define DELAY_TIME 50  // Delay between color changes (in milliseconds)
CRGB leds[NUM_LEDS];
void setup() {
  FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
  static uint8_t hue = 0;  // Hue value for color shifting
  // Set all LEDs to the current hue
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CHSV(hue, 255, 255);
  }
  FastLED.show();  // Update the LED strip
  delay(DELAY_TIME);  // Delay between color changes
  // Shift the hue for the next frame
  hue++;
}

کد الگو 3:

#include <FastLED.h>
#define LED_PIN 5       // Replace with the pin number you used for DATA connection
#define NUM_LEDS 50      // Replace with the number of LEDs in your strip
#define FADE_DELAY 1   // Delay between brightness changes (in milliseconds)
#define MAX_BRIGHTNESS 255 // Maximum brightness value
CRGB leds[NUM_LEDS];
void setup() {
  FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
  // Increase brightness
  for (int brightness = 0; brightness <= MAX_BRIGHTNESS; brightness++) {
    setBrightness(brightness);
    delay(FADE_DELAY);
  }
  // Decrease brightness
  for (int brightness = MAX_BRIGHTNESS; brightness >= 0; brightness--) {
    setBrightness(brightness);
    delay(FADE_DELAY);
  }
}
void setBrightness(int brightness) {
  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = CRGB(brightness, brightness, brightness);
  }
  FastLED.show();  // Update the LED strip
}

کد الگو 4:

#include <FastLED.h>
#define LED_PIN 5        // Replace with the pin number you used for DATA connection
#define NUM_LEDS 50       // Replace with the number of LEDs in your strip
#define GRADIENT_DELAY 50 // Delay between gradient color changes (in milliseconds)
#define MOVEMENT_DELAY 20 // Delay between LED movements (in milliseconds)
CRGB leds[NUM_LEDS];
void setup() {
  FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
  // Set the initial color gradient
  CRGB startColor = CRGB::Red;
  CRGB endColor = CRGB::Blue;
  // Calculate color step values
  int colorStepsR = (endColor.r - startColor.r) / NUM_LEDS;
  int colorStepsG = (endColor.g - startColor.g) / NUM_LEDS;
  int colorStepsB = (endColor.b - startColor.b) / NUM_LEDS;
  // Move the gradient effect across the LED strip
  for (int i = 0; i < NUM_LEDS; i++) {
    CRGB gradientColor = CRGB(startColor.r + (colorStepsR * i),
                             startColor.g + (colorStepsG * i),
                             startColor.b + (colorStepsB * i));
    // Shift the gradient by moving the LEDs
    for (int j = 0; j < NUM_LEDS; j++) {
      int index = (i + j) % NUM_LEDS;
      leds[index] = gradientColor;
    }
    FastLED.show();  // Update the LED strip
    delay(MOVEMENT_DELAY);  // Delay between LED movements
  }
  // Shift the colors for the next frame
  startColor = endColor;
  endColor = CRGB::Green;
}

 

کد الگو 5:

#include <FastLED.h>
#define LED_PIN 5         // Replace with the pin number you used for DATA connection
#define NUM_LEDS 50       // Replace with the number of LEDs in your strip
#define FLICKER_DELAY 20  // Delay between flicker changes (in milliseconds)
CRGB leds[NUM_LEDS];
void setup() {
  FastLED.addLeds<WS2811, LED_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
  // Set the initial color for the candle flame
  CRGB flameColor = CRGB::Red;
  // Create a flickering effect
  for (int i = 0; i < NUM_LEDS; i++) {
    // Randomly flicker the LEDs
    if (random(10) < 5) {
      leds[i] = flameColor;
    } else {
      leds[i] = CRGB::Black;
    }
  }
  FastLED.show();  // Update the LED strip
  delay(FLICKER_DELAY);  // Delay between flicker changes
}

موارد موجود در فایل : سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *