見出し画像

自作キーボード備忘録。3 プルアップで楽をしよう

自作キーボードを基盤からガッツリ作ろうと思います。大学の授業でたまたま集まった6人がメンバーです。でも、誰一人として自作キーボードの知識は(大して)ありません。4ヶ月くらい経ってプロジェクトもちょいちょい進展してきてダニングクルーガーの頂点を超えたあたりになってきたのでここらで整理した形で残しておきます。

前回までのあらすじ

前回は1キーキーボードの仕組みを知るために、キーを押すと電流が流れるような回路を作り、その電流が流れた場合をArduinoで察知してキーを入力するということを行いました。

前回は、「あれ?自作キーボード作る時に抵抗のはんだ付けやらんくない?」ってとこで終わりました。

今回からは、電気についての内容が増えるため、キーボードのための電磁気学という記事をアップロードしておきました。話についていけなさそうだと思ったら適宜そちらを参照してください。

プルアップ抵抗に入る前に

前回、実は嘘をついていました(当然前回の内容を僕がやった時はそんなこと気にしなかったのですが)。前回の記事にこんな場面と回路図がありましたね。

普段は電流が流れてないけど、押されたときには電流が流れて、それを察知すれば良いわけです。

画像1

これ、嘘です。いや、正確には前者はあっているんですが(構造上の理由ですが後述します)。しかし後者の画像は明確な嘘です。

キーボードのための電磁気学をやったならお気づきかもしれませんが、これだとマイコンのピンには電流は流れません。なぜなら、ループが完成していないからです。ループがないということはキルヒホッフの法則が成り立たないので、電流はながれなくなります。なので、上の図は間違いです。正確にはこうなっているみたいです。

画像2

そして、文章がなぜ誤りかと思いきや正確には本当なのか、その理由を掘り下げるとこうなります。

・プログラム上では、1ピンの"電位"が高いとスイッチが押されたという判定をしている。

・マイコンは電位が高いか低いかの判断を、マイコン内の抵抗(内部抵抗)にどれくらいの電流が流れたかによって検知している。(多分。電圧計の仕組み的にこうなっているはず。)

ということで回路+マイコンに書き込まれたプログラムだけを見ると文章は間違っているのですが、さらに掘り下げると間違っているわけでもないということです。このときでもプルダウン抵抗が必要な理由はキーボードのための電磁気学で解説してるので今回は割愛させてもらいます。

プルダウン抵抗めんどくさい問題

さて、これまでの流れをかえりみるに、どうやら1キーにつき1個の抵抗が自作キーボードには必要なようです。ということは60キーキーボードなら60×2=120回分はんだ付けが増えますね!上達しそう!

流石にめんどくさい。それにプルダウンはちょっとした問題があって、マイコンに大電流が流れ込む確率が少しあるみたいです。(通常使用ではまず無いです。なので実験程度なら問題ないです)マイコンに想定以上の電流が流れ込むと故障の可能性があるのでこれは避けたい。

ということで、プルダウンは辞める方針で行きましょう。(既存の自作キーボードみんなプルダウン使ってませんし)救世主に来ていただきます。チャッチャカッチャッチャ チャーチャチャー

\プルアップ抵抗~/ (ft. 大山のぶ代)

そもそもプルアップとは

その名の通り、引き上げておくのがプルアップです。何を引き上げるのか?電位です。基準となる電位を電源電圧まで引き上げておくのがプルアップです。そして、そのために用いるのがプルアップ抵抗といいます。

プルダウン抵抗との比較をしましょう。プルダウン抵抗が必要なのは、確実に何も無い時に0Vにピンをしておくためでしたね。基準電位をGNDにするのがプルダウン。基準電位を電源電圧にするのがプルアップ。うんなんだかいけそう。

画像3

プルアップにせよ、プルダウンにせよ、やりたいことは同じです。「ピンを浮かせない」

浮かせないというのは、どこにも接していないがために、電位の基準から離れていて、不安定になることを避けようってことでしたね。なぜ抵抗が必要なのか、簡単に言えばスイッチをONにした時に、ショート(電源の+と-が抵抗なしにつながること)を防ぐためです。

なぜ救世主?

ようしわかった。じゃあこうやって回路を組めばいいんだろう。

画像4

確かにこうすれば、スイッチがOFFのとき、ピンは電源電圧に引き上げられていて、スイッチがONになればピンはGNDと同電位になります。

画像5

抵抗あるのに電位降下起きないのか!!って思われる方もいると思います。確かに起きます。でも10kΩの抵抗ごときでは、10MΩの抵抗の1000分の1の抵抗値なので、プルアップ抵抗で起こる電位降下はせいぜい0.005Vです。これくらい見逃せます。そして、スイッチをOFFにすると電流は流れやすい方に流れるので、ピンの電位も0になります。(心配な人は計算してみてください。)

でもよく考えてください。これ、配線増えてませんか?おまけに抵抗もついてるし…

ということで、ArduinoやProMicroには便利な機能があります。チャッチャカッチャッチャ チャーチャチャー

\内部プルアップ抵抗~/ (ft. 大山のぶ代)

本日2回目のドラえもんです。内部プルアップ抵抗とは、その名の通り、プルアップ抵抗を内部に作ってくれます。そうすると、配線はこうなります。

画像6

うわ。マイコンの外がスイッチと導線だけになった。おまけに大電流が流れにくくなった。というわけで、救世主、内部プルアップ抵抗で、みんな抵抗のはんだ付けから開放されます。

プログラミングしてみよう

原理さえわかれば簡単です。内部プルアップはpinModeをINPUT_PULLUPにすれば使えます。


#include<Keyboard.h> //キーボードとして使うぜ
const int sw1 = 1;   //1ピンをsw1と呼びますね。

void setup() {
pinMode(sw1,INPUT_PULLUP); //sw1でプルアップ抵抗使います
Keyboard.begin();
}

void loop() {
if(digitalRead(sw1) == LOW){ //ピンの電位がLOWだったら押されてるからキー押してね
 Keyboard.press('A');
 delay(200);
 Keyboard.release('A');
}
else{
 delay(100);
}
}

うん。何も難しくない。ということで、これからはめんどくさいので内部プルアップ機能を使って行くことにしました。

あとはこれとおんなじ感じで、ピンとキーを増やしていけば複数キーのキーボードが出来る…

「ピンが足らんやんけ!」

プロマイクロで使えるピンはせいぜい15,6ピン。これではテンキーですら、ギリギリです。フルサイズキーボードなんてもってのほか。どうするんでしょうか。それにほら、ダイオードの使い方もまだわかってないです。

次回「キーマトリクス」

この記事が気に入ったらサポートをしてみませんか?