アナログ3ピンで4×3キーパッドを接続 - Arduinoピン節約テクニック
必要なパーツと材料
| パーツ | 数量 |
|---|---|
| Arduino UNO | 1 |
| 4×3マトリックスキーパッド(12キー) | 1 |
| 抵抗 330Ω | 1 |
| 抵抗 1kΩ | 3 |
| 抵抗 3kΩ | 1 |
必要なツール
- はんだごて
使用ソフトウェア
- Arduino IDE
プロジェクト概要
課題:通常のマトリックスキーパッドは7ピン必要
4×3キーパッドは通常、行4本+列3本の計7本のデジタルピンを消費します。ピン数の少ないUnoやNanoでは大きな負担です。
解決策:抵抗ラダーでアナログ3ピンに集約
各列に異なる抵抗値を配置し、行ごとの電圧分割でキーを識別する方式。3本のアナログ入力(A0-A2)のみで12キーを判別できます。
回路原理
各列にプルアップ抵抗(R5=R6=R7=1kΩ)を、各行に異なる抵抗(R1=0Ω, R2=330Ω, R3=1kΩ, R4=3kΩ)を直列接続。キー押下時、該当する行・列の組み合わせで固有の電圧が各列出力に現れます。ADC値の閾値判定でどのキーか特定します。
ADC値の区間設計(5V駆動時)
| キー行 | ADC値の目安 | 許容範囲(±100) |
|---|---|---|
| 行1 (R1=0Ω) | 1023 | 923-1123 |
| 行2 (R2=330Ω) | 769 | 669-869 |
| 行3 (R3=1kΩ) | 512 | 412-612 |
| 行4 (R4=3kΩ) | 256 | 156-356 |
±5%抵抗でも区間が重ならないよう設計されています。3.3V駆動でもADC基準電圧が電源電圧なら値は変わりません。
Arduino接続
キーパッドの列出力3本をA0, A1, A2に接続。行側の共通線は5Vへ。R1(0Ω)は配線で直結。
自作キーパッドプロトタイプ
リサイクルキースイッチで自作し、5ピンコネクターでArduino接続。動作確認済み。
Arduinoコード
/* Analog 4x3 Keypad - 3アナログピンで12キー読取
* G. Carrera - 2018/11/19
*/
// ADC閾値(±100マージン)
const int NADCmin[4] = {923, 669, 412, 156};
const int NADCmax[4] = {1123, 869, 612, 356};
const char keys[12] = {'1','4','7','C', '2','5','8','0', '3','6','9','E'};
int keyVal[3]; // A0, A1, A2の読み値
void setup() {
Serial.begin(9600);
}
void loop() {
char k = KeyPad();
if (k != 'N') {
Serial.print("Key = ");
Serial.println(k);
delay(500); // チャタリング防止
}
}
char KeyPad() {
KeyScan();
// 全列の値が小さい = キー未押下
if (keyVal[0] + keyVal[1] + keyVal[2] < 40) return 'N';
delay(10); // アンチバウンス
KeyScan(); // 再読取
for (int col = 0; col < 3; col++) {
if (keyVal[col] > 40) { // この列でキー押下検出
int val = keyVal[col];
for (int row = 0; row < 4; row++) {
if (val >= NADCmin[row] && val <= NADCmax[row]) {
return keys[col * 4 + row];
}
}
}
}
return 'N';
}
void KeyScan() {
keyVal[0] = analogRead(A0); delay(1);
keyVal[1] = analogRead(A1); delay(1);
keyVal[2] = analogRead(A2); delay(1);
}
回路図

拡張性
アナログ入力を1本追加し、行用抵抗を1つ追加すれば4×4キーパッド(16キー)にも対応可能。さらに拡張も同様の原理で可能です。
製造プロセス
- ArduinoとExcelで制御する8×8・16×16 WS2812 RGB LEDマトリックスアニメーション
- スマート渇きアラート植物アラーム – 最適な水やりタイミングを知らせるDIYセンサー
- イタリア語ワードクロック自作:Arduino Nano、NeoPixel、LCD、RTCで時刻を文字で表示
- Arduino MKR Fox 1200で作る信頼性の高いSigfox kWhメーター
- Bluetooth対応温度モニター:Arduino NanoとHC-06でスマホ監視
- 非接触ジェスチャー錠: APDS-9960とArduinoでセキュアアクセス
- Arduino Nanoコンパニオンキット – 電子工作に必須の部品とツールを搭載した多機能IC型デバイス
- Arduino Micro/Leonardo用 USB-MIDIアダプタキット – 完全パーツリストと実装ガイド
- Arduino用絶縁アナログ入力回路の設計:LM331 V-F変換+フォトカプラでノイズ耐性を確保
- RGB 32バンド オーディオスペクトラムビジュアライザー - Arduino LEDマトリックスプロジェクト
- Arduino UNOで作る精密反応速度テスター