薪の選別機の開発の続きです。
今まではジャンパー線で繋いでいたのですが、部品が届いたので、配線を綺麗にまとめてみました。
かなりスッキリです。
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. 実装フェーズで判明した物理的課題
筐体への組み込み過程で、以下の設計変更が必要となりました。
- 配線干渉: HDMIケーブルのコネクタおよび取り回しの制約により、画面上部への物理ボタン配置が不可能と判明。ボタン配置をサイドまたは下部へ再設計。
- マウント規格の不一致: 5インチ液晶側の固定ネジがM2.5(Raspberry Pi標準)より細いM2規格であることが判明。また、ラズパイ5とのネジ穴ピッチも異なるため、両者を連結する「変換マウントプレート」の製作が必須。
- バックライトが点灯したままになる問題: GPIO 経由でタッチパネルに電源を供給すると、RPi5 をシャットダウンしたのちもバックライトが点灯し続ける問題が発生する。モニターに電源を USB 経由で送れば解決するが、USB ポートを一つ占有してしまう。