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にしてあげると良さそう。

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

 

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

RaspberryPI + IRF520(電子リレー) + うるさいチビファンの速度を変えて遊ぶその2

 

前回 その1へ

 

方針

 RaspberryPIのハードウェアPWM出力ピンが12ピン(GPIO18)なのでこれをIRF520のスイッチ制御に使う。

 PWMの周波数は250KHz。こればPCのマザーボードでもだいたいこれくらい。

 なぜ250KHzかは後述

 

材料

コンデンサーや抵抗などは、ごっそりセットキットをamazon売っているのでそれを使います。

  • セラミックコンデンサ10種類 0.1μF-10μF
  • 電解コンデンサ 0.1μF - 1000μF
  • ジンパワイヤ 100本セット
 

 これだけあれば当分持つ。一つ一つ秋葉原に買いに行くのも電車賃かかるし、ケースに最初から丁寧に入っているしまぁ便利な世の中になってる事。

 

リレー出力を平滑化する

V+ , V- の基盤の裏に電解コンデンサとセラミックコンデンサを半田付けする。

  • 電解コンデンサは10μF〜100μFくらい。

    小さいと効果なく、でかいとリレーの保護回路がつらいのでむやみに大きくしないように。

    極性があるのでV+にプラス、V-にマイナスとなるようにする。

    逆にするとすごい勢いで破裂する

  • セラミックコンデンサは0.1μF〜1μFくらい。

    高周波ノイズ除去。電波を周囲に撒き散らさないおまじない。

PWMを250KHzに設定するのは、電解コンデンサのインピーダンスが一番低くなるあたりだから。

つまり、効率よく平滑化してくれるって事ね。

電子リレーは500KHzくらいが実用限界なので、200KHz〜250KHzくらいがいい感じ。

 

GPIOピンの確認

Raspberry PI のピンは、2,4,12 の3本

  • 2は+5V で、IRF520のVINへ
  • 4はGNDで、IRF520のGNDへ
  • 12はPWM出力で、IRF520のSIGへ

 

ファンの接続

  • V+に赤、V-に黒線をつなぐ

 

 

次はこのハードを制御するソフトを導入する

 

その3ソフト編

2019年7月18日木曜日

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

Raspberry PI 4 は待つが吉

 Raspberry PI 4 が発売されたようです。市場では争奪戦なのか、ebay.comでは1万円の強気の値段で売っている人もいますが、マテ、いまは時期が悪い。

 USB-Cの電源入力の部分の設計者いわく「いやー規格書読んでなかったよ」という事でUSB3.2Gen2を正しく実装されたケーブルだと電力不足で電源が入らないそうです。

 適当に配線された中華ケーブルまたは純正ケーブルのみ電力の供給が可能とのこと。

 ディスカッションを読んでみると、5.1kΩの抵抗2個をケチッて取り付けてなかったんだとか。

 本家:「なのでGPIO側から5V供給すると急場はしのげるよ」

ただし説明書には

 本家: 「GPIOの5Vは出力用で保護回路が入ってないからここから絶対に電力入力しないでね」

 うん、混乱するよね、掲示板。保護回路が入った5Vを入力すればいいんだけど。

 

Raspberry PI 3 MobelBにファンをつけたい

 事の発端は自宅のサーバーをRaspberryPI (以下RasPI) 4 に置き換えたい。でも何年も電源いれっぱなしだから冷やしたいなぁと。RasPI3でも1.2GHzで連続動作させると、ヒートシンク(ちっこい)つけても即80度とかになって速度が落ちてしまう。チップが壊れるには程遠いんだけど。

 で、公式ショップを探してみたところに冷却ファンがありました。

 サイズは3cmx3cmx1cm で、13,200rpm(5V 0.2A)とあるものの、みなさん届いたFANは6,000rpm程度らしくなにやら品質管理できてないっぽい。しかもちょっと耳障りな音らしい。

 でも電力は5V 0.2Aらしく、ひょっとした軸の油が切れた不良品を安く仕入れているんじゃないか?

 5V 0.2A 品は山水の超高級品だと10,000rpmクラスで自身で飛び上がるほどの風量。高いけど。その山水の技術力をもってすら13,200rpmがないわけで純正FANはぁゃιぃよね。

 あきらめてamazonで検索したら 中華5V 0.2A のファンが 5個で1,099円

 回転数は7,500rpm なので少しうるさいかなと思ったけどあまりの安さにプライム即ポチ

 さっそく届いたものを5Vのピンに刺してみると

 プイイイイイーン!!!

 うるせーぇぇぇぇ

 テレビの音が聞こえないレベル。いまはYoutubeの音が聞こえないあたりか?

 あれだ、山水のファンをみると複雑な形状をしているのにこのファンは羽が斜めにくっついてるだけなのでプロペラが高速回転すると空気が剥離し破裂音がでている模様。

 ただまぁ剥離音がでなくなるまで回転数を落とせばいいわけだ。

 遅すぎて冷えないよりは良い。

 中華の説明書によると、RasPIの3.3Vから電源をとると静かだよ、とあるんだけど、3.3Vの電力コンバーターはギリギリの設計でGPIOの出力(合計160mA)を全力使うと余力はほぼない。変換チップ(とコイル)が焼け死ぬ可能性もある。

 できればRasPIの外側の5Vを使いたいので、GPIO 18番のハードウェアPWMの出力をトランジスタやFETでスイッチングして見かけの電圧を下げる事にしよう。

 PWM制御にすればソフトウェアでコントロールできてRasPIの負荷で回転数を変える、なんて事もできそうだし。(結局しなかった。後述)

 手元にある2SC1815(2SC372はモッタイナイ)だと150mAまでだったので、FET買うかぁ。でも10個単位で買っても送料のほうが高いなぁ、とググってたら、FET + 逆流防止ダイオード + チップ抵抗 がくっついた汎用半導体リレーモジュールが激安で売っているではありませんか。ダイオード内蔵なのでモーターもイケル

 しかも10個で1,000円ですよ。ハンダつけして組み立てる事を考えたら安すぎるぅ。

 説明書も何もついてないけど回路追えばわかるよね。という事で即ポチ。(懲りてない)

IRF520-Module

回路図はこちら。素子自体は9Aは流せるけど1A以上でヒートシンクが必要

ただ基盤の細っそいパターンみると1A流したらパターン焼き切れると思う。実は4層高級基盤なのか??

その2へ

 

2019年7月11日木曜日

Unity 2019のPackage Managerで ARFoundation が見つからない

 ARKit3が楽しそうだったので、ARKit3 UnityでググったらPackage Managerにメニューがあるから簡単にインストールできるよ!という記事が大量にヒットしました。

やったねー。

 Unity2019.1.9f1をダウンロードして、AppleDeveloper にお金をお布施して、iOS13 beta3 も手に入れて、Xcodeも新しくして、いざUnity2019起動。
 メニューからWindows -> Package Manager を開けてみると




ない。

 あー、そっか。きっとUnityが新しすぎたのね。まだ整備されていない違いない。

 Unity2018 , Unity 2017 をダウンロードしてPackage Managerを開けてみもやはりない。

 これはひょっとしてあれか?当たりが出るまでUnity2018.(1-99).(1-99)f(1-99)をダウンロードするしかないのか。
 俺の根が尽きるか、ハードディスクがUnityで埋め尽くされるか勝負だ!!

 根が尽きました。

 最近のハードディスクは16Tとかあるしねっ。Unityなんかいくつダウンロードしてもヘコタレナイ容量。


 実際にはUnity2019.1.9 f1 (2019/7/11現在の最新) で
Windows -> PackageManager のウインドウ開けた後、

Advanced▼ をクリック、 Show preview packaged を選択すると良いようです




でたー

AR Foundation 2.2.0 preview2 と、ARKit XR Plugin preview1 をそれぞれクリックして、右下のinstallを押せば良いようです。

 AR Foundation 2.2.0 preview2iOS13beta用で、iOS12.3 ではビルドしても動作しないのでお気をつけください。
 また、Xcodeは11beta1以上が必要です。(現時点でXcode11.0beta3)
 同梱されているライブラリのバージョンが合わないためです。

以下の文書の一番下に「この組み合わせじゃないとダメよ」とありました。
https://github.com/Unity-Technologies/arfoundation-samples/blob/master/README.md