PCファン扇風機の製作記録です。
ラズパイpicoでPWM制御し、定速回転とランダム変数でそよ風機能を付けました。
Youtubeリンク
ダクトを付けて風の直進性を上げ、ファンの回転数を下げて低騒音化しました。
ダクトは蓄光PLAフィラメントで3Dプリント。
暗闇で怪しく光ります。
暗闇で怪しく光ります。
配線はごちゃごちゃ。
今回使用したPCファンは4pin仕様でPWM信号で直接制御できるものです。
PCファンには他に2pin(+-)、3pin(+-と回転数出力pin)がありますが、これらの回転数を変更するには電圧を直接可変抵抗等で変えるか、MOSFETを介してPWM制御する必要があるので気を付けてください。
電気効率は電圧変更よりPWM制御の方が優れるようですが、まあ、PCファンを1個、扇風機にしたところで電力なんてたかが知れてるので日常生活では誤差でしょう。
PCファン扇風機の配線図
# そよ風機能付きPCファン扇風機
from machine import Pin, PWM
import time,random
#PWM Pinの指定
pwm = PWM(Pin(2))
pwm.freq(25000)#周波数
#Switch
switch1 = Pin(16, Pin.IN, Pin.PULL_DOWN)
switch2 = Pin(17, Pin.IN, Pin.PULL_DOWN)
#ロータリーエンコーダーのA,B端子 プルアップ
pinA = Pin(20, Pin.IN, Pin.PULL_UP)
pinB = Pin(21, Pin.IN, Pin.PULL_UP)
#回転方向判定初期値
befDat = 0x11
curDat = 0
count = 0
D = 0
#duty比の増減値
dutynum=5
#回転方向判定
def watchRotation(p):
global curDat
global befDat
global count
global direction
global dutynum
curDat = pinA.value() + (pinB.value()<<1)
if curDat != befDat:
D = ((befDat<<1)^curDat) & 3
if D < 2:
count = count + 1
else:
count = count -1
befDat = curDat
if count >= 3:
print('ASC')
direction = dutynum
count = 0
elif count <= -3:
print('DESC')
direction = -dutynum
count = 0
#directionからduryを計算する
def getDuty(duty, d):
duty += d
#上限加減を設定する
if duty > 100:
duty = 100
elif duty < 0:
duty = 0
return duty
#ロータリーエンコーダーの割り込み設定
pinA.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler = watchRotation)
pinB.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING, handler = watchRotation)
#初期値
duty = 0
direction = 0
while True:
#ロータリーエンコーダーの回転からduty比を計算
if direction != 0:
duty = getDuty(duty, direction)
print('duty =' + str(duty))
direction = 0 #dirctionのクリア
#速度変更(duty比を変更)
if switch1()==1:
pwm.duty_u16(int(65535*duty/100))
time.sleep(0.01)#回転数変更までの間隔
#そよ風(ランダム値でduty比を変更)
if switch2()==1:
x=random.random()
x=x*duty/100
pwm.duty_u16(int(65535*x))
time.sleep(0.2) #ランダム値変更までの間隔
参考ページ
ロータリーエンコーダーの制御
Raspberry Pi Pico Micro Python ロータリーエンコーダ テスト - JH7UBCブログ (goo.ne.jp)
PWM制御をランダムで変化させてゆらぎを表現する
コメント
コメントを投稿