4x3キーパッドのピンは3つだけ
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
はじめに
このプロジェクトの目的は、テンキーに必要なピンの数を大幅に減らすことです。これは、ArduinoUnoやNanoboardで利用できるものと比較して多くのI / Oピンが必要になることが多いためです。
通常の数字キーパッドはマトリックスで構成されています。4x3キーパッドには、4 +3のArduinoデジタルピンが必要です。 Arduinoで使用するために、ネット上で多数のライブラリを利用できます。
私の解決策
次の図に示すような回路で、3つのアナログ入力のみを使用するため、私が提案するソリューションははるかに優れています。
<図>
各列には、4つのキーのそれぞれに対応する4つの電圧値と、キーが押されていない場合のゼロボルトのみがあります。同等のスキーム(b)では、R1eは4つの抵抗R1〜R4の1つを示し、R2eは3つの抵抗R5〜R7の1つを示します。
次に、4つの可能な最も広い間隔を作成する方法を見てみましょう。まず、抵抗R2e =R5 =R6 =R7を等しくすることができます。次に、R1 =0に設定して、出力を5Vの最初のラインに対応させることができます。
R2 =330オーム、R3 =1 kオーム、R4 =3 kオーム、R5、R6、R7 =1 kオームの場合、出力ごとに次の間隔が得られます。
<図>
ご覧のとおり、3つの出力の間隔は可能な限り最大であり、±5%の許容誤差を持つ6つの標準抵抗を使用できます。追加のアナログ入力と別の抵抗を使用すると、4x4キーボードなどを使用できます。次の図は、Arduinoとの接続を示しています。
<図>
この図では、抵抗R1がライン2に接続されています。これは、ライン1の抵抗R1がワイヤで描画されているため、抵抗の基準が1つスケーリングされているためです。ピン割り当ては、アナログとしてピン構成可能である限り、必要に応じて変更できます。
もちろん、Arduinoに3.3Vで電力が供給されている場合、ADCコンバーターはデフォルトで供給電圧を使用し、ADC番号は変更されないため、何も変更されません。
このタイプのキーボードを使用せずにプログラムをテストするために、リサイクルキーを使用してプログラムを作成しました。下の図はmyprototypeを示しています。 5ピンの右コネクタを使用してArduinoに配線します。
<図>
コード
- Analog4x3Keybf.ino
Analog4x3Keybf.ino Arduino
KeyPad()関数をテストする簡単なプログラム/ *プログラムAnalog4x3Keybf * 3つのアナログ出力を備えた4x3キーキーボードのテスト* G.Carrera- 2018年11月19日* ///キーボード出力値の制限:const int NADCm100 [4 ] ={923,669,412,156}; const int NADCp100 [4] ={1123,869,612,356}; const char key [13] ={'1'、 '4'、 '7'、 'C'、 '2'、 '5' 、 '8'、 '0'、 '3'、 '6'、 '9'、 'E'}; int keyval [3]; int i、colp、val; void setup(){Serial.begin(9600); //シリアルモニターで使用} void loop(){char k; k =KeyPad(); //キーパッドを読み取るif(k!='N'){//キーが押されたSerial.print( "key ="); Serial.println(k); delay(500); }} / ********プログラムで使用される関数******** / char KeyPad(){//キーパッドを読み取り、charキーを返します// key ='N' for none KeyScan(); //アナログキーボードを読み取るif(keyval [0] + keyval [1] + keyval [2] <40){return'N '; } else {//キーが押されたdelay(10); //アンチバウンスKeyScan(); //アナログキーボードを再読み取りして(i =0; i <3; i ++){//どの列に属するかを特定するif(keyval [i]> 40){colp =i; val =keyval [i]; //これは(int j =0; j <4; j ++){//列で押されたキーを識別しますif(val> =NADCm100 [j] &&keyval <=NADCp100 [j]){return key [colp * 4 + j];壊す; }}}}}} void KeyScan(){//アナログキーボードの読み取りkeyval [0] =analogRead(A0); delay(1); keyval [1] =analogRead(A1); delay(1); keyval [2] =analogRead(A2); delay(1); }
回路図
製造プロセス