กลับไปหน้ารวมไฟล์
ws2812b-rgb-led-brightness-control-color-mixing-cb4f3f.md

โอ้โห... ใครกลับมาอัพโปรเจคอีกแล้วน้าา

กูเองแหละ กูพูดถึงกู

นี่คือทิวทอเรียลแบบขั้นตอนต่อขั้นตอน ว่าทำยังไงให้เราตั้งค่าระดับความสว่าง และผสมสีของแถบไฟ WS2812B ให้ได้สีที่เราต้องการ

แค่ใช้โพเทนชิโอมิเตอร์ 10k นิดหน่อย กับแถบไฟ WS2812B Addressable RGB LED ก็ทำไฟแบ็คกราวด์สำหรับถ่ายวิดีโอ ถ่ายรูป ไฟประดับหลังจอ หรือไฟสร้างบรรยากาศในห้องตัวเองได้แล้ววว

จะเอาไปใช้ทำอะไร ก็ขึ้นอยู่กับไอเดียสุดบรรเจิดของน้องๆ หรือจะเอาไปวางตรงไหน

ใช่ครับ มันมีของสำเร็จรูปที่ราคาถูกกว่าและมี Bluetooth หรือ WiFi ให้อยู่แล้ว แต่อันที่จริง ถ้าน้องๆ อยากได้ฟังก์ชั่นพวกนั้นเพิ่ม ก็สามารถเอามาต่อกับโปรเจคนี้ได้เหมือนกันนะ (ถ้าอยากทำจริงๆ น่ะ)

เรื่องโค้ดก็ง่ายๆ หนิ เพราะส่วนใหญ่ก็เอามาจากโค้ดตัวอย่างใน Arduino IDE นั่นแหละ

******************************************************************************

ลิงก์ที่เป็นประโยชน์:

โค้ดตัวอย่าง Analog Input

โค้ดตัวอย่าง Analog Write

โค้ดตัวอย่าง Analog In-Out Serial

ไลบรารี่ FastLED การใช้งานพื้นฐาน

******************************************************************************

ลิงก์โซเชียลมีเดีย (ถ้าอยากตามนะ ไม่อยากก็ไม่เป็นไร):

Facebook

******************************************************************************

คณิตศาสตร์แห่งแสง: การผสมสี WS2812B

การใช้ไลบรารีมาตรฐาน <FastLED.h> เพื่อให้แถบไฟติดสีแดงเนี่ยง่ายสุดๆ: led[0] = CRGB::Red; แต่โปรไฟล์นักออกแบบแสงจริงๆ เขาไม่ใช้สีแบนๆ แบบนั้นหรอก โปรเจกต์ Color Mixing & Brightness นี้จะบังคับให้น้องต้องเชี่ยวชาญโมเดลสี HSV (Hue, Saturation, Value) เพื่อสร้างเกรเดียนต์ที่ลื่นไหลแบบพระอาทิตย์ตกหรือสีน้ำทะเล

ทำไม HSV ถึงเทพกว่า RGB

ถ้าน้องลองไล่สีจากแดง (255, 0, 0) ไปเขียว (0, 255, 0) ด้วย RGB แบบตรงๆ สีตรงกลางจะกลายเป็นสีน้ำตาลโคลนตุๆ ดูไม่สวยเลย ซึ่งมัน "ไม่คณิตศาสตร์" เอาเสียเลย

  1. โมเดล HSV จะเปลี่ยนสเปกตรัมสีให้เป็นวงล้อ 360 องศา (Hue) สีแดงคือ 0 ส่วนสีเขียวคือ 120
  2. ถ้าเราไล่สีด้วย HSV เกรเดียนต์จะวิ่งสวยๆ รอบๆ ขอบวงล้อสี ทางคณิตศาสตร์แล้วสีแดงจะค่อยๆ เปลี่ยนเป็นส้มสด, เข้าไปที่เหลือง, แล้วลงตัวพอดีที่เขียว
  3. FastLED มีฟังก์ชันนี้ให้ใช้เลย: fill_solid(leds, NUM_LEDS, CHSV(hue, saturation, brightness));

ตัวแปรควบคุมจากฮาร์ดแวร์

เราจะต่อ โพเทนชิออมิเตอร์ 10K 3 ตัวเข้ากับพินอนาล็อกของ Arduino (A0, A1, A2)

  • ปุ่มหมุนที่ 1 (Hue): A0 จะถูกแมปค่าจาก 0-1023 ลงมาเหลือ 0-255 พอหมุนมัน แถบไฟจะลื่นไหลผ่านทุกสีในรุ้งได้อย่างเนียนสุดๆ
  • ปุ่มหมุนที่ 2 (Saturation): A1 แมปค่า 0-255 หมุนลงไปที่ 0 ไฟจะกลายเป็นสีขาวล้วน (สีทั้งหมดหายไป) หมุนขึ้นไปที่ 255 สีจะเข้มข้นจัดจ้านเหมือนไฟนีออน!
  • ปุ่มหมุนที่ 3 (Value/Brightness): A2 ควบคุมกำลังไฟ output โดยรวม
  • ฟังก์ชัน loop() จะรัน FastLED.show() อย่างต่อเนื่อง ทำให้เรามีมิกเซอร์ควบคุมแสงที่เป็นกายภาพและตอบสนองเร็วมาก

การประกอบชิ้นส่วน

  • Arduino Uno/Nano: โปรเซสเซอร์เมทริกซ์ ADC
  • แถบไฟ WS2812B ความยาวตามชอบ (เช่น 30 ดวง)
  • โพเทนชิออมิเตอร์แบบหมุน 10K หรือ 5K 3 ตัว
  • แหล่งจ่ายไฟภายนอก 5V: (สำคัญมาก! ถ้าใช้ไฟจาก Arduino ตรงๆ เวลาเปิดแถบไฟสีขาวเต็มที่ ตัวเรกูเลเตอร์บนบอร์ดจะไหม้ทันที) ห้ามช็อตนะตัวนี้

สอนทำโปรเจกต์แบบเต็ม:

สอนทำโปรเจกต์แบบเต็ม

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x VS Code"
  - "1x Arduino IDE"
  - "1x PlatformIO IDE"
author: "Heathen_Hacks-v2"
category: "Lights & LEDs"
components:
  - "1x Arduino Nano R3"
  - "1x I2C 16x2 Arduino LCD Display Module"
  - "1x Breadboard (generic)"
  - "1x Jumper wires (generic)"
  - "1x LED Strip, NeoPixel Digital RGB"
  - "4x Rotary potentiometer (generic)"
description: "ใช้ Potentiometer 10K หมุนปรับความสว่างตึงๆ แถมมี LCD 16x2 แสดงผลแบบเทพๆ (ใส่ I2C backpack ก็ได้ งานง่ายแต่หล่อ)"
difficulty: "Easy"
documentationLinks: []
downloadableFiles:
  - "https://github.com/FastLED/FastLED"
  - "https://projects.arduinocontent.cc/08b31817-9313-4762-bfd1-080e4f551c26.cpp"
  - "https://github.com/arduino-libraries/LiquidCrystal"
  - "https://github.com/FastLED/FastLED"
  - "https://projects.arduinocontent.cc/d44cfaee-07a6-40d5-a727-201c85e7e932.h"
  - "https://github.com/arduino-libraries/LiquidCrystal"
  - "https://projects.arduinocontent.cc/08b31817-9313-4762-bfd1-080e4f551c26.cpp"
encryptedPayload: "U2FsdGVkX1/8XtOhQjfgIRkRxhPwIW5RlMr8+pzAQavgYYuKRrNk8NgTWOBOdhpNRAheNjvWzfG2PN8eSNMBcW8LTSNO6x11plmm3mNb/auQyTmT6wCRnA3yLzvZC92FnuqVwt1Bafvr0rg6wdafwA=="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/ws2812b-rgb-led-brightness-control-color-mixing-cb4f3f_cover.jpg"
lang: "en"
likes: 3
passwordHash: "8815f433632d195dbbfbc25afc3f64553ed00a70408732c7dd23766dba268c06"
price: 699
seoDescription: "Control WS2812B RGB LED brightness and color mixing using 10K Potentiometers and 16x2 LCD with I2C backpack."
tags:
  - "lights"
title: "WS2812B RGB LED Brightness Control & Color Mixing"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/WfBcYihCQW0"
views: 20564