生きている化石 — MacVim

AtomS3 用のコードをゴリゴリ書いているんですが、自分、実はエディタは vi しか使えないのです。
なもんでターミナルの小さな窓で syntax on とかしてたんですが、かったるい。

調べたら、なんと MacVim はまだ生きていました!
というわけで、サクッとインストール。
なんといういんでしょうか、この安心感。
インターネッツ老人会の皆皆様、そして、vi よ、私は帰ってきた!

それはそうと、なんでこんな羽目になったかというとサーボのコントロールがうまくいかなくて、カクカクしてしまうんです。
AtomS3 は初めてなんだけど、どうもパルス生成のタイミングがずれているのか、ノイズなのか、ハッキリしないのです。

なもんで、VxWorks の TaskSpawn() に相当する機能はないのかしらと思ったら、ありました。
が、これがまた、適当にやっているもんだし、そもそも VxWorks で開発していたのなんで、25 年は前なので、何もかもほとんど忘れてしまっています。

ノイズの影響か USB の接続もよく切れるし、これは

;upload_port = /dev/cu.usbmodem1101
;monitor_port = /dev/cu.usbmodem1101
upload_port = /dev/cu.usbmodem*
monitor_port = /dev/cu.usbmodem*

という風に platformio.ini を書き換えればいいとわかったので、そうしたんですが、MacVim を入れたことだし、.zshrc も整理しました。

# --- エディタ設定 ---
export EDITOR='/Applications/MacVim.app/Contents/bin/mvim'
alias vi='$EDITOR'
alias vim='$EDITOR'
alias gvim='$EDITOR'

ターミナル内で閉じたい時(GUIを起動したくない時)用の Alias

alias viv='$EDITOR -v'

--- PlatformIO (AtomS3) 開発用 ---

alias pu='pio run -t upload' # 書き込み
alias pm='pio device monitor' # シリアルモニタ
alias pum='pu && pm' # 書き込み後、即モニタ起動
alias pc='pio run' # コンパイルのみ(チェック用)

--- 便利ツール ---

現在のポートをサッと確認する用

alias lsp='ls /dev/cu.usbmodem*'

さて、昨日でようやく新年の行事が一段落したので、今日から配達です。
ボチボチ頑張ります。

OpenSCAD のインストール

Bamboo Lab の A1 mini も買ったんです。
なぜか直販だと 29,800 円(ただし、届くのがひと月後)で、Amazon だと翌日届く代わりに 39,800 円。
当然、29,800 円をチョイスしたわけです。

それで、昨日判明したタッチパネルのネジが M2 っぽいという件と、それ以前に全然寸法も違うので、プレートをアクリル板から切り出してなんとかしようと思うわけです。

今までだと Adobe Illustrator で作図して、svg で保存して、Laser Pecker 2 で切るところなんですが、思い立って OpenSCAD をインストールすることにしました。
A1 mini が届いたら、ケースを出力しないといけないので、データが使いまわせるようにしたいのです。

というわけで、それまでの準備の一環として、OpenSCAD をインストールすることにしました。

まず、Homebrew で OpenSCAD をインストールしました。

brew install --cask openscad

起動しようとすると、macOSのセキュリティ機能(Gatekeeper)によって、未確認の開発元としてブロックされている状態になります。

  1. 一旦、そのアラートの「Done」を押して閉じる。
  2. Macの 「システム設定」(System Settings)を開く。
  3. 「プライバシーとセキュリティ」(Privacy & Security)を選択。
  4. 右側の画面を下へスクロールしていくと、「セキュリティ」 の項目に “OpenSCAD” がブロックされているので、その横にある 「このまま開く」(Open Anyway)ボタンをクリック。
  5. パスワード入力を求められたら入力し、再度確認ダイアログが出たら 「開く」 を押す。

これで起動できます。

適当な .scad ファイルを作って開いてみると、うまくいったようです。

これでテキストファイル(.scad)を書いて、それを 2D や 3D で造形することができることになったんだろうと思います。

ボチボチ、がんばります。

Raspberry Pi 5 のタッチパネル周りの修正

薪の選別機の開発の続きです。

今まではジャンパー線で繋いでいたのですが、部品が届いたので、配線を綺麗にまとめてみました。
かなりスッキリです。

HDMI ですが、見ての通り、キットで買ったケーブルを依然使っています。
航空ドローン用のものを買ったんですが、HDMI 端子には、標準(A),mini(C)、micro(D)の 3 種類あって、C と D の組み合わせのものを買ってしまったので、全く繋がらないのです。
さらにケーブルも 50cm で長すぎました。
おまけに端子の向きも逆。
どれ一つ使えないので買い直すことにしました。
あ、ケーブルですが、端子が接続できる面が両端で同じなのと、裏表になっているものがあるので、これも要注意ですね。

それと、ジャンパー線で繋ぐ時なんですが、タッチパネルの側が 2 x 13 ピン, Raspbery Pi 5 の側が 2 x 20 ピンと全然ピン数が違うことに気づかず、逆向きで数えていたのもあって、ピンの割り当てを変えてしまっていたので、そも元に戻しました。

今日の作業の記録は以下の通り。

Raspberry Pi 5 × タッチパネル調整の記録

Raspberry Pi 5 にタッチパネルを SPI 直結(変換基板なし)した際、座標ズレとチャタリング(連打現象)が発生したため、解決までのプロセスを記録します。

1. ハードウェア配線(GPIO 直結)

メンテナンスコストを最小限にするため、以下のピンに直接配線しています。

信号名 役割 (Function) GPIO 物理ピン 備考
CS Chip Select GPIO 7 26番ピン SPI0 CE1 を使用
IRQ Interrupt Request GPIO 25 22番ピン タッチ検知用の割り込み信号
SCK SPI Clock GPIO 11 23番ピン SPI通信のクロック
MO Master Out (MOSI) GPIO 10 19番ピン RPiから液晶へのデータ送信
MI Master In (MISO) GPIO 9 21番ピン 液晶からRPiへのデータ受信

2. 座標補正(キャリブレーション)

Wayland(Wayfire)環境下でのフルスクリーン起動エラーを回避するため、ウィンドウモードで動作する Pythonスクリプト(Tkinter)を作成。
3回タッチを繰り返して平均値を出すことで、5インチのUIでも正確に操作できる精度を確保。

3. チャタリング(連打現象)の解決

RPi5 の GPIO 感度が鋭いため、1 回のタッチで数回クリックされる現象が発生。以下の 2 段階で対策。

A. ドライバレベルの対策 (/boot/firmware/config.txt)

pendown_pressure_threshold を設定し、ノイズと思われる微弱な電圧変化を無視するように変更。

dtoverlay=ads7846,cs=1,penirq=25,pndn=25,pendown_pressure_threshold=20

B. OSレベルの対策 (udev ルール)

OS の入力管理レイヤー(libinput)側でも、タッチの安定性を高める設定を投入しました。
/etc/udev/rules.d/98-touchscreen-cal.rules に以下の属性を追記することで、ソフトウェア的に信号の「跳ね返り」を抑制しています。

ATTRS{name}=="ads7846", ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0 0 0 1", ENV{LIBINPUT_ATTR_PRESSURE_THRESHOLD}="0.1", ENV{LIBINPUT_ATTR_TAP_AND_DRAG_GESTURE}="0"

4. 実装フェーズで判明した物理的課題

筐体への組み込み過程で、以下の設計変更が必要となりました。

  1. 配線干渉: HDMIケーブルのコネクタおよび取り回しの制約により、画面上部への物理ボタン配置が不可能と判明。ボタン配置をサイドまたは下部へ再設計。
  2. マウント規格の不一致: 5インチ液晶側の固定ネジが M2.5(Raspberry Pi標準)より細い M2 規格であることが判明。また、ラズパイ5とのネジ穴ピッチも異なるため、両者を連結する「変換マウントプレート」の製作が必須。
  3. バックライトが点灯したままになる問題: GPIO 経由でタッチパネルに電源を供給すると、RPi5 をシャットダウンしたのちもバックライトが点灯し続ける問題が発生する。モニターに電源を USB 経由で送れば解決するが、USB ポートを一つ占有してしまう。

M5Stack AtomS3 が届きました

注文してあった M5Stack AtomS3 が届きました。
半田付けなどの細かい作業は見えくいし、実際の運用では、不具合はモジュール(アッセン)で交換したいので、初めから M5Stack を使うことにしました。
びっくりするほど小さかったです。

M5Stack AtomS3は、薪の選別を機械学習による画像認識で行うためのソーターの開発に使います。
光学識別を RaspberryPi 5 で行い、その計算結果に基づき、親機の AtomS3 が子機の AtomS3 と ESP-NOW を使った無線通信を行い、子機がモータやシリンダを駆動して、コンベア状を流れる対象物をソートするという構造です。

すんなりいくとは思えないのですが、ぼちぼち進めていこうと思います。

Mac に USB-C ケーブルで繋いだらすんなり認識されました。

% ls /dev/cu.usbmodem*
/dev/cu.usbmodem1101

まず、PlatformIO をインストール

% brew install platformio

インストールに結構時間がかかり、固まっているのかと思いました。

次に作業用のディレクトリを作成し、初期化します。

mkdir -p ~/wood_sorter/atom_s3
cd ~/wood_sorter/atom_s3

pio project init –board m5stack-atoms3

以下のディレクトリ構造が自動生成されます。

  • platformio.ini: 設定ファイル(重要)
  • src/: プログラム本体(ここに .cpp を置く)
  • lib/: ライブラリを入れる場所

まずは、Atom S3のライブラリを使えるように platformio.ini を編集します。

[env:m5stack-atoms3]
platform = espressif32
board = m5stack-atoms3
framework = arduino
lib_deps =
m5stack/M5AtomS3 @ ^1.0.0
m5stack/M5Unified @ ^0.2.2
fastled/FastLED @ ^3.9.4
monitor_speed = 115200
upload_port = /dev/cu.usbmodem1101

液晶画面を制御するプログラムを作成します。

#include <M5AtomS3.h>

void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Lcd.setRotation(1); // 画面の向きを調整
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(10, 10);
M5.Lcd.print("ATOM READY");
}

void loop() {
M5.update();
// 画面ボタン(スイッチ)を押すと色が変わる
if (M5.BtnA.wasPressed()) {
M5.Lcd.fillScreen(RED);
M5.Lcd.setCursor(10, 10);
M5.Lcd.print("SORTING!");
}
if (M5.BtnA.wasReleased()) {
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(10, 10);
M5.Lcd.print("WAITING...");
}
}

以下のコマンドでコンパイルして、Atom S3 に書き込みます。

pio run -t upload

  • pio run コンパイルのみ実行します。文法エラーがないかチェックする時に使います。|
  • pio run -t upload コンパイル + 書き込みを実行します。|
  • pio run -t clean 以前のコンパイル結果を削除します。何か動作がおかしい時に使います。|

次にシリアル通信のテストをしたんですが。。。割愛します。

最後に画面にお陸様(6 號)の写真を表示するテストです。

まだモータ等は届いていないので、以降は届いてから試そうと思います。

リターンラインがパンクするとの相談

5 号のインスタ経由で薪割り機の修理の相談がありました。
地元の機械屋さんで整備してもらっても、リターンラインがパンク(ホースが外れる)して、作動油が漏れてしまう、という内容です。
ほとんどのやり取りは 5 号がやったのですが、一応、詳しい説明は自分がしておこうと思います。

結論を端的に書くと、フィルターが詰まっている、それだけです。
身も蓋も無い説明で申し訳ありませんが、肝心の本体を実際に見たわけでもなく、あくまでも一般的な話です。

それで、フィルタユニットの現物をお預かりして、バラしてみました。
一応、機械屋さんは整備をしたそうですが。。。

見ての通りで、ホースがつながっている蓋的な部分があって、そこから生えているパイプ部分にフィルタカートリッジを突っ込んで、そこをネジで締め付ける、という構造です。
それで、底の大きな六角の中に樹脂のパーツがあり、そこにネジがあるんですが、これが全く意味不明でして、そもそも機能していないようです。
いずれにせよ、部品が出ないのであれば、適合するフィルタカートリッジを探すのが最も変更が少なくて済む方法です。

手元にあった WP36 のフィルタは適合せず。
まあ、適合したところで、こんな高いフィルタは使ってられないでしょうし。

というわけで、ノギスはお宮なので、持って行って計ってみました。

  • 外径 70mm
  • 内径 40mm
  • 高さ 120mm

汎用品で合うものがあればいいんですが、そもそもの問題として、通常、リターンフィルタは一定の以上の圧力になると(フィルターが詰まったら)濾過せずにパイパスするようになるのが一般的なんです。
でも、どういう理由でか、現状、そうはなってない。
なので、フィルタだけ交換したところで、またパンクして油まみれになるリスクが残ります。

となると、作動油タンクの上に取り付けるタイプをアッセンで交換するか、あるいは、現状のフィルタは取り外して、リターンラインに外付けのフィルタを挟み込むか、という二つの選択肢になるのではと思います。

一応、外付けタイプを低コストで取り付ける場合、写真のように単に AE10 をホースに挟む混むだけ、となります。
この場合のメリットは、作業が簡単で、フィルタはカートリッジのため、交換も簡単、デメリットはフィルタが邪魔、ということでしょうか。

アッセンで交換するとなると、ざっと調べたところ 大生工業の TRA シリーズが使えそうな気がしますが、これの交換用フィルタと思われる P-G-TRF-06-10U は MonotaRO で 5,000 円近くしていますし、ボディの方は 3 万円以上するもののようです。
TR だと多少安いのかもしれません。
ただ、MonotaRO では売っていないようですし、検索しても、販売サイトを特定できないです。
まあ、PDF で図面が落とせるので、既存のタンク穴に取り付けできるかは判別できるだろうし、メーカーに問い合わせて、販売店を教えて貰えば、なんとかなるかもしれません。
一応、その時の話として、フィルタについては、作動油であること、リターンライン用であって、タンクに取り付け、かつ、薪割り機なので、一般的には 10 ミクロンの紙フィルタを使う、ということを使えれば、適切なものを案内してもらえるとは思いますが、パイパス機能があるか、あるいは、圧力系やインジケータをオプションとして選択しないと、またパンクすることになりますね。

既存のフィルタボディはブリーザーの機能はなかったのですが、写真で見るとタンクの黒いキャップがブリーザーなのだと思うので、それの清掃を行ったほうがいいです。
フィルタが詰まる=コンタミが発生している、ということですから。
もう一つ、何かついているのですが、多分レベルゲージだと思います。
あと、ドレンがあれば、マグネティックドレンの可能性があるので、作動油が抜けている今、外してそこも清掃、サクションフィルタがあれば、それも清掃したほうがいいです。

というか、一度園に持ってきていただけば、整備しておきますので、そのほうが手っ取り早いので、よろしくお願いいたいします。

ようやく口金変換アダプタを注文

先月、注文しそびれていた NPT → G への変換アダプタを注文しました。
いや、清水製作所 さんのものなんで、MonotaRO だと、月に 1 回くらいしか特価日がないんですよ。
今月は 1 日だった、というわけです。

これまたかなり前に Prince Mfg のオートサイクルバルブを取り寄せていたわけでして、しかも、クソ重たいものなのに手違いで航空便で輸入してしまって、かなり高いものについています。

とりあえずはこんな感じに繋ぐようになるわけですが、とにかくパーツが高い。
バルブ自体も 10 万円ほどしますし、アダプタ類も 2 万円くらいします。
バルブ自体は輸入しないといけないので、送料がべらぼうにかかります。(下手をすると本体くらいかかる)
ホースは自分で作るとしても、それでも 1 万円くらいはかかるでしょうし。
なので、NP3 をオートサイクル化するとすると、20 万くらいは必要になる感じでしょうか。

実際に作業をしてみなと分かりませんが、少なくともオートサイクルバルブと既存のログリフトやウエッジの高さ調整用バルブとの接続をどうするのか、また、オートサイクルバルブを固定するブラケットについては、何も手当てしてないので、当面かかりそうです。
あと 3/4″ のホース用の口金もストレートはあったと思うんだけど、90° エルボがあったかどうか。。。

ぼちぼち時間を作って作業を進めたいと思います。