パワーLEDで遊んでみる

前回のPiのシャットダウンですが当サイトでは24時間制御回路の電源を入れたままで運用していますが通常の操作では特に問題なく動作しています。新規インストールの後などはPiの動作とAVRの変数値(status)が一致せず電源オフしないときがありましたが一旦AC100Vを入れ直して一からスタートすれば正常に走るのでまあこのくらいはよしということにします。

さて今回は趣向を変えてパワーLEDの実験をしてみました。

LEDは2016/12月頃安かったので購入(50W1個¥190)したものですが30V電源を容易に確保することができず結局お蔵入りになっていました。


最近になってこんな4A昇圧レギュレータ電源モジュールが出ていたので購入してみました。
このポテンションメータ反時計周りで昇圧しますね。これを逆に取付直してやると時計方向で昇圧するようになります。
ポテンションメータは0〜50K約30回転します。各エンドはロックしないので空転です。


なんとか使えそうなので1個追加購入してみました。
上が後から購入したものですが早速変更がありますね。コイルは33uHから47uHに変わっています。
裏側の基板の穴が塞がれてきれいにレジストされています。


チップはXL6009E1という中華チップが載っています。
仕様
入力範囲:3V-32V 出力範囲:5V-35V

データシートをみると出力電圧はVOUT=1.25x(1+RV1/R1)というLM317でみたような式が載っています。
この式からRV1=30kにすると昇圧可能な範囲(条件)であれば入力電圧にかかわらず30V出力することになります。(実際固定抵抗に置き換えるとかなり近い値が出ます)

電源ユニットは5V,12V,24V、旧ノート用アダプタで試してみました。


5V 3A 電源ユニット
無負荷では5V〜48V
50WLEDを接続で5V〜28V
下限電圧は入力電圧に依存します。


12V 4.2A 電源ユニット
入力12Vでは28V近辺で一瞬間をおきますが32V〜33Vまで昇圧します。
LEDへは32Vで1A流れます。ちゃんとハンダ付けすれば安定して昇圧するかもしれません。
LEDは直視できないのであっちに向けておきます。


24V 5A 電源ユニット
24Vでは35V以上昇圧しそうですがLEDも基板もかなりの発熱をします。35Vを確認したところで止めておきます。


パナソニック 15.1V 2.5A アダプタ
このアダプタは24V以下から昇圧していくと32V以上昇圧しますがその設定値で電源を入れ直すと24V位で発振してそれ以上は昇圧しなくなります。


IBM 16V 2.2A アダプタ 富士通 16v 2.5A アダプタ
これらのアダプタも32V以上昇圧しますがやはり電源を入れ直すと1秒位の間隔できれいに連続フラッシュを決めてくれます。ただしこちらはアダプタの電圧が上がりきったところで昇圧モジュールに接続すれば32V 1Aを流してくれます。
昇圧モジュールはアダプタの電圧の立ち上がりでもフィードバックをかけて昇圧しようとします。その際の一瞬のショート状態をアダプタは検出して電圧を止めます。その繰り返しが連続フラッシュになるものと思います。ノート用アダプタは電池を充電するという特性があることからどちらも正常ゆえの現象かと思います。

LEDへは32V 1A(32W)流してやればまあまあの明るさが期待できます。ただしLEDも昇圧モジュールもかなり発熱します。
以上から昇圧モジュールの入力電圧は12V以上、LED及び昇圧モジュールの冷却をなんとかできれば照明に使えそうです。

LED、昇圧モジュールの癖も少しわかってきたのでなにか照明器具にぶち込んでみたいと思います。

Raspberry Pi 電源をシャットダウンする

当サイトのPC環境は99.9%Raspiで運用しています。Win10ノートも1台ありますが電源を入れるときは充電とアップデートがほとんどです。

Raspberry Piも立派なLinuxマシンですのでpoweroff(shutdown)で終了するのですがPi自体は赤いLedが点灯したままです。通常はスイッチ付きコンセントでオフにしていますが、これは大した手間では無いのですがどうもこの一手間が気に入りません。
なんとか通常のPC同様shutdown後はPi自体の電源もオフにしてみたいと思います。

といってもPi自体の電源を落とすので外部からの制御及びその電源が必要になります。
制御にはAVRを電源はオーディオ用に携帯充電器を使用しているのでこれを常時稼働させることにします。また電源OFFのタイミングを計るためPiにも設定を加えます。

環境

raspberry pi 3 2017-08-16-raspbian-stretch
GPIOの仕様はすべて共通のためPiであれば同様に動作すると思います。
余談
8月16日はDebian Day(24周年)ということみたいですね。
Raspberry Piの成功は一重にraspbian=debianの成果といっても過言ではないと思います。8月16日のリリースとはなかなか粋な計らいではないでしょか。

回路

今回はAC100Vを直接制御します。感電、ショート、落雷には充分注意して作業することにします。(ブレーカーを落とすと稀に雷(親父)が落ちることがあります)

AC100Vの制御は秋月のSSRキットを参考にしました。
制御回路にはattiny13a-pu(8pin DIP)を用いPiのGPIO端子(2端子)を監視します。
PiのGPIOはshutdown後はデフォルトに戻るという特性を利用して電源オフのタイミングを計ります。
タクトSWは1クリックで電源ON、長押しで電源OFF(ハングアップ時の強制終了)
通常の電源OFFはPiのシャットダウンコマンドを実行、正常終了後に実行します。
またPi側にも設定が必要なため新規インストールや設定のないカード使用時はジャンパーピンを切り替えて今までどおりの常時ONとすることにします。


ACラインの回路はSSRキットそのものですがZNRの代わりに電源用セラミックコンデンサを取り付けています。今回は誘導性の負荷はないため問題ないと思います。
AVRはPiとI/Oをとるため3.3Vで駆動しています。
LED D3(赤)点灯電源ON
LED D4(緑)点灯電源3.3V
確認、テストで使用します。


壊れたカーステのヒートシンクを切り出して使いましたが当サイトの環境ではほとんど発熱はみられませんでした。モニターの消費電力次第ですが簡単な放熱器(もしくは無し)でも充分と思います。


Pi側には下駄を作成して履かせます。その上にスイッチモジュールを載せています。(直挿しにスイッチモジュールを作成してもOK)
GPIOは物理ピンの33と40を使用(使いやすいピンで)
LED D5は起動時GPIO33をHにして点灯
GPIO40はreboot時の制御で使用

#下駄がうまく作成できるようになればハンダーマン、ソルダーウーマンの仲間入りです!

Piの設定

今回のstretchにはWiring Piが含まれていないのでインストールします。(パッケージがありましたね)

# apt install wiringpi

/etc/rc.local編集

-- snip --
fi
gpio -1 mode 33 out
gpio -1 write 33 1
gpio -1 mode 40 out
gpio -1 write 40 1
exit 0
# systemctl daemon-reload
# systemctl restart rc.local


$ gpio readall

起動時にrc.localが読み込まれGPIOの設定が適用されるタイミングはスプラッシュスクリーンが表示された直後位、LEDが点灯します。それまでは電圧なしとなります。
shutdownコマンドを実行、正常に終了するとLEDが消灯、その後数秒SDカードにアクセスがあります。
AVRはGPIO33ピンの値を検出してパワーオフの実行を開始します。

さてreboot時ですがやはりrebootの際もGPIO33ピンは一旦ローになってしまいます。AVRはshutdownかrebootかは判断がつきません。そのため何らかの方法でAVRにrebootだよシグナルを送ってやる必要があります。(デフォルトのプログラムでrebootを実行するとパワーオフします)
poweroff-helper
このダイアログはwheezyからjessie初期まで使われていたzenityを利用したshutdownプログラムです。
こちらはスクリプト形式になっているので条件を付加することができます。
stretchでも問題なく動作します。

sudo rebootの前に1行追加してやります。

gpio -1 write 40 0
sudo reboot


ファイル名はpoweroff-helper 実行権限を付けて保存します。(ユーザーのホームディレクトリでもOK)当方ではopenboxの右クリックメニューに登録していますがメニューエディタで登録してディスクトップにも追加可能です。

$ chmod a+x poweroff-helper

プログラム

プログラムの作成、書き込みもPiで実行するためライブラリをインストールします。(AVR自体への書き込みは別途書込器が必要です)

# apt install gcc-avr avr-libc avrdude

プログラム(pi3-shutdown.c) 拡張子はtxtにしています。
プログラムは100msのタイマーで割り込み処理していますが計算とあいません。(・・;)計算式間違えてるかも
内蔵RCは誤差もあるのでTCNT0の値を調整します。(実測で合わしてます)
Pi shutdown時のGPIOの電圧なし(L)はGNDレベルではなくフロート状態と思いますのでAVRのPB1,PB2入力はプルアップできません。
基本はGPIO 33番ピンの値を監視しているだけですが微妙にタイミングをとってやる必要があります。
変数(status)を用意して想定される動作を書いています。
status 0 デフォルト
status 1 sw1クリックでパワーオン
status 2 GPIO33がHになるまで約15秒前後+αの時間稼ぎ(60秒 この間GPIO見ない)
status 3 監視(運転)モード GPIO40 L検出でstatus 1へ
status 4 GPIO33 L検出で8秒後パワーオフ
status 5 sw1を3秒長押しで強制オフ
raspbianのshutdownはデバイスをアンマウントできなかった時など90秒待ってからshutdownを開始します。GPIO33番ピンがLになればパワーオフしますが2分経過してもGPIO33 Lにならない時はハングアップしている可能性が高いと思われます。
時間稼ぎの60秒はしばらく様子をみて変更の可能性もあります。

プログラムをビルドしてAVRに書込をします。(書込器はusbaspを使っています)

$ avr-gcc -mmcu=attiny13 -Wall -Os pi3-shutdown.c
$ avr-objcopy -O ihex -R .eeprom a.out pi3-shutdown.hex

AVRへの書込(書込は5VでOK)

$ avrdude -p t13 -c usbasp -U flash:w:pi3-shutdown.hex:a

確認、テスト

AC制御ラインのテスト(感電注意
入力にAC100V、出力に通電の確認できる機器を接続します。(テーブルタップが便利)
基板に5Vを加えるとLED(緑)点灯、ジャンパーピンを差し替え3.3VをON-OFFすることでAC100Vの制御を確認します。

AVR制御基板のテスト
AC100Vラインは危険なので外しておきます。Piと基板を接続、一連の動作はLEDの動作で確認することができます。(5VはPiから利用)(ジャンパーピンはAVR)
Piを起動、基板のLED(緑)点灯 3.3V OK
SW1クリック 基板のLED(赤)点灯 PB3 H OK
15秒前後でSWモジュールのLED点灯 GPIO33 H OK
起動後shutdown実行 SWモジュールのLED消灯 GPIO33 L
8秒後 基板のLED(赤)消灯 PB3 L OK
再起動、同様reboot実行 基板のLED(赤)点灯のまま OK
SW1長押し 基板のLED(赤)消灯 PB3 L OK


テストがOKだったら基板を適当なケースに収めてPiに取り付けます。(貼り付け)

ジャンパーピンによる常時稼働の切り替えは感電の危険があるためケースの外側に小型のスライドスイッチを設けています。
AVRのリセットスイッチも取り付けていますが特に必要ありません。


AVRの待機消費電流は10mA位、オーディオを含めると18mA位と効率を考えてもそれほどでもないと思います。
長時間使用しない時はこれまで通りコンセントスイッチで切っておきます。

コマンドラインからのshutdownは同じように動作しますがrebootはGPIO40をLにしてからrebootを実行します。

$ gpio -1 write 40 0 | sudo reboot

快適なPi3ディストップ環境になりました。

Raspbian Stretchをインストール

ようやくRaspbian Stretchがリリースされましたね。

当サイトでもRaspberry pi 3にインストールしてみました。

jessieからアップグレードもできますがやはり少々問題が出ることもありここは新規にインストールしてみました。SDカードは読み書きは遅いですが容易に取り外しでき、且つ安価なところが最大のメリットと思います。

作業はいつもの通りPi3で行います。

ダウンロードしたzipファイルを展開、カードのデバイス名を確認して書き込みます。

# dd if=2017-08-16-raspbian-stretch.img of=/dev/sda bs=1M
4680+1 レコード入力
4680+1 レコード出力
4907675648 バイト (4.9 GB) コピーされました、 539.979 秒、 9.1 MB/秒

stretchは最低でも8GBのカードが必要ですね。

書き込みが正常に終了したらネットワークの設定をしてしまいます。
ファイルマネージャーでみるとuuidでマウントされています。

$ df -h
/dev/sda1          42M   21M   21M   51% /media/pi/boot
/dev/sda2         4.4G  4.0G  200M   96% /media/pi/037616fd-28fe-4652-8248-2042ea30b929

設定するファイルは以下のとおり(root権限が必要)
/media/pi/uuid/etc/dhcpcd.conf
/media/pi/uuid/etc/wpa_supplicant.conf
現在のPiの設定を追加します。
/etc/hostsに設定をしている場合はそれも書き加えます。

できたカードを差し替えて起動してみます。

ネットワークも無事繋がって起動しました。

今回のstretchはフォント周りに変更が入っており日本語が表示できません。

最初にターミナルからapt updateしてフォントをインストールしましょう。

当方では最初の1回apt updateでエラーが出てしまいましたが2回目以降は正常にupdateできています。
# apt update
Err:1 http://mirrordirector.raspbian.org/raspbian stretch InRelease
Temporary failure resolving ‘mirrordirector.raspbian.org’
——– snip ———
再度実行

# apt update && apt upgrade
# apt install fonts-ipafont

日本語に設定して起動

見た目はjessieのときとなんら変わりませんね。

アプリケーションに関してはバージョンが上がって来るものがあるのは当然ですが

・・・インストール、設定をしていくといろいろと違いに気付きます。

jessieまではapt installすると/var/cache/apt/archives/以下に関連パッケージがすべて保存されていましたがstretchでは保存しなくなりました。

当サイトではPi1Bにプリンタを接続してネットワーク越しにプリンタを利用していますがstretchではPi3にsambaとcupsそしてsystem-config-printerをインストールするのみで利用できるようになっています。

androidスマホのEP171ACは設定なしでMTP接続ができました。ほかのデバイスも/etc/udev/rules.dにrulesファイルが必要でしたがそれも必要なしで動いてくれます。

まだ全部は確認していませんがstretchのデバイスの扱いはjessieと比べると大幅に向上しているものと思います。

またffmpegも復活しているのでインストール可能です。

たまたまかもしれませんがUSBからのSDカードアンマウントでejectが無いと怒られたのでインストールしました。

# apt install eject

Raspbian Stretchのバージョンも9.1になっていますね。

$ uname -a
Linux pi3 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 9.1 (stretch)
Release:	9.1
Codename:	stretch

jessieからの移行はホームディレクトリをコピーしたのですが一部のアプリケーションやダイアログでメニューフォントが非常に小さくなってしまう現象があったため一旦コンソールでログインして~/.configをリネーム、Xで初期状態で起動して再度必要なファイルをコピーし直して復活しました。

またjessieと比べるとChromiumやfirefoxで若干もたつきを感じるように思います。
StretchでもOverclockingしてみました。これは以前設定した内容です。
/boot/config.txt(各値は環境によって調整が必要です)少し下げました

arm_freq=1300
over_voltage=5
gpu_freq=450

# sdram overclock
sdram_freq=450
sdram_schmoo=0x02000020
over_voltage_sdram_p=6
over_voltage_sdram_i=4
over_voltage_sdram_c=4

cpufrequtilsのインストール(特に設定の必要なし)

# apt install cpufrequtils

ダイアログの作成(ホームディレクトリ)呼び出しは~/cpufreq(実行権限が必要)

-rwxr-xr-x 1 pi pi 603 8月 20 2017 cpufreq

#!/bin/sh
ACTION=$(zenity --list --radiolist \
  --hide-header \
  --title="Cpufrequtils" \
  --text="What would you like to do?" \
  --column "Select" --column="Action" TRUE "performance" FALSE "ondemand" FALSE "conservative" FALSE "powersave")

if [ "$ACTION" = "performance" ]; then
  clear
  sudo cpufreq-set -g performance
elif [ "$ACTION" = "ondemand" ]; then
  clear
  sudo cpufreq-set -g ondemand
elif [ "$ACTION" = "conservative" ]; then
  clear
  sudo cpufreq-set -g conservative
elif [ "$ACTION" = "powersave" ]; then
  clear
  sudo cpufreq-set -g powersave
else
  clear
  echo "cancel"
fi

通常ondemand(平常時600MHz)で使用していますがだいぶ快適になりました。
jessieで使用していたアプリケーションもすべてインストールできました。

Raspberry Pi GPIO Zero v1.4を試してみる

Raspbian Stretchなかなかリリースされないですね。基本のRaspbian Stretchは利用可能のようですのでXの変更等もありPi独自の実装などに時間がかかっているものと思います。

いずれ正式なリリースがあると思います。

そんなことでRASPBERRY PI BLOGを見ていたらこんな記事(UPDATES TO GPIO ZERO, THE PHYSICAL COMPUTING API)が目につきました。
Raspbian jessieをインストールしている環境でupdateしていればすぐに利用できるので少し試してみました。

# apt update && sudo apt upgrade

といってもPythonは理解していないのでこの中のコマンドラインツール(pinout)だけですが(^^;o)

確認はターミナルから$ pinout を実行するだけです。

GPIO No.と物理ピンの関係だけなら非常に見やすいですね。

但し、残念ながらgpio readallのようにピンの状態までは表示してくれません。(開発が進めば将来的にサポートされるかもしれません)

$ pinout -r xx
を実行すると初期のPi1やPi1B,A,A+,B+が表示できます。
Raspberry Pi Compute Moduleとよくわからないものもあります。

Pi Zero(W)で試してみる

jessie-lite環境の場合は別途インストールする必要があります。

Wiring Piのインストール

# apt install libi2c-dev git-core

ユーザーのホームディレクトリで実行

$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

GPIO ZEROのインストール
インストールはPython 3ベースとしました。

# apt install python3-gpiozero

gpioコマンド、pinoutもOKですね。

REMOTE GPIO CONTROLなんか面白そうです。使いこなせるかどうかは別ですが!

Raspberry PiとAndroidでMTP接続

Raspberry PiとAndroid端末をUSBケーブルで結ぶことでMTP接続も利用できます。

Android端末とデータ転送するには簡単で転送速度も早いので利用価値があると思います。

但し、前回のUSBテザリングと同時には使用はできません。

参考 MTP – ArchWiki

環境
Raspberry pi 3 jessie ディスクトップ
Android端末 EP171AC android7.0 Nougat

EP171ACのUSBデバッグを有効にする

設定 — 端末情報 — ビルド番号を7回タップして開発者向けオプションを有効

開発者向けオプション — USBデバッグをON

Piと接続すると通知欄にNが表示されます。

USB接続の用途 ○ファイルを転送する

Raspberry pi 3の設定

mtp-toolsのインストール(libmtpなども依存関係でインストールされます)

# apt install mtp-tools

lsusbを実行します。EP171ACは以下のように認識しています。

$ lsusb
Bus 001 Device 008: ID 0e8d:201d MediaTek Inc.

/etc/udev/rules.d/69-libmtp.rulesを新たに作成
lsusbの結果からidVendorとidProductを記入

/etc/udev/rules.d/69-libmtp.rules
# EP171AC
ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="666", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1"


EP171ACを再接続するとファイルマネージャーにEP171ACが現れます。

出ない時はPiを再起動してみるといいと思います。


EP171ACをクリックするとオートマウントします。

USBケーブルを抜き挿しすると違うアイコンで同じ内容が表示されますが気にしない!

ここでUSBテザリングをONにするとファイルマネージャーからEP171ACは見えなくなります。(接続が切れる)USBテザリングをOFFにするとまたMTP接続(EP171AC)は自動で復活します。

Pi Zero(W) コマンドラインでMTP接続

X環境の無いjessie-liteのZero(W)でMTP接続をしてみます。
Zero(W)はPi3からssh接続しているものとします。

Zero(W)の設定
mtp-tools jmtpfsのインストール

# apt install mtp-tools jmtpfs

マウントポイントの作成
マウントはユーザーで実行するのでユーザーのホームディレクトリに作成します。

$ mkdir ~/mtp

.mtpz-dataの取得
マウントすると
Unable to open ~/.mtpz-data for reading, MTPZ disabled.
こんなメッセージが出ます。GitHubに公開されているので頂きます。

$ wget https://gist.github.com/jemc/0149c1bb28413c3d8cf9/archive/ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
unzip ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
mv 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde/.mtpz-data ~/
rm ba49166cbf8f80c8a50e0ecf79660d3cf2efabde.zip
rmdir 0149c1bb28413c3d8cf9-ba49166cbf8f80c8a50e0ecf79660d3cf2efabde

マウントしてみる

$ jmtpfs ~/mtp
Device 0 (VID=0e8d and PID=201d) is UNKNOWN.
Please report this VID/PID and the device model to the libmtp development team
Android device detected, assigning default bug flags

未知のデバイスだよとメッセージが出ますがマウントは成功しています。
Archの解説にもありますがリンク先の最新のSupported devices listを見るとサポートはされているようです。udevルールを適用しても改善はしませんでした。
Raspbianのlibmtpのバージョンが古いのかまたはもう少し設定が必要なのかもしれません。

アンマウント

$ fusermount -u ~/mtp


トップディレクトリの日付やdfの値がおかしいですが内部の日付は正常です。

ファイルの転送も問題無いようです。

やはりこちらもUSBテザリングをONにすると接続は切れてしまいます。
再接続するには一旦アンマウントしてから再度マウントする必要があります。

Xの無い環境でUSBテザリングからターミナルを介してアクセスしている場合、ファイルの受け渡しは直接できないのでSDカードを介するかまたはほかの方法を取ることになりそうです。

Top