2019年7月29日月曜日

Raspberry PI の PWM によるファンコン自作 その3

前回その2へ

 

ハードウェアPWMの制御

 Raspberry PI の GPIO18(12PIN)はハードウェアで連続発信する事ができるので、ソフトウェアの負荷がなく大変便利

間違っていました。pigpioだとどのPINでも高精度PWMが出せますが、今回は GPIO18(12番PIN)をPWM出力に割り当てます

 またデューティ比を1%-99%まで変化させられる。これをPWM制御として利用する。

 

 Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。

 ダウンロードしたISOをSDカード(やUSBメモリ)に焼き込むなら断然 Etcherが便利。

 Macだとdd使うのが通で、Windows なら窓の杜で謎ツール利用、とあるけど  

 どう考えてもEtcher一択

 Electronで書いてあるのも刺さる(謎)

 

Boot後環境の設定

 Raspbian Buster Liteをインストールした直後は、イギリス時間だったり、sshデーモンが動いてなかったりするので、rootで

  • raspi-config の設定

    sshデーモン、ロケールを日本に、漢字が使えるように UTF-8 jp の設定を行う

  • 固定IP にするには、/etc/dhcpcd.conf で 設定する

    CentOSみたいに /etc/network/〜 ではない。staticでもdhcpcd.conf で集中管理する

当然デフォルトのユーザー名(pi)とパスワード(raspberry)は変更しておく事

インターネットに晒すと秒速で乗っ取られてbotを入れ込まれて悪の手先になってしまう

 

ツール類をインストール

 GPIOのハードウェアを設定するのに、いちいちrootになるのもめんどくさいし、将来デーモン化する時にrootデーモンは極力減らしておきたい。

 

# sudo しなくてもpioを動かせるデーモン
sudo apt install pigpio
# デーモン起動
sudo systemctl enable pigpiod
sudo systemctl start pigpiod

# python3 の pigpio ライブラリを入れる
sudo apt install python3-pip
sudo pip3 install pigpio

 

python3 のプログラムを書く

# fancon.py

import pigpio

gpio_pin0 = 18

pi = pigpio.pi()
pi.set_mode(gpio_pin0, pigpio.OUTPUT)

# 240kHz duty比0.2(200000) 。0.1だとFANが回らない事があった
pi.hardware_PWM(gpio_pin0,240000,200000)

 

ファンが回りますように

$ python3 fancon.py

のろのろ回ったらOK

 

温度を測る

負荷をかけてCPUの温度をみたい。RaspBerryPI 3はCPUが4コアだったので

$ while true; do echo > /dev/null; done &
$ while true; do echo > /dev/null; done &
$ while true; do echo > /dev/null; done &
$ while true; do echo > /dev/null; done &

として4つ無駄にCPU負荷をかける。不動小数点ユニットを使ってないので本気の全力ではない。

 

温度はcatのテキストでみれる。unix系の便利なところ。

cat /sys/class/thermal/thermal_zone0/temp
83282

表示を1/1000にして読み取ると、ひーもう83度もある。

 

のろのろ(20%)回っているファンをCPUの上にゴロリと乗せると

5分後に60度に下がった。

 

PWMを99%にしてさらに5分回すと 56度になった。

pi.hardware_PWM(gpio_pin0,240000,990000)

99%だと当然うるさいし、ほとんど効果がないようなので20%程度で十分そう。

10%だとファンが回転しなかったり、なんか止まっちゃってる事があった。

周波数を240KHzにしたのは、250KHzだと回りが悪かったから。電解コンデンサの個性なので微調整する事

 

あとはデーモン化する

 やり方忘れた。

 rasbian OSは超簡単にデーモン化する事ができるのでググればわかる気がする。

 Redhat7系(CentOS7)だと/etc/init.d/ に超複雑スクリプトが必要だけど、こちらは3行くらいかけば行けたハズなのでまた後日。

 

改良点 仕事で使うなら

 起動時にPWM制御できてないのでファンの速度が0である。

 これはGPIOがリセット直後は0な為。

 仕事で使うなら、起動時はファン100%で、PWM制御が入ってから速度を落とすべき。

 電子リレーのSIGの入力をデジタルICでインバートして反転させ、起動直後は1にしてあげると良さそう。

 とはいえもう一個チップ足すのはめんどくさいのでオモチャならここまでとする。