はじめに
かつて手乗りサイズの小さいペンプロッタを作った.これはこれで楽しい工作だったし,技術実証機としては十分だったんだけれど,せめてハガキサイズくらいは描画できないと実用的とは言い難い.

今回はより描画エリアが広く,より実用的なペンプロッタを作っていく.実装の見通しが立ったので,手始めにコントローラ部分を実装する.
今回の材料
材料自体は数年前に買っておいたものの,なんやかんやで開発できていなかった.とりあえず今回使うコントローラ部分の材料は次の通り.
- Raspberry Pi Zero 2 WH
- CNCシールドV4
- Arduino Nano V3.0
- LM2596 DC – DC降圧コンバータ
- 超小型 USB OTG アダプタ
- 基盤を固定するフレーム
手元に有り余っていた RaspiZeroW を使う.後述のライブラリの問題があるので,出来れば RaspiZero2W 等の新しいCPU を使ったほうが良い.
CNCシールドV4は,回路設計が間違っている部分が多々あり手直しが必要.過去の記事を参照.
最近だと Type-C コネクタの個体もある.どうせいくつかの個体はシリアル認識不良だったり,間違った配線等で焼き殺してしまう場合もあるので,予備があって困ることは無い.
DC-DCコンバータはとりあえず手元にあった LM2596 を使う.昨今はこれとか,もっと小型で使い勝手の良さそうなモジュールも出てきている.入力12V出力5V1Aくらいなら何でもOK.
以前どこかの記事でも紹介していた気がするけど,この超小型 OTG アダプタは超おすすめ.特殊な一応リストに入れておく.その他,ACアダプタ,工具,電線類は省略.
Hardware(RaspiZeroW+Arduino+CNC Shield v4)
コントローラは RaspiZeroW+Arduino+CNC Shield v4 で構成する.物理的な配線は次の通り.
LM2596 の出力は 5V になるよう調整しておくこと.また,今回はサーボやステッピングモーターは接続しない.

Software(Klipper+Moonraker+Mainsail)
RaspiOS
これまでは公式から拾ってきたイメージを dd で焼いて Headless setupしていたが,Bookworm以降は wpa_supplicant.conf が利用できなくなった.セットアップ方法はこちらを参照.
KIAUH
Mainsail では必要なソフトウェアをプリインストールした MainsailOS を用意している.気軽に使いやすい一方で,BTT CB1 もそうだったが,OS のバージョンがやや古い.

今回は最新の RaspiOS をベースに KIAUH を利用して各ソフトウェアを導入していく.
KIAUH を導入する.TUI のメニューにしたがって Klipper,Moonraker,Mainsail をインストールする.
$ sudo apt-get update && sudo apt-get install git -y
$ cd ~ && git clone https://github.com/dw-0/kiauh.git
$ ./kiauh/kiauh.sh
╔════════════════════════════╗
║ ~~~~~~~~~~~~~~~~~~~~~ [ KIAUH ] ~~~~~~~~~~~~~~~~~~~~~ ║
║ Klipper Installation And Update Helper ║
║ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ║
╚════════════════════════════╝
╔════════════════════════════╗
║ ~~~~~~~~~~~~~~~~~~~ [ Main Menu ] ~~~~~~~~~~~~~~~~~~~ ║
╟─────────┬──────────────────╢
║ 0) [Log-Upload] │ Klipper: Not installed ║
║ │ Owner: - ║
║ 1) [Install] │ Repo: - ║
║ 2) [Update] ├──────────────────╢
║ 3) [Remove] │ Moonraker: Not installed ║
║ 4) [Advanced] │ Owner: - ║
║ 5) [Backup] │ Repo: - ║
║ ├──────────────────╢
║ S) [Settings] │ Mainsail: Not installed ║
║ │ Fluidd: Not installed ║
║ Community: │ Client-Config: - ║
║ E) [Extensions] │ ║
║ │ KlipperScreen: Not installed ║
║ │ Crowsnest: Not installed ║
╟─────────┼──────────────────╢
║ v6.0.7 │ Changelog: https://git.io/JnmlX ║
╟─────────┴──────────────────╢
║ Q) Quit ║
╚════════════════════════════╝
###### Perform action: 1
╔════════════════════════════╗
║ ~~~~~~~~~~~~~~~ [ Installation Menu ] ~~~~~~~~~~~~~~~ ║
╟─────────────┬──────────────╢
║ Firmware & API: │ Touchscreen GUI: ║
║ 1) [Klipper] │ 7) [KlipperScreen] ║
║ 2) [Moonraker] │ ║
║ │ Webcam Streamer: ║
║ Webinterface: │ 8) [Crowsnest] ║
║ 3) [Mainsail] │ ║
║ 4) [Fluidd] │ ║
║ │ ║
║ Client-Config: │ ║
║ 5) [Mainsail-Config] │ ║
║ 6) [Fluidd-Config] │ ║
╟─────────────┴──────────────╢
║ B) « Back ║
╚════════════════════════════╝
###### Perform action: 1うまく行けばこのインストール作業はこの TUI 内で完結するが,うまくいかなかった部分や補足を記載しておく.
Klipper
Arduino Nano 用に Klipper のファームウェアをビルドする必要がある.atmega328p に合わせて次の通り設定する.


あまりオプションを足しすぎるとファームウェアのサイズが大きくなりすぎたり,後述のMoonraker 同様ライブラリの依存関係でつまずくかもしれない.
また,Arduino Nano 互換機に広く利用されている USB シリアルチップ CH340 は個体差があるのか,RaspiOS で USB シリアルとして認識できない個体がある.経験則的に比較的最近製造されたと思われる個体の方が調子よく認識してくれる気がする.
Moonraker
RaspiZeroW 環境では,たぶん KIAUH の TUI だけでは Moonraker をインストールできない.
Moonraker の依存関係に含まれている uvloop は,RaspiZeroW の CPUアーキテクチャ ARM11 (ARMv6) 向けのライブラリサポートが無いのかインストールに失敗する.moonraker-speedups.txt の uvloop 部分をコメントアウトしてインストールする必要がある.
また moonraker のリポジトリからインストールを進めると dbus 周りでもエラーが出たので,ARM11 (ARMv6) 用にソースからビルドし直す.
ARM Cortex-A53 (ARMv8) では,そのままインストールできるはず.たぶん.
$ cd ~
$ git clone https://github.com/Arksine/moonraker.git
$ cat moonraker/scripts/moonraker-speedups.txt
msgspec>=0.18.4 ; python_version>='3.8'
#uvloop>=0.17.0 # コメントアウト
$ ~/moonraker/scripts/install-moonraker.sh
$ sudo systemctl stop moonraker.service
$ source ~/moonraker-env/bin/activate
(moonraker-env) $ pip uninstall -y dbus-fast
(moonraker-env) $ pip install --no-binary dbus-fast dbus-fast
(moonraker-env) $ deactivate
$ sudo systemctl start moonraker.serviceMainsail
ここだけはあまり書くこと無い.KIAUH ですんなりとインストールできる.はず.たぶん.
おわりに
ここまででコントローラのベースは完成.各ソフトウェアは,モータ類を繋いでチューニングしながら設定を行う.
3Dプリンタにペン持たせたほうがはやい?それはそう.


コメント