2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
บ่อยครั้งเมื่อผู้คนต้องการควบคุมแถบ LED RGB ด้วย Arduino โพเทนชิโอมิเตอร์สามตัวถูกใช้เพื่อผสมสีแดง สีเขียว และสีน้ำเงิน วิธีนี้ใช้ได้ผลและอาจใช้ได้ดีกับความต้องการของคุณ แต่ฉันต้องการสร้างสิ่งที่ใช้งานง่ายขึ้น เช่น วงล้อสี
โปรเจ็กต์นี้น่าจะเป็นแอปพลิเคชั่นที่สมบูรณ์แบบสำหรับเครื่องเข้ารหัสแบบโรตารี่ นี่คืออุปกรณ์ที่แปลงการเคลื่อนไหวของเพลาเป็นเอาต์พุตดิจิตอล เมื่อหมุนเพลา ตัวเข้ารหัสจะส่งสัญญาณ (ชีพจร) ซึ่ง Arduino สามารถวัดได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครื่องเข้ารหัสแบบหมุน คุณสามารถชมวิดีโอนี้ซึ่งจะอธิบายในเชิงลึกมากขึ้น
ในคำแนะนำนี้ ฉันจะแสดงวิธีสร้างตัวควบคุมแถบ LED RGB ของ Arduino โดยใช้ตัวเข้ารหัสแบบหมุน คำแนะนำนี้ครอบคลุมการสร้างวงจรบนเขียงหั่นขนม อย่างไรก็ตาม คุณสามารถสร้าง PCB ของคุณเองเพื่อสร้าง Arduino shield ได้!
ขั้นตอนที่ 1: อะไหล่
สำหรับตัวควบคุมแถบ LED RGB คุณจะต้องใช้วัสดุต่อไปนี้:
- 1x Arduino นาโน
- 3x IRLB8721PBF MOSFET ลอจิกระดับ N-channel ใด ๆ จะทำตราบเท่าที่ได้รับการจัดอันดับที่ 12V ขั้นต่ำและกระแสไฟ LED ของคุณสิ้นเปลือง
- 1x ตัวเข้ารหัสแบบหมุน
- แหล่งจ่ายไฟ 1x 12V 2A กระแสไฟที่ต้องส่งอาจขึ้นอยู่กับความยาวของแถบ LED ที่ใช้
- สายจัมเปอร์ชายกับชาย 16x
- 1x เขียงหั่นขนม Solderless เขียงหั่นขนมใด ๆ จะทำตราบเท่าที่มีขนาดใหญ่เพียงพอ
ขั้นตอนที่ 2: วงจร
เชื่อมต่อ Arduino กับราง 12V และ GND ของเขียงหั่นขนม จากนั้นเชื่อมต่อส่วนอื่นๆ ดังนี้
ตัวเข้ารหัสแบบหมุน
พิน A - D4
พิน B - D3
GND - GND
MOSFET สีแดง
ประตู - GND
ท่อระบายน้ำ - สายไฟ LED แถบสีแดง
ที่มา - D11
MOSFET กรีนเกท - GND
ท่อระบายน้ำ - แถบ LED สายไฟสีเขียว
ที่มา - D9
MOSFET บลูเกท - GND
ท่อระบายน้ำ - แถบ LED สายไฟสีน้ำเงิน
ที่มา - D6
ขั้นตอนที่ 3: รหัส
// หมุด Arduino PWM
int redPin = 11; int greenPin = 6; int bluePin = 9; // ตัวเข้ารหัส Arduino พิน int encoderPinA = 3; ตัวเข้ารหัส intPinB = 4; // ตัวแปรสี int colorVal; int redVal; int สีเขียวVal; int blueVal; // ตัวแปรตัวเข้ารหัส int encoderPos; ตัวเข้ารหัส intPinACurrent; ตัวเข้ารหัส intPinALast = สูง; // เคาน์เตอร์ int อื่น ๆ การตั้งค่าเป็นโมฆะ () { pinMode (encoderPinA, INPUT_PULLUP); pinMode(ตัวเข้ารหัสPinB, INPUT_PULLUP); } วงเป็นโมฆะ () { readEncoder (); encoder2rgb (ตัวนับ); analogWrite (redPin, redVal); analogWrite (greenPin, greenVal); analogWrite (bluePin, blueVal); } int readEncoder (){ encoderPinACurrent = digitalRead (encoderPinA); if ((encoderPinALast == LOW) && (encoderPinACurrent == HIGH)){ if (digitalRead(encoderPinB) == LOW){ encoderPos = encoderPos - 1; } อื่น ๆ { encoderPos = encoderPos + 1; } } encoderPinALast = encoderPinACurrent; ตัวนับ = encoderPos*8; ถ้า (ตัวนับ 1535){ ตัวนับ = 0; } กลับเคาน์เตอร์; } int encoder2rgb (int counterVal) { // สีแดงเป็นสีเหลืองถ้า (counterVal <= 255) { colorVal = counterVal; ค่าแดง = 255; greenVal = colorVal; blueVal = 0; } // สีเหลืองเป็นสีเขียวอื่น ๆ ถ้า (counterVal <= 511) { colorVal = counterVal - 256; redVal = 255 - colorVal; greenVal = 255; blueVal = 0; } // เขียวเป็นฟ้าอื่น if (counterVal <= 767){ colorVal = counterVal - 512; redVal = 0; ค่าสีเขียว = 255; blueVal = colorVal; } // สีฟ้าเป็นสีน้ำเงิน อย่างอื่น ถ้า (counterVal <= 1023){ colorVal = counterVal - 768; redVal = 0; greenVal = 255 - colorVal; blueVal = 255; } // สีน้ำเงินเป็นสีม่วงแดง ถ้า (counterVal <= 1279){ colorVal = counterVal - 1024; redVal = colorVal; greenVal = 0; blueVal = 255; } // สีม่วงแดงเป็นสีแดง อย่างอื่น{ colorVal = counterVal - 1280; redVal = 255; greenVal = 0; blueVal = 255 - colorVal; } คืนค่า redVal, greenVal, blueVal; }