-----------Google-----------





<<トップページへ

■UPS 基板を利用して安全に電源を ON-OFF

1. 概要
RaspberryPi は一応PC(笑)なので電源のon-offが面倒である。
ON はUSBコネクタ経由で電源を接続する事で行い 電源OFF は poweroff コマンドで行うのがノーマルの仕様となっている。

しかしこれではAudio用途で使用する場合には不便なので電源SWを設けて機械的な電源通電と遮断操 作で安全に ON-OFF 出来るようにしてみた。

下のリンク先のHPを参考に作業を進めたが この基板はRasbian標準で開発されている様で
自分が使用しているArchlinux環境ではHPの記述通りの設定操作では動作しなかった。

参考リンク:ぬわーーーーーーー!!!

追加設定事項
以下の説明はRaspberryPi2に i2c通信環境 シリアル通信環境を構築後に作業をする事を前提として説明しています。もっとセキュリティーを考慮した設定も出来るはずですが詰めきれていません。 (^_^;)

Archlinuxをインストールした環境では

(1)shutdown コマンド、python、の sudoers への追加等が必要になります。

(2)基板が ttyAMA0 になるため /boot/cmdline.txt で赤字部分を修正

root=/dev/mmcblk0p2 rw rootwait console=ttyAMA1,115200 console=tty1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 kgdboc=ttyAMA1,115200 elevator=noop


(3) /etc/udev/rules.d/ に以下を追加

(ATTRS{id}確認コマンド udevadm info --attribute-walk -n /dev/ttyAMA0)

# cat 50-ups.rules
KERNEL=="ttyAMA0", SUBSYSTEM=="tty",  ATTRS{id}=="00241011", GROUP="users", MODE="0777"

※基板はたびたび変更になりレビジョンが多数有りますが動作に使用するスクリプトは共通です。

upspico

UPS PIco Stack 450 2.5A (Raspberry Pi 3 compatible)

Ordered Item contains:

  1. UPS PIco PCB with all described below long list features
  2. LiPO Battery 450 mAh
  3. 6 Pin header for 1-wire, A/D1 A/D2
  4. Gold Plated Reset Pin
  5. Buzzer
  6. Rubber Spacer

Ordered Item does not contain and should be ordered separately if needed for specific application:

  1. Infrared Receiver
  2. PIco Fan Kit
  3. PIco LiPO Battery 3000 mAh
※赤外線レシーバーが付属していないのが残念
 2. 設定
(1) visudoで以下を追加する。

#########################################################
User_Alias FULLTIMERS=hoge
Cmnd_Alias ADMIN=/usr/bin/python,/usr/local/abin/picofssd.py
FULLTIMERS ALL=NOPASSWD:ADMIN
#########################################################

(2) i2c、シリアル接続でUPS基板を認識している必要があるので設定、確認する。

# i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU 69 6a 6b -- -- -- --
70: -- -- -- -- -- -- -- --                        

(3) 設定コマンドを叩いて...

# minicom -s 

minicomの設定は以下の二点

ポートデバイス:/dev/ttyAMA0
通信スピード:38400

(4) 起動してテストしてみる。minicomの設定後に起動して「UPSR」ボタンを押してみる。
     以下 の様な表示がされればOKです。

minicom へようこそ 2.7

オプション: I18n
コンパイルされた日時は:  Sep 17 2015, 19:02:28.
ポート /dev/ttyAMA0, 13:54:49

CTRL-A Z を押すと、説明画面になります。

Batter
Battery Charged.var.bmode:2d.var.bmode:2
picocmd.var.bmode:2d.var.bmode:2d.var.bmode:2
picocmd.var.bmode:2
RTC set to Default

----------------------
www.pimodules.com
UPS PIco Hardware Release: V1.10 Q
Firmware Release: V1.0 XBMC 25.02.2016 0x5C
----------------------


UPS PIco System Started
I2C address Selected:I2C_MINIMAL

Raspberry Pi is runnng - booting protection disabled

Battery Charger OFF y Charger ON


(4) /etc/rc.local が使える様にsystemctlで設定しておく。

$ cat /etc/rc.local
#!/bin/bash

# Start Bluetoothd
/usr/sbin/bluetoothd &

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# Run UPS Pico FSSD script and load the included emulated RTC
sudo python /usr/local/abin/picofssd.py &

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
( sleep 4; hwclock -s ) &

#Power-Led
echo heartbeat > /sys/class/leds/led1/trigger
#
#################################################
mount -t nfs 192.168.12.1:/srv/http/music /var/lib/mpd/music
#
/usr/local/bin/mpd /etc/mpd.conf

exit 0

3. 設定後の確認
(1)動作状態の確認

# python2 /usr/local/abin/pico_status.py
 
        pico status V1.0
***********************************
  UPS PIco Firmware: 5c
  Powering Mode: RPi
  BAT Volatge: 3.76 V
  RPi Voltage: 4.67 V
  SOT23 Temperature: 26 C
  TO-92 Temperature: 00 C
  A/D1 Voltage: 0.0 V
  A/D2 Voltage: 0.0 V
***********************************

(2)電源をOFFする前に確認しておかなければならない事

$  ps aux | grep py
root       293  0.0  0.4  11016  4276 ?        S    13:34   0:00 sudo python /usr/local/abin/picofssd.py
root       314  0.0  0.6   7972  6004 ?        S    13:34   0:00 python /usr/local/abin/picofssd.py
kkuma      717  0.0  0.4   7000  4608 ?        S    13:34   0:00 /usr/bin/python2 /usr/bin/blueberry-tray
kkuma      726  0.1  3.6  97148 34368 ?        Sl   13:34   0:02 python2 /usr/lib/blueberry/blueberry-tray.py
root      1837  2.0  0.2   3952  2076 pts/0    S+   14:09   0:00 grep py

picofssd.pyプロセスが存在する事を確認する。
ログインユーザーが/dev/ttyAMA0を操作出来るか確認しておく。

ここまでやったら電源を切ってみてシャットダウンコマンドが実行されて電源が切れるか
テストしてみる。

※重要事項 2017/02/07 追記
このUPS基板は実はとんでもなく大食らいでした。付属 の電池パックが放電してしまった
場合には5.0V 3.0A程度の電源を接続してやらないと充電が始まりません
でした。
また、電源遮断時に電池パックの電圧約3.5V以上無い場合はシャットダウンコマンド実行に
失敗する
様です(トホホ)それだけなら良いのですがどうも電圧が既定値に達していないと
基板が異常事態と判断してデスクトップ表示直後に勝手にシャットダウンコマンド実行して
起動が完了しなくなります(笑うしか無い)

余談ですがRaspberryPi2のスターターkitに付属しているようなUSB電源アダプターでは
間違いなく能力不足でこの現象が発生して実用になりません。
これらの確認実験は 5V 3A が供給出来る電源で実験を行いました。

そんな訳で起動時に電池パックの電圧を確認してシャットダウンコマンド準備コマンドを
実行するかしないか?を判断するスクリプトを書いて/etc/rc.local 内で実行させる様に
設定しました。

#!/bin/bash

bav=3.5
st=`python2 /usr/local/abin/pico_status.py |  grep BAT | awk '{print $3}'`
#
  if [[ $st   >  $bav ]] ; then
    sudo /usr/bin/python /usr/local/abin/picofssd.py &
  else
    exit 0
  fi

ついでに現状の電源状態を表示するスクリプト

#!/bin/csh
case1:
sleep 2;echo ""
echo "###################################"
date
python2 /usr/local/abin/pico_status.py | grep Vol | grep -v D
echo "###################################"
goto case1

実行すると

###################################
2017年  2月  7日 火曜日 09:00:34 JST
  BAT Volatge: 4.11 V
  RPi Voltage: 4.8 V
###################################

このスクリプトを実行して現状接続している電源が充電可能か?確認出来ます。