جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
في كثير من الأحيان عندما يريد الأشخاص التحكم في شريط RGB LED الخاص بهم باستخدام Arduino ، يتم استخدام ثلاثة مقاييس فرق لمزج الألوان الأحمر والأخضر والأزرق. هذا يعمل ويمكن أن يكون جيدًا تمامًا لاحتياجاتك ، لكنني أردت أن أجعل شيئًا أكثر سهولة ، مثل عجلة الألوان.
يبدو أن هذا المشروع هو تطبيق مثالي لمشفر دوار. هذا جهاز يحول حركة عمودها إلى إخراج رقمي. عندما يتم تدوير العمود ، يرسل المشفر إشارة (نبضة) يمكن قياسها بواسطة Arduino. لمزيد من المعلومات حول أجهزة التشفير الدوارة ، يمكنك مشاهدة هذا الفيديو الذي يشرحها بمزيد من التفصيل.
في هذا Instructable ، سأوضح لك كيفية إنشاء وحدة تحكم شريط Arduino RGB LED باستخدام جهاز تشفير دوار. يغطي هذا Instructable بناء الدائرة على اللوح. ومع ذلك ، يمكنك إنتاج ثنائي الفينيل متعدد الكلور الخاص بك من أجل إنشاء درع Arduino!
الخطوة 1: الأجزاء
ستحتاج إلى المواد التالية لوحدة التحكم في شريط RGB LED:
- 1x اردوينو نانو
- 3x IRLB8721PBF ، أي مستوى منطق N-channel MOSFET سيفعل طالما تم تقييمه على الأقل 12 فولت والتيار الذي يستهلكه شريط LED الخاص بك.
- 1x الروتاري التشفير
- مصدر طاقة 1x 12V 2A ، قد يعتمد التيار الذي يجب على مزود الطاقة توصيله على طول شريط LED المستخدم.
- 16x ذكر إلى ذكر أسلاك العبور
- 1x لوح توصيل بدون لحام ، أي لوح تجارب يعمل طالما كان كبيرًا بدرجة كافية.
الخطوة 2: الدائرة
قم بتوصيل Arduino بسكة 12 فولت و GND للوح. ثم قم بتوصيل الأجزاء الأخرى كما يلي:
التشفير الروتاري
دبوس أ - D4
دبوس ب - د 3
GND - GND
أحمر موسفيت
بوابة - GND
استنزاف - سلك أحمر بشريط LED
المصدر - D11
MOSFET GreenGate - GND
استنزاف - سلك أخضر لشريط LED
المصدر - D9
MOSFET BlueGate - GND
استنزاف - سلك أزرق بشريط LED
المصدر - D6
الخطوة 3: الكود
// اردوينو PWM دبابيس
int redPin = 11 ؛ int greenPin = 6 ؛ كثافة العمليات bluePin = 9 ؛ // دبابيس Arduino encoder int encoderPinA = 3 ؛ أداة التشفير Int encoderPinB = 4 ؛ // متغيرات اللون int colorVal؛ int redVal. int greenVal. int blueVal. // متغيرات التشفير int encoderPos ؛ التشفير int أداة التشفير int encoderPinALast = عالية ؛ // عداد int الأخرى ؛ إعداد باطل () {pinMode (encoderPinA، INPUT_PULLUP) ؛ pinMode (encoderPinB ، INPUT_PULLUP) ؛ } حلقة فارغة () {readEncoder () ؛ encoder2rgb (عداد) ؛ analogWrite (redPin ، redVal) ؛ analogWrite (greenPin ، greenVal) ؛ analogWrite (bluePin ، blueVal) ؛ } int readEncoder () {encoderPinACurrent = digitalRead (encoderPinA) ؛ إذا ((encoderPinALast == LOW) && (encoderPinACurrent == HIGH)) {if (digitalRead (encoderPinB) == LOW) {encoderPos = encoderPos - 1 ؛ } else {encoderPos = encoderPos + 1 ؛ }} encoderPinALast = encoderPinACurrent ؛ عداد = encoderPos * 8 ؛ إذا (عداد 1535) {عداد = 0 ؛ } عداد العودة؛ } int encoder2rgb (int counterVal) {// Red to yellow if (counterVal <= 255) {colorVal = counterVal؛ redVal = 255 ؛ greenVal = colorVal ؛ blueVal = 0 ؛ } // أصفر إلى أخضر آخر إذا (counterVal <= 511) {colorVal = counterVal - 256؛ redVal = 255 - colorVal ؛ greenVal = 255 ؛ blueVal = 0 ؛ } // أخضر إلى سماوي آخر إذا (counterVal <= 767) {colorVal = counterVal - 512؛ redVal = 0 ؛ greenVal = 255 ؛ blueVal = colorVal ؛ } // Cyan to blue else if (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؛ }