<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>StargazR</title><description>天文ブログ</description><link>https://stargazr.net/</link><language>ja</language><item><title>Proxmoxの非特権LXC上にJellyfinでメディアサーバーを構築する (QSV HW Transcoding)</title><link>https://stargazr.net/posts/2025/1201-proxmox-lxc-jellyfin-qsv-hwtranscoding/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/1201-proxmox-lxc-jellyfin-qsv-hwtranscoding/</guid><pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;経緯&lt;/h1&gt;
&lt;p&gt;AmazonのブラックフライデーセールでFire TV Stick 4K Plusを買いました。&lt;br /&gt;
そこで、NAS上の動画ファイルをFire TV Stick経由で再生できるようにメディアサーバーを構築することにしました。&lt;br /&gt;
今回は無料でハードウェアトランスコードにも対応しているJellyfinを採用しました。&lt;/p&gt;
&lt;h1&gt;既存のNASセットアップ&lt;/h1&gt;
&lt;p&gt;現在、N100ミニPC上にProxmoxを入れ、Proxmox上のVMでTrueNAS Scaleを走らせてNASとして運用しています。&lt;br /&gt;
NAS用のHDDはVMにPCIe passthroughでSATAコントローラーごと渡しています。&lt;/p&gt;
&lt;p&gt;Jellyfinサーバー環境は以下のように構築することにしました。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Proxmox上にJellyfinのLXCを構築 (iGPU passthroughでJellyfinでHWトランスコードを利用可能とする)&lt;/li&gt;
&lt;li&gt;ProxmoxホストにNASの共有フォルダをマウント&lt;/li&gt;
&lt;li&gt;ProxmoxホストからJellyfin LXCに共有フォルダをbind mount&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;Jellyfinサーバー環境の構築&lt;/h1&gt;
&lt;h2&gt;Jellyfin LXCの作成&lt;/h2&gt;
&lt;p&gt;Jellyfin LXCの作成には&lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=jellyfin&quot;&gt;Proxmox VE Helper-Scripts&lt;/a&gt;を利用させてもらいます。&lt;br /&gt;
Proxmoxホストのshellでインストールスクリプトを実行し、ウィザードに従ってLXCを構築します。&lt;br /&gt;
途中でVAAPIデバイスを自動でマウントするかどうか聞かれるので、yesにしておきます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/jellyfin.sh)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;LXCへのNASフォルダマウントの準備&lt;/h2&gt;
&lt;p&gt;LXCができたら、LXCのshellでNASフォルダをマウントする準備をします。&lt;br /&gt;
参考：https://forum.proxmox.com/threads/tutorial-unprivileged-lxcs-mount-cifs-shares.101795/&lt;br /&gt;
ユーザーグループlxc_shares（gid:10000）を作成し、jellyfinユーザーをlxc_sharesグループに追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;groupadd -g 10000 lxc_shares
usermod -aG lxc_shares jellyfin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LXCをシャットダウンします。&lt;/p&gt;
&lt;h2&gt;ProxmoxホストへのNASフォルダのマウント&lt;/h2&gt;
&lt;p&gt;ProxmoxホストにNASフォルダマウント用ディレクトリを追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p /mnt/lxc_shares/nas_rwx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/etc/fstab&lt;/code&gt;にNASフォルダマウントの設定を追加します。&lt;br /&gt;
&lt;code&gt;smb_username&lt;/code&gt;と&lt;code&gt;smb_password&lt;/code&gt;はNASのSMB接続用IDとパスワードです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{ echo &apos;&apos; ; echo &apos;# Mount CIFS share on demand with rwx permissions for use in LXCs (manually added)&apos; ; echo &apos;//NAS/nas/ /mnt/lxc_shares/nas_rwx cifs _netdev,x-systemd.automount,noatime,uid=100000,gid=110000,dir_mode=0770,file_mode=0770,user=smb_username,pass=smb_password 0 0&apos; ; } | tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;NASフォルダをProxmoxホスト上にマウントします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mount /mnt/lxc_shares/nas_rwx
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Jellyfin LXCへNASフォルダをbind mount&lt;/h2&gt;
&lt;p&gt;LXCの設定ファイルを編集し、Proxmoxホスト上の&lt;code&gt;/mnt/lxc_shares/nas_rwx&lt;/code&gt;をLXC上の&lt;code&gt;/mnt/nas&lt;/code&gt;にbind mountします。&lt;br /&gt;
なおLXC_IDはJellyfinのLXCコンテナ番号(e.g., 101)。&lt;br /&gt;
ro=1は読み取り専用オプションなので不要な場合は取る。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{ echo &apos;mp0: /mnt/lxc_shares/nas_rwx/,mp=/mnt/nas,mountoptions=noatime,ro=1&apos; ; } | tee -a /etc/pve/lxc/LXC_ID.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;LXCを起動し、&lt;code&gt;/mnt/nas&lt;/code&gt;のアクセス権が&lt;code&gt;lxc_shares&lt;/code&gt;グループに設定されていることを確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root@jellyfin:~# ls -l /mnt/
total 0
drwxrwx--- 2 root lxc_shares 0 11月 29 14:44 nas
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとはJellyfinの管理画面を開いて各種設定をすればOKです。&lt;br /&gt;
プレイバック→トランスコーディングからハードウェアアクセラレーションの設定をします。&lt;br /&gt;
当方の環境ではQSVを使うので、&lt;code&gt;ハードウェアアクセラレーション：Intel Quicksync (QSV)&lt;/code&gt;、&lt;code&gt;QSVデバイス：/dev/dri/renderD128&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;HWトランスコードしようとすると再生できない場合&lt;/h2&gt;
&lt;p&gt;基本的には上記の手順により非特権LXCコンテナ上でHWトランスコードが利用できるようになるはずなのですが、うまくいかない場合はGPUデバイスのパーミッション設定の誤りの可能性があります。&lt;br /&gt;
Jellyfinのプロセスはjellyfinユーザーとして実行されるため、jellyfinユーザーのグループに対してパーミッションが設定されていない場合、JellyfinがGPUにアクセスできません。&lt;br /&gt;
私が構築した際も&lt;code&gt;/dev/dri/renderD128&lt;/code&gt;のパーミッションが間違っていました（PVE Helper-Scriptsのバグ？）。&lt;/p&gt;
&lt;p&gt;LXC上で/dev/dri/のパーミッションを確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root@jellyfin:~# ls -l /dev/dri/
total 0
crw-rw---- 1 root video  226,   1 12月  1 21:10 card1
crw-rw---- 1 root render 226, 128 12月  1 21:10 renderD128
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;card1&lt;/code&gt;のグループが&lt;code&gt;video&lt;/code&gt;、&lt;code&gt;renderD128&lt;/code&gt;のグループが&lt;code&gt;render&lt;/code&gt;になっていない場合は、Proxmoxのコンテナ設定が間違っています。&lt;br /&gt;
その場合、まずLXCコンテナ上での&lt;code&gt;video&lt;/code&gt;、&lt;code&gt;render&lt;/code&gt;のgidを確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;root@jellyfin:~# cat /etc/group | grep -e video -e render
video:x:44:jellyfin
render:x:993:jellyfin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合、&lt;code&gt;video&lt;/code&gt;のgidが44、&lt;code&gt;render&lt;/code&gt;のgidが993です。&lt;br /&gt;
LXCをシャットダウンします。&lt;/p&gt;
&lt;p&gt;Proxmoxホストで&lt;code&gt;/etc/pve/lxc/LXC_ID.conf&lt;/code&gt;を開き、&lt;code&gt;dev0&lt;/code&gt;と&lt;code&gt;dev1&lt;/code&gt;のgidが上記の通りになっているか確認、間違っていれば修正します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dev0: /dev/dri/card1,gid=44
dev1: /dev/dri/renderD128,gid=993
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;私の場合はこれで問題なくHWトランスコードできるようになりました。&lt;/p&gt;
&lt;h1&gt;おわりに&lt;/h1&gt;
&lt;p&gt;特殊な環境なのでこの情報を必要とする人が存在するか怪しいですが、もしもこの情報が誰かのお役に立ちましたら幸いです。&lt;/p&gt;
</content:encoded></item><item><title>天体写真のFITS保管用にNASをチューニングする</title><link>https://stargazr.net/posts/2025/1129-tuning-nas-for-astrophoto-fits/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/1129-tuning-nas-for-astrophoto-fits/</guid><pubDate>Sat, 29 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;NAS&lt;/h1&gt;
&lt;p&gt;3.5インチドライブが2つ搭載でき、2.5GbEが2ポートあるN100搭載ミニ(?)PCをNASとして使っています。&lt;/p&gt;
&lt;h2&gt;NASの簡易スペック&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ホストOSにProxmox、ゲストOSにTrueNAS Scale&lt;/li&gt;
&lt;li&gt;CPUはN100、PL1 10W、PL2 15W&lt;/li&gt;
&lt;li&gt;2x 2.5GbEでSMB Multichannel、最大5Gbps&lt;/li&gt;
&lt;li&gt;1x 8TB HDD (WD80EAAZ)
&lt;ul&gt;
&lt;li&gt;ファイルシステムはZFS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RAM32GB
&lt;ul&gt;
&lt;li&gt;TrueNAS VMに24GBを割り当て&lt;/li&gt;
&lt;li&gt;zfs_dirty_data_maxは16GBに設定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1x 256GB SATA SSDをL2ARCに（128GBをオーバープロビジョニングに確保）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ストレージデバイスがHDD1本なので、書き込み速度はシーケンシャルでも最大200MB/s程度（ディスクが空の場合）、ランダム書き込みではもっと遅くなります。&lt;br /&gt;
ところがZFSの場合、書き込み時にRAM上のdirty pageに一時的にデータを貯めてからまとめてディスクに書き込むので、ランダム書き込みでもシーケンシャルに近い速度を出すことができ、dirty pageを拡張すればある程度のサイズまでは見かけ上ディスクの上限を超えた速度で書き込むことも可能です。&lt;br /&gt;
さらにZFSは透過圧縮の機能があるので、例えば圧縮率が1.5倍の場合、ディスクから200MB/sで読み出しつつリアルタイムで解凍、見かけ上300MB/sで読み出しなんてこともできます。&lt;br /&gt;
ちなみに天体写真のFITSは比較的圧縮のよく効くタイプのファイルです。&lt;/p&gt;
&lt;p&gt;今回はPCからNASに天体写真のFITSを書き込む場合のパフォーマンスをいろいろ比較して、ZFSのチューニングをしました。&lt;/p&gt;
&lt;h1&gt;パフォーマンステスト&lt;/h1&gt;
&lt;p&gt;テストデータは69.4GB分のASI533MCおよびASI2600MC-PのFITSデータ。少しjpgが混じってる。&lt;br /&gt;
Windows11のPCからNASに書き込み。書き込みにはFastCopyを使用。&lt;br /&gt;
PC、NASともに2x 2.5GbEのSMB Multichannelで最大5Gbps (600MB/s程度)。&lt;/p&gt;
&lt;h2&gt;compression=?&lt;/h2&gt;
&lt;p&gt;ZFSの透過圧縮では、圧縮形式や圧縮率を選択できます。&lt;br /&gt;
今回は以下の4パターンでパフォーマンスを比較しました。&lt;br /&gt;
基本的にはCPU負荷は1&amp;lt;2&amp;lt;3&amp;lt;4、圧縮率は4&amp;gt;3&amp;gt;2&amp;gt;1。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;lz4: 最もCPU負荷が軽い。圧縮率は低い。&lt;/li&gt;
&lt;li&gt;zstd-fast: zstdの高速版。zstdより圧縮率は低い。&lt;/li&gt;
&lt;li&gt;zstd-1: zstd圧縮率1。&lt;/li&gt;
&lt;li&gt;zstd-3: ZFSで圧縮オプションをzstdに指定したときの標準圧縮率。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;書き込み速度および書き込み時間&lt;/h3&gt;
&lt;h4&gt;平均書き込み速度 (MB/s)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;138.0&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;191.8&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;175.0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;82.3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;最速だったのはzstd-fast。次点がzstd-1。&lt;br /&gt;
lz4はCPU負荷は軽いが圧縮率が低いので、ディスク書き込みがボトルネック?。&lt;br /&gt;
zstd-3はCPU負荷がボトルネック?。&lt;/p&gt;
&lt;h4&gt;書き込み時間 (seconds)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;540&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;388&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;425&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;905&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;書き込み速度と同じなので省略。&lt;/p&gt;
&lt;h3&gt;圧縮率およびディスク上のサイズ&lt;/h3&gt;
&lt;h4&gt;圧縮率&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1.19&lt;/td&gt;
&lt;td&gt;1.32&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.48&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;1.51&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;もちろん最良はzstd-3で次点がzstd-1。&lt;br /&gt;
ただしzstd-1とzstd-3はほとんど差がない。&lt;/p&gt;
&lt;h4&gt;ディスク上のサイズ (GiB)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;59.2&lt;/td&gt;
&lt;td&gt;53.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;47.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;46.6&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;lz4とzstd-1では10GiB以上の差。&lt;br /&gt;
zstd-fastとzstd-1でも5.7GiBの差。&lt;/p&gt;
&lt;h3&gt;圧縮形式の決定&lt;/h3&gt;
&lt;p&gt;書き込み速度と圧縮率のバランスから&lt;code&gt;compression=zstd-1&lt;/code&gt;に決定。&lt;br /&gt;
CPUがもっと強ければzstd-3あるいはそれ以上の圧縮率を選択可能でしょうが、N100の場合zstd-1からzstd-3にすると圧縮率がそれほど変わらない割に書き込み速度が圧倒的に下がるのでダメそうです。&lt;/p&gt;
&lt;h2&gt;recordsize=?&lt;/h2&gt;
&lt;p&gt;ZFSでは、データセットごとにrecordsize (実際にディスクに書き込み時の最大ブロックサイズ)を指定でき、圧縮率や速度に影響します。&lt;br /&gt;
当方のNASでは動画などのメディアファイル用に基本的に&lt;code&gt;recordsize=1M&lt;/code&gt;で運用していますが、FITS用のデータセットではいくつに設定するのがよいかを調べました。&lt;/p&gt;
&lt;h3&gt;書き込み速度および書き込み時間&lt;/h3&gt;
&lt;h4&gt;平均書き込み速度 (MB/s)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;recordsize&lt;/th&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;138.0&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;191.8&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;175.0&lt;/td&gt;
&lt;td&gt;82.3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;190.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;184.0&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;180.7&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;512Kにすると、zstd-1の書き込み速度が1Mで最速だったzstd-fastに匹敵するレベルに改善。&lt;/p&gt;
&lt;h4&gt;書き込み時間 (seconds)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;recordsize&lt;/th&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;540&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;388&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;425&lt;/td&gt;
&lt;td&gt;905&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;391&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;405&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;412&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;圧縮率およびディスク上のサイズ&lt;/h3&gt;
&lt;h4&gt;圧縮率&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;recordsize&lt;/th&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;1.19&lt;/td&gt;
&lt;td&gt;1.32&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.48&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;1.51&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1.47&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1.47&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;1.44&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一般に&lt;code&gt;recordsize&lt;/code&gt;を小さくすると圧縮率が落ちるとされているが、zstd-1の場合256Kまではさほど変わらない様子。&lt;/p&gt;
&lt;h4&gt;ディスク上のサイズ (GiB)&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;recordsize&lt;/th&gt;
&lt;th&gt;lz4&lt;/th&gt;
&lt;th&gt;zstd-fast&lt;/th&gt;
&lt;th&gt;zstd-1&lt;/th&gt;
&lt;th&gt;zstd-3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1M&lt;/td&gt;
&lt;td&gt;59.2&lt;/td&gt;
&lt;td&gt;53.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;47.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;&lt;strong&gt;46.6&lt;/strong&gt;&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;512K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;47.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;256K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;47.5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;128K&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;48.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;256Kまでは誤差。128Kにするとやや大きくなる。&lt;/p&gt;
&lt;h3&gt;recordsizeの決定&lt;/h3&gt;
&lt;p&gt;速度が改善し圧縮率も落ちない、&lt;code&gt;recordsize=512K&lt;/code&gt;で決定。&lt;/p&gt;
&lt;h2&gt;もう少し小さいデータセットの場合&lt;/h2&gt;
&lt;p&gt;上記のテストでは書き込み量を約70GBというZFSのdirty page (16GBに設定)から大幅にあふれる量に設定しました。&lt;br /&gt;
しかし、実際には1回の撮影データ量はそこまで大きくないので、書き込み量がもっと小さい場合も検証してみます。&lt;/p&gt;
&lt;h3&gt;合計書き込み量別書き込み速度 (MB/s)&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;70GB&lt;/th&gt;
&lt;th&gt;30GB&lt;/th&gt;
&lt;th&gt;20GB&lt;/th&gt;
&lt;th&gt;15GB&lt;/th&gt;
&lt;th&gt;10GB&lt;/th&gt;
&lt;th&gt;5GB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;zstd-1/512K&lt;/td&gt;
&lt;td&gt;190.6&lt;/td&gt;
&lt;td&gt;222.5&lt;/td&gt;
&lt;td&gt;262.0&lt;/td&gt;
&lt;td&gt;292.2&lt;/td&gt;
&lt;td&gt;381.9&lt;/td&gt;
&lt;td&gt;477.9&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;書き込み量が小さいと速度が上がります。15GB未満ならSMB Multichannelなしの2.5GbEでは飽和するほどの速度が出てます。　　
ただ、FITSの場合ネットワークがボトルネックになるほどの書き込み速度はでないみたいです。&lt;br /&gt;
大きな動画ファイルを書き込むような場合、合計14GB程度までは600MB/s（2x 2.5GbEのネットワークが飽和する速度）に張り付きます。&lt;/p&gt;
&lt;h1&gt;結論&lt;/h1&gt;
&lt;p&gt;というわけで、上記のテストからFITS保管用のZFSデータセットでは&lt;code&gt;compression=zstd-1&lt;/code&gt;、&lt;code&gt;recordsize=512K&lt;/code&gt;がよさそうということがわかりましたので、このパラメータで運用しようと思います。&lt;/p&gt;
</content:encoded></item><item><title>ZWO EAFのハンドコントローラを自作した</title><link>https://stargazr.net/posts/2025/1011-eaf-handcontroller-diy/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/1011-eaf-handcontroller-diy/</guid><pubDate>Sat, 11 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;光軸調整などの際、いちいちPCに接続せずにフォーカサーを操作したい、だけど純正ハンドコントローラは高い、ということで簡単そうだったこともあり自作してみました。&lt;br /&gt;
&amp;lt;br&amp;gt;
以下のページを参考にしました。
::linkcard[https://www.williamliphotos.com/pages/diy-eaf-handcontroller]{title=&quot;DIY Hand Controller for ZWO Electronic Automatic Focuser&quot; desc=&quot;Will Li Photography&quot;}&lt;/p&gt;
&lt;p&gt;必要なもの&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;モーメンタリスイッチ2個&lt;/li&gt;
&lt;li&gt;トグルスイッチ1個&lt;/li&gt;
&lt;li&gt;4.7kΩの抵抗1個&lt;/li&gt;
&lt;li&gt;3.5mm4極ミニプラグケーブル1本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;スイッチ、抵抗は手元にあったので、4極ミニプラグケーブルだけAmazonで入手。
&amp;lt;br&amp;gt;
要するに、4極ミニプラグの先端からT,R1,R2,Sと置くと、以下のような動作になるようです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;R1とSを短絡するとDOWN (IN)&lt;/li&gt;
&lt;li&gt;R2とSを短絡するとUP (OUT)&lt;/li&gt;
&lt;li&gt;T-S間が短絡だと高速モード&lt;/li&gt;
&lt;li&gt;T-S間が4.7kΩだと低速モード&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ケースは3Dプリンタで適当に作成。&lt;br /&gt;
はんだ付け汚いけど動けばよし（笑）&lt;br /&gt;
&lt;img src=&quot;images/eaf-hc-soldering.jpg&quot; alt=&quot;はんだ付け&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;
フタして完成！動作確認も全く問題なし。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/eaf-hc.jpg&quot; alt=&quot;自作EAFハンドコントローラ&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀⑨：15cmニュートン搭載実験</title><link>https://stargazr.net/posts/2025/0928-diyharmeq-15cmnewt/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0928-diyharmeq-15cmnewt/</guid><pubDate>Sun, 28 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;晴れたのでDIYハーモニック赤道儀への15cmニュートン搭載実験のためプチ遠征してきた。&lt;br /&gt;
メイン鏡筒にSW Quattro 150p、メインカメラにASI2600MC Pro、ガイド鏡にSVBONY SV165 40mm、ガイドカメラにASI120mm mini。&lt;br /&gt;
三脚はVixenのASG-CB90三脚、ピラーはなし。特に転倒しそうな気配もなくウェイトレスで使用できた。&lt;br /&gt;
搭載機材の重量は測ってないけど、確実に6kgは超えてるかな？&lt;br /&gt;
&amp;lt;br&amp;gt;
いくつかの対象を撮ってきたけど、とりあえずM45をペタリ。
&lt;img src=&quot;images/20250927_M45.webp&quot; alt=&quot;M45&quot; /&gt;
15cmニュートン搭載での撮影自体は問題なくできた。&lt;br /&gt;
ただ、やはり極軸ウェッジ部分の剛性が圧倒的に不足している感じで、ちょっと揺れるし極軸合わせが非常に難しい。&lt;br /&gt;
&amp;lt;br&amp;gt;
あとこれはたぶん鏡筒側の問題なのだが、星の形が変だし光条が割れているように見える。&lt;br /&gt;
3Dプリンタ自作した主鏡押さえ兼主鏡マスクを付けてるのだが、たぶんネジを締めすぎなのと形状の改良が必要かも。　　
&lt;img src=&quot;images/20250927_M45_center.webp&quot; alt=&quot;N45中心部拡大&quot; /&gt;
ASIAIRのオートフォーカス時に振動のせい？か星が三角の軌跡みたいになってそもそもピントがちゃんと合ってるかも自身がないが…&lt;br /&gt;
&amp;lt;br&amp;gt;
今後は主鏡押さえ兼主鏡マスクを改良しつつ、剛性の高そうな極軸ウェッジをアリエクで物色する予定。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀⑧：実地試験成功！？</title><link>https://stargazr.net/posts/2025/0913-diyharmeq-field-trial/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0913-diyharmeq-field-trial/</guid><pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;仕事の都合と天気が噛み合わず、ずっとDIYハーモニック赤道儀の実地試験ができていませんでした。&lt;br /&gt;
今週平日の夜ですがほんの少しだけ晴れ間があったので、自宅ベランダから撮影テストできました。&lt;/p&gt;
&lt;h1&gt;スペックまとめ&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;駆動系&lt;/td&gt;
&lt;td&gt;ハーモニックドライブ（減速比100:1）+プラネタリギア（減速比10:1）&amp;lt;br&amp;gt;総減速比1000:1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;モーター&lt;/td&gt;
&lt;td&gt;NEMA17ステッピングモーター（400steps/rev）1/16マイクロステップ駆動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;モーター解像度&lt;/td&gt;
&lt;td&gt;0.29arcsec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;最大駆動速度&lt;/td&gt;
&lt;td&gt;1.5degree/s（対恒星時360倍速）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;電源電圧&lt;/td&gt;
&lt;td&gt;DC20V（PDトリガーケーブル使用）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;本体重量&lt;/td&gt;
&lt;td&gt;計6.4kg&amp;lt;br&amp;gt;赤経体2.8kg（OnStepXコントローラ含）&amp;lt;br&amp;gt;赤緯体3kg&amp;lt;br&amp;gt;極軸ウェッジ0.6kg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;プラネタリギアの減速比が大きすぎて、最大駆動速度がちょっと低くなってしまった。とはいえ実用上はそこまで気にならない範囲。&lt;/p&gt;
&lt;h1&gt;テスト機材セットアップ&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;項目&lt;/th&gt;
&lt;th&gt;内容&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;撮影鏡&lt;/td&gt;
&lt;td&gt;SW EVOGUIDE 50EDII（FL242mm）+ASI533MC+QBP3フィルター&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ガイド鏡&lt;/td&gt;
&lt;td&gt;SVBONY SV165 40mm（FL170mm）+ASI120MM mini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;制御システム&lt;/td&gt;
&lt;td&gt;ASIAIR Plus-256G&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20250912_075124704.jpg&quot; alt=&quot;システム全景&quot; /&gt;&lt;/p&gt;
&lt;h1&gt;極軸合わせ&lt;/h1&gt;
&lt;p&gt;南向きベランダのため、ASIAIRのAll-Sky Polar Alignmentで極軸合わせ。&lt;br /&gt;
もう少し極軸追い込みたかったけど、極軸ウェッジが剛性不足な感じでこれくらいで妥協。
&lt;img src=&quot;images/Screenshot_20250911-213112.png&quot; alt=&quot;極軸合わせ&quot; /&gt;
EVOGUIDEでAll-Sky PAがうまく動作しなかったのでガイド鏡で行った。焦点距離も合ってるはずだし原因がよくわからなかった。&lt;/p&gt;
&lt;h1&gt;ガイド状況&lt;/h1&gt;
&lt;p&gt;月も出ていてあまり時間もなかったので、ごく短時間ですがオートガイドさせてみました。&lt;br /&gt;
以下は一番良かった時ですが、RA/DECともにガイドエラーが0.5秒角前後、総ガイドエラーも0.6秒角台。&lt;br /&gt;
ガイドグラフも暴れておらずいい感じ？ただガイド鏡のピントが甘かったか。
&lt;img src=&quot;images/Screenshot_20250911-220242.png&quot; alt=&quot;オートガイド中&quot; /&gt;
&amp;lt;br&amp;gt;
30秒露出でしばらくライブスタッキングさせてみた。視界内にあまりいい被写体がなくて、M15でテスト。総ガイドエラーは1秒角前後。ただDECが少し暴れ気味か？&lt;br /&gt;
&lt;img src=&quot;images/Screenshot_20250911-221703.png&quot; alt=&quot;ライブスタック&quot; /&gt;
&amp;lt;br&amp;gt;
全体的には大成功と言えるでしょうか？&lt;/p&gt;
&lt;h1&gt;今後の予定&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;15cm反射+冷却カメラを搭載してテストしたい。ウェイトレスでslewできることは確認済み。&lt;/li&gt;
&lt;li&gt;しっかり長時間露出した場合の精度確認。&lt;/li&gt;
&lt;li&gt;PEC学習させたらどうなるか？（ハーモニック赤道儀ではPECはあまり有用ではないとは言われるが）&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀⑦：組み立て完了</title><link>https://stargazr.net/posts/2025/0405-diyharmeq-assembled/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0405-diyharmeq-assembled/</guid><pubDate>Sat, 05 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;組み立て完了&lt;/h1&gt;
&lt;p&gt;なんとか組みあがりました。多治見コネクタの極小はんだカップのはんだ付け難しすぎる。&lt;br /&gt;
&lt;img src=&quot;images/diy-harmonic-eq.webp&quot; alt=&quot;組立完了&quot; /&gt;
重量は赤経体・赤緯体それぞれ2.6kgくらいです。汎用のアルミフレームとブラケットで組んでるのでどうしても重量かさみますが、それでもSXD2に比べればだいぶ軽いですね。分割もできるし。&lt;/p&gt;
&lt;h2&gt;動作確認&lt;/h2&gt;
&lt;p&gt;動きました！
&amp;lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/QV8CSpVlzIU?si=PbUkTH-_TCKtelfM&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;p&gt;定格0.9Aのモーターに対して、現状DRIVER_IRUN=400、DRIVER_IGOTO=600ですがDC20Vだと2deg/sでslewできる。DC12Vだと脱調する感じ。&lt;br /&gt;
できれば3deg/sでslewできるようにしたいけど厳しいか。プラネタリギアボックスは5:1でもよかったかも。&lt;br /&gt;
いずれにせよOnStepの設定はまだまだ追い込まないといけないですね。&lt;/p&gt;
&lt;h2&gt;蓋とかOnStepホルダーとか&lt;/h2&gt;
&lt;p&gt;最近3Dプリンタ（Bambu Lab A1 mini）を買ったので、赤経体・赤緯体後部の蓋とかOnStep筐体のホルダーなんかは3Dプリントで作りました。&lt;br /&gt;
&lt;img src=&quot;images/backplate.webp&quot; alt=&quot;バックプレート&quot; /&gt;
図らずもOnStep筐体の長さがアルミフレームの長さにドンピシャで助かった…&lt;br /&gt;
赤緯体には一応ウェイトシャフトが取り付け可能。これはSUSのアルミフレームのアクセサリパーツで、本来は高さアジャスターとかを取り付けるためのフットベース。
::linkcard[https://www.monotaro.com/p/2173/8298/]{title=&quot;SFK-51A フットベース 4040 2S 1個 SUS(エスユーエス) 【通販モノタロウ】&quot; desc=&quot;&quot;}
真ん中にM12の穴が開いており、ここにAZ-GTiにも使えるM12Φ20のウェイトシャフトをねじ込むことで、Vixenのウェイトが使えます。&lt;/p&gt;
&lt;h1&gt;今後の予定&lt;/h1&gt;
&lt;p&gt;OnStep設定の追い込み。&lt;br /&gt;
ようやく春になったので、近いうちに実地テストに行きたいですね。&lt;/p&gt;
</content:encoded></item><item><title>Cloudflare Pagesのデプロイ終了後にエッジキャッシュをパージする</title><link>https://stargazr.net/posts/2025/0318-cf-purgecache-after-pages-deployed/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0318-cf-purgecache-after-pages-deployed/</guid><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;当ブログではCloudflareのエッジキャッシュTTLを次のように設定しています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;html（パスが/で終わる）: 1日&lt;/li&gt;
&lt;li&gt;画像やcss、jsなど: 14日&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;記事を追加したりコメントが投稿された時自動デプロイが走りますが、エッジキャッシュが残ったままだと更新内容が見えない可能性があります。
ですので、Pagesのデプロイ終了時にエッジキャッシュをパージしたい。
Pagesのプロジェクト設定にありそうなものですが、調べた限りではそんな機能はなさそう？不思議です。&lt;/p&gt;
&lt;p&gt;というわけでやり方がわかったのでその備忘録です。&lt;/p&gt;
&lt;h1&gt;ビルド後にエッジキャッシュパージ&lt;/h1&gt;
&lt;p&gt;Pagesのビルドコマンドに&amp;amp;&amp;amp;でチェーンしてCFのAPIを叩くスクリプトを呼べばよい。&lt;/p&gt;
&lt;h2&gt;scripts/cf-purge.js&lt;/h2&gt;
&lt;p&gt;&amp;lt;zone id&amp;gt;はCFのダッシュボードで調べる。&lt;br /&gt;
&amp;lt;API token&amp;gt;はCFのAPIトークン。必要な権限はゾーン-キャッシュパージ-パージ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const api =
  &apos;https://api.cloudflare.com/client/v4/zones/&amp;lt;zone id&amp;gt;/purge_cache&apos;
const body = JSON.stringify({ purge_everything: true })
const res = await fetch(api, {
  method: &apos;POST&apos;,
  headers: {
    &apos;Content-Type&apos;: &apos;application/json&apos;,
    Authorization: &apos;Bearer &amp;lt;API token&amp;gt;&apos;,
  },
  body: body,
})

res.ok
  ? console.log(&apos;Purged CF edge cache.\n&apos;)
  : console.error(&apos;Failed to purge CF edge cache.\n&apos;)

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;package.json&lt;/h2&gt;
&lt;p&gt;スクリプトを追記。&lt;br /&gt;
ターミナルからpnpm cf-purgeでキャッシュパージできるようになるのも地味に使えるかも。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;scripts&quot;: {
    &quot;cf-purge&quot;: &quot;node scripts/cf-purge.js&quot;,
  },
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Pagesのビルドコマンド変更&lt;/h2&gt;
&lt;p&gt;ビルドコマンドを変更する。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm build &amp;amp;&amp;amp; pnpm cf-purge
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでビルド終了時にエッジキャッシュがパージされるようになる。&lt;br /&gt;
だが正直Pagesの設定として公式に用意してほしい…
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;h1&gt;おまけ　&quot;デプロイ後&quot;にエッジキャッシュパージ&lt;/h1&gt;
&lt;p&gt;少し面倒だがGitHub Actionsを組み合わせれば一応可能。&lt;/p&gt;
&lt;h2&gt;.github/workflows/cf-purge.yml&lt;/h2&gt;
&lt;p&gt;CF Pagesのデプロイを待つアクションが公開されているので使わせてもらう。
::github{repo=&quot;WalshyDev/cf-pages-await&quot;}
レポジトリのActions secretsに&apos;CF_API_TOKEN&apos;を作成しCFのAPIトークンを入れておく。
&amp;lt;account ID&amp;gt;&amp;lt;zone id&amp;gt;はCFのダッシュボードで調べて入力。&amp;lt;project&amp;gt;はPagesのプロジェクト名。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;name: Purge CF Cache
on: 
  repository_dispatch:
    types: [cf-pages-deploy]
  
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      deployments: write
    steps:
    - name: Await CF Pages
      uses: WalshyDev/cf-pages-await@v1.3.1
      with:
        apiToken: ${{ secrets.CF_API_TOKEN  }}
        accountId: &apos;&amp;lt;account id&amp;gt;&apos;
        project: &apos;&amp;lt;project&amp;gt;&apos;
        githubToken: ${{ secrets.GITHUB_TOKEN }}
    - run: |
        curl -X POST &quot;https://api.cloudflare.com/client/v4/zones/&amp;lt;zone id&amp;gt;/purge_cache&quot; -H &quot;Authorization: Bearer &amp;lt;CF-API-TOKEN&amp;gt;&quot; -H &quot;Content-Type: application/json&quot; --data &apos;{&quot;purge_everything&quot;:true}&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとはcf-purge.jsと同じように、GitHub APIのhttps://api.github.com/repos/{owner}/{repo}/dispatches からcf-pages-deployイベントを発火させればよい。その方法は省略。&lt;/p&gt;
</content:encoded></item><item><title>AstroブログにCloudflare D1を利用したシンプルなコメント機能を付けた</title><link>https://stargazr.net/posts/2025/0316-astro-d1-comment-system/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0316-astro-d1-comment-system/</guid><pubDate>Sun, 16 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この度、当ブログをWordpress on 自宅鯖 through Cloudflare Tunnelから、Astro on Cloudflare Pagesに移行しました。&lt;br /&gt;
その際、AstroおよびテンプレートFuwariにコメント機能がなかったので、Cloudflare D1を利用したシンプルなコメント機能を作りました。&lt;br /&gt;
本記事はその備忘録です。&lt;/p&gt;
&lt;p&gt;:::caution
筆者は素人です。したがって間違った点が多々あると思いますので、お気を付けください。なお具体的な修正コメント歓迎いたします。
:::&lt;/p&gt;
&lt;h1&gt;はじめに&lt;/h1&gt;
&lt;p&gt;Astroブログ（および静的ブログ）にコメント機能を付けるための既存のソリューションについて検討しました。
代表的なものにはDisqusやgiscusなどがあると思いますが、それぞれ以下の理由で採用しませんでした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disqus：ごちゃついた見た目が嫌い。採用サイトを見たことがあるが使いづらい。&lt;/li&gt;
&lt;li&gt;giscus：Githubログイン必須で匿名コメント機能がない。特に日本ではわざわざログインしてまでコメントしようという人はまずいないと思われる。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;というわけで目的に合ったものがなかったため、自分で作ることにしました。&lt;br /&gt;
せっかくサイトをCloudflare Pagesでのホストにしたので、コメント機能もサーバーレスで構築したいところ。&lt;br /&gt;
CloudflareにはD1というサーバーレスDBがあるので、Cloudflare Workersと組み合わせてうまいことすれば作れそうと思いました。&lt;/p&gt;
&lt;h1&gt;システムの概要&lt;/h1&gt;
&lt;p&gt;コメントシステムはAstroから独立したAPIとします。&lt;br /&gt;
これによりサイトがCloudflare以外のサービスでホストされていたとしても利用できます。&lt;/p&gt;
&lt;p&gt;都合がよいことにCloudflareのチュートリアルにD1を使ってコメントAPIを作るというものがあるので、これを改変して利用します。&lt;/p&gt;
&lt;p&gt;::linkcard[https://developers.cloudflare.com/d1/tutorials/build-a-comments-api/]{title=&quot;Build a Comments API · Cloudflare D1 docs&quot; desc=&quot;In this tutorial, you will learn how to use D1 to add comments to a static blog site. To do this, you will construct a new D1 database, and build a JSON API that allows the creation and retrieval of c&quot;}&lt;/p&gt;
&lt;p&gt;Astroブログは、ビルド時にAPIからコメントを取得して、コメントもページの一部として静的にページ生成します。&lt;/p&gt;
&lt;h2&gt;動作の流れ&lt;/h2&gt;
&lt;p&gt;コメントが投稿された際の動作は以下のような流れになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;AstroブログのフォームからコメントAPIにjsonでPOST&lt;/li&gt;
&lt;li&gt;コメントAPIは受信内容をバリデーションしてDBに格納、その後Astroブログのデプロイフックを叩く&lt;/li&gt;
&lt;li&gt;AstroブログはコメントAPIからGETでコメントを取得、コメントをページの一部として静的にビルド
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;コメントAPIの構築&lt;/h1&gt;
&lt;p&gt;テーブルの構造を変更。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DROP TABLE IF EXISTS comments;
CREATE TABLE IF NOT EXISTS comments (
  id integer PRIMARY KEY AUTOINCREMENT,
  author text NOT NULL DEFAULT &apos;Anonymous&apos;,
  body text NOT NULL,
  post_slug text NOT NULL,
  post_date text NOT NULL DEFAULT CURRENT_DATE
);
CREATE INDEX idx_comments_post_slug ON comments (post_slug);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;コメント取得はslugごとではなく、全件一括でJSONを返すようにします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app.get(&apos;/api/&amp;lt;任意のパス：コメント取得用&amp;gt;&apos;, async (c) =&amp;gt; {
	const { results } = await c.env.DB.prepare(
		`
      select * from comments
    `
	).all();
	return c.json(results);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;投稿時もAPIエンドポイントのパスにslugを含めるのをやめ、jsonの中にpost_slugを含めてPOSTにするように変更。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app.post(&apos;/api/&amp;lt;任意のパス：コメント投稿用&amp;gt;&apos;&amp;gt;, async (c) =&amp;gt; {
	var { author, body, slug } = await c.req.json();

	/*
    バリデーションとか実施
    */

	// 改行を&amp;lt;br&amp;gt;に置換しておく
	body = body.replace(/(?:\r\n|\r|\n)/g, &apos;&amp;lt;br&amp;gt;&apos;);

	const { success } = await c.env.DB.prepare(
		`
      insert into comments (author, body, post_slug) values (?, ?, ?)
    `
	)
    .bind(author, body, slug)
    .run();

	// Cloudflare Pages用
    // Deploy Hookを叩く
	await fetch(&apos;&amp;lt;Deploy HookのURL&amp;gt;&apos;, {
		method: &apos;POST&apos;,
	});

	if (success) {
		c.status(201);
		return c.text(&apos;Created&apos;);
	} else {
		c.status(500);
		return c.text(&apos;Something went wrong&apos;);
	}
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これでコメントAPIの方はひとまず完成。&lt;/p&gt;
&lt;h1&gt;Astroコードの改変&lt;/h1&gt;
&lt;p&gt;まずコメント取得用のライブラリを作成。&lt;br /&gt;
記事ごとにfetchしてるとビルド時間に悪影響があることが容易に予想できるため、一括で取得した後componentからの要求に応じてslugでフィルターして返す。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const response = await fetch(
  &apos;&amp;lt;コメント取得用APIエンドポイントのURLまたはパス&amp;gt;&apos;,
)
if (!response.ok) throw new Error(&apos;[Comments] Comments cannot be fetched.&apos;)
const comments = await response.json()
console.log(`[Comments] Fetched ${Object.keys(comments).length} comments.`)

export type comment = {
  id: number
  author: string
  body: string
  post_slug: string
  post_date: string
}

export function getComments(slug: string): comment[] {
  return comments.filter((comment: comment) =&amp;gt; {
    return comment.post_slug === slug
  })
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次にコメントのAstroコンポーネントを作成。&lt;br /&gt;
コメントはサニタイズ（brのみ許可）後URLをリンクに変換しています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
import { getComments } from &apos;@/library/comments&apos;
import type { comment } from &apos;@/library/comments&apos;
import sanitizeHTML from &apos;sanitize-html&apos;
const { slug } = Astro.props
const comments = getComments(slug)
const hasComment = comments.length &amp;gt; 0

function replaceURLWithLink(text: string) {
  const urlRegex =
    /https?:\/\/[-_.!~*\&apos;()a-zA-Z0-9;\/?:\@&amp;amp;=+\$,%#\u3000-\u30FE\u4E00-\u9FA0\uFF01-\uFFE3]+/g
  return text.replace(
    urlRegex,
    url =&amp;gt; `&amp;lt;a href=&quot;${url}&quot; target=&quot;_blank&quot;&amp;gt;${url}&amp;lt;/a&amp;gt;`,
  )
}
---

&amp;lt;div id=&quot;comments_container&quot;&amp;gt;
  &amp;lt;div id=&quot;comment_title&quot;&amp;gt;
    Comments
  &amp;lt;/div&amp;gt;
  {
    hasComment &amp;amp;&amp;amp;
      comments.map(
        (comment: comment) =&amp;gt; (
          &amp;lt;div id=&quot;comment&quot;&amp;gt;
            &amp;lt;div id=&quot;comment_header&quot;&amp;gt;
              &amp;lt;div id=&quot;comment_author&quot;&amp;gt;
                {comment.author}
              &amp;lt;/div&amp;gt;
              &amp;lt;div id=&quot;comment_date&quot;&amp;gt;
                {comment.post_date}
              &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div
              id=&quot;comment_body&quot;
              set:html={replaceURLWithLink(sanitizeHTML(comment.body, { allowedTags: [&quot;br&quot;], allowedAttributes: false }))}
            &amp;gt;&amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        ),
      )
  }
  {
    !hasComment &amp;amp;&amp;amp; (
      &amp;lt;p&amp;gt;
        No comments yet.
      &amp;lt;/p&amp;gt;
    )
  }

  &amp;lt;form id=&quot;comment_form&quot; action=&quot;&amp;lt;投稿用APIエンドポイントのURLまたはパス&amp;gt;&quot;&amp;gt;
    &amp;lt;input
      type=&quot;text&quot;
      name=&quot;author&quot;
      placeholder=&quot;Name&quot;
      maxlength=&quot;20&quot;
      /&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;textarea
      name=&quot;body&quot;
      placeholder=&quot;Message&quot;
      maxlength=&quot;1000&quot;
      required
    &amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;input type=&quot;hidden&quot; name=&quot;slug&quot; value={slug} /&amp;gt;
    &amp;lt;button id=&quot;submit&quot; type=&quot;button&quot;&amp;gt; Submit &amp;lt;/button&amp;gt;
  &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
  const form = document.forms[0];
  const button = document.getElementById(&quot;submit&quot;) as HTMLInputElement;

  button?.addEventListener(&quot;click&quot;, async function () {
    button.disabled = true;
    const formData = new FormData(form);
    if (formData.get(&quot;body&quot;) === &quot;&quot;) {
      button.disabled = false;
      return;
    }

    const data = JSON.stringify(Object.fromEntries(formData));

    const res = await fetch(form.action, {
      method: &quot;POST&quot;,
      headers: {
        &quot;Content-Type&quot;: &quot;application/json&quot;,
      },
      body: data,
    });

    if (res.ok) {
      form.body.value = &quot;&quot;;
    }
    button.disabled = false;
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;あとは、[...slug].astroから作成したコンポーネントを呼び出せばOK。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;D1Comments slug={entry.slug} /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一応これで超シンプルなコメント機能が実装できました。&lt;br /&gt;
ただこのままだとAPIエンドポイントが脆弱なので、適宜保護する必要があります。
例えばCloudflare Turnstileのpre-clearanceモードで投稿時のfetch()リクエストに対してマネージドチャレンジをかけられるようにする、など。&lt;/p&gt;
&lt;p&gt;::linkcard[https://blog.cloudflare.com/integrating-turnstile-with-the-cloudflare-waf-to-challenge-fetch-requests/]{title=&quot;Integrating Turnstile with the Cloudflare WAF to challenge fetch requests&quot; desc=&quot;By editing or creating a new Turnstile widget with “Pre-Clearance” enabled, Cloudflare customers can now use Turnstile to issue a challenge when a page’s HTML loads, and enforce that all valid respons&quot;}&lt;/p&gt;
&lt;p&gt;なおこの方法の場合、追加するコードのうち1つ目のscriptタグにはis:inlineを指定しないとうまく動作しませんでした。&lt;/p&gt;
&lt;p&gt;また、/api/*にマネージドチャレンジをかけるとビルド時のコメントフェッチも失敗するので、WAFのカスタムルールでコメントフェッチ時はマネージドチャレンジをスキップするような設定も必要かもです。
たとえば任意のリクエストヘッダとかクッキーで認証キーを指定するとか。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀⑥：フランジプレート完成</title><link>https://stargazr.net/posts/2025/0303-diyharmeq-flangeplate/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0303-diyharmeq-flangeplate/</guid><pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;JLCCNCで注文したアルミ製フランジプレートが届きました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20250303_111924870-1024x784.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;両方8mm厚のアルミA6061材です。表面処理はマットブラックアルマイト仕様にしてみました。アリミゾアダプタの方は、M8穴2か所をタップ立てしてもらいました。価格はハーモニックホルダー（左）のほうが2個で$48.82、アリミゾアダプタ（右）のほうが2個で$26.02、送料が$12.92で、合計が日本円で￥13,926でした。この価格でワンオフのアルミ削り出しパーツが作れるということに驚きます。ちなみに汚れっぽいのが見えますが、私が触ったときについたものです。&lt;/p&gt;
&lt;p&gt;OpenSCADで面取り形状にする方法など調べたりもしましたが、結局のところ基本的な造形をOpenSCADでやった後、FreeCADのOpenSCADワークベンチで読み込み、FreeCAD上で面取りしたり図面に起こしたりすることにしました。BOSL2のライブラリを使った状態だとFreeCADでうまく読み込めなかったので。今回初めて3DCADを触りましたが、これも楽しいですね。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/harmonic_holder_v6.1-1024x720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ハーモニックドライブをはめるΦ48の窪みと、プラネタリギアボックスをはめるΦ25の穴だけ±0.1mmの公差を入れています。JLCCNCだと、指定できる一番厳しい公差が±0.05mmまでです。±0.05mmにするとかなり高くなるが±0.1mmだとあまり変わらなかったので、穴寸法を+0.1mmしたうえで±0.1mmの公差を入れる感じにしました。&lt;/p&gt;
&lt;p&gt;アルミフレームとボルト類の準備が終わってないのでまだ組めませんが、とりあえずハーモニックドライブやギアボックスのはまり具合だけ確かめてみたところ、いい感じです。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀⑤：OnStepX完成</title><link>https://stargazr.net/posts/2025/0227-diyharmeq-onstepx/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0227-diyharmeq-onstepx/</guid><pubDate>Thu, 27 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OnStepXが完成しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;最小限の機能でよくてコンパクトにしたかったので、基板は&lt;a href=&quot;https://onstep.groups.io/g/main/wiki/8768&quot;&gt;MiniPCB2&lt;/a&gt;。ステッパードライバーはTMC5160。ファームウェアはOnStepX v10.24c。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20250227_121157369.MP_-300x225.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;とりあえず無負荷ではSLEW_RATE_BASE_DESIRED 3.0で脱調なし。モーターは定格0.9Aで400steps/revの&lt;a href=&quot;https://www.omc-stepperonline.com/nema-17-bipolar-0-9deg-36ncm-51oz-in-0-9a-5-4v-42x42x40mm-4-wires-17hm15-0904s&quot;&gt;17HM15-0904S&lt;/a&gt;、プラネタリギアボックスは減速比10:1の&lt;a href=&quot;https://www.omc-stepperonline.com/eg-series-planetary-gearbox-gear-ratio-10-1-backlash-15-arc-min-for-nema-17-stepper-motor-eg17-g10&quot;&gt;EG17-G10&lt;/a&gt;。このギアボックスはお高いだけあって極めてスムーズで静か。&lt;/p&gt;
&lt;p&gt;オリジナルのMiniPCB2からのカスタマイズ点は2点。&lt;br /&gt;
①WeMos D1 miniの代わりにD1 miniサイズのESP32-WROOM-32Eを取付&lt;br /&gt;
②32KBのFRAMモジュールを追加実装&lt;/p&gt;
&lt;p&gt;①のESP32について、Amazonなどで「D1 mini ESP32」を検索すると、ピンヘッダが2列でD1 miniのフォームファクタよりやや大きいやつが出てきます。しかし、OnStepの公式Wikiによると「MiniPCB2はWeMosソケット周りのスペースに余裕がないのでESP32は取付できません。」と書いてあります（試してはいない）。私はAndroidユーザーかつ現地でのPCとの接続でもWiFiよりBluetoothの方が使い勝手がいいので、このD1 miniソケットにはBluetooth SPP用のチップを付けたいのです。&lt;/p&gt;
&lt;p&gt;一応、秋月の&lt;a href=&quot;https://akizukidenshi.com/catalog/g/g108690/&quot;&gt;RN-42ピッチ変換モジュール&lt;/a&gt;は工夫すれば付けられなくもなさそうでしたが、今更Bluetooth 2.1はちょっとな…（しかも高いし）ということでネットサーフィンの結果、「ESP32 in true D1 Mini form factor」を謳う&lt;a href=&quot;https://oshwlab.com/liket73/esp32-d1-mini&quot;&gt;パブリックドメイン基板&lt;/a&gt;を発見、これを使ってESP32を取り付けました。JLCPCBAで裏面の表面実装部品の実装込みで注文できて助かります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20250131_141100538-300x216.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;USBシリアルは載ってないので、5ピンピンヘッダからの書き込みになります。なおこの基板の3.3VレギュレータはLDOタイプではないので、MiniPCB2のD5はバイパスしないと（多分）電源電圧が足りない。&lt;/p&gt;
&lt;p&gt;あとは以下のプログラムを書き込んでD1 miniのソケットに刺せばBluetooth SPP対応OK、後日WiFiにしたくなった時もSmart Web Serverを書き込めば対応可能。&lt;br /&gt;
ちなみに以下のコードはSerialToSerialBTのサンプルコードをちょっと書き換えただけ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &quot;BluetoothSerial.h&quot;

String device_name = &quot;OnStepX-HARMONIC&quot;;

// Check if Bluetooth is available
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

// Check Serial Port Profile
#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Port Profile for Bluetooth is not available or not enabled. It is only available for the ESP32 chip.
#endif

BluetoothSerial SerialBT;

void setup() {
  Serial1.begin(9600, SERIAL_8N1, 16, 4);
  SerialBT.begin(device_name);  //Bluetooth device name
}

void loop() {
  if (Serial1.available()) {
    SerialBT.write(Serial1.read());
  }
  if (SerialBT.available()) {
    Serial1.write(SerialBT.read());
  }
  delay(20);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;②のFRAMについては興味本位。Teensy 4.0はエミュレートされたEEPROMの容量が小さく、PECバッファの容量を増やそうとしたときにエラーが出るという&lt;a href=&quot;https://onstep.groups.io/g/main/topic/104882269#msg57931&quot;&gt;情報&lt;/a&gt;があったのでその対策でもあります。使ったのはたぶんAdafruit用であろうと思われるI2C 32KB FRAM MB85RC256Vモジュール。&lt;a href=&quot;https://ja.aliexpress.com/item/33013102747.html&quot;&gt;アリエクで600円くらい&lt;/a&gt;。パスコンとSCL・SDAのプルアップ抵抗も載ってるので使い勝手がよいです。別に32KBもいらないのですが、8KBのMB85RC64モジュールは売ってませんでした。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stargazr.net/wp-content/uploads/2025/02/HTB1LtcLUwHqK1RjSZFkq6x.WFXaT_.jpg&quot;&gt;&lt;img src=&quot;images/HTB1LtcLUwHqK1RjSZFkq6x.WFXaT_-300x212.jpg&quot; alt=&quot;I2CFRAM&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;そのままだとデカいので、A1とA2の間で基板をカット。あとFRAMチップの右側4端子（上からVSS (GND)、A2、A1、A0）およびピンヘッダ部分のGNDとWPを短絡。これでVDD、SCL、SDA以外がすべてGNDに落ちます（データシートによれば内部プルダウンがあるみたいなので、この短絡加工は必要ないかもしれません）。MiniPCB2の右下、本来はPECセンサーコネクタを取り付けるスペースがありますが、ここには3.3Vも来てて上記基板カットしたモジュールがぴったり収まります（VCC～SDAまでの5ピンにピンヘッダを実装）。あとはTeensy 4.0裏面のGPIO24（SCL）、25（SDA）にワイヤーをはんだ付けして引き出し、モジュールのSCL、SDAと接続します。&lt;/p&gt;
&lt;p&gt;OnStepX側では、Config.hに以下を追記。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#define HAL_Wire Wire2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;またNV_DRIVERをNV_DEFAULTからNV_MB85RC256に変更。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#define NV_DRIVER NV_MB85RC256
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで問題なくFRAMを認識しました。なお初回起動時はFRAM初期化のためかなり時間がかかります。Extended.config.hでDEBUGをVERBOSEに設定するとシリアルモニタで経過状況が確認できます。&lt;/p&gt;
&lt;p&gt;私はFRAMにしましたが、同じI2CバスにZS-042モジュールを接続すれば、RTC追加とEEPROMの拡張が両方できるみたいですね。&lt;/p&gt;
&lt;p&gt;その他、MiniPCB2製作にあたっては、DCジャックが鬼門でした…&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;DCジャックの取付パターンは丸穴3か所のJP1なんですが、この丸穴が絶妙に小さくて一般的な基板取付用DCジャック（例えばマル信無線電機の&lt;a href=&quot;https://akizukidenshi.com/catalog/g/g106568/&quot;&gt;MJ-179PH&lt;/a&gt;とか）が刺さりません。秋月で売ってるDCジャックで取り付け可能なのは&lt;a href=&quot;https://akizukidenshi.com/catalog/g/g109408/&quot;&gt;これ&lt;/a&gt;です。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀④：フレーム加工</title><link>https://stargazr.net/posts/2025/0221-diyharmeq-procframe/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0221-diyharmeq-procframe/</guid><pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;アルミフレームの加工を進めています。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;加工といっても大部分は端面にM5タップを立てるだけですが…フレーム1本につき穴が4か所、これが8本あるので32個の穴にタップを立てる必要があります。ハンドタップでやってるのでまあまあ大変。&lt;/p&gt;
&lt;p&gt;当初は8本すべて同一の4面溝フレームを使うつもりだったのですが、底面だけ3面溝のフレーム（SF-20･40･1F）に変更することにしました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image-1-150x150.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;こういう1面だけ溝がないフレームです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image-2-290x300.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;寸法こんな感じなんですが、この真ん中の中空部分の幅12mmというのが実に都合よくて、アリガタプレートとモーターの接続端子を固定できそうなんです。&lt;/p&gt;
&lt;p&gt;まずアリガタの固定について、真ん中にM6の長孔が空けてあるアリガタが多いです。そこで使うのが、&lt;a href=&quot;https://www.monotaro.com/p/0840/7595/&quot;&gt;M6の四角ナット&lt;/a&gt;。私が今使っているアルミフレームはSUS製のものなんですが、この四角ナットは別のメーカーのアルミフレーム用のものみたいです。コイツの幅が10mmなので、12mm幅の部分に入れてやればナットが空回りせず外側からM6でアリガタを固定できるというわけです。&lt;/p&gt;
&lt;p&gt;次にモーターの接続端子には多治見無線のワンタッチコネクタEPRC05を調達しました。そのSF型レセプタクル&lt;a href=&quot;https://www.monotaro.com/p/4508/2863/&quot;&gt;EPRC05-RB5F&lt;/a&gt;が差込部径9mmなので、12mm幅の部分に取り付けできそうです。&lt;/p&gt;
&lt;p&gt;問題はこの3面溝フレーム、モノタロウで取り扱いがなかったんですよね…しかたないので&lt;a href=&quot;https://www.amazon.co.jp/dp/B0C9CHCSY6&quot;&gt;Amazon&lt;/a&gt;で200mmのを入手して手ノコで切断を試みたんですが、まっすぐ切るのが難しすぎる！1本だけ奇跡的に成功しましたが2本は全くダメ、1本もビミョーな仕上がりになってしまいました。&lt;/p&gt;
&lt;p&gt;そこで、ダメ元でモノタロウに取り扱い希望出してみたら、なんと数日で&lt;a href=&quot;https://www.monotaro.com/g/07537181/&quot;&gt;定尺品と10mm単位カット品&lt;/a&gt;を取り扱いしてくれることになりました！モノタロウ神。MONOTARO IS GOD. 早速買います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20250224_035515864-300x173.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;切るのに失敗したフレームをテスト加工。アリエクで調達した100mmのアリガタでちょうどいい感じ。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀③：フランジプレートの設計</title><link>https://stargazr.net/posts/2025/0212-diyharmeq-designflangeplate/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0212-diyharmeq-designflangeplate/</guid><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;OpenSCADでフランジプレートの設計中…&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;だいたい設計が固まってきました。8mm厚のアルミ製になる予定です。&lt;/p&gt;
&lt;p&gt;OpenSCADでchamfer（面取り）形状にする方法に手こずりましたが、&lt;a href=&quot;https://github.com/BelfrySCAD/BOSL2&quot;&gt;BOSL2&lt;/a&gt;というライブラリでうまくできることがわかりました。FreeCADに取り込むときにうまくいかないので、ChamferはFreeCAD上でやることにしてやめました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2025-02-12-122715-1024x674.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;中心部の4つ穴がプラネタリギアボックスの固定用、外周4辺に2つずつある穴がアルミフレームに固定するためのM5ボルト穴、その合間に60度間隔で6つ空いている穴がハーモニックドライブの固定用M4ボルト穴。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2025-02-12-122656-1024x784.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;裏面はこんな感じ。今のところ、ハーモニックドライブの固定ボルトにはそこそこトルクを掛けたいなと思っていて、裏面にM4の鉄製四角ナットをはめ込めるように作ってみています。アルミのネジ穴の強度をあまり信用できないと思っているためです…&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀②：設計</title><link>https://stargazr.net/posts/2025/0111-diyharmeq-design/</link><guid isPermaLink="true">https://stargazr.net/posts/2025/0111-diyharmeq-design/</guid><pubDate>Sat, 11 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;DIYハーモニック赤道儀について、年末年始の時間を使って設計を考えていました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;15cmニュートンを載せたいので、筐体の強度もそこそこ必要、できれば金属で筐体を作りたいところ。&lt;/p&gt;
&lt;p&gt;いろいろ作例の情報収集をしていたところ、工業用アルミフレームを使った作例を見つけました。この作例では、20角のアルミフレーム（20x20）と3Dプリントパーツで構成されています。&lt;/p&gt;
&lt;p&gt;::github{repo=polvinc/DHEM}&lt;/p&gt;
&lt;p&gt;先の作例ではアルミフレームは全て20x20のものでしたが、20x40のフレームに統一すればもっとシンプルに、少ない部品点数で作れそうな気がします。使う予定のNEMA17モーターは42x42mmなので、20x40のフレームを四方にピッタリ並べてしまうと内部空間が40x40で収まりませんが、アルミフラットバーとかで作った5mmくらいのスペーサーを挟んで固定するようにすれば、内部空間50x50でちょうどよい感じにできそう。&lt;/p&gt;
&lt;p&gt;この方針はよさそうです。何しろアルミフレームは安い。例えば、モノタロウで売っているSUS製の20x40アルミフレーム（なんと10mm刻みでカット済みのものが売っている！）は、L=120mmで1本154円（税別）、L=150mmで1本206円（税別）。赤経体と赤緯体を分割式にするとして、片方に4本ずつ、計8本買ったとしても、合計2,000円もかかりません。プラスして必要なアングルブラケットやTナット（50個入り1,870円を2セットで十分足りる）などを含めても、余裕で1万円未満に収まりますね。しかも側面の溝を使って無加工でいろいろ（アリガタとか）固定できるという利点も。&lt;/p&gt;
&lt;p&gt;ただし、3DプリントやCNCでピッタリの筐体を作るのに比べるとフレームの厚みがあるのでやや嵩張ります。とはいっても、1辺が20x4+5x2=90mm、かつ四隅はフレームがないので十分コンパクト。&lt;/p&gt;
&lt;p&gt;あとはモーターとハーモニックドライブを固定するフランジプレートと、出力面にタカハシ規格のアリミゾを取り付けるためのアダプタが必要です。&lt;/p&gt;
&lt;p&gt;OpenSCADでおおざっぱに作ってみたイメージ図がこんな感じ。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/eqmount-1024x697.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;端子類はバックプレートに取り付け。プラネタリギアードステッパーの長さが95mmくらいなので、フレームの長さは赤緯体は120mmくらい、赤経体は基板内蔵するなら+40～50mmくらい？&lt;/p&gt;
&lt;p&gt;フランジプレートとフレーム側面のアングルブラケットでの固定で強度は十分と思われるので、端子類が付くバックプレートは3Dプリント製でよさそうですね。&lt;/p&gt;
&lt;p&gt;高度ウェッジは、アルミフレームの側面にアリガタをつければ手持ちのスカイメモS微動雲台のコピー品っぽいやつを流用できます。&lt;/p&gt;
&lt;p&gt;こうして考えてみると、フランジプレートさえ作れればほぼゴールですね。JLCCNCあたりでアルミをCNCフライス加工で作ってもらうか？ほかに必要な加工はフレーム端面のタップ穴とフラットバーの穴あけ程度。これは自分でできますね。&lt;/p&gt;
&lt;p&gt;2段か3段のOnStep基板を自作すれば、赤経体に内蔵することもできそう…&lt;br /&gt;
内側の溝を使ってウェイトシャフト取付用の板付きナットとかも取付できそう…&lt;/p&gt;
&lt;p&gt;もう少し考えてみます。&lt;/p&gt;
</content:encoded></item><item><title>DIYハーモニック赤道儀①：中国製ハーモニックドライブ</title><link>https://stargazr.net/posts/2024/1229-diyharmeq-harmonicdrive/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1229-diyharmeq-harmonicdrive/</guid><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この度DIYハーモニックドライブ赤道儀のプロジェクトを始めました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;年の瀬に中国から謎の荷物が着弾…&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/ZXS17-1024x339.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;グリスですごいことになってますが…&lt;/p&gt;
&lt;p&gt;こいつは中国製の&lt;a href=&quot;https://s.click.aliexpress.com/e/_oFSgUZh&quot;&gt;ZXS17&lt;/a&gt;というカップタイプのハーモニックドライブ（減速比1:100）です。
::linkcard[https://s.click.aliexpress.com/e/_oFSgUZh]{title=&quot;Nema17 23ステップ4060 80mm用ヒューマノイドロボットアーム,カップタイプのフランジプレート付きハーモニックドライブ,サーボモーター - AliExpress 13&quot; desc=&quot;Smarter Shopping, Better Living! Aliexpress.com&quot;}&lt;/p&gt;
&lt;p&gt;冬の間に機材が生えてくるというのはこの界隈あるあるらしいですが、&lt;a href=&quot;https://mr-deep-addicted.com/&quot;&gt;KENさんのブログ&lt;/a&gt;に触発されていろいろ情報収集していたところ、ハーモニックドライブ+プラネタリギアードステッパーの組み合わせなら意外と簡単に作れちゃいそうじゃね？となり、気づいたらポチっていました。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/ZXS17-1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;アリエクの商品ページより引用。各種寸法はHDS社製のCSF-17-100-2UHと互換性があるようです。商品種類は「ZXS17 For 40mm Servo」を選択。ウェーブジェネレータのインプットシャフトが、For 42mm StepだとΦ5mmキー無し、For 40mm ServoだとΦ8mmキー有りになる様子。&lt;/p&gt;
&lt;p&gt;送料無料で割引が効いて2個で￥26,961、1個￥13,481と超激安でした。使い物になるか不安ですが、これを使った&lt;a href=&quot;https://stargazerslounge.com/topic/423590-blue-my-diy-harmonic-equatorial-mount-%F0%9F%9A%80%F0%9F%8C%8C/&quot;&gt;作例があった&lt;/a&gt;ので買ってみました。&lt;/p&gt;
&lt;p&gt;ウェーブジェネレータのインプットシャフト穴の仕様がいくつかあって、今後StepperOnlineの8mmキー有プラネタリギアボックスを使おうと思っているので、届いたブツの穴径が注文通り8mmキー有シャフト用かだけ確認しておきました。&lt;/p&gt;
&lt;p&gt;ステッパーモーターを回せないと話が始まらないので、まずはOnStepXコントローラから製作予定。&lt;/p&gt;
</content:encoded></item><item><title>AZ-GTi改造②：サブアリミゾ装着</title><link>https://stargazr.net/posts/2024/1124-azgti-mod-subdovetail/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1124-azgti-mod-subdovetail/</guid><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ネジが届いたのでM8と1/4&quot;のネジ穴を使ってガイド鏡用のアリミゾを装着しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://stargazr.net/equipment/260/&quot;&gt;前回の改造（AZ-GTiアリミゾ交換）はこちら。&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20241124_034005883-1024x914.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ホームセンターで買ってきた5mm厚のゴム板で段差を解消して取り付け。&lt;/p&gt;
&lt;p&gt;ファインダー用だと思い込んで買ったのにノーマルサイズのアリミゾでした。なんかでかいなとは思ってましたが…取り付けるときになって初めて気づきました。ちなみにこれは1200円くらい。&lt;/p&gt;
&lt;p&gt;というわけでうちのAZ-GTiは謎のダブルアリミゾ仕様になりました。&lt;/p&gt;
&lt;p&gt;まあファインダーアリミゾを付けたアリガタをかませばファインダー規格の鏡筒も載せられるのでよしとしましょう…&lt;/p&gt;
</content:encoded></item><item><title>AZ-GTi改造：アリミゾ交換</title><link>https://stargazr.net/posts/2024/1121-azgti-mod-dovetail/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1121-azgti-mod-dovetail/</guid><pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AZ-GTiのアリミゾをアリエクで買ったキットで交換しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;アリエクの独身の日セールでAZ-GTiのアリミゾ交換キットをゲットしました。価格は送料込み3600円くらいでした。激安。&lt;/p&gt;
&lt;p&gt;早速交換後の画像を。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20241117_025714221-827x1024.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;中華品質なのでバリ・傷は多少ありましたが、作りはまあ悪くない感じです。ちなみに上から落とし込みはできないタイプ。&lt;/p&gt;
&lt;p&gt;一応リンクはこちらですが、同じものが届くとは限らないので注意。&lt;/p&gt;
&lt;p&gt;::linkcard[https://ja.aliexpress.com/item/1005007192009386.html?src=ibdm_d03p0558e02r02&amp;amp;sk=&amp;amp;aff_platform=&amp;amp;aff_trace_key=&amp;amp;af=&amp;amp;cv=&amp;amp;cn=&amp;amp;dp=&amp;amp;aff_short_key=]{title=&quot;Sky-Watcher AZ-GTI 赤道ダブテール溝修正ディスク Xinda AZ-GTI セオドライト非破壊クランプダブテール溝 - AliExpress 1420&quot; desc=&quot;Smarter Shopping, Better Living! Aliexpress.com&quot;}&lt;/p&gt;
&lt;p&gt;Celestron Telescope And Accessories Storeというショップですが、セレストロンの公式セラーなのでしょうか？&lt;/p&gt;
&lt;p&gt;アリエクではこれのほかにも回転ベースの外周部が波型のタイプも売ってましたが、コイツを選んだのには理由があります。商品画像のアリミゾ金具の側面にネジ穴が開いているのが載っていて、この穴を使っていろいろ悪さができそうだと思ったからです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20241117_025811066-843x1024.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;商品ページには製品寸法とか一切書いてないので届いてみるまでわかりませんでしたが、小さいほうが1/4インチ、大きいほうがM8でした。謎の組み合わせです。&lt;/p&gt;
&lt;p&gt;とりあえずガイド鏡用のファインダー規格アリミゾでも取り付けてみるつもりです。&lt;/p&gt;
</content:encoded></item><item><title>M42電視観望 2024-11-10</title><link>https://stargazr.net/posts/2024/1110-m42/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1110-m42/</guid><pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SV165 40mmでM42の電視観望にトライ。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;テストでROI設定してみたが、せっかく1時間も撮るなら後で画像処理することも考えてROIなしで撮ればよかったか…&lt;/p&gt;
&lt;p&gt;Sharpcapのダーク補正も有効にしてみたが、ホットピクセルが消えてなくて暴れている。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/Stack_240frames_3600s.png&quot; alt=&quot;&quot; /&gt;
Telescope: SVBONY SV165 40mm fl170mm/Filter: QBP3/Camera: ASI533MC/Gain200/240x15s&lt;/p&gt;
&lt;p&gt;SharpcapでのASIカメラのオフセット設定が謎だったが、Brightnessがオフセットらしいということで調整してみた。以前の撮影では1になっていておもっくそダークのヒストグラムの山がクリップしてた。&lt;/p&gt;
&lt;p&gt;もうちょっとまともな鏡筒が欲しくてEVOGUIDE 50EDIIポチりましたが、納期が12月中旬以降になるみたいなので、当分あおずけですね…&lt;/p&gt;
</content:encoded></item><item><title>AZ-GTiはPlate solve &amp; Syncだけでアライメントできるのか</title><link>https://stargazr.net/posts/2024/1026-azgti-alignment/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1026-azgti-alignment/</guid><pubDate>Sat, 26 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SharpcapのPlate solve機能を使って、アライメント星の選択やセンタリングをせずに、指定座標にSlew→Plate solve &amp;amp; SyncだけでAZ-GTiのアライメントは取れるのかを試しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;AZ-GTiでのPlate solveを使ったアライメント方法としては、以下の手順で行われている場合が多いようです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;SynscanアプリからNスターアライメントを実行&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SharpcapのPlate solve機能（Offset the mounts position to center the target：マウント位置をオフセットして、天体を中央に配置する）で目標天体を写野中心に捉える&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Synscanアプリでアライメント完了を押し、次のアライメント星へ&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これでアライメントできるのですが、この手順には次のような不満点があります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;視界が限られたベランダからの観測では、特に3スターアライメントなどではアライメント星が見える範囲にとれない場合がある。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;観望天体導入後の追尾精度向上のため、アライメント後はSharpcapのPlate solve設定は「Sync Mount and Re-center target」で使いたい。アライメント後にオプションを切り替えるのが面倒。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;上記2のセンタリング手順が省略できればもっと短時間で終わるのに…&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Plate solve &amp;amp; Syncでアライメントが取れるなら、これら不満点がすべて解消します。&lt;/p&gt;
&lt;p&gt;Plate solve &amp;amp; SyncによるAZ-GTiのアライメントの情報を探しましたが、以外とネットに情報がない？&lt;/p&gt;
&lt;p&gt;ですがSynscanの更新履歴を見ると、2023-09-02のv2.4.5に以下のような記述があります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;• Replaced &quot;Align with Sync&quot; page with &quot;Sync samples&quot; page.
• Multi-star alignment, where performing any of the following adds a sync sample:
  • Using one of the alignment methods from the Alignment page
  • Centering on a celestial object at the prompt after any catalog object GOTO
  • Receiving a `SyncTo` command from ASCOM with a plate-solving software
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;実際、Nスターアライメントを実行した場合、SynscanアプリのSync samplesにその情報が追加されます。この書き方を見ると、Synscanアプリのアライメントページからどれかのアライメント方法を実行するのと、ASCOM経由でSyncToするのは同じであるように読み取れます。&lt;/p&gt;
&lt;p&gt;そして2023-09-19のv2.4.8から、Sharpcapでオートアライメントするためのスクリプトが同梱されているんですよね…&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;• Windows: bundle SharpCap AutoAlign scripts under &quot;SharpCap scripts&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;というわけで、実際にやってみました。やり方としては、まずAZ-GTiはホームポジションから始めます。Sharpcapでは、Plate solveのオプションは「Sync Mount and Re-center target」のまま。そして全自動でのアライメントのため、Sequencer機能を使います。&lt;/p&gt;
&lt;p&gt;メインメニューのSequencer→EditからSequence Editorを開きます。この機能を使うと、コードを書かなくてもSharpcapのいろんな動作を自動実行させるマクロを組めます。この機能を使って、「特定の方向に向ける→Plate solve &amp;amp; Sync」を3回実行するように設定し、3スターアライメントを試みます。ここでうれしいことに、Sequence EditorのMOUNT GOTOコマンドは目標座標をRA/DECだけでなくAltitude/Azimuthで指定できます。&lt;strong&gt;Alt/Azで指定すれば、限られたベランダの視界から確実に見える方位・高度を観測時間に関係なく指定可能です。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Synscanアプリのマニュアルの「SYNC: CHOOSING ALIGNMENT STAR」によれば、3スターアライメントの場合、最初の2点は同じくらいの高度、3点目は高度を30度以上離すことが推奨されています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Alt-azimuth mount
– Altitude is between 15 and 60 degrees
– Difference between altitudes is between 10 and 30 degrees
– Difference between azimuth is between 45 and 135 degrees
– For 3-Star alignment, the first two stars should have similar altitude and the 3rd star should have 30 degree or more variant in altitude compared to at least one of the first two stars.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これを参考に、うちのベランダから見える範囲でアライメントエリア3点の方位・高度を決め、Sequence Editorに入力したのが以下の状態です。このSequenceは保存しておけば次回から読みこむだけで実行できるのでらくちんです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image-3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Synscanのアライメントをリセットしてから実行してみた結果、このPlate solve &amp;amp; Sync法でもきちんとSync sampleが追加され、アライメントパラメータも定まっています。もちろんアライメント後の導入と追尾も問題なし。以下はアライメントを実行しているときのSynscanアプリの動画です。&lt;/p&gt;
&lt;p&gt;&amp;lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/PA_pdCMyGc8?si=ndfKyk0lgU-cOIsl&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;
&lt;p&gt;導入後にしばらく止まっているのは、Sharpcapのマウント整定時間（5s）とPlate solve &amp;amp; Syncを実行しているためです。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;というわけで、&lt;strong&gt;AZ-GTiはPlate solve &amp;amp; Syncだけでアライメントできる&lt;/strong&gt;ことがわかりました。十分見通しのよい屋外ではSynscanアプリのSynMatrix AutoAlignを使った方が早いですが、視界の限られたベランダからのアライメントには役立つと思います。&lt;/p&gt;
&lt;p&gt;SharpcapのPlate solveがBlind Solveできればマウントは適当な方向に向けた状態から開始できそうな気もしますが、それは試していません。&lt;/p&gt;
</content:encoded></item><item><title>M42オリオン大星雲 20241013</title><link>https://stargazr.net/posts/2024/1014-m42/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1014-m42/</guid><pubDate>Mon, 14 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AZ-GTiがやっと届いて実践投入できたので、さっそく自宅ベランダからM42を撮ってみました。&lt;/p&gt;
&lt;p&gt;Sharpcapも初めてまともに使うのでライブスタックの保存形式を間違えてFITSで保存してしまったので、ライブスタック結果の画像はなし。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/M42-20241013.jpg&quot; alt=&quot;&quot; /&gt;
AZ-GTi/SV106 fl240mm/QBP3/ASI533MC/Gain500/15s*137frames/20241013&lt;/p&gt;
&lt;p&gt;PixInsightで2x drizzle後中心部をクロップ。&lt;/p&gt;
&lt;p&gt;月が出てて撮影条件はいまいちでしたが、QBPフィルターの威力はすごいですね。SV106 60mmも星雲の電視観望には使えそうです。ASI533MCもいい感じ。中心部が飽和しちゃったのでそのうちリベンジしたい。&lt;/p&gt;
&lt;p&gt;よく見ると下の端のほうのオリオン座イオタ星?の光芒なんかがグニャグニャのヒトデみたいになってますが、これはBXTのせいっぽい。要調整。&lt;/p&gt;
&lt;p&gt;それにしても、GOTO経緯台での電視観望って楽ですね…水平取って適当に2スターアライメントするだけで十分な追尾精度が出てましたし。リモートデスクトップで家の中からぬくぬく観望できる快適さも癖になりそうです。&lt;/p&gt;
&lt;p&gt;190万都市の中心部でこれだけ写せるなら、車で1時間以上かけて遠征しなくてもかなり楽しめそうです。&lt;/p&gt;
&lt;p&gt;ただ見つかった課題もあって、&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;AZ-GTiにASCOM Device Hubで接続できない。POTH Hubだといける。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;AZ-GTiのASCOM接続が調子悪くなるときがある。SynScanアプリからは制御できるが、POTH Hub側がConversation Errorで接続できなくなる。こうなると一度電源落としてSynScan Appも再立ち上げ、アライメント取り直さないといけない。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;特に2が困ったもので、ASCOM経由での制御を全く受け付けなくなるのでSharpcapのライブスタック中のディザリングやオートリセンターが機能しなくなります。&lt;/p&gt;
&lt;p&gt;SynScanアプリからは制御できるのでアプリ側かASCOMドライバのバグな気もしますが、無線接続の不安定さが悪さをしているとの情報もあったので、USBシリアルで有線接続したら改善するのか試してみたいと思います。&lt;/p&gt;
</content:encoded></item><item><title>ベランダの手すりにAZ-GTiを載せる（お安く）</title><link>https://stargazr.net/posts/2024/1013-azgti-balcony/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1013-azgti-balcony/</guid><pubDate>Sun, 13 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ベランダで天体観測をされている方が皆悩むことだと思いますが、屋根があるので広い視界を確保するためには、可能な限り機材を手すり側に寄せて設置したい。できれば手すりに載せたい。ということでこれをできるだけお安く実現できないか考えてみました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;うちのベランダの手すりは、厚みが15cmあるコンクリートで上面は平らです。何かクランプ的なもので手すりを挟むように固定すればいけそうです。&lt;/p&gt;
&lt;p&gt;先人の知恵として、&lt;a href=&quot;https://jun1wata.wordpress.com/2019/06/15/%E3%83%99%E3%83%A9%E3%83%B3%E3%83%80-%E3%82%B3%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%88%E5%A1%80-%E3%81%B8%E3%81%AE-%E8%B5%A4%E9%81%93%E7%BE%A9-%E8%A8%AD%E7%BD%AE%E6%96%B9%E6%B3%95/&quot;&gt;同じようなコンクリートの手すりに赤道儀を設置されている方&lt;/a&gt;がおられます。中型赤道儀を載せても大丈夫そうなくらい頑丈そう。ただ、部品がお高い。パラボラキャッチャーがAmazonで1個7000円ほど、それが2個とチャンネルブラケットで2万近くかかりそうです。私の場合、載せるのはAZ-GTiなので、ここまでの強度は必要なさそうです。&lt;/p&gt;
&lt;h2&gt;材料&lt;/h2&gt;
&lt;h3&gt;土台（手すりにクランプ固定できるもの）&lt;/h3&gt;
&lt;p&gt;まずもっと安くて使えそうなクランプがないか探して見つけたのがこれです。ガレージミラーをコンクリートブロックなんかに取り付けるときに使うやつみたいですね。1個982円。お安い。実際買ってみたら2mm厚の鉄板で思ったよりしっかりしてました。&lt;/p&gt;
&lt;p&gt;::linkcard[https://www.amazon.co.jp/gp/product/B003LXQDFE]{title=&quot;Amazon.co.jp: MYST(マイスト) ガレージミラー ブロック用取付金具(幅90~180mm) (5106) : DIY・工具・ガーデン&quot; desc=&quot;Amazon&quot;}&lt;/p&gt;
&lt;h3&gt;AZ-GTiエクステンションピラーの土台&lt;/h3&gt;
&lt;p&gt;AZ-GTiのエクステンションピラーを載せる土台としてはこいつが使えそうです。カメラ用のチーズプレートですね。真ん中に3/8&quot;のネジ穴があって、両端が長穴になっています。長穴を利用して先ほどの取付金具に共締め固定する作戦です。こいつも1,278円で非常にお安いですが、アルミで厚みが10mmもあるので強度は十分でしょう。幅が50mmなのでピラーが少しはみ出ます。もう少しだけ幅広なのがあればベストなんですが…。&lt;/p&gt;
&lt;p&gt;::linkcard[https://www.amazon.co.jp/gp/product/B0D7PKLWZ7?th=1]{title=&apos;Amazon | チーズプレート カメラ ビデオ 撮影サポート 1/4&quot; &amp;amp; 3/8&quot; ネジ穴 多用途 アクセサリー 搭載 三脚 マウント 拡張 ブラケット 軽量 多機能 金属 アダプター プレート (CP-E1-MZ) | クイックシュー・プレート・ブラケット オンライン通販&apos; desc=&quot;Amazon&quot;}&lt;/p&gt;
&lt;h3&gt;ねじ類&lt;/h3&gt;
&lt;p&gt;以下にごちゃごちゃ書いてますが、リストにまとめておきました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1/4&quot; UNC 長さ1/2&quot;のキャップボルト（ステン）×4（←もうちょい長くてもいいかも？）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;1/4&quot; UNC ナット（ステン）x4&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;M6ワッシャー 外径が大きいもの x4（1/4&quot;ワッシャーの代用・M8用の穴に1/4&quot;ナットを固定するために必要）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3/8&quot; UNC 長さ3/4&quot;のボルト（ステン）x1&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あとは、3/8&quot; UNCのちょうどいい長さのネジがホームセンターで見つからなかったので、少し割高ですがこれもAmazonで長さ5/8&quot;（15.88mm）のネジを調達。カメラネジの規格は長さが4.5mmだそうですが、チーズプレートの厚みが10mmなので1mmのワッシャーを入れれば15.88-10-1=4.88mmでちょうどいいくらいでしょう。AZ-GTiの使用だけを考えるならもう少し長めのネジのほうがよさそうだったので、最終的に3/8&quot;-3/4&quot;のネジを使用しました。&lt;/p&gt;
&lt;p&gt;ガレージミラー金具の開き固定とチーズプレートの固定には、付属のM8ボルトではなくM6のボルト・ナット・ワッシャーを使います。チーズプレートの長穴部分には1/4&quot;のキャップボルトが入るのですが、入手性が悪いのでM6で代用します。M6の場合キャップボルトの頭がくぼみにはまらないので、ワッシャーで挟んで固定することにします。…と思っていたのですが、AZ-GTiのピラー底部が思ったより太くて干渉しそうだったので、1/4&quot; UNCのキャップボルトとナットを購入しボルトの頭が飛び出ないようにしました。ウィットネジはホームセンターでもよく売ってますが、ユニファイネジは入手性が悪くて難儀しますね。インチネジ嫌いです。ちなみにホームセンターで売ってたウィットの1/4&quot;キャップボルトだと、微妙に頭が大きくてチーズプレートの溝にはまりませんでした。ステンの1/4&quot;-1/2&quot;ボルトナット×4で2000円。タカイ…。ワッシャーはM6で代用できます。&lt;/p&gt;
&lt;h2&gt;完成図&lt;/h2&gt;
&lt;p&gt;組み上げるとこんな感じになりました。完全無加工で組んだだけです。1/4&quot;キャップボルトの裏にはM6のデカいワッシャーが挟んであります。だいたい7000円くらいで作れたでしょうか？AZ-GTiで使うには十分な強度だと思います。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20241011_120923706-1024x720.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;あとは適当なゴム板を挟んで水平を調整しつつ、手すりに設置すれば完成です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/AZ-GTi_balcony-450x1024.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;ピラーを掴んで揺らそうとしてもビクともしません。もともとガレージミラー用の金具ということで屋外用なので対候性も問題ないと思います。&lt;/p&gt;
</content:encoded></item><item><title>送料込み千円未満でバーティノフマスクを3Dプリントで作る！（CAD知識なしでOK）</title><link>https://stargazr.net/posts/2024/1007-bahtinovmask-3dp/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/1007-bahtinovmask-3dp/</guid><pubDate>Mon, 07 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;この度SV106 60mmとSV165 40mm用のバーティノフマスクを3Dプリントで作ったので、その方法をご紹介します。CAD知識なしで自分の望遠鏡用のバーティノフマスクの3Dプリント用データを作れます。&lt;/p&gt;
&lt;p&gt;中口径以上は調整可能な汎用品が売ってますが、60mm以下の小口径用はあまり見かけないので自作しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;h2&gt;バーティノフマスクの3Dプリント用データ作成&lt;/h2&gt;
&lt;p&gt;バーティノフマスクの3Dプリント用データ作成には、ttait_vantim氏がThingiverseで無料公開してくださっているUniversal Bahtinov Mask Generatorを使います。&lt;/p&gt;
&lt;p&gt;::linkcard[https://www.thingiverse.com/thing:4581618]{title=&quot;Universal Bahtinov Mask Generator by ttait_vantim&quot; desc=&quot;Update of my previous remix, should have everything that one did plus:Easy-to-use Customizer based interface - no source code modifications neededSupport for dynamic creation of masks for lenses not i&quot;}&lt;/p&gt;
&lt;p&gt;上記Thingiverseからbahtinov_universal.scadとbahtinov_universal.jsonの2つのファイルをダウンロードして、適当なフォルダに入れておきます。同じフォルダに入れておく必要があります。&lt;/p&gt;
&lt;p&gt;これはOpenSCADというフリーの3D CADソフト用のデータで、CADの操作が全くわからなくても、パラメータをいくつか入力するだけで3Dプリント用のモデルデータを作ってくれるという、大変素晴らしいものとなっています。&lt;/p&gt;
&lt;p&gt;まずはOpenSCAD本体が必要なので、以下からダウンロードしてインストールもしくは展開します。&lt;/p&gt;
&lt;p&gt;::linkcard[https://openscad.org/downloads.html]{title=&quot;OpenSCAD - Downloads&quot; desc=&quot;OpenSCAD&quot;}&lt;/p&gt;
&lt;p&gt;次にOpenSCADを起動して先ほどダウンロードしたbahtinov_universal.scadを開きます。画面右の方にCustomizerというペインがありますので、開きます。ここでマスク生成のためのパラメータを設定します。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image-2-1024x603.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;以下が各パラメータの詳細です。なお画像はSV106 60mm用のマスクの設定例です。ノギス等でレンズフードの外径さえ測れば作れますね。&lt;/p&gt;
&lt;p&gt;注意点として、bahtinovfactorがデフォルトの150だとバグかなにかでスリットが異様に細かくなることがあるので、bahtinovfactorを少し動かして確認してみることを推奨します。&lt;/p&gt;
&lt;p&gt;以下Lens Mask Parametersの説明。なお外から被せるタイプだけでなく内側（フィルターネジ部分）にはめるタイプも作れるようですが、そのタイプは作ったことがないので説明省略します。&lt;/p&gt;
&lt;p&gt;lensFocalLength&lt;/p&gt;
&lt;p&gt;焦点距離をmmで入力します。&lt;/p&gt;
&lt;p&gt;lensDiameter&lt;/p&gt;
&lt;p&gt;マスクを外側にかぶせる場合は鏡筒先端の外径をmmで入力します。&lt;/p&gt;
&lt;p&gt;lensAperture&lt;/p&gt;
&lt;p&gt;スリットが入るマスク本体部分の径を決めるパラメータです。レンズの有効径を入力します。望遠鏡の場合はスペック上のレンズ口径でよいかと。&lt;/p&gt;
&lt;p&gt;centerHoleDiameter&lt;/p&gt;
&lt;p&gt;反射望遠鏡の場合は中央遮蔽径（mm）、屈折望遠鏡の場合は0を入力します。&lt;/p&gt;
&lt;p&gt;ringHeight&lt;/p&gt;
&lt;p&gt;マスク固定用のツメ（リング）の高さ（mm）です。&lt;/p&gt;
&lt;p&gt;handleHeight&lt;/p&gt;
&lt;p&gt;0でOKです。&lt;/p&gt;
&lt;p&gt;bahtinovfactor&lt;/p&gt;
&lt;p&gt;スリットの細かさを決めるパラメータです。大きくすると細かくなります。あまり細かくしすぎるとプリント失敗の原因になりかねないので、ほどほどに。スリットが細かすぎず、一番端のスリットがあまり小さな穴にならないように適当に決めればよいと思います。&lt;/p&gt;
&lt;p&gt;以下Mask Optionsの説明。&lt;/p&gt;
&lt;p&gt;ringTabInterference&lt;/p&gt;
&lt;p&gt;マスク固定用のツメ（リング）をlensDiameter（鏡筒外径）からどれくらいオフセットするか（mm）を決めます。0にするとツメ（リング）の内面がlensDiameter（鏡筒外径）とピッタリ同じになり、プラス数値にすると内側にオフセット（きつく）、マイナス数値にすると外側にオフセット（ゆるく）。ギチギチより多少緩めのほうが使いやすいかも？（個人的意見）&lt;/p&gt;
&lt;p&gt;maskThickness&lt;/p&gt;
&lt;p&gt;マスク部分の厚み（mm）です。2mmで問題ないかと。&lt;/p&gt;
&lt;p&gt;ringThickness&lt;/p&gt;
&lt;p&gt;マスク固定用のツメ（リング）の厚み（mm）です。きつめにはまるように設計する場合はあまり厚いとツメの柔軟性に影響するかも？&lt;/p&gt;
&lt;p&gt;ringPieces&lt;/p&gt;
&lt;p&gt;マスク固定用のツメの数です。ツメではなく全周が立ち上がったリング形状にする場合は1にします。&lt;/p&gt;
&lt;p&gt;ringPiece&lt;/p&gt;
&lt;p&gt;マスク固定用のツメの幅を決めるパラメータです。ツメではなく全周が立ち上がったリング形状にする場合は360にします。&lt;/p&gt;
&lt;p&gt;ringRotation&lt;/p&gt;
&lt;p&gt;マスク固定用のツメの位置を回転させるパラメータです。&lt;/p&gt;
&lt;p&gt;handleDiameter&lt;/p&gt;
&lt;p&gt;そのままでOK。&lt;/p&gt;
&lt;p&gt;minGapWidth&lt;/p&gt;
&lt;p&gt;3Dプリンターのスペックに合わせた最小ギャップ（mm）を設定します。あまりに小さいギャップはプリント失敗の原因になります。私はデフォルトの0.8mmにしています。&lt;/p&gt;
&lt;p&gt;パラメータの設定ができてプレビューでいい感じになったら、キーボードのF6を押してモデルをレンダリングします。PCスペック次第ですが少し時間がかかります。レンダリング時にエラーが出る場合は、どこかのパラメータ設定がおかしいので確認します。&lt;/p&gt;
&lt;p&gt;レンダリングが終わったら、File→Export→Export as STLからSTL形式で出力できます。&lt;/p&gt;
&lt;p&gt;これで3Dプリント用のモデルデータが完成したわけですが、パラメータの数字を弄るだけで3D CADの知識は全く不要であることがわかると思います。しかも無料。&lt;/p&gt;
&lt;h2&gt;3Dプリント&lt;/h2&gt;
&lt;p&gt;あとは先ほど出力したSTLファイルを3Dプリントすればバーティノフマスクの完成です。とはいえ、3Dプリンターを持っている方は少数でしょうし、このためだけに買うのも躊躇われます。通常は3Dプリントサービスにモデルデータを投げてプリントしてもらうことになるかと思います。&lt;/p&gt;
&lt;p&gt;3Dプリントサービスもいろいろありますが、私は最近&lt;a href=&quot;https://jlc3dp.com/jp&quot;&gt;JLC3DP&lt;/a&gt;というサービスしか使っていません。もとはJLCPCBというプリント基板のオンデマンド生産をやっている会社のサービスで、中国から発送になりますが大変安くてしかも早いです。支払いにPayPalが使えるのも安心です。&lt;/p&gt;
&lt;p&gt;たとえば、今回作ったSV106用バーティノフマスクの場合、プリント代が$3.36、送料$2.23、合計$5.59で、円換算すると送料込みで900円未満で作れてしまいました。&lt;/p&gt;
&lt;p&gt;発注から届くまでのタイムラインとしては以下のような感じで、発注から10日ほどで届いています。なお私は北海道在住なので国内輸送に比較的時間がかかってこれです。発送オプションは一番安いOCS Expressです。&lt;/p&gt;
&lt;p&gt;&amp;lt;table class=&quot;has-fixed-layout&quot;&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;日時&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;状態&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9/25 21:33&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;発注（レビュー待ち）&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9/26 18:55&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;レビュー完了（※）、支払い&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9/26 21:20&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;生産開始&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9/27 19:46&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;生産終了&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;9/28 16:10&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;発送&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;10/4&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;受取&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;/p&gt;
&lt;p&gt;※たぶんレビューはもっと早く終わっていますが、私がログインしてレビュー終了を確認、支払したのが翌日夕方でした。&lt;/p&gt;
&lt;p&gt;さて実際の発注方法ですが、特に難しいことはありません。JLC3DPの発注ページから先ほどのSTLファイルをアップロードして、印刷方式や材質、色などを選択するだけです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/image-1024x931.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;これはSV106用のバーティノフマスクを発注した際の設定です。過去の実績からMJFを選びましたが、光造形方式のSLAのほうがひょっとすると造形精度は高いのかも？しかも多少安いようです。今回の場合はあまり関係ないですが、MJFは複雑な構造や中空構造でもサポート材が不要なのが強みですね。&lt;/p&gt;
&lt;p&gt;Product Descは通関書類に書かれるHSコードの選択ですが、ピッタリ合致するものがなかったので私の場合は拡大解釈でToy Partにしています。&lt;/p&gt;
&lt;p&gt;あとはカートに保存してCheckoutするだけです。注文画面の3. Submit Orderの欄でAutomatic pay with PayPalにチェックしなかった場合は、ファイルのレビュー終了後、注文詳細画面から支払い手続きを行う必要があります。PayPal以外にもGoogle Payなんかも使えるようです。ファイルレビューは営業時間中であればすぐ終わるようですが、レビュー完了のメール連絡はなかった気がするので注意。&lt;/p&gt;
&lt;p&gt;ちなみに、国内で使ったことがあるDMM.makeの3Dプリントサービスで見積を取ってみたら、MJF（PA12黒、今回の発注とほぼ同等の設定）で4500円、SLA（エコノミーレジン、色選択不可）で1200円でした。参考までに。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;出来上がったバーティノフマスクがこちらです。どちらもMJFで作りましたが、表面はややざらざらの艶消しみたいな風合いになるのでちょうどいいかなと思ってます。造形精度はよいです。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20241004_110810291-1024x566.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;埃汚くてすみません（笑）写真撮ってから気づきました。&lt;/p&gt;
&lt;p&gt;使ってみての感想ですが、まず当たり前ですがバーティノフマスクとしてちゃんと機能します。あとはもう少し爪を短くして3本でなく全周リングの形状にしてもよかったかな？と思いました。&lt;/p&gt;
</content:encoded></item><item><title>ASI533MC購入</title><link>https://stargazr.net/posts/2024/0920-asi533mc/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/0920-asi533mc/</guid><pubDate>Fri, 20 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;電視観望用にASI533MC（非冷却）を購入しました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;もともと出不精ですが、札幌に引っ越してから遠征して赤道儀で写真撮るハードルが上がってしまい、なかなか活動できなくなってきてしまいました。&lt;/p&gt;
&lt;p&gt;わざわざ赤道儀設置して写真撮るなら、せっかくならBortle3に近い4くらいのところには行きたいですが、そうなると1時間くらいは車走らせないといけません。&lt;/p&gt;
&lt;p&gt;それに北海道だと冬場は路面状況の関係でさらに難易度が上がるので、全く活動できていません。オリオン大星雲とか冬の天体も撮りたいんですけどね。&lt;/p&gt;
&lt;p&gt;天文趣味のモチベを保つためにも、気軽に星に触れられる環境を作りたくて、この度電視観望に手を出すことにしました。&lt;/p&gt;
&lt;p&gt;目標は自宅のベランダに機材を設置して、家の中からリモートでぬくぬく観測することです。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;そんなわけで機材選びを始めました。&lt;/p&gt;
&lt;p&gt;目的として、とにかく「&lt;strong&gt;気軽に&lt;/strong&gt;」を最重視することにします。&lt;/p&gt;
&lt;p&gt;まずおおざっぱにシステムの全貌を想像しますが、架台は自動追尾経緯台、鏡筒はせいぜい口径40mm、焦点距離は長くても200mmくらいの小型軽量の機材にします。&lt;/p&gt;
&lt;p&gt;さて、気軽に、ということで冷却CMOSは最初から除外、非冷却CMOSから選びます。もちろん、性能だけ考えれば冷却CMOSはベストですが、重いしケーブルも増えるしクールダウン・ウォームアップの手間がかかって面倒です。というかすでに2600MC Pro持ってますし、冷却カメラはこれで間に合っている感。冷却CMOSの場合ダークを後で撮れるメリットありますが、今回の用途では露出時間はせいぜい10秒くらいの予定なので、ダーク撮影にも大して時間はかからないでしょう。&lt;/p&gt;
&lt;p&gt;初めて電視観望を始めますので、先達の方々が公開されている情報をもとに、必要スペックを考えます。&lt;/p&gt;
&lt;p&gt;・主な対象はDSO。&lt;br /&gt;
・ピクセルサイズ：感度を考えると3.75μm程度は欲しい。&lt;br /&gt;
・センサーサイズ：焦点距離200mm前後の鏡筒でオリオン大星雲やアンドロメダなどがある程度余裕をもって収まるようにしたい。経緯台で使うので写野回転があり、ライブスタックするとセンサーの端の方はあまり有効活用できない。&lt;br /&gt;
・ハイゲインで短時間露光に使うので、HCGモードは合った方がよさそう。&lt;br /&gt;
・ゼロアンプグローは優先度低いがあるに越したことはない。&lt;br /&gt;
・ライブスタックによるその場での観望だけでなく、できれば撮影した画像をPixInsightで処理して印刷もしたいので、画素数は多めだとうれしい。&lt;/p&gt;
&lt;p&gt;さて、この条件でZWOのカメラ一覧とにらめっこして、2600MCと特性が似てて使いやすそう、ということで533MCを選択しました。&lt;/p&gt;
&lt;p&gt;ピクセルサイズも必要十分で解像度も高く、ゼロアンプグロー機種でしかも経緯台向きのスクエアセンサー。価格も294MCに比べてお手頃。難点がすでにディスコンになったっぽく、国内に在庫がなさそうなこと。&lt;/p&gt;
&lt;p&gt;この機種なんでこんなに早くディスコンなんですかね？電視観望用途にはかなり優れた機種だと思うんですけど。他社からは同じIMX533のカメラが普通に売られているので、センサー供給の問題ではないと思うんですけども。&lt;/p&gt;
&lt;p&gt;で、どうしても欲しくて、個人輸入も選択肢にして探しました。そしたらありました。マレーシアのZWO正規代理店に2個在庫が残っていました。なんかセール対象になっていて、本体価格503USD、送料手数料と国内消費税を含めて￥88,637で買えました。国内で買うより多少安く済んだ感じでしょうか？在庫なくて買えないけど。9/12発送で9/20に届きました。&lt;/p&gt;
&lt;p&gt;早速ファーストライトと行きたいですがAZ-GTiの納期が10月末予定ということで当分先になりそうです…残念。&lt;/p&gt;
</content:encoded></item><item><title>Ginji-150fnをEAF化する</title><link>https://stargazr.net/posts/2024/0913-ginji-eaf/</link><guid isPermaLink="true">https://stargazr.net/posts/2024/0913-ginji-eaf/</guid><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ginji-150fnのGS2インチクレイフォード接眼部にEAFを取り付けました。&lt;/p&gt;
&lt;p&gt;&amp;lt;!--more--&amp;gt;&lt;/p&gt;
&lt;p&gt;10年前、学生時代に￥37,500で購入したGinji君…今はほぼ6万円にまで値上がりしているみたいですね。&lt;/p&gt;
&lt;p&gt;さて、細かいところで不満点ありつつも、こんなにお安いのによく頑張ってくれているGinji君ですが、GSO社製のクレイフォード接眼部が曲者で、なにしろ丸っこくてEAFの固定に使えそうなネジもないという大きな欠点があります。なんなら（公式？）&lt;a href=&quot;https://www.yuque.com/zwopkb/hardware/eaf-support-list#721bd825fe603300fa501746582f0e6b&quot;&gt;EAFコンパチリストにUnsupportedと明言&lt;/a&gt;されています。&lt;/p&gt;
&lt;p&gt;私は数年前に&lt;a href=&quot;https://farbie.hatenadiary.org/entry/2022/06/28/000000&quot;&gt;Arduinoで自作した電動フォーカサーを取り付け&lt;/a&gt;て使っていました。ASCOMで制御もできるし実用上は特に問題なかったのですが、なにしろモーターがデカい・重い・個別に12Vが必要で取り回しが悪い。&lt;/p&gt;
&lt;p&gt;それに比べてEAFっていいですよね。見た目がスタイリッシュだし、USBバスパワーだけで動作、しかも超コンパクトなのにクソデカNEMA17PG27モーターよりステップ数が多い。&lt;/p&gt;
&lt;p&gt;どうしてもGinji君にEAF取り付けたくて、ネット徘徊した結果取り付け成功したのでその内容をまとめます。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Adruino ASCOMフォーカサーを自作したときと同様、Thingiverseで取り付けアダプタの3Dプリントデータを公開している方がおられました。&lt;/p&gt;
&lt;p&gt;::linkcard[https://www.thingiverse.com/thing:4946220]{title=&quot;ZWO EAF adapter to GSO Crayford focuser by tgmorris99&quot; desc=&quot;Adapter to mount ZWO EAF on GSO Crayford focuserThis was designed to fit my Lunt LS60MT Crayford focuser which is the same as my GSO Crayford focuser and allows the ZWO EAF electronic focuser to be mo&quot;}&lt;/p&gt;
&lt;p&gt;ファイルが複数ありますが、STLファイルをJLC3DPで3Dプリント。素材はPA12-MJFを選択。費用は送料込みで12ドルほど。&lt;/p&gt;
&lt;p&gt;印刷されてきたものがこちら。裏面の六角穴のM4ナットを圧入した後の状態になります。圧入は表からボルトを締めていけば簡単に入ります。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20240807_014148996.MP_-300x169.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;必要なもの一覧（丸数字はネジ穴の番号に対応）：&lt;br /&gt;
①M4x16mm 六角穴付きボタンボルト（&lt;a href=&quot;https://www.monotaro.com/p/4149/4564/&quot;&gt;Monotaro&lt;/a&gt;）&lt;br /&gt;
②M4x25mm 六角穴付きとめネジ 平先（&lt;a href=&quot;https://www.monotaro.com/p/4155/0266/&quot;&gt;Monotaro&lt;/a&gt;）&lt;br /&gt;
②M4ローレットナット（&lt;a href=&quot;https://www.monotaro.com/p/4211/4721/&quot;&gt;Monotaro&lt;/a&gt;）&lt;br /&gt;
③M4ナット（裏側に圧入）&lt;br /&gt;
③M4x16mm ネジ、ワッシャー&lt;br /&gt;
④(+)トラスタッピンねじ 2種溝なしB-0形（[Monotaro](http://(+)トラスタッピンねじ 2種溝なしB-0形)）&lt;br /&gt;
モーターカップリング（4.5mm-5mm）（&lt;a href=&quot;https://www.monotaro.com/p/3750/3952/&quot;&gt;Monotaro&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;④のタッピングネジはいらないかも。あまりネジが効いてる感じがしないし固定強度は④がなくても十分に感じました。&lt;/p&gt;
&lt;p&gt;なおこのクレイフォードの軸は4.5mmなので、EAFに標準添付のモーターカップリングはサイズが合いません。4.5mm-5mmの異径カップリングが必要です。&lt;/p&gt;
&lt;p&gt;裏面がこちら。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20240807_014158470-300x163.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;①の穴はフォーカスロックネジのネジ穴に対応します。このアダプタ固定用。&lt;/p&gt;
&lt;p&gt;②の穴はフォーカステンションネジのネジ穴に対応します。とめネジでテンション調整しつつアルミブラケットの上からローレットナットでアダプタとブラケットを共締めします。&lt;/p&gt;
&lt;p&gt;③④の穴はアダプタにアルミブラケットを固定する用。④は補助的。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;実際にEAFを取り付けるとこのようになります。上のアダプタ画像と180度向きが違うのでご注意を。ワッシャー付きのプラスネジが刺さってるところが③の穴です。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;images/PXL_20240807_063939576-1024x769.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;クレイフォードのテンションを調整したいときは、ローレットナットを外して六角レンチでとめネジの締め具合を調整します。&lt;/p&gt;
&lt;p&gt;ただこれだと現地で調整したいときにレンチが必要でめんどくさいので、長いM4のローレットネジがあればツールフリーにできそうです。もし手に入ったら追記します。&lt;/p&gt;
&lt;p&gt;動作は完璧に問題ありませんでした。ただこのクレイフォード自体の問題で、重い冷却CMOSカメラを付けたときに鏡筒の向きによっては軸がスリップします。もしかしたらそのうち笠井のMRP接眼部に交換するかもしれません…（接眼部だけで鏡筒の価格とほぼ同じなので二の足を踏んでいます）。&lt;/p&gt;
</content:encoded></item></channel></rss>