電子チェス盤の作成


14

木製のチェス盤を作って、通常のピース(つまり、RFIDコード、磁石などを使用する修正されたピースではない)で遊ぶことができますが、それは私の動きに気づき、行動するソフトウェアに接続されています2番目のプレーヤー。

ボード上のピースを検出する方法について考えていましたが、どのピースがどこにあるかを認識する必要がないという判断を下しました。「真実」はソフトウェア内にあるため、ピースをAからBに移動する、ソフトウェアはどのピースが移動されたかを見つけることができます。

そこで、チェス盤の各フィールドに中央に1つ、右上に2つの穴を開けるというアイデアを思いつきました。

  • 中央にあるものは、明るさセンサーに使用され、作品がフィールドに立っているかどうかを検出します。
  • 隅の1つはLEDに使用され、ユーザーがコンピューターのために移動しなければならない部分を示すため、実際の状況がソフトウェアの状況と再び一致します。

Raspberry Piを実行するソフトウェアのハードウェア基盤として使用します。これはNode.jsで記述されます(ただし、この質問では重要ではありません)。

そのため、最終的には64個の輝度センサーと64個のLEDを個別に扱う必要があります。つまり、64個の出力と64個の入力が必要です。そしてもちろん、これはRaspberry Piがすぐに使えるものではありません。128個のI / Oポートを持つよりも良い方法が必要だと思います。

ボードの状態を検出することはより重要なタスクだと思うので、8x8のスイッチマトリックスの処理方法をWebで検索し始めました。ボードの列を順番にスキャンし、各列で行(=フィールド)が使用されているかどうかを検出するマイクロコントローラーを使用する提案を見つけました。

これにより、8個の出力と8個の入力を持つ複雑さが軽減されます(ボードの状態を読み取ることができるように)

これについて、いくつか質問があります。

  1. 私の考えは正しい、つまりこれは正しいアプローチですか、それとも私が気をつけるべきより良い代替案がありますか?
  2. 私はマイクロコントローラーの経験がないので、何に注意する必要がありますか?書くことができる言語でプログラム可能な16ピンのマイクロコントローラーだけが必要ですか?
  3. 誰かがそのようなボードを作成し、プロセスを順を追って説明するチュートリアルを知っていますか?

1
あなたは正しい考えを持っています。ただし、センシングアプリケーションを少し改良する必要があります。ピースのサイズと重量に応じて、遮光または触覚ボタンの検出スキームを使用できます。ここでの本当の質問は、どのピースが何であるかをどのように伝えるのですか?おそらくカスタムピースも必要になるでしょう。たぶん、それぞれにRFIDタグを付けて、それぞれの正方形にRFIDスキャナーがありますか?やり過ぎだが、考え。
mcmiln

1
ここで説明するマトリックススキャンルーティングでは、2行2列に4つのピースを配置することはできません。5-64に3-8線デコーダ(74138)と外挿を見てください
アイシー

2
ピースの最初のラインナップは常に同じなので、ソフトウェアはどのピースがどこにあるかを知っています。その後、ピースをAからBに移動すると、ソフトウェアはどのピースがどこに移動されたかを認識します。もちろん、これは任意のラインナップで開始することはできませんが、これはソフトウェアで手動でセットアップすることもできます。
ゴロローデン

1
これは...面倒です。私はソフトウェアビデオ方式で行っていたでしょう。OpenCVとカメラ。そしてプロジェクター。
通行人

2
このガイドは、センサ/検出組織限り有用であるかもしれない
user2813274

回答:


5

画像は千の言葉に値するので、ここにLDM-24488NIの例があります:64主導のマトリックス

ここに画像の説明を入力してください

アプリケーションには、LED用のマトリックスとセンサー用のマトリックスが1つずつ必要で、合計32のIOピンが必要です。RPiにはそれほど多くないため、1〜8個のdemuxを使用して個々の行と列を選択する必要があります。

ここに画像の説明を入力してください

LEDの場合、一度に1つのLEDしか必要ないため、行と列の両方にデマルチプレクサーを使用できます。センサーの場合、1行で複数のアクティブなセンサーを検出できるように、行にdemuxを使用し、列に個別の行を使用することをお勧めします。これにより、必要なピン数が17ピンになり、RPiで処理できます。


12

はい、あなたが説明する多重化は、物事の配列に対処する一般的な方法です。

最も厄介なのは、光センサーのアナログ特性を扱うことです。CdS LDR(光依存抵抗器)は、感度が高く、安価で、人間の明るさの範囲にわたって容易に測定可能な大きな応答を生成するため、この場合におそらく最適です。電気的には抵抗器であり、明るい光では抵抗が減少します。

8つのアナログ入力を持つマイクロを使用すると、多重化が簡単になります。つまり、半分のマルチプレクサがマイクロに組み込まれています。たとえば、LDRの行を有効にし、8つの列信号をマイクロで直接読み取ります。

64個のアナログ入力を連続的にスキャンすることは、通常のマイクロを使用して、人間の観点で瞬時に簡単に実行できます。100 µsごとに新しい測定値を取得できるとしましょう。小さくて安価なマイクロでも、それは「長い」。これは、ボード全体が6.4ミリ秒ごとにスキャンされることを意味します。これは、遅延を認識するよりもはるかに高速です。

LEDの多重化は、デジタル出力ですべて行われるため、さらに簡単です。多くのマイクロは16以上のデジタル出力を備えているため、これは問題ありません。他にも発生しなければならないことがあり、現在の予想よりも速くピンを使い果たしますが、64ピンマイクロではなくても64ピンマイクロで十分です。

ボードI / Oを処理するためだけに1マイクロを割り当てます。これは、十分なI / Oピン、A / D入力などを持つように最適化されています。次に、UARTを介してメインの計算エンジンに接続します。プロトコルは、「正方形3,2を点灯」または「正方形5,4から削除されたピース」のように見えます。これにより、プロトコルを同じに保つ限り、将来的にまったく異なるハードウェアインターフェイスを使用できます。


7

LEDの場合、これを行う明白な方法は、チェス盤の各行と各列に合計8 + 8 = 16ピンの出力を持たせることです。アノードは行ワイヤに、カソードは列ワイヤに接続されます。点灯させたいLEDの場合、陽極線を正(論理1)、陰極線を負(論理0)にし、他のLEDを逆状態に維持します(したがって、残りのLEDは中性または逆バイアスになります)。

ここでは、マイクロコントローラーが十分に高い/低い電圧を与えて、LEDを別のLEDにブリッジできると仮定しています。そうでない場合は、各ラインにトランジスタまたはバッファが必要になります。5Vの電源では、LEDが約2V低下し、電流制限抵抗で適切な電圧降下が必要であることを考慮すると、タイトです(これらを両方ではなく、行ラインまたは列ラインのいずれかにのみインストールする必要があることに注意してください)。

出力がトライ状態(つまり、ロジック0およびロジック1に加えて、おそらく一時的に入力として構成することにより、高インピーダンス状態に設定できる場合)、LEDを使用して4x8グリッドを巧妙に使用できます逆並列ペアで接続されています。このセットアップでは、未使用の出力を高インピーダンスに設定することが重要です。そうしないと、不要なLEDが点灯します。

どちらの場合でも、電流の引き込みについて、およびソフトウェアエラーが一度にすべてのLEDを一度に点灯する可能性を考慮する必要があるかどうかを考慮する必要があります(考慮しない場合、マイクロコントローラーのその行ラインが過電流になる可能性があります) )


センサーのケースはより複雑です。私はあなたが抵抗性センサーを使用すると仮定しますが、フォトトランジスタは必ずしも一方向にのみ伝導することが保証されているわけではありません。

LEDの点灯に使用するのと同じ8行の出力を使用できますが、検知専用の8列の入力が必要になります。間違いなく、キーパッドの回路を見たことがあるでしょうこのような。これらは一度に1つのキーのみ押されるように設計されていることに注意してください。ユーザーが1、3、7、および9を同時に押すと、キーパッドは、他の3つのスイッチを通る現在のパスがまだ存在するため、ユーザーがこれら4つのキーのいずれかを離したかどうかを検出できません。

ミュージカルキーボード(一度に複数のマトリックス要素が導通するように設計されている)で使用されるソリューションは、各スイッチと直列にダイオードを配置することです。

別の解決策は、次のようなオープンコレクター出力(またはMOSFET ICを使用する場合はオープンドレイン)を備えた4対16デコーダーICを 4つ購入することです。 http //www.unicornelectronics.com/ftp/Data%20Sheets/74159.pdfオープンコレクタとは、ICの出力が電流をシンクするだけで、ソースではないことを意味します。したがって、16個のセンサーをチップの16個の出力に接続し、もう一方の端をプルアップ抵抗と一緒に接続できます(ここでもADCを接続します)。1つの出力を低く(導通)し、他の15は高のまま(非導通)にします。これは、他の15の出力が共通点に電流を注ぐ標準ロジック出力とは対照的です。

これらのICへの入力は、16個の出力のいずれかを選択するための4ビットバイナリですが、チップを有効/無効にする追加の入力もあります。したがって、64個のセンサーに接続された64個のオープンコレクターシンクの配列を潜在的に持つことができ、センサーの他端はすべて単一のプルアップ抵抗とアナログデジタルコンバーターに共通化されます。これには、マイクロコントローラーに合計8つの出力が必要です。4つは4〜16の選択信号(4つすべてのチップに共通)を取得し、4つはイネーブル信号(各チップに1つ)を取得します。

編集:3から8デコーダー(1 of 8 = 1行の8とも呼ばれます)は4から16よりも入手しやすいようですが、8つのICは4よりもはるかに厄介です。8進カウンター(および10 進カウンターのより一般的ないとこ)は、9番目の出力をリセットラインに接続することで8進カウンターとして構成できます。これらは、1つの出力から次の出力に進むためにシリアルパルスを必要とします。デコーダーICのマイクロコントローラー上のI / Oピン。通常、リセットと有効化のための追加の入力があります。シフトレジスタと呼ばれるICもあり、2つのタイプがあります。1つは直列から並列への変換用、もう1つは並列から直列への変換用です。最後に、過電流が発生してもPiが破壊されないように、Rasberry Piとチェス盤の間に配置できるバッファー。これらはすべて、回線の多重化に役立ちます。


1
あなたはシフトレジスタに言及します-それらはLED出力にも使用できます。別のカウンターとトライステート可能な8ビットシフトレジスタは、目に見えるちらつきを避けるのに十分な速さであれば、2つまたは3つ以上のピンでアレイ全体を駆動できます。
ホッブズ

@hobbs OPは一度に1つまたは2つのLEDのみを点灯したいので、ちらつきは問題ではないと思います。LEDを駆動するために、1つのストレートと1つの反転ディケード/オクタルカウンター/シフトレジスタがあれば、トライステートでさえ必要ありません。共通リセット、列送り、行送りの3つのピンが完全に実現可能です。それが進むべき道かもしれません-センサーのより難しい問題のために他のすべてのピンを保存してください。
レベルリバーセント

LEDについては、MAX7219 / 7221 LEDドライバも使用できます。これにより、入力数が3に減ります-クロック、データ、ラッチ。
jnovacho

4

実際、多重化は一般的な方法です。

ラズベリーパイピンをさらに活用するには、いくつかの方法があります

1つは、チップを使用して手間のかかる作業を行うことです。たとえば、ボードの状態を読み取るために8つの入力と8つの出力がある場合は、カウンターを使用して、8つの入力を一度に1つずつ上げることができます。これには、Arduinoに2つのピンが必要です。1つは最初のピンにリセットし、もう1つは「次の行に移動」します。6個のピンを保存しました!

6ピンを保存するだけでは十分ではないかもしれません-ここからどこに行くことができるか見てみましょう:8x8グリッドを16x4グリッドに再配置する場合、http://www.instructables.com/id/16-Stageのようなものを使用できます-Decade-Counter-Chain-Using-two-4017-Chi /?ALLSTEPS(上半分を無視すると、上から下に下がっている2本の線は「リセット」であり、左上にあり、次の行に移動します」。これはCLKと呼ばれ、クロック用です)。これで、ボードの左半分の8を数え、次にボードの右半分の8を数えることができます。列AとE、BとF、CとG、DとHを接続します。

おめでとうございます。2本の出力ピン(リセットとクロック)と4本の入力ピンがあり、合計6本で、10本のピンを節約できます!ラズベリーパイにはアナログからデジタルへのコンバーターがないため、追加の作業が必要になることに注意してください。

次にLEDについて説明します。すでに制御された電源(20年のカウンター)があります-それらを再利用できます。16個の電源ピンから64個のLEDを、抵抗(各LEDには独自の抵抗が必要です!)を介して、他の4つのレールに配置します(上記と同じレイアウト:AE、BF、CG、DH)。これらの4つのレールを4つのトランジスタを介して4つのピンに接続し、すべてのピンを「ハイ」にします。LEDの両側が5ボルトになっているため、LEDはオフになります。次に、LEDを点灯させたい場合は、20年が正しい位置にあることを確認し(その正方形のセンサーを読んでいるかのように)、4つのレールの1つを低く設定します。電流は、10進カウンタの「高」からその特定のレールの「低」に流れるはずです。ねえ、光が点灯します!少し遅れてから、10年カウンタを再度変更する前にオフにします。

さらに制御したい場合は、TLC5940チップのようなものを使用できます-http : //playground.arduino.cc/Learning/TLC5940- 各チップは16個のLEDを輝度レベルに設定できます(したがって、これらの4つが必要になります) 0(オフ)から1024(フルオン)までの範囲で、個々のLEDをフェードインおよびフェードアウトできます。メモリから、これらは約4つのピンを必要とし、デイジーチェーン接続できるため、4つのデジタルピン(1つはPWMである必要があり、ピンの横に「〜」記号があります)が任意の数のLEDを制御します。

幸運を!


Arduinoではなく、RPiです。
ドミトリーグリゴリエフ

申し訳ありません、あなたは正しいです。私が言ったほとんどすべてがまだ適用されるので、私はそれを動作させるためにいくつかの小さな編集を行いました
アマダノン株式会社

0

右上隅にLEDが必要になるとは思わない。あなたが言及したように、中央のセンサーで十分でしょう。トリッキーな部分はチェス盤のコードになります。あなたがチェス盤を持っていると想像してください。行は「アルファベット」として示され、列は「番号」として示されます。

したがって、最初に初期位置でピースのタイプをプログラムするプログラムが必要です。後で、ピースを移動すると、コードはピースの初期位置を最終位置に生成します。これにより、入力が半分に減ります。


5
たぶん私はよく説明しなかったかもしれません…LEDは現在の状態で読むためのものではなく、コンピューターがどの動きをしたいかを示すためのものです。そのため、ユーザーは動きます。明るさセンサーは、使用したことをソフトウェアに伝えます。ソフトウェアはその次の動きを計算し、2つのLEDを点滅させ、ユーザーが作品を動かし、それから再び人間の番です。
ゴロローデン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.