Attiny85(4)―ミニゲーム機 | virt_flyのブログ

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑ブレッドボードで作ったTinyJoypad インベーダーゲームに不要な上下移動キーは未完成状態。

 

人気のTinyJoypadをつくる

 

 今まで通りではつくれないTinyJoypad

 

以前、光るアクリル板にかえて透過ディスプレイにすれば、いっそのことカラー化もできていいんじゃないかと、まじでネット検索したことがありました。その際に出会ったのが「Mira&Luna’s nursery lab」という姉妹によるサイト。そこで初めてATtiny85自体とATtiny85を使ったミニゲーム機TinyJoyPadのことを知ったものでした。

 

今回、ATtiny85を使って今すぐにでもできそうなものは何かと考えたとき、思い浮かんだのは電子オルゴールの他にミニゲーム機がありました。

 

これが、少々甘かった。

 

 

本家がダメでも別サイトのゲームプログラムをDLすればよい

 

↑TinyJoypadののサイト いくつものゲームがあるのだが、簡単には楽しめなくなった

 

ゲーム機づくりを、いざ試してみようと思ったところでびっくり。あろうことか開発者のDaniel ChampagneさんのサイトTinyjoypad.comを訪れると、ゲーム機のディスプレイに必要なライブラリがソースコードには含まれず、自分でhファイルをつくれ、と書かれているではありませんか。

 

そんなの聞いてなかったよ、と泣き言を口にしつつ、とても自分ではhファイルは書けないので、ネットでTinyJoypadを扱った新しい記事に解決法を求めることにしました。

 

何とうれしや、この間ATtiny85のArduino化で勉強させてもらっていた東京バードさんのサイト「ぶらりweb走り書き」に解決法が書かれていました。

 

↑すぐ使えるTinyJoypad用のゲームが公開されていてありがたいGitHubの「gametiny」

 

TinyJoypad用にうまく修正されたゲームデータがGitHubに公開されているというのです。GitHubの「gametiny」には、すべてではないにしても、おおくのゲームのファイルが掲載されています。ラッキー!

 

 

●指定の抵抗器がなくても代用ができる

 

喜びもつかの間、問題はそれだけではありませんでした。次に判明したのがTinyJoypadづくりに指定された抵抗器が、10KΩ以外は手元に揃っていないことでした。OLEDディスプレイや圧電ブザー、タクトスイッチも5個以上手持ちがあるというのに…。

 

TinyJoypadの作製に必要なパーツ一覧

・ATtiny85

・0.96インチOLEDディスプレイ(124×64 I2Cタイプ SSD1306)

・タクトスイッチ 5個

・圧電ブザー

・抵抗 10KΩ1個、22KΩ2個、33KΩ2個、88KΩ(または91KΩ)2個

・他 電源スイッチやジャンパー線

 

 

↑TinyJoypadの回路図 10KΩ、22KΩ、33KΩ 、88KΩ(または91KΩ)の抵抗を使い分圧

 

DanielさんのTinyJoipadでは、8ピンしかないATtiny85のピンの不足を補うために、抵抗を使って電圧を違えてどのタクトスイッチが使われたかがわかるようにされています。「抵抗分圧」(電源の電圧が、直列接続された 各抵抗の大きさに比例して分圧される)という現象の応用だそうです。

 

ぞれだけ重要な抵抗ですから、揃っていた方が良いに決まっていますが、異なる値の抵抗で代用する方法があることもわかりました。Kazuさんの「Kazuの模型部屋」の記事によれば、その際プログラムの条件分岐部分の変数の値をあらたな電圧に対応したものに変えてやればいいということになります。

 

Kazuさんの回路図では、抵抗は88KΩを20KΩに、他はすべて10KΩに置き換え、20KΩも10KΩを直列につなぐことでまかなわれていますから、これなら無駄な抵抗のパック買いをいくつもせずとも回路が組めます。

 

やったね!ということで、さっそくブレッドボード上に回路を組み立てたのが冒頭の写真です。この写真では、目標とするインベーダーゲームを動かすのに不要な上下移動キー部分についてはキーのみで抵抗は付けておらず未完成な状態です。

 

なお、違う抵抗値で代用することは、先にふれたようにプログラムの書き換えがゲームごとに必要になりますから、指定の抵抗を揃えた方が無難でしょう。

 

 

 ATtiny85にゲームプログラムを書き込むまでの手順

 

それでは、マイコンチップATtiny85にゲームプログラムを書き込むまでの手順を記します。ATtiny85への書き込みも慣れてきましたので、簡略化します。

 

 

●前提

 

①パソコンへのArduino IDEのインストール

 

②WindowsへのAVRプログラマーUSBaspのドライバーのインストール(ATtiny85への書き込みにUSBaspの使用を前提)

 

③Arduino IDEへのATtiny85用のボードパッケージのインストール

 

以上の3点は、すでにインストールされているものとします。

 

詳しくは、ATtiny85(1)ーArduino化ATtiny85(2)―スケッチの書き込みと実行 を参照。

 

 

●手順の実際

 

①ゲームプログラムのダウンロード

ブラウザでGitHubの「gametiny」を開き、[Code]をクリック

→[Local]タブのなかの[Download Zip]をクリックすれば、一括してゲームプログラムがダウンロードできます。

 

②解凍したファイルからArduino IDFを起動

ダウンロードしたgametiny-master.zipを解凍

→あたらしくできたgametiny-masterの中から、目的のゲームプログラムフォルダ(ここではTiny_space_invaders)を開き、inoファイル(Tiny_space_invaders.ino)をダブルクリック

→目的のゲームファイルを開いたArduino IDEが起動します。

 

③ボード、ポート、Chip、Clock source、書き込み装置の選択

 

 

Arduino IDEのメニューにある[ツール]を選択し、ドロップダウンメニューを開きます。

→[ボード]は[Attiny25/45/85(No bootloader)]を指定

→[ポート]を指定

→[Chip]は[ATtiny85]

→[Clock Source]には[16MHz(PLL)]

→[書き込み装置]を[USBasp(ATTinyCore]と指定します。

 

④ブートローダーのインストール

Arduino IDEのメニューにある[ツール]を選択し、ドロップダウンメニューを開きます。

→[ブートローダを書き込む]をクリックしてブートローダーをATtiny85に書き込みます。

 

⑤グラフィックライブラリーのダウンロード

 

 

0.96インチOLEDディスプレイ(Ī2Cタイプ SDD1306)用のライブライリーは、GitHub - Defragster/ssd1306xledからダウンロードします。

 

⑥Arduino IDEへのグラフィックライブラリーのインストール

 

 

ライブラリーのインストールには、ダウンロードしてきたファイルからArduino IDEへインストールすることができます。

Arduino IDEのメニューにある[スケッチ]をクリック

→次いで[ライブラリをインクルード]を選択

→[.ZIP形式のライブラリをインストール]をクリック

→ダウンロードしたzipファイルを選択してインストールします。

 

⑦ゲームプログラムの修正

前述のと おり、TinyJoypad回路に使用する抵抗が変更されていますから、それに合わせてプログラムの次に示す箇所の修正をしないと、移動キーがうまく働きません。書き換えは、電圧を読み取り0~1023の変数で表す「analogRead」を使った条件分岐の部分の閾値です。

 

if ((analogRead(A0)>=750)&&(analogRead(A0)<950)) {Sprite[0].DirectionV=0;}

else if ((analogRead(A0)>500)&&(analogRead(A0)<750)) {Sprite[0].DirectionV=1;}

if ((analogRead(A3)>=750)&&(analogRead(A3)<950)) {Sprite[0].DirectionH=1;}

else if ((analogRead(A3)>500)&&(analogRead(A3)<750)) {Sprite[0].DirectionH=0;}

 

エディターで表示箇所を、Kazuさんにならいあらたな抵抗分圧を反映して750→600、500→400と書き改めます。

 

⑧ゲームプログラムの書き込み

プログラムが修正できたら、ATtiny85にへの書き込みです。

Arduino IDEのをメニューにある[スケッチ]をクリック

→次いで「書き込み装置を使って書き込む」をクリックすれば、コンパイルの後、完了が表示されます。

 

●動作確認

 

TinyJoypadがおおよそ完成したところで、試験的にインベーダーゲームを動かしてみることにしました。

 

 

ゲームは無事に起動し、キーで操作もでき、音も鳴り、TinyJoypadの動作確認は成功です。

ATtiny85というこんな小さなマイコンチップにプログラムを書き込み、ゲームで遊べるようにできるなんてすごいですね。

 

随分昔のこと、同じく8ビットであるCPUのZ80にEPROMやRAM、PIOなどを加え、たいそうにマイコンボードを組み上げときには、LEDを点灯させるのがやっとだったことを思い出し、ついつい対比してしまいます。

 

何よりも、ゲーム画面は、単色ながら他の方もおっしゃるとおりすごくきれいです。

今回はブレッドボード上で作製したための制約があって、どうしてもキー操作が不自由になります。本格的にゲームを楽しむには、やはりユニバーサル基板上に移すのがよさそうです。望むらくは、もう少し大きな画面で楽しめたらと思います。

 

 

≪参考サイト≫