AVRマイコンである”ATTINY85-20PU”を使い開発されている”Daniel Champagne”氏のTinyJoypadを作ってみようと思います。
オリジナルでは電源を3Vのボタン電池としていますが、今回USBから電源を供給するため5Vで製作します。
そのため少し改変した回路図とプログラムについては説明しますが、基本的な製作方法は”Daniel Champagne”氏のホームページで確認できるのでそちらを参照してください。
⇒https://www.tinyjoypad.com/tiny-joypad
必要な部品
秋月電子で全て揃います。(秋月電子だいちゅき)
ATTINY85-20PU | http://akizukidenshi.com/catalog/g/gI-09573/ |
ICソケット8P | http://akizukidenshi.com/catalog/g/gP-00017/ |
Cタイプユニバーサル基板 | http://akizukidenshi.com/catalog/g/gP-09855/ |
タクトスイッチ | http://akizukidenshi.com/catalog/g/gP-03651/ |
47㎌電解コンデンサ | http://akizukidenshi.com/catalog/g/gP-10596/ |
スライドスイッチ | http://akizukidenshi.com/catalog/g/gP-08790/ |
10kΩカーボン抵抗 | http://akizukidenshi.com/catalog/g/gR-07838/ |
20kΩカーボン抵抗 | http://akizukidenshi.com/catalog/g/gR-07842/ |
128x64 ドライバSSD1306 OLED | http://akizukidenshi.com/catalog/g/gP-12031/ |
電子ワイヤ | http://akizukidenshi.com/catalog/g/gP-06756/ |
基板用マイクロUSB電源コネクタ | http://akizukidenshi.com/catalog/g/gC-10398/ |
圧電スピーカー | http://akizukidenshi.com/catalog/g/gP-04118/ |
※コンデンサの容量は10㎌が推奨されています。47㎌の採用に特に理由は無し。
OLEDはAmazonにも同じようなものが売っています。
ちなみに自分はBanggoodで買いました。
回路図
作者様のファイルをダウンロードすると同じような回路図が添付されていますが、今回電圧を5Vで製作することと、指定の抵抗値を持っていなかったので少し改変することにしました。※コンデンサの容量が10㎌となっていますが47㎌の間違いです(別に10㎌で問題ないが)
少し解説
- 5V=何も押していない
- 2.5V=右のタクトスイッチを押している
- 3.33…V=左のタクトスイッチを押している
組み立てる
起動してみる
電圧の読み取りには"analogRead"というものが使われています。
シンプルにアナログピンの電圧を読み取り、0~1023の変数で表すというもの。
例えば5Vだと”1023”になります。
その他の電圧の変数を求めるにはまず5Vを1023で割ります。
5÷1023=0.0048875855327468
変数1あたり0.0048875855327468Vということが分かりました。
後は読み取りたい電圧”2.5V”と”3.33…V”をそれぞれ0.0048875855327468で割ってあげるだけ。
右を押したときの2.5V=変数511
左を押したときの3.33V=変数681
ということが分かりました。
先ほどの変数値を頭においてまずはオリジナルのプログラムを見てみます。
- if ((analogRead(A0)>=750)&&(analogRead(A0)<950)) {if (VarPot>5) {VarPot=VarPot-6;}}
- if ((analogRead(A0)>500)&&(analogRead(A0)<750)) {if (VarPot<108) {VarPot=VarPot+6;}}
2行目が右を押したときのコードです。
解説すると、
1行目は変数値が750以上かつ950より小さい時に実行
2行目は変数値が500より大きくかつ750より小さい時に実行
先ほどの”2.5V=変数511”と”3.33V=変数681”が両方とも二行目の右を押したときの変数値内に収まってしまっていることが分かります。
なので、右を押しても左を押しても自機が右に進んでしまう状態の説明がつきます。
ではプログラムの数値を自分の環境に合わせて書き換えていきます。
- if ((analogRead(A0)>=600)&&(analogRead(A0)<950)) {if (VarPot>5) {VarPot=VarPot-6;}}
- if ((analogRead(A0)>400)&&(analogRead(A0)<600)) {if (VarPot<108) {VarPot=VarPot+6;}}
1行目、左を押したときの変数値681が治まるように600以上かつ950より小さいに書き換え。
2行目、右を押したときの変数値511が治まるように400より大きくかつ600より小さいに書き換え。
以上のように書き換えてもう一度起動してみました。
無事誤作動することなく自機が動きました!
それにしてもカワ(・∀・)イイ!!
今回はインベーダーで試してみましたが、他にも現在12個のゲームを公開されています。
マイコンをカセット代わりに差し替えて遊ぶのも良さそうですね。
0 件のコメント :
コメントを投稿 (クリックでコメント入力欄を表示)