Arduinoアプリケーションの開発手順 パート1

私は、ゼロからのMakerプロジェクトの開発プロセスについて、フォーラムの投稿シリーズを書くことにしました。私のアイデアの手順を示し、さまざまな段階を通して経験した開発における問題を取り上げたいと思いました。私が思うに、最初の段階はアイデア出しと回路設計の開発です。一番難しいのは、特定の開発ボードで動作するようなアイデアを思いつくことだろうと思います。合理的と思われるアイデアを思いついたら、制限事項について私が作成したこのフォーラムへの投稿:開発キットの制限事項 - 互換性の判断方法をご覧になることをお勧めします。開発プラットフォームの制限事項を知ることで、自分のアイデアが可能かどうかを見極める能力が向上するでしょう。

Makerプロジェクトのアイデア:双方向LEDを使ったチックタックトー

私が思いついたアイデアは、どちらのプレーヤーが置いたコマかを示す双方向LEDを使用して、2人用のチックタックトー(三目並べゲーム)を作ることでした。このアイデアを実現するために設定した前提条件は次の通りです。

  • それぞれプレーヤーに異なる色が必要(双方向LEDを使うのが望ましいが、2種類の異なるLEDを内蔵した適当な部品が見つからなければ妥協する)。
  • プレーヤーごとに切り替える方法が必要。プログラミングロジックまたはハード設計を利用する。
  • 各コンポーネントには十分な電流が必要(Arduinoでは一般に1ピンあたり40mAに制限)。

このリストにより、ゲームの設計は、私が慣れ親しんだ開発ボード(Arduino UnoとArduino Mega 2560)の制限範囲内で十分可能だと確信しました。

最初の回路構想

電子設計の最初のアイデアには、トランジスタを使ってプレーヤーを切り替える方法が含まれていました。そうすれば、少なくとも理論的には、入力/出力(IO)の数を減らすことができます。このアイデアはうまくいきませんでしたが、設計プロセスではやはり重要でした。以下は、私が思いついたものの回路図です(簡単のために、9つのライトのうち2つだけを示しています)。

ラベルがついた丸印は、UnoやMegaのIOポートです(Unoのポートがこんなに少ないとは思いませんでした)。PlayerSW1出力とPlayerSW2出力に交互にロジック制御出力を供給するというものです。特定のライト(赤または青)への各出力は、トランジスタの1つがオンである場合にのみ発生します。理論的には、これでIOを大幅に削減できます。LED用の出力が9つ、プレーヤーコントロール用の出力が2つ、そしてどのボタンが押されたかをチェックするための入力がさらに9つあります。この場合、合計で20 IOになります。もう1つのオプションは、1対1のセットアップです。ボタンをチェックするための9つの入力とLEDを制御するための18の出力で、合計27 IOになります。このアイデアはうまくいかなかったので、図には入力回路を示しませんでした。

トランジスタのアイデアの問題点

トランジスタのアイデアは、配線やコードの可能性の検討を始めるまでは、良さそうに思えました。以下は、少し検討した後に分かった顕著な問題点です:

  • 双方向LED1個につき2個のトランジスタが必要で、合計18個の部品と、さらにトランジスタのための抵抗が18個必要です。
  • あるプレーヤーのトランジスタをすべて並列に接続(または共通バス接続)すると、次のプレーヤーの色が関係なく切り替わってしまい、手番ごとに色を変えることができない、という制御上の論理ミスに気づきました。

設計の先々を考えるのは難しい作業です。時には、物理的に回路で実験を始め、思考過程の論理的なミスを確認することも必要です。幸い、テストの結果、基本的な設定が機能することがわかったので、みなさんはトランジスタに無駄なお金をかける必要はないでしょう。

最終的な回路設計

私にとって、1対1の設計が最も理解しやすく、ブレッドボード上で配線しやすいことが判りました。以下は、基本的なポート配線図です(実際の配線の写真と、セットアップ全体の分かり易い図は後ほど掲載することとし、ここでは簡単のため9個のうち3個のライトのみ示しています)。

このバージョンでは、約0.6Vの電圧降下があるトランジスタを搭載していないため、LED用の抵抗の値が変わりました(この値は、5V入力でベースに500Ωの抵抗を付けた回路を、デジタルマルチメータでテストしました)。2つ目の注意点は、各ボタンの後にある10kΩの抵抗が「プルダウン抵抗」として入力に接続されていることです。これはArduinoの入力を確実にHIGH(5V)かLOW(0V)のどちらかに読み取るようにするもので、プルダウン抵抗を使用しない場合、エラーが発生することがあります。

全体として、この設計は実装が簡単で、必要な部品が少ないので安価です。ただし、この設計は、必要な入力と出力が多すぎるため、Unoでは不可能です。Arduino Mega 2560を使うという選択肢もありましたが、これはポートがたくさん用意されているためです。

なぜ、このように回路全体ではなく、部分的なスナップショットを掲載したのか、不思議に思われるかもしれません。

このプロジェクトの全体デザインは、系統だてた色を使用しても非常に圧倒されます。個人的には、回路は簡潔な手法を用いて繰り返されるいくつかの要素に単純化した方が、はるかに「理解しやすい」と感じています。簡潔なデザインは、最終的な回路にもっと多くのものがあることを意味し、デザインの実際の外観や感触を全く表していません。初心者の回路設計者の多くは、このような設計に戸惑うことになります。なぜなら、「スケール感」がなく、実際の配線にどう反映されるかという感覚もないからです。小さな図の意味を理解するには、小さな丸印はArduinoの利用可能なデジタルポート、双方向LEDと10kΩの抵抗に接続された小さな三角形はArduinoのグランド(GNDと書かれたピン)として扱えばよいのです。実際には、ポートから部品に接続され、グランドに戻る物理的なワイヤが回路を構成しています。要するに、スペースを節約するために、グランドをワイヤで接続しないままで残す方がずっと簡単です。図中の同じ種類の接地記号(設計者によっては、接地点の種類によって異なる記号を使用する場合もあります)は、明示的に描かれていない場合でも、常に接続されています。簡単化のために、これらのポイントにワイヤを引くのは冗長です。スタート図を簡略法で描いてみるかどうかは、あなた次第です、あなた個人にとって最も意味のあることを行ってください。次回は、私が選択したコンポーネントについて説明し、Fritzingを使用して物理的な世界をよりよく表現する配線図を提供します。

こちらに、参考までに回路設計全体のPDFを示します(全く同じ部品を使ったわけではありませんが、配線図は私のブレッドボードにあるものと概ね同じです)。TTTFRZ_schemPDF.pdf(1.8 MB)




オリジナル・ソース(English)