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

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

以降のソフトウェアのインストールの話は上図の最小構成で進めるけれど,今後の説明を簡単にするために電気系統全体も載せておく.

以前作った手乗りペンプロッタの構成ではArduinoとサーボの電源が共通で,サーボ駆動による電圧降下の際に動作が不安定になっていた.今回の構成ではRasPiとサーボの電源を分けて問題を解消する.
fritzingにリミットスイッチ単体の絵がなかったのでやむなく基盤付きリミットスイッチを選んでいるけれど,実際の結線ではリミットスイッチ単体をそのまま接続しています.当然チャタリング対策等ちゃんとしたい場合はコンデンサとか挟んだ方がいいだろうけれど,そんなにシビアな使い方じゃないので素のスイッチそのままでも十分.
Software(Klipper+Moonraker+Mainsail)
RaspiOS
これまでRasPiを扱う際は公式から拾ってきたイメージを dd で焼いて Headless setupしていたが,Bookworm以降は wpa_supplicant.conf が利用できなくなった.最近はUbuntu以外でも Raspberry Pi Imagerが利用できるようになったので,これを利用すればOSのヘッドレスインストールができる.もしRaspberry Pi Imagerを利用せずヘッドレスインストールしたい場合はこちらを参照.
KIAUH
Mainsail では必要なソフトウェアをプリインストールした MainsailOS を用意している.必要なものがすべてプリインストールされているので気軽に使いやすいけれど,BTT CB1 もそうだったが,OS のバージョンがやや古い.

一方でKIAUHというソフトウェアを利用することで,最新の素のLinux上にKlipper,Moonraker,Mainsailといったソフトウェアのビルドやインストールを簡単にインストールできる.
今回は最新の RaspiOS をベースに 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 同様ライブラリの依存関係でつまずくかもしれない.今回最低限必要な機能はサーボモータ制御に必要なPWMと,リミットスイッチ接続に必要なGPIOの2つ.
また,Arduino Nano 互換機に広く利用されている USB シリアルチップ CH340 は個体差があるのか,RasPiOS で USB シリアルとして認識できない個体がある.経験則的に比較的最近製造されたと思われる個体の方が調子よく認識してくれる気がする.
Moonraker
どのソフトウェアも基本的には KIAUH の TUI だけではインストールを完結できるが,CPUが古い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プリンタにペン持たせたほうがはやい?それはそう.


コメント