3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ものづくりイベントで出会った UIAPduino でゲーム機を作る

3
Posted at

はじめに

UIAPduino という小さなマイコンボードを使って、ゲーム機を作ってみました。

128×64 ピクセルの OLED ディスプレイと 3 つのボタン、小型スピーカーを組み合わせたシンプルなゲーム機です。LLM に手伝ってもらいながら制作しました。

UIAPduino で作ったミニゲーム

この記事では、制作のきっかけや、実際に作りながら学んだことを紹介します。

きっかけ

ものづくりへの関心

私は三重県出身で、現在はソフトウェア開発を仕事にしています。

これまでに三重県や愛知県の工場で、機械オペレーターや配送ドライバー、機械・電気系エンジニアと関わる営業など、さまざまな仕事を経験してきました。

東海地方は、自動車産業をはじめとする製造業が盛んな地域です。そうした環境で過ごしてきたこともあり、ソフトウェアに限らず、ものづくり全般に関心があります。

最近は名古屋を中心に活動する Elixir コミュニティ piyopiyo.ex の仲間と、IoT や電子工作の実験を楽しんでいます。

Elixir を使うことが活動の中心ですが、必要に応じて Elixir 以外の技術もいろいろ試しています。

IMG_3148.jpg 20260321_155926.jpg

また、2026 年 10 月に福岡県飯塚市で開催された e-ZUKA Tech Night vol.64 では、愛知県からゲストとして @pojiro さんをお招きし、Nerves を活用した小水力発電の制御システムについて講演していただきました。

約 70 名の方々にご参加いただき、大いに盛り上がりました。

20261002-_1011280.jpg

つくろがや!4 で UIAPduino と出会う

2026 年 5 月に開催されたものづくりイベント つくろがや!4 に、piyopiyo.ex のメンバーとして参加しました。

私たちのブースでは、「感熱紙プリンターでチェキ」という作品を展示しました。制作の中心は IoT に詳しい仲間の @kurokouji さんで、私は少しお手伝いした程度ですが、楽しい経験でした。

そのとき、私たちのブースの目の前にあったのが、UIAPduino の展示ブースでした。

開発者の埋田さんとお話しする機会もあり、なんと UIAPduino を 1 人 2 枚ずつ配布されていたので、私も 2 枚いただきました。

特に印象に残ったのは、誰もが AI を活用して開発しやすくなるよう、インターネット上のドキュメントを意識的に充実させているというお話でした。

そんな話を聞いて興味を持ったものの、当時は具体的に何を作るか思いつかず、いただいたボードはしばらく手元で眠っていました。

同じ会場では、Yugi Tech Lab の展示ブース にも立ち寄りました。

こちらでは、1,500 円で Arduino を使った小さなゲーム機を作るハンズオンを体験させてもらいました。

この体験が、後に UIAPduino でゲーム機を作ってみようと思うきっかけになりました。

DSC_1607~2.jpg

SWEST28 で再び UIAPduino に触れる

その後、2026 年 8 月に開催された SWEST28(組込みシステム技術に関するサマーワークショップ) に参加しました。

組込みシステムの技術や、さまざまな分野で活躍するエンジニアの取り組みを知りたいと思ったためです。

その中でも印象に残ったのが、UIAPduino 開発者の埋田さんによる講演と、LLM を活用した組込み開発のワークショップでした。

つくろがや!4 でもらった UIAPduino が手元にあることを思い出し、以前体験した小さなゲーム機を、今度は自分でも作ってみることにしました。

PXL_20260828_043113833-s.avif

UIAP — SWEST28 講演 資料 2026-10-29_15-26.png

UIAPduino とは

UIAPduino Pro Micro CH32V003 V1.4 は、CH32V003 という RISC-V マイコンを搭載した小さな開発ボードです。

主な特徴は次のとおりです。

  • 48 MHz で動作する 32 ビット RISC-V マイコン
  • フラッシュメモリ 16 KB、SRAM 2 KB
  • Arduino IDE に対応
  • USB Type-C ケーブル 1 本で給電とプログラムの書き込みが可能
  • オープンソースハードウェア

小さくてリソースの限られたマイコンを、Arduino IDE や LLM の助けを借りながら簡単に扱うことができます。

小さなゲーム機を作ってみた

用意した部品

今回のゲーム機には、以下の部品を使用しました。あくまで私が試した構成なので、参考程度にご覧ください。

部品 数量 購入先
UIAPduino Pro Micro CH32V003 V1.4 1 スイッチサイエンス
OLED ディスプレイ 0.96 インチ 1 秋月電子 112031
タクトスイッチ 3 秋月電子 103647
ブレッドボード EIC-801 2 秋月電子 100315
ジャンパーワイヤー 1 セット 秋月電子 131880
ピンヘッダー 40 ピン 1 秋月電子 100167
小型スピーカー 1 秋月電子 110129

UIAPduino 本体以外の主な部品は、秋月電子でまとめて揃えました。

そのほか、プログラム書き込み用の USB Type-C データ通信ケーブルも必要です。

LLM に指摘されたスピーカーの注意点

私はまだ電気回路の知識が十分ではないのですが、LLM に今回の構成をレビューしてもらったところ、スピーカーの接続方法について指摘がありました。

今回使用した小型スピーカーはコイル抵抗が約 25 Ω と低く、マイコンの GPIO に直接接続すると、許容電流を超えるおそれがあるそうです。

実際に音は鳴ったのですが、動作することと安全であることは別の話でした。現在は、圧電ブザーへの変更や駆動回路の追加を検討しています。

LLM のおかげで見落としに気づけましたが、最終的にはデータシートなどで確認する必要があると感じました。

このため、現時点では今回のスピーカーの直接接続を推奨するものではありません。

ゲームの実装

今回の目的はゲーム開発そのものではなく、UIAPduino を使って電子工作を体験することでした。そのため、正直なところゲームの内容にはあまりこだわらず、使用するハードウェアを指定した上で、ゲームの仕様から実装まで LLM に任せました。

LLM が考えてくれたのは、OLED ディスプレイに表示される障害物を避けるシンプルなゲームです。

操作には 3 つのボタンを使います。

  • 左ボタン:左へ移動
  • 右ボタン:右へ移動
  • アクションボタン:ゲーム開始・再開

上から落ちてくる障害物を避けると得点が増え、衝突するとゲームオーバーになります。得点が増えるにつれて障害物の落下速度も上がり、小型スピーカーで効果音も鳴らします。

今回使用した CH32V003 は、SRAM がわずか 2 KB です。

128×64 ピクセルのモノクロ画面全体を 1 ビットずつメモリに保持すると、1,024 バイト必要になり、SRAM の半分を占めてしまいます。

この記事を書くにあたって LLM にコードを確認してもらったところ、画面全体を保持せず、128 バイトのバッファを使って 8 ピクセルの高さごとに描画する方式になっていることが分かりました。

実は、私自身は生成されたコードをまったく読んでいません。今回はゲームの実装を LLM に任せることで、部品の選定や配線、実機での動作確認など、電子工作そのものに集中しました。

最初に動くものができたところで、UIAPduino の開発者である埋田さんにも共有しました。

すると、公式サンプルリポジトリへの Pull Request を勧めていただき、部品一覧や配線手順なども含めて公開することになりました。

埋田さんによると、LLM を活用した開発をしやすくするため、ドキュメントの体裁を整えることにこだわりすぎず、できるだけ多くの情報をインターネット上に公開することを意識しているそうです。

自分の実験が、ほかの人にも試してもらえるサンプルになったのは、うれしい経験でした。

実装は以下で確認できます。

電子工作で学んだこと

はんだ付けとコンスルー

今回使った UIAPduino は、ブレッドボードに接続するためのピンを自分で取り付ける必要がありました。

私はピンヘッダーをはんだ付けしましたが、あとからコンスルーという部品も使えることを知りました。

対応する基板であれば、コンスルーを使うことで、ピンヘッダーのはんだ付けをせずに接続できる場合があります。

電子工作では、部品の種類だけでなく、取り付け方にもいろいろな選択肢があるのだと分かりました。

ブレッドボードと配線

今回はブレッドボードを使って回路を組みました。

ブレッドボードは、はんだ付けをせずに部品を差し込んで配線できるので、試行錯誤に便利です。

一方で、ブレッドボードにはさまざまな形状やサイズがあります。部品を離して配置したい場合や、配線を整理したい場合など、用途によって使いやすいものが変わってきます。

私も実験を重ねるうちに、いろいろなブレッドボードを買い揃えるようになりました。

今回のゲーム機でも、最初に動作するものを作ったあと、配線を何度か変更しています。

UIAPduino ミニゲームの配線図

詳細な配線方法は GitHub の Wiring セクション にまとめています。

ソフトウェアと違い、実際に部品の配置や配線を変えていくのは、また別の楽しさがありました。

DSC_1538.jpg
DSC_1581~2.jpg

DSC_1580~2.jpg

my-uiap-game-wiring.jpg

my-uiap-game-beside-yugi-tech-lab-example.jpg

電源について考える

最初は UIAPduino の USB Type-C 端子から給電していました。

ただ、せっかく小さなゲーム機を作るのであれば、電池でも動かせるようにしたいと考えました。

そのために、以下の部品も用意しました。

単3形のアルカリ乾電池は公称 1.5 V なので、4 本直列なら 6 V になります。

一方、今回用意したエネループは公称 1.2 V なので、4 本で 4.8 V です。

また、実際の電池電圧は使用状況や残量によって変化します。

そこで、入力電圧が変動しても 5 V を出力できる昇降圧レギュレータを使う構成を考えました。

電池をつなげばよいだけだと思っていたのですが、電源についても考えることがいろいろあると分かりました。

なお、UIAPduino の 5 V ピンは USB 電源と内部で接続されているため、外部電源を使う場合は注意が必要です。特に USB 給電との併用は、公式ドキュメントの電源に関する注意事項を確認する必要があります。

my-uiap-game-battery-powered.jpg

オームの法則を復習する

電子工作を進める中で、改めて基本的な電気の知識も復習しました。

例えば、オームの法則です。

$$
V = I \times R
$$

  • (V):電圧(V)
  • (I):電流(A)
  • (R):抵抗(Ω)

ソフトウェア開発では普段あまり意識することがありませんが、電子部品を接続する際には、電圧や電流、抵抗について考える必要があります。

もちろんオームの法則だけで十分というわけではなく、部品の定格や消費電力、マイコンの GPIO の許容電流なども確認する必要があります。

LLM はこうした知識を調べる際にも助けになりますが、電子回路の場合は、間違えると実際の部品を壊してしまう可能性もあります。

データシートや公式ドキュメントを確認しながら進めることの大切さも感じました。

おわりに

今回は、ものづくりイベントでいただいた UIAPduino を使って、小さなゲーム機を作ってみました。

きっかけは、つくろがや!4 で UIAPduino と出会い、Yugi Tech Lab のブースでゲーム機づくりを体験したことでした。その後、SWEST28 で埋田さんの講演を聴き、手元にあった UIAPduino で自分でも作ってみようと思いました。

今回はゲームの実装を LLM に任せ、部品の選定やはんだ付け、ブレッドボードでの配線、電源の扱いなど、電子工作そのものに取り組みました。

LLM の助けを借りることで、慣れていない分野にも取り組みやすくなったと感じています。一方で、実際のハードウェアを扱う以上、LLM の回答を鵜呑みにせず、部品の仕様やデータシートを確認することも大切だと学びました。

普段のソフトウェア開発とはまた違った、実際に手を動かしてものを作る楽しさを味わうことができました。

今回作ったゲームのソースコードや部品一覧、配線手順などは、以下に公開しています。興味のある方は、ぜひ覗いてみてください。


関連記事

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?