A3サイズ鉄道模型:コントローラをPICO2Wに変更し、システム応答時間を検証
2025/08/12
Nゲージレイアウトでの自動運転システム
A3サイズのコンパクトなレイアウトで、自動運転システムを構築してきました。これまでのコントローラは、タクトスイッチとキャラクタLCDによるUI構成で、マイコンにはArduino互換のXIAO ESP32C3を使用していました。
今回、このシステムをより高度化するため、Raspberry Pico2Wとタッチパネル付きフルドットTFT液晶に置き換えることにしました。
元のシステムと新UIのソースコードを統合
昨日までに、鉄道模型から切り離し、TFT液晶単体で動作テストを実施しました。描画やタッチ入力も問題なく動作することが確認でき、基礎的な扱いは把握できました。
そこで本日は、旧システムの自動運転用ソースコードと、新しいTFT液晶制御コードを統合。タクトスイッチとタッチパネルの両方から操作可能な構成にしました。
マイコン変更による修正点
マイコンをXIAO ESP32C3からRaspberry Pi Pico2Wに変更することで、特に以下の周辺機能まわりを修正する必要がありました。
- PWM制御(レールへの電圧印加用)
- 周期タイマー割り込み(1ms)によるUI入力検出
Pico2WとESP32C3ではハードウエア構造や利用可能なAPIが異なるため、ネット上の情報を参考にしながら修正し、同等の動作を確保しました。
PWMと周期タイマー割り込みについては、以下のサイトが参考になりました。
スケジューリングの工夫
今回の実装では、TFT液晶への直接描画によるチラつきを避けるため、一度オフスクリーン(ビットマップ)に文字や図形を描画し、最終的にそのビットマップ全体をTFT液晶(ILI9341コントローラ)に転送する方法を採用しました。
このTFT液晶へのSPI転送には、約80msを要します。システム処理とTFT描画処理をArduinoのloop()にすべて入れると、TFT液晶転送時の80msの間は、システムがビジーロックしてしまい、システムの応答性が悪くなります。
そこで今回は以下のように分離しました。
- loop()関数:オフスクリーン描画処理&TFT転送、タッチパネル状態/座標取得など低優先度処理
- 周期割り込み:ポイント・信号機・踏切・赤外線センサー制御、タクトSWなどの高優先度処理
レイアウト制御はHC595・HC166シフトレジスタを用いた3線シリアルで行っていますが、Pico2WのハードウエアSPIは使わず、GPIOを使ってシリアル信号を生成しています。このシリアル信号関数は自作しており、安定動作させるために割り込みセーフにしています。
システムの概要ブロック図を下に示します。割り込み処理は、タスクを高優先度(1ms周期)と中優先度(5ms周期)の2種類に分けて実行しています。図中の色は、下に示すオシロスコープの波形の色に対応しています。
信号観測結果
下記はPico2Wでの信号波形です。
- 黄色:TFT液晶 CS(LOWで転送中)
- 緑:TFT液晶 SPIクロック
- ピンク:タクトSW、センサーなどのHC166入力クロック(1ms周期割り込み)
- 青:ポイント、信号を駆動するHC595出力クロック(5ms周期割り込み)
TFT転送中でも、割り込み処理により入力・出力制御が並行動作しています。TFT転送中でビジーロックすることなく、優先度の高いUI入力、レイアウト駆動ができることが確認できました。

↓時間軸を拡大すると
TFT液晶SPI転送に、HC166入力とHC595出力が割り込んでいる様子が見られます。
(2025/08/13追記)
現状のボードにPICO2Wをピンワイヤー接続して合体
実際の基板からXIAO ESP32C3を外し、ブレッドボード上のPICO2Wをピンワイヤーで接続して合体させました。PICO2Wが出力するシリアルにより、ボード上のLEDやタクトSWが動作しました。
今後の予定
次は、問題なければ回路図を更新し、新しいプリント基板を設計・制作する予定です。
続きのブログ
(2025/08/24追記)
今回のTFT液晶を使って、完成したシステムをまとめたブログは、以下から見られます。