Raspberry Pi 3.5インチ USB-HDDアダプタの作成

Raspberry Piで使用する3.5インチ用のUSB-HDDアダプタを作成してみました。
HDDの信頼性としてはやはり2.5インチよりは3.5インチに分があるかな?!
PiでHDDを使うには必要な電力をどう確保するかで決まってくると思います。
当サイトの100均ハブなどではUSBの電源ラインに直接5Vを供給しています。
ここらは自己責任ですね。

3.5インチ用USB-HDDケースも市販されていますが安い物は別に12V電源アダプタを接続するなど今ひとつ使い勝手がよくありません。
当サイトでは3.5インチHDDの丸裸仕様でいきたいと思います。丸裸といってもPiと接続するには最低限SATAからUSBに変換するパンツだけは履かせてあげる必要があります。

今回用意したもの

変換アダプタには前回使用のORICO 2.5インチ HDDケースを今回も採用してみました。(基板のみを使用)

東芝 DT01ACA100 1TB SATA
ORICO 2.5インチ HDDケース
XL6009 4A DC-DC ステップアップコンバータ

アダプタを改造する

SATAの仕様としては2.5インチも3.5インチもコネクタは共通となっています。ORICOの2.5インチ用は12Vの端子がないので直接供給してみることにしました。
シリアルATA wiki

敢えて12V電源を別に用意するのは使い勝手が悪いのでXL6009基板で昇圧します。
ユニバーサル基板にはマイクロB5V入力、XL6009基板を載せ出力(12V)及び、5V,GNDの3本をアダプタの電源コネクターに半田付けします。


電源コネクタは右側15pin、左から1〜15
4 – 6 GND
7 – 9 5V
13 – 15 12V
各3Pinづつ共通のため真ん中のPinを狙って半田付けすればいいですね。
熱が通りにくいので大きめのハンダゴテがいいと思います。


基板合体のため穴を3mmに拡大、電源コネクター側に新たに穴を開けました。
プラスチックスペーサーを入れて合体します。

パーティション作成


電源は5V2Aクラスを用意しました。Pi3に繋いでパーティションを作成します。

ドライブは/dev/sdbで認識できました。fdiskを実行します。

# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.29.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xdc33f138.

Command : n 新たに領域を作成

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-1953525167, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-1953525167, default 1953525167): 

Created a new partition 1 of type 'Linux' and of size 931.5 GiB.

Command : p 確認

Command (m for help): p
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdc33f138

Device     Boot Start        End    Sectors   Size Id Type
/dev/sdb1        2048 1953525167 1953523120 931.5G 83 Linux

Command : w テーブルをディスクに書き込み、終了

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

フォーマット

Pi3からはコマンドラインから実行する方法とgpartedを使用する方法があります。
コマンドラインから実行

# mkfs.ext4 /dev/sdb1
mke2fs 1.43.4 (31-Jan-2017)
/dev/sdb1 contains a ext4 file system
	last mounted on Wed Nov 29 00:34:11 2017
Proceed anyway? (y,N) y
Creating filesystem with 244190390 4k blocks and 61054976 inodes
Filesystem UUID: 3c1a930c-6175-4ef7-be64-31d3771e86f6
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

gpartedを使用
インストール # apt install gparted

右上のデバイス選択でHDDを選択
デバイス選択を謝ると悲しい事態が起こることになるので注意
メニューのチェックマークを実行するまでは実行しないので構成を自由に変更したりすることが可能です。


HDDのアクセスLEDは下向きになりますがかなり明るいので充分認識可能です。
フォーマットが終了するとPi3のファイルマネージャーには1TBのディスクが見えてきます。
当初マウントしただけでアクセスLEDがしばらく点滅していたのですがその後は待機時点灯、アクセス時点滅の正常動作になっています。(なにかチェックが入っていたのかもしれません?)


アダプタ自体はかなりコンパクトにそして電源も通常の5V2Aクラスがあればいいので手軽に使用できると思います。
用途としてはファイルサーバー(pi zero)のHDDバックアップ用を想定していますがPiのUSB2.0+(NFS,samba)は速度面では期待できないのでHDDからのダイレクトコピーや非常時のHDD救出用にも活用できそうです。

Pi ZERO NFS & Sambaサーバーを構築

当サイトのファイルサーバーはMoOde Audio(3.1)で運用していました。

しかしRaspbianもstretchになり特に最近のupdateによりpi3からのアクセスは入出力エラー、ファイルマネージャー(pcmanfm)のクラッシュに見舞われるようになってしまいました。

現在のmoode audio

$ uname -a
Linux moode 4.4.50+ #970 Mon Feb 20 19:12:50 GMT 2017 armv6l GNU/Linux

kernel 4.9にアップするとmoode playerに不具合が生じてしまいます。

pi3に2017-09-07-raspbian-stretchをインストールした時点では正常に動作しますがapt updateを実行後は上記の現象が頻発してしまいます。

そこでRaspbeery Pi zeroにstretchをインストールして専用のファイルサーバーとして運用することにしました。

用意したもの

Pi Zero + USB-HUB
WiFiアダプタ RTL8188CUS 802.11n WLAN Adapter
HDD MQ01ABD100 東芝 1TB
HDDケース ORICO 2.5インチ HDDケース USB3.0 TO SATAⅢ

インストール 2017-09-07-raspbian-stretch-lite
作業マシン Raspberry Pi3 stretch

# dd if=2017-09-07-raspbian-stretch-lite.img of=/dev/sda bs=1M

ネットワークにはWiFiアダプタを使用することにしました。書き込んだカードのdhcpcd.confとwpa_supplicant.confに設定を書き込んでおきます。またbootにはsshのファイル名で空ファイルを作っておきます。ホスト名はpiz0に変更

/etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.0.115/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

/etc/wpa_supplicant/wpa_supplicant.conf
country=JP 変更
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
追加
network={
        ssid="Buffalo-N-Yasui"
        psk="xx1xxx2xxxx3"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        priority=2
}

/etc/hostname
piz0 変更

/etc/hosts
127.0.1.1 piz0 変更

準備ができたらSDカードを差し込んでPi3からsshで接続します。
Lan内で名前解決ができない時はクライアントの/etc/hostsに登録しておきます。
192.168.0.115 piz0

ssh pi@piz0
接続できたらとりあえずraspi-configからLocaleとTimezoneを変更
$ sudo su
# raspi-config
4 Localisation Options

再ログインすると日本語メッセージになります。

なにはともあれuser piのパスワードを変更しておきます。

$ passwd
pi 用にパスワードを変更中
現在の UNIX パスワード:
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: パスワードは正しく更新されました

apt update

$ sudo su
# apt update && apt upgrade

HDDはext4でフォーマットしています。Piからはsdbで認識しています。

$ dmesg | grep sdb
[    4.631529] sd 0:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/932 GiB)
[    4.632659] sd 0:0:0:0: [sdb] Write Protect is off
[    4.632692] sd 0:0:0:0: [sdb] Mode Sense: 43 00 00 00
[    4.633678] sd 0:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[    4.649766]  sdb: sdb1
[    4.664025] sd 0:0:0:0: [sdb] Attached SCSI disk
[    9.802647] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)

マウントする位置はOSの流儀や使い勝手でいろいろですが当サイトは/home/xxxにマウントしています。
デバイスはSDカードに習ってPARTUUIDで指定しています。

# blkid /dev/sdb1
/dev/sdb1: UUID="1d402e29-277b-47a5-90b2-ff3b02e853d6" TYPE="ext4" PARTUUID="c0b17145-01"
/etc/fstab
# mkdir /home/hda
/etc/fstab
PARTUUID=c0b17145-01  /home/hda ext4 defaults,noatime 0 0
# mount -a

NFSサーバー

# apt install nfs-kernel-server
/etc/exports
/home/hda 192.168.0.0/24(rw,async,crossmnt,no_root_squash,no_subtree_check)
# systemctl restart nfs-server rpcbind

nfs-kernel-serverをインストールするとserviceは自動で立ち上がっています。

$ systemctl status nfs-server
$ systemctl status rpcbind

ここでクライアントのPi3から確認してみます。設定に間違いが無ければ以下のように表示されるはずです。

$ showmount -e piz0
Export list for piz0:
/home/hda  192.168.0.0/24

NFSクライアント

クライアントに必要なものはnfs-commonとrpcbindですがstretchでは両者ともデフォルトでインストールされています。またstretchではnfs-commonはservicesとして起動する必要も無くなっています。
rpcbindが起動してあればいい(デフォルトで起動しているはずです)

# systemctl start nfs-common
Failed to start nfs-common.service: Unit nfs-common.service is masked.

maskされていますね unmaskしても解除できないので実質nfs-commonはservicesとしては無効になっているようです。
起動時にマウント
クライアントもサーバーと同じディレクトリ位置にすると使い勝手が良くなります。

# mkdir /home/hda
/etc/fstab
piz0:/home/hda /home/hda       nfs     rw,defaults   0  0

# mount -a を実行して/home/hdaにアクセスするとファイルが見えてきます。
ここで再起動すると/home/hdaにマウント・・・されていませんね (・・;)
どうもserviceの起動とfstabを読み込むタイミングが合ってないようです。
mount -aではマウントは成功するので起動の最終あたりでmount -aを実行するようcrontabに追記登録をしてみます。

/etc/crontab
@reboot /bin/mount --all

これでクライアント側も起動時にマウントできるようになりました。
# オプションを修正しました。”mount –all”

Sambaサーバー

# apt install samba
/etc/samba/smb.conf
# systemctl restart smbd nmbd

smb.confは適宜公開するディレクトリを設定します。

クライアントのPi3にもsambaをインストールしておきます。(設定はデフォルト)

Pi3を再起動するとネットワークからコンピュータアイコンが見えてきます。
反映されるまで少し時間がかかることもあります。

初回の接続時に認証がありますがセキュリティの観点からほかにもキーリングにもパスワードが必要になっています。

moode playerも全く今までどおり使用できます。


stretchはむろんこれまでのjessieからも問題なくファイルの読み書きができるようになりました。
但しファイルマネージャーのクラッシュは頻度は少なくなりましたがまだ発生しています。
ホームディレクトリ内の設定に問題があるかもしれませんがpcmanfmのアップデート直後からの現象なのでなんとか改善を待ってみようと思います。

パワーLEDで遊んでみる(シーリングライトの実験)

当サイトにはまだまだ蛍光管の照明器具があります。蛍光管の寿命がなかなかきれないのでついついそのまま使用しています。

今回は前回のパワーLEDの実験データを元に照明器具に取り付けてみました。

Caution
現在は調光可能なLEDシーリングライトもかなり安価になっています。今回のような工作は当サイトくらいと思いますが今回使用するパワーLEDはかなり発熱します。また工作如何によっては漏電の危険もあり最悪火災を引き起こすことも危惧されます。あくまで参考程度にとどめておいてください。

シーリングライト
今回換装する器具は古いものですがリモコンが使用できます。

リモコンの動作は全灯 – 減灯 – 常夜灯 – 消灯
チョーク式と同じですね。

この動作に準じて回路を考えてみます。
仕様
全灯 32V 1A 32W
減灯 30V 0.5A 15W
常夜灯 3W LED 適当


オリジナルの内部
全灯 メインのAC100Vは制御基板のリレーを介して供給されます。
減灯 制御電源(AC100V)を加えて2灯(40W,32W)とも点灯のまま光量を落としています。
常夜灯 制御電源(AC100V)でナツメ球を点灯

回路

それぞれの電源は制御基板からAC100Vが送られてくるので全てACアダプタで変換します。
不要になったアダプタはただのゴミですのでゴミ減らしのためにもこの際利用できるものはどんどん投入していきます。
メインのアダプタには富士通(16V 2.5A)を使用しました。連続使用では少々熱を持ちますが実験のとおり過電流に対しても保護回路が働くためある程度信頼しても良さそうです。
減灯には5Vリレーを駆動するため携帯充電器を使用、殻割りをしてAC100Vをつなぎ込みます。
常夜灯は3.3V 2Aアダプタで3W LEDを駆動、全て定格内で使用しています。

全灯回路
ノートアダプタで昇圧モジュールを32Vに設定すると連続フラッシュを決めてくるので間に24Vリレーを入れてやります。リレーはアダプタの電圧が充分に上昇した頃にオンするためフラッシュ現象は免れます。リレーには使い古しですがオムロンのLY2N-D2を使いました。電流容量があれば大抵の24Vリレーが使えると思います。
昇圧モジュールには減灯のためポテンショメータに抵抗をシリーズに入れてあります。
全灯時はポテンショメータ+抵抗で32Vに調整します。

減灯回路
昇圧モジュールを約30Vに設定すると電流は半分の0.5A程度になります。計算式のとおり2.2kの抵抗を入れてこの抵抗の両端をリレーの接点でショートすることで減灯します。

常夜灯はそのまんまですね。抵抗の両端をジャンパーピンでショートorオープンすることで明るさを調整します。

放熱ファン回路
この程度の放熱器ではクーリングファンは必須になると思います。全灯時は16Vから抵抗(2W)で落として8V程度で回しています。減灯時は5Vが使えるためリレーのもう1回路の接点を利用して5Vに切り替えて駆動します。

LEDユニット

昇圧モジュールもかなり発熱してきます。ー端子側に取付ビス用の穴を開け放熱器に半身を密着して取り付けました。ー端子側は共通のためショートしてもOKです。
昇圧モジュールは穴あきタイプを使用したので念の為トランジスタ用絶縁シートを敷いています。


リレー基板
16V,5Vは一旦この基板に入ります。
昇圧モジュールに追加した抵抗の両端からリード線で引き出しこのリレーで減灯します。


器具から不要なものを外してアダプタ類を取り付けていきます。


内部カバーを取り付け、オリジナルのリモコン受光部と常夜灯を取り付け
オリジナルのAC100V引き込みコネクタを取り付け
5V,16Vの線を引き出しておきます。


LEDユニットにはL型アルミ材を取り付け


LEDユニットはカバーに2.5mmの穴をあけて3mmビスを自己タップして取り付け

見える部分はオリジナルのAC100V引き込みコネクタ以外はすべて低圧DCになっています。

以上で取り敢えずすべての取り付けが完了です。


カバーを付けて点灯
画像は器具全体が光っているように見えますが実際は中心部分が強く光っています。
あくまで個人的な感覚ですが全灯時は蛍光管の40W+α、減灯時は30W相当でしょうか。
6畳の部屋ですが部屋全体を照らしてくれます。

取り敢えず全灯も減灯も問題ありませんがやはりカバーをつけると放熱が不足してきます。
通常は省エネということもあり減灯を使うようにしていますがもう少し明かりがほしいところです。
また使い古しの安いファンということもあり深夜の静かな時はファンの音が聞こえてきます。
まだまだ改善の余地ありですね。

パワー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ディストップ環境になりました。

Top