パソコンのキーボードや家電などメンブレンスイッチと呼ばれるもので文字を入力したり、ものを動作させたりすることができます。今回はArduinoを使って、文字の入力をしていきたいと思います。
今回の内容は、メンブレンスイッチの構造はどうなっているのか?
Arduinoで文字入力やリモコン操作ってどうやって設定するの?

こんな質問にArduinoとメンブレンスイッチを使って回路の作成方法から、プログラムの内容まで紹介いたします。
ELEGOO社製のArduino互換品は非常に安価で製品も多数入っているため、初心者が最初に学ぶ際には非常におすすめです。

Arduinoでスイッチ操作するために必要なもの
今回使用する部品はこちらになります。
・Arduino Uno
・メンブレンスイッチ
・ジャンパ線

メンブレンスイッチの構造
メンブレンスイッチは薄さやデザイン性に優れているため、様々な用途で用いられています。この構造は図に示すように、ボタン(表面シート)を押すと上部接点シートと下部接点シートの接点が導通することで、信号がONとなります。これにより、Arduinoのプログラムで設定された動作、例えば、文字を入力したり、LEDを点灯したりモータを回転させたりすることができます。

このスイッチは、4×4の16文字を扱うことができます。しかし、Arduinoの出力ピンの使用本数は8ピンを使用します。これらを扱うために、裏面の配線を確認するとわかりますが、4行(青線)と4つのピン、4列(赤線)と4つのピンが導通しています。これら信号のON-OFFを検知することで、どのボタンが押されたがわかるような仕組みになっています。例えば、6番のボタンが押されたときは、2行目の信号がONし、さらに2列目の信号がONとなるため、どのボタンを押されたかを検知することができます。

Arduinoとメンブレンスイッチの回路を作成してみる
ArduinoのNo2~No9ピンをメンブレンスイッチと接続します。これだけで完成です。

LED等を接続して、1のボタンを押すと点灯すること等もできますので、回路に接続しても面白いです。
Arduinoとメンブレンスイッチのプログラムを作成してみる
プログラム内容はこちらになります。
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
}
ではプログラム内容説明に入ります。メンブレンスイッチを使用するときは、keypad.hのライブラリをインクルードしてください。
インクルード方法は最後の動画で説明しています。

hexaKeysで使用する文字を定義しています。こちらを変えることで、自由に文字を変えることができます。

次に、byte rowPins, byte colPinsで使用するピンの設定(定義)を行っています。

先ほど定義したピンを用いて、keypadの初期設定を行います。出力する文字、ピンの設定を行います。

シリアル通信の初期化を行い、シリアルモニタに表示できる状態にします。その後、getKey()で打たれた文字を取得し、変数customKeyに格納します。文字が打たれると、Serial.println(customKey)とすることで、シリアルモニタに文字が表示されます。

以上でプログラムの内容は完了です。
では実際に動かしてみましょう。
ボタンを押すと、シリアルモニタに文字が表示されます。

プログラムのif文の設定で、押されたボタンが1であればLEDをONにする、モータを動かす等とすることもできますので、実際に試すとメンブレンスイッチでリモコンのように回路を操作することができて、面白いと思います。
ぜひやってみてください。
Arduinoの使い方を基礎から学びたい方はこちらの本をおすすめします。