JavaScriptを有効にしてください

[自作キーボード]ISP1807搭載Microボードを動かしてみる

 ·  ☕ 4 分で読めます

概要

  • ブレッドボードを使用して、ボードの使用方法とスイッチ動作について確認した
    • ピン番号の指定記述に問題がないか
    • 半田付の不備等が原因の問題がないか

 
不具合発生時の原因切り分けがしやすいようにボード使用時の基本的な部分を理解する。

前提

やったこと

  • 前回に引き続き、自作キーボード制作を目指しての作業
  • スイッチを使用する回路の基本について調べた
  • Arduinoの構文について調べた
  • 使用するマイコンボードのピンについて調べた
  • 実際に動かして、スイッチが反応することを確認した

回路について

https://manva.hatenablog.com/entry/2021/01/20/175736

上記サイトで図を使用した詳細な説明がされていた。
そこからさらにわからないことを掘り下げた。

VCCは電気の発生源っぽいけどGNDは何?

https://www.seikatsu110.jp/library/electrical/et_short_circuit/22553/

上記サイトの説明がわかりやすかった。
かなりざっくり言うと、電気の終着点みたいな感じ。
Arduinoのピン読み取り時は、ここと繋がったピンはLOWとして読み取られる。

内部プルアップ抵抗

  • 今回使用するボードはArduino環境での開発ができるとのことで、内部プルアップ抵抗が存在する
  • アクティブローにするときはピンモードの指定をINPUT_PULLUPにしたら良い
    https://docs.arduino.cc/built-in-examples/digital/InputPullupSerial
  • とりあえずスイッチをINPUT_PULLUPに設定したピンとGNDに接続したら押した時にLOWになる

 
Arduinoの公式ドキュメントは使用例も載っていてわかりやすかった。
外部に抵抗を置く必要がなくなるので、キーボード制作では内部プルアップ抵抗を使用したアクティブロー回路が一般的っぽい。

Arduinoの構文について

https://www.arduino.cc/reference/en/

上記公式ドキュメントに詳しく記載されている。
ハイ・ローのような状態がどんなものか、ピンモードとはという基本的な部分から書いていた。
今回は以下を使用する。

  • pinMode
  • INPUT_PULLUP
  • LOW
  • Serial.begin
  • Serial.print
  • digitalRead
  • setup
  • loop

 
あとはC++の構文を知っておいた方が良いっぽいけど、なんとなくで進めていって、それでうまく動かない時に詳しく見るようにする。
普段rubyを使用しているので、差が大きくて学習コストが高そう。
動く成果物がモチベーション維持につながるのでとりあえず動かしてみる方針でいく。

動かしてみる

早速動かしてみる。
各ピンとスイッチを接続して、スイッチを押した時にGNDとつながるように回路を作る。
スイッチの幅により連続して設置できなかったので、線がごちゃごちゃしている。

回路
回路: 現物

「スイッチを押すとシリアルモニタにLOWとして読み取ったピンの番号が表示される」ことを以下のコードで確認する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <bluefruit.h> 
const byte inputPins[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 15, 14, A3, A2, A1, 21 };

const int pinCount = 16;

void setup() {
  for ( int i = 0; i < pinCount; i++) {
    pinMode(inputPins[i], INPUT_PULLUP);
  }
  Serial.begin(115200);
}

void loop() {
  for ( int i = 0; i < pinCount; i++) {
    if (digitalRead(inputPins[i]) == LOW )
    {
      Serial.print(inputPins[i]);
    }
  }
}

ボードを見たときにD2とかA1のような記載がある部分について、Dの方は数字だけで使用できそうだった。
リセットスイッチがある方からみて右側については、文字列での記載だったのでよくわからなかったからProMicroで使用されている場合を参考に、多分14から16なのだろうと思って動かしたら、動いたが、1415の位置は思ってたのと逆だった。
A1とかはそのまま動いたけど、画面上の表示は数字になった。(上のコードで21となっているところはA0だった。)

高速でループしているので、ポチッと押しただけでもめっちゃ表示される。
チャタリングとはこのことだろうと実感できたのでよし。

シリアルモニタ
シリアルモニタ: 押したところ

ピン配置について

ボード自体にも記載されているが、細かくて読みづらかったので回路図も確認した。
スイッチサイエンス社の回路図

回路図
回路図: 上記から一部抜粋

動かして確認した感じ、ピン指定時は以下の記述でよさそう(リセットボタンのある側から見て)

左側右側
221
320
419
518
615
714
816
910

その他

MISOについては以下のサイトで詳しく記載されていた。
https://www.asahi-net.or.jp/~gt3n-tnk/SPI1.html

通信に使用するためのものらしい。

まとめ

  • スイッチの回路にはアクティブロー、アクティブハイの2種類がある
  • 他の人のキーボード処理の実装を見るときは、上記のどちらになっているか意識して見る必要がある
  • 実際に動かせたことで、ピン指定の記述方法と通電には問題ないことがわかった
  • 配列の中に文字列と数字が混在しているのは違和感があるので、数字に統一した方が良いのか?と言う疑問はあるがどちらでも一応動いたので今後何か不具合があってから考えることにする
  • 今回よりも多いスイッチを使用する場合にはキーマトリクスを使用して対応する必要がある

書いた人
keee
Webエンジニア

目次