0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

12V 4pin RGB LED をマイコンで制御

Last updated at Posted at 2025-01-21

動機

4年半ほど前に購入した 光るPCファンSCYTHE KazeFlex120 RGB PWMのRGB部は 4pin仕様なのですが、今回使用するマザーボードには、4pin RGB や ARGB のソケットがありませんでした。このため、マイコンで このファンのLEDを光らすことにしました。

4pin.jpeg

時代は ARGB のようで、当ファンも 4pin RGBコントローラーも、もはや製造していないようです。

回路図

マイコンの 3.3V や 5V では、このLEDを光らすことは出来ません。また、マイコンで12Vを直接駆動することも出来ないため、MOSFETでスイッチングします。単なるON-OFF制御では 7色しか表現できないので、PWM制御して1677万色で光らせることにします。

4pin-RGB.png

N-ch MOSFET は、手持ちにあった 2SK4017 を使います。もちろん、12VはPCの電源(SATA電源)を利用します。

使用するマイコン

CH552P か CH32V003 を使いたいところですが、PWMが 2本しか無かったり、複数のPWM制御が面倒だったりするため、今回は RP2040 を使い、お手軽に MicroPython でプログラミングすることにします。

PWM 制御

GPIO PWM RGB
18 PWM-G Green
17 PWM-R Red
16 PWM-B Blue
from machine import Pin, PWM

pwm_g = PWM(Pin(18), freq=25000, duty_u16=0)
pwm_r = PWM(Pin(17), freq=25000, duty_u16=0)
pwm_b = PWM(Pin(16), freq=25000, duty_u16=0)

データシートによると、2SK4017 のスイッチング性能は、ターンオン時間:20ns、ターンオフ時間:35ns でした。実効性能を 40ns と想定して、周波数を 25KHz に設定します。明るさ(調光)は、普通に PWM のデューティ比で指定します。

pwm_r.duty_u16(0)     # red-0% (off)
pwm_r.duty_u16(25000) # red-100%
pwm_r.duty_u16(12500) # red-50%

R, G, B の各色を 256階調で指定することにより、1677万色に対応します。

def rgb(color):
    R, G, B = color
    pwm_r.duty_u16(int(25000 * (R / 255))) # R 256階調 (0-255)
    pwm_g.duty_u16(int(25000 * (G / 255))) # G 256階調 (0-255)
    pwm_b.duty_u16(int(25000 * (B / 255))) # B 256階調 (0-255)

rgb((162, 148, 200)) #ふじいろ(藤色)
使用例
import time

def map(val, lo_val, hi_val, to_low, to_high):
    return (val - lo_val) / (hi_val - lo_val) * (to_high - to_low) + to_low

while True:
    r, g, b = 0, 0, 0
    for h in range(360):
        if h <= 120:
            r = map(h, 0, 120, 255, 0)
            g = map(h, 0, 120, 0, 255)
            b = 0
        elif h <= 240:
            g = map(h, 120, 240, 255, 0)
            b = map(h, 120, 240, 0, 255)
            r = 0
        else:
            b = map(h, 240, 360, 255, 0)
            r = map(h, 240, 360, 0, 255)
            g = 0
        rgb((r, g, b))
        time.sleep_ms(50)

徐々に色が変化します。

rgbled.gif

実装

上記はブレッドボードに回路を組んで動かした動画ですが、最終的には、ユニバーサル基板に回路を組んで、PCケース内に収める予定です。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?