Aruduino でデジタルインベーダーを作っているときから思っていたのですが、赤色LEDを30分以上ずっと見ていると気分が悪くなってしまって長時間続けられないことがわかりました。対策として明るさ(Intensity)を変更する機能をつけたりしたのですが、長時間見ているのは辛くなってきました(5分程度でやめれば問題ないです)。
7セグLEDチューブに赤色以外の製品もあることはあるようなんですが、Amazonや秋月のような田舎者でも気軽に買えるストアには見つけられなかったので、以前使ったことのある OLED を使うことにしました。そうすると部品配置に必要な面積が減るので、Arduino NANO を使えばブレッドボードにぜんぶ載せて携帯版が作れるかもしれないと思い、やってみました。完成品がこちら。
大型のブレッドボードを使い、中央に OLED ディスプレイ、左側に Arduino NANO、右側に操作ボタンを配置しました。128×64のピクセル数があるので、7セグLEDより格段に表現力が上がります。「push start button」という表記だけでもレトロ感があります。
スピーカーには、故障した玩具から取り出したピエゾ式の圧電スピーカーを使いました。サイズが小さいせいかピコピコ音も鋭い感じがします。
マイコンには、これまでも何度か使った実績のある Arduino NANO(の廉価版)を使用しました。1個350円くらいだったと思います。USB接続でプログラムを書き込める(※注)し、リセットボタンも付いているし、ピンヘッダを自分でハンダ付けする必要はありますが、程よい大きさで使いやすいと思っています。
(※注)注意点として、廉価版の Arduino NANO はシリアルドライバとして HC340 というICチップが使用されており、ドライバをインストールする必要があります。Windows10 には最初からドライバが搭載されているのでそのまま接続して使えるようです。
あと、ピンヘッダをハンダ付けするときは、ブレッドボードにピンヘッダを挿してその上に Arduino NANO を載せて、ブレッドボードに乗っている状態でハンダ付けしたほうが良いです。
プログラムの変更は、最初に作ったもののLED表示部分をOLED対応にすればよいのですが、表示部分を入れ替えるような設計になっていなかったのでちょっと苦労してしまいました。あとは、スピーカーの特性によって聞こえにくい音があったので変更したりしました。
一通り変更できたので書き込もうとしたら、、、エラーが発生してしまいました。
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x46
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x31
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x2c
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x31
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x37
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x30
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x20
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x73
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x65
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x63
前回 Arduino NANO を使用したときは特にエラーもなく書き込めたはずなんですが、今回は何度やってもエラーになってしまい、悩みました。ググってみたところ、どうやら書き込みのタイミングに問題がありそうということがわかり、調査のために書き込み状況を表示してやってみたら、うまくいきました。
Arduino IDE のメニューから、[ファイル]→[環境設定] を選択すると表示される環境設定画面で、「より詳細な情報を表示する」の「書き込み」にチェックを付けてOKをクリックします。こうすると、Arduino NANOに書き込むときに進行状況が詳細に表示されるようになるのですが、どうやら、このためにタイミングがうまく合うようになったのではないかと思います。
そのほか調整した点としては、Arduino UNO よりも処理速度が遅いせいか、時間調整の数値を変更する必要がありました。タクトスイッチのチャタリング防止のためのカウンタは、1/10程度の数字にしないと検出されないようでした。
やはり OLED でゲームを作ると、(LEDよりは)見やすいし、雰囲気も良いので、いい感じです。Arduino NANO + OLED のパターンで、昔流行したゲームウォッチみたいなゲームなら作れそうな気がします。
動作している様子を動画にしYouTubeにアップしました。
Arduino NANO でデジタルインベーダーを改良してみた【電子工作】
0件のコメント