皆さん、550円で買える小さなコンピューター、Raspberry Pi Picoをご存じでしょうか?
今回はそんなRaspberry Pi Pico使った工作例として、テンキーを作ってみたいと思います。
実際にパソコンに干渉するようなキーボードにするのは難しかったので、キー入力をプログラムで読み取るだけのものをつくりました。
初心者でもわかりやすいように丁寧に紹介していきます。是非ご覧ください。
・この記事でわかること
・自作テンキーの作り方 ・自作テンキー用のサンプルコード
またRaspberry Pi Picoについて詳しく知っておきたい方はこちらの記事で解説していますので、あらかじめご参照ください。

テンキーとは
テンキーとは、パソコンのキーボードなどについている数字を入力するためのキーです。0から9まで10個の数字を入力することからTen Keyと呼ばれるようになりました。
具体的なイメージはこんな感じです。

材料
使用した材料を以下にしめします。
- Raspberry Pi Pico
- ピンヘッダ
- キーパッド作成キット
- ブレッドボード
- ジャンパーワイヤ(オスーオス推奨)
入手方法ですが、Raspberry Pi Pico本体以外の材料は秋月電子さんで購入しました。
特にキーパッド作成キットは秋月電子さんのオリジナル商品のようなので、同じように工作を考えている方はご注意ください。カタログページのリンクを以下に載せておきます。(PRではありません)
※秋月電子とは秋葉原に店舗を構える電子部品屋さんのことです。通販での販売もしていて個人でも気軽に電子部品を買うことがでるのでおすすめです。
作り方
完成イメージ
完成イメージは図2に示す通りです。

キーパッド本体作成
まずはキーパッド本体を作成していきます。といっても秋月電子さんが説明書を用意してくださっているので、その通りにはんだ付けをしていきましょう。
私の場合、ボタンの色が気に食わなかったので、同じ規格の別のボタンを購入し、取り替えました。
商品のページはもう一度こちらに貼っておきます。(例によって1円ももらっていません。秋月電子さん、ご連絡お待ちしています)
組み立て終わったキーパッドを図3に載せます。

配線
まずはRaspberry Pi Picoにピンヘッダをはんだ付けします。ピンヘッダの足がRaspberry Pi Picoの裏に来るようにはんだ付けを行ってください。(図4参照)

それが完了したらブレットボードにRaspberry Pi Picoを差し込みます。差し込み方は自由ですが、私は図5のように差し込みました。(ピンヘッダはd列とi列にささってます)

ここからジャンパーワイヤを使って組み立てたキーパッド本体とRaspberry Pi Picoを配線していきます。
キーパッドの8本のピン(図3参照)とRaspberry Pi Picoのピン番号の配線時の対応表を以下に示します。
ピン番号とは、Raspberry Piのピンに設定された番号であり、番号はRaspberry Pi Picoの公式サイトから見ることができます。ブレットボードの数字とは別ですので混同しないように注意してください。
この表はVSYSと▼をつなぐ、GP2とXをつなぐ…といった具合で見てください。
Raspberry Pi Pico | キーパッド |
VSYS | ▼ |
GP2 | X |
GP3 | Y |
GP4 | Z |
GP6 | A |
GP7 | B |
GP8 | C |
GP9 | D |
必ずしも表通り配線する必要はありませんが、サンプルコードをそのまま使う場合はこの通りに配線してください。
サンプルコード
配線が完了したら、いよいよキーパッドを動かしてみましょう。
付属の説明書からキーパッドの入力を受け取るサンプルコードを以下に載せておきます。Raspberry Pi Picoをパソコンにつなげ、Thonnyから実行してみましょう。
実行環境がまだ整っていない方は、こちらの記事で環境構築を解説していますので是非ご覧ください。

テスト用コードは実行時にキーパッドの入力が、Thonnyの実行画面に print関数で表示されるようになっています。
import machine
from machine import Pin, PWM, ADC
import time
import sys
#キーパッドから数字を受け取る関数
def TenKey_geter(A=6,B=7,C=8,D=9,X=2,Y=3,Z=4):
sw_a = Pin(A, Pin.IN, Pin.PULL_DOWN)
sw_b = Pin(B, Pin.IN, Pin.PULL_DOWN)
sw_c = Pin(C, Pin.IN, Pin.PULL_DOWN)
sw_d = Pin(D, Pin.IN, Pin.PULL_DOWN)
sw_x = Pin(X, Pin.OUT)
sw_y = Pin(Y, Pin.OUT)
sw_z= Pin(Z, Pin.OUT)
output=""
sw_x.high()
sw_y.high()
sw_z.high()
swiches=[sw_x,sw_y,sw_z]
for x in swiches:
x.low()
#print([sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()])
if sw_x.value()==0:
if [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[0,1,1,1]:
print("*")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,0,1,1]:
print("7")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,0,1]:
print("4")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,1,0]:
print("1")
elif sw_y.value()==0:
if [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[0,1,1,1]:
print("0")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,0,1,1]:
print("8")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,0,1]:
print("5")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,1,0]:
print("2")
elif sw_z.value()==0:
if [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[0,1,1,1]:
print("#")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,0,1,1]:
print("9")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,0,1]:
print("6")
elif [sw_a.value(),sw_b.value(),sw_c.value(),sw_d.value()]==[1,1,1,0]:
print("3")
time.sleep(0.05)
x.high()
return output
#関数を繰り返し実行
while True:
TenKey_geter(A=6,B=7,C=8,D=9,X=2,Y=3,Z=4)
まとめ
いかがだったでしょうか?
今回はAruduino用のサンプルコードしか提供されていませんでしたが、その部分に関しては自分で作成することができました。
電子工作初心者の私でも比較的簡単に作ることができたので皆さんも是非作ってみてください。ありがとうございました。
コメント