Nordic Semiconductorの次世代超低消費電力マイコン「nRF54L15」を搭載した親指サイズの小型ボード「Seeed Studio XIAO nRF54L15 Sense」。
今回は、この最新マイコンと1.28インチ丸型カラー液晶(GC9A01)を組み合わせ、リアルタイムOS「Zephyr RTOS」と最新グラフィックライブラリ「LVGL 9」で動かしてみました。
内蔵6軸IMUによる回転する3Dワイヤーフレーム立体姿勢表示や、内蔵PDMマイクによる音声オシロスコープ波形など、サイバーパンク感あふれる3つのHUDビジュアライザーを構築した記録を紹介します。
丸型液晶特有の見切れ対策や、Cortex-M33のアライメントトラップ回避、IPS液晶の白飛びを抑えるインバージョン設定など、実践的な組み込みGUI開発のノウハウを詳しく解説します。
【XIAO nRF54L15】超小型丸型液晶でサイバーパンクHUD!Zephyr RTOS & LVGL 9で魅せる3D立体姿勢 & 音声オシロスコープ
Nordic Semiconductorの次世代超低消費電力マイコン「nRF54L15」を搭載した親指サイズの小型ボード「Seeed Studio XIAO nRF54L15 Sense」。

今回は、この最新マイコンと1.28インチ丸型カラー液晶(GC9A01)を組み合わせ、リアルタイムOS「Zephyr RTOS」と最新グラフィックライブラリ「LVGL 9」で動かしてみました。

内蔵6軸IMUによる回転する3Dワイヤーフレーム立体姿勢表示や、内蔵PDMマイクによる音声オシロスコープ波形など、サイバーパンク感あふれる3つのHUDビジュアライザーを構築した記録を紹介します。
丸型液晶特有の見切れ対策や、Cortex-M33のアライメントトラップ回避、IPS液晶の白飛びを抑えるインバージョン設定など、実践的な組み込みGUI開発のノウハウを詳しく解説します。

プロジェクト・動画のリンク先
実際の動作の様子は下記YouTube動画でも詳しく紹介しています
日本語解説動画(本編)
Cyberpunk HUD実演動画(ショート)
使用ハードウェアと丸型ディスプレイ構成
今回のシステムで使用したハードウェアは、いずれもSeeed Studio製の非常にコンパクトなモジュールです。
ハードウェア仕様一覧
| コンポーネント | 仕様・デバイス名 | 特徴・接続インターフェース |
|---|---|---|
| メインMCUボード | Seeed Studio XIAO nRF54L15 Sense | ARM Cortex-M33 @ 128 MHz, 1.5MB RRAM, 256KB SRAM |
| 円形カラー液晶 | Seeed Studio XIAO Round Display | 1.28インチ 円形TFT(GC9A01、240x240、8MHz SPI接続) |
| モーションセンサ | ST LSM6DS3TR-C (6軸IMU) | 内部I2Cバス(i2c30 @ 0x6a)、P0.01で電源制御 |
| デジタル音声マイク | オンボード PDMマイクロフォン | 専用PDMコントローラ(pdm20、CLK: P1.12 / DIN: P1.13) |
| 物理スイッチ | オンボード ユーザーボタン (SW0) | P0.00(内部プルアップ付き、Active-Low) |
| バックライト | GPIOバックライト制御 | D6ピン(P2.08)によるアクティブHigh給電制御 |
XIAOシリーズの背面にRound Displayをスタックするだけで、配線なしで丸型ディスプレイ付きのウェアラブルデバイスが完成します。



サイバーパンク感あふれる3つの表示モード
円形画面のUIデザインには最新の組み込みGUIライブラリ「LVGL 9」を採用し、3つのサイバーパンク風ビジュアライザーを実装しました。
立体姿勢モード:3D HORIZON
内蔵IMU(LSM6DS3TR-C)の重力加速度から、リアルタイムにピッチ角とロール角を計算します。
透視投影(Perspective Projection)3Dエンジンを自作し、回転するホログラフィック・ワイヤーフレーム立体キューブ(12本の辺を前面シアン、背面バイオレット、接続線ライム色で色分け)を描画しました。
キューブの中央には、航空機風の人工水平儀(ホライズンバー)が配置されており、ボードを傾けるとリアルタイムに傾きと水平線がダイナミックに連動します。
画面下部には、ピッチ角とロール角のオイラー角テレメトリ(P: +15° R: -08°)がデジタル表示されます。

AUDIO PULSE(音波ソナースコープ & 音声オシロスコープ)
内蔵PDMマイクから取得した16kHz 16-bit PCM音声をリアルタイムにダウンサンプリングし、人間の声や周囲の音に合わせて画面中央を高速に跳ね回るオシロスコープ波形を描画します。
無音時でもシステムが常時スキャン中であることを示すため、波形とソナーリングが微小なサイン波で呼吸するようにゆらぐ「アンビエント・ブリージング演出」を組み込みました。
音声を検知すると、音のパワーに応じて3重の同心円ソナーリングが外側へ向かって衝撃波のように動的に拡大します。
さらに、丸型画面の最外周には円弧型のVUメーターを配置し、音量レベルに応じて緑から黄、そしてピーク時のクリムゾンレッドへと滑らかにグラデーション変化します。

TACTICAL HUD(デュアルフュージョン統合HUD)
画面の上半分に3D立体回転キューブ、下半分にリアルタイム音声波形オシロスコープと水平音量メーターを同時に配置した、戦闘機HUD風の統合情報画面です。
傾きテレメトリとマイク入力レベルが同時に一望できるため、メカニック感あふれるハイエンドな雰囲気を演出できます。

シームレスな自動巡航と手動切り替え
約6秒ごとに自動で次のモードへ切り替わる「オートサイクル機能」を搭載しており、ハンズフリーで魅力的なデモ表示が行えます。
また、本体のユーザーボタン(SW0)を押せば、いつでも好きなモードへ瞬時に手動切り替えが可能です。
直面した技術的課題と解決ノウハウ
小型マイコンと丸型液晶の組み合わせでは、いくつかの深い技術的トラブルを乗り越える必要がありました。
同様の開発を行うエンジニアの参考になるよう、解決のポイントを紹介します。
丸型液晶特有のベゼル見切れを防ぐ幾何学設計
四角いディスプレイと異なり、円形ディスプレイ(直径240ピクセル)は上下端や左右端が急激に狭まります。
四角い画面の感覚でヘッダー文字列を配置すると、文字の両端が丸いベゼルで無惨に見切れてしまいます。
そこで、円の弦の幾何学計算(半径 \(r = 120\))に基づき、上部タイトルヘッダーの位置を \(Y = 22\) に最適化しました。
さらに、モード名とサブタイトルを2段センタリングレイアウトにすることで、丸型ガラスの内側にぴったり収まる美しいレイアウトを実現しました。
IPS液晶の白飛びを防ぐインバージョン設定
動画撮影時に、画面全体が強烈に白く発光してしまい、カメラで撮影すると白飛びする現象が発生しました。
原因を調査したところ、GC9A01コントローラはIPS液晶パネルを採用しているため、本来の黒を表示するには「ディスプレイ・インバージョン(反転)」コマンドが必要でした。
デバイスツリーのオーバーレイファイル(app.overlay)へ display-inversion; を追加したところ、本来の漆黒の黒背景が表示されるようになり、高コントラストで鮮明な映像を撮影できるようになりました。
音声バッファ枯渇を防ぐ独立オーディオスレッド
開発の初期段階では、マイク音声の取得で -ENOMEM(メモリ不足エラー)が頻発しました。
SPIディスプレイの描画処理が走っている間、メインスレッドがブロックされてマイクの受信バッファ解放が遅れ、メモリプールが枯渇することが原因でした。
そこで、音声専用の独立した高優先度スレッド(dmic_vis、優先度5)を新設しました。
50ms単位の音声ブロックを取得した瞬間にメモリを即座にプールへ返却し、波形データだけをリングバッファ経由で描画タスクへ引き渡すアーキテクチャに変更することで、バッファ落ちを完全ゼロ化しました。
Cortex-M33のアライメントトラップ回避
最新のLVGL 9を動かした際、アンチエイリアス付きの円弧や円を描画した瞬間にハードウェアクラッシュ(UsageFault)が発生しました。
ARM Cortex-M33では、非整列メモリアクセスが発生するとCPUが例外を発生させる「アライメントトラップ(CCR.UNALIGN_TRP)」がデフォルトで有効になっています。
LVGLの高速ソフトウェアレンダラーは描画性能を引き出すために非整列16bitアクセス(ldrh)を行うため、プロジェクト設定(prj.conf)に以下を追加してトラップを無効化しました。
|
1 2 |
# Cortex-M33の非整列アクセストラップを無効化 CONFIG_TRAP_UNALIGNED_ACCESS=n |
この設定により、例外クラッシュが解消され、滑らかなアンチエイリアス描画が超高速に動作するようになりました。
LVGL 9用のスタックとメモリプール拡張
LVGL 9の再帰的なウィジェットツリー無効化処理によるスタックオーバーフローを防ぐため、メインスタックを16KB(CONFIG_MAIN_STACK_SIZE=16384)へ拡大しました。
また、複雑な画面遷移や複数コンテナの同時描画に耐えられるよう、LVGL専用の描画メモリプールとして96KB(CONFIG_LV_Z_MEM_POOL_SIZE=98304)を確保しています。
ビルドと書き込み手順(West)
Zephyrの開発環境(West)を用いて、XIAO nRF54L15向けにビルドと書き込みを実行します。
ファームウェアのビルド
PowerShell等で仮想環境を起動し、シールド指定(seeed_xiao_round_display)を付けてビルドします。
|
1 2 3 4 5 |
cd zephyrproject .\.venv\Scripts\Activate.ps1 set PYTHONUTF8=1 west build -b xiao_nrf54l15/nrf54l15/cpuapp --shield seeed_xiao_round_display xiao-round-visualizer |
ボードへの書き込み
ボードをPCに接続し、West経由でファームウェアを書き込みます。
|
1 |
west flash |
書き込み完了後、ターゲットボードが自動リセットされ、鮮やかなサイバーパンクHUDが起動します。
まとめ
Nordicの最新マイコン「XIAO nRF54L15 Sense」と「XIAO Round Display」を組み合わせ、Zephyr RTOSとLVGL 9によるハイエンドな丸型ビジュアライザーを構築しました。
* サイバーパンクHUD: 3D立体ワイヤーフレームキューブ、音声オシロスコープ波形、統合HUDの3モードを搭載。
* ハードウェア連携: 内蔵6軸IMU(LSM6DS3TR-C)と内蔵PDMマイクをマルチスレッドで完全同期。
* 円形GUI最適化: 円の幾何学計算による見切れ防止と、IPSインバージョンによる漆黒の黒背景を実現。
* Cortex-M33最適化: 非整列アクセストラップの解除とメモリ設計により、クラッシュのない安定描画を確立。
手のひらに収まるコインサイズのデバイスとは思えないほど、リッチでSF映画のようなディスプレイ体験が実現できました。
実際の滑らかなアニメーションや動作の様子は、冒頭のYouTube動画でぜひご覧ください!

コメント