C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

自作キーボード界隈で賑わうそのハッシュタグの謎をあきらかにすべく我々は KiCad の入り口へ向かった

(※今回の記事は技術冒険譚の第0話、主人公の手記みたいなものです。ただの KiCad 初見プレイメモにつき、正しい解説や知識をお求めなのにこのページへ導かれてしまわれた不幸な方はそのままそっ閉じされる事をおすすめします。)

自作キーボード界隈の賑わいを眺めていると、しばしば KiCad というキーワードを目にした。おそらく PCB 設計に便利なアプリなのだろう…。今朝ほどからちらほらと Twitter#meishi展 というハッシュタグも見かけ、これはどうやら meishi 互換サイズの自作キーボードの PCB 設計のみせあいっこの様相を呈している風でとても楽しげなのだ…。

と、いうわけで、思い立ったので私も KiCad で名刺サイズの自作キーボードの PCB 設計をしてみよう…と、 KiCad の初見プレイへと挑むのでした🐰

note: PCB = Printed Circuit Board; いわゆる一般にいう電子工作的な世界の「基板」。ポリ塩化ビフェニルではない。

  • KiCad EDA
    • KiCad Licenses | KiCad EDA
    • "A Cross Platform and Open Source Electronics Design Automation Suite"
    • GPLv3 の OSS らしい。誰でも自由に使用できる。素晴らしい。

↓ install しましょう。ヘルプは English と日本語だけに、環境変数の設定は on にしておきました。わりと高性能なPCでも数分かかった。茶でも飲んでゆるりとまつべし。執筆時点のバージョンは 5.0.2 。

f:id:USAGI-WRP:20190216064012p:plain

↓ KiCad の起動自体ははやい。一瞬で起動してくれる。

f:id:USAGI-WRP:20190216074724p:plain

meishi/meishi.kicad_pcb at master · Biacco42/meishi · GitHub を開いてみた。

f:id:USAGI-WRP:20190216074922p:plain

PCB を設計した事はないので↑を1つのお手本として仕組みを解析する事にした🐰

先ずは基本操作から。

  • CTRL+マウスホイール: 左右スクロール
  • SHIFT+マウスホイール: 上下スクロール
  • マウスホイール: 拡縮
  • マウス中ボタンのドラッグ・アンド・ドロップ: 上下左右移動
  • 画面右側の Layers Manager / Layers を on/off すると基板の構造を積層的に切り替え表示して確認できる

f:id:USAGI-WRP:20190216080011p:plain

  • Layers Manager は画面左側にでる↓ボタンで画面右側に on/off できる

f:id:USAGI-WRP:20190216080246p:plain

「たのしい人生」など一部が左右反転して表示されるのは基板の裏側をひっくり返して見た時に反転して期待通りの表示にするための工夫のようだ。KiCad で裏面へ文字や絵を出したければ反転して扱う必用がありそうだ、という知見を得た。

  • 画面上側の拡大鏡で何かを見ているアイコン "Open footprint viewer" をぽちると "Library Browser" というのが出てくる
    • 基板上での再利用可能な部品を小分けに登録しておける仕組みのようだ。

f:id:USAGI-WRP:20190216081427p:plain

f:id:USAGI-WRP:20190216081901p:plain

f:id:USAGI-WRP:20190216081938p:plain

  • 何も無いところからのドラッグによる範囲選択、あるいは配置された部品っぽい部分の左クリック選択などして↑のライブラリーの部品単位で適当にドラッグ・アンド・ドロップすると位置を動かせるようだ。
  • 選択した部品上で右クリックでコンテキストメニューを出せ、回転もできた。

f:id:USAGI-WRP:20190216082557p:plain

↑適当に移動したり回転したりすると白い直線が電極となるホール部分から伸びた。 KiCad はPCBに特化したCADアプリだけあって「配線情報」を保持している事が見える。とはいえ、配線については後回しにして他の要素、操作を確認する事にする。

Layers から F.Cu, B.Cu (たぶん Front-Cuprum, Back-Cuprum からの略称だろう)を on/off して眺めたり、F.SilkS, B.SilkS, F.Mask, B.Maskシルクスクリーン、マスク…など適当にいじってそれっぽい感覚・経験値を積む。

なんとなく KiCad の雰囲気もわかってきたので先人の紹介記事など見ながら答え合わせや情報の補完ができるようになる。

↑さいわい、 id:uchan_nos さんが3年前にレイヤーの概説を書いてくれているのがすぐに見つかったので捗った。

Twitter の自作キーボード界隈でしばしば見かける3DCGな基板の表示も KiCad が内蔵しているようだ。

  • 画面上部のメニュー 👉 View 👉 3D Viewer (または ALT + F3

f:id:USAGI-WRP:20190216090740p:plain

↑ぉー、なるほどなるほどー😃(適当にごちゃごちゃ部品配置をいじった状態ですみません😅)

f:id:USAGI-WRP:20190216090920p:plain

f:id:USAGI-WRP:20190216090905p:plain

Render current view using Raytracing をぽちっとしたらレイトレになった。基板かっこいいからな…、レイトレしたくなるお気持ち、ワカル😃

f:id:USAGI-WRP:20190216091310p:plain

↑ Library Browser からも同様の操作で部品単位の 3DCG を眺められるようだ。こちらでは Library Browser の部品を選択すると自動的に 3D Viewer の部品も追従するところが skosh 嬉しい。

ドローツール的な Add graphic lines, Add graphic circle, Add graphic arc, Add graphic polygon, Add text on copper layers or graphic text でお絵かきしてみる。

f:id:USAGI-WRP:20190216094153p:plain

f:id:USAGI-WRP:20190216094125p:plain

f:id:USAGI-WRP:20190216094625p:plain

お絵かき操作は最初の左クリックで基点となる点を決定、続いて2点目以降の制御点や半径が必用なものは次以降のクリックで決定、続いて必用な場合は終端でクリックまたは ESC で操作するようだ。ドラッグ・アンド・ドロップではなく1つ1つ左クリック操作で正確に逐次確定してゆくスタイルに CAD 味を感じる。

f:id:USAGI-WRP:20190216094052p:plain

↑裏面用に左右反転したテキストも作成時の Text Properties の Display を Mirror に切り替えるだけで作れるらしい。べんり😃

f:id:USAGI-WRP:20190216095119p:plain

f:id:USAGI-WRP:20190216095249p:plain

中二病をくすぐる距離表記もかんたんに追加できた。じっさい数値がわかると安心できるので各所に描き込んで生きたい。

f:id:USAGI-WRP:20190216095840p:plain

↑範囲選択や CTRL+クリックで複数のオブジェクトを選択した状態でコンテキストメニューまたは R または SHIFT + R で回転したり、位置をまとめて動かしたりもできる。線の太さや配置先のレイヤーなどもオブジェクト単位で何度でも再設定できる。

f:id:USAGI-WRP:20190216100900p:plain

↑オブジェクトの行列様の複製をばしっと作れる Create Array のような機能もある。キースイッチやダイオードを並べるのに便利そう。

さて、そろそろ配線の仕方を習得したい。配線のない PCB では意味が極めて薄い😅

ここまで冒頭をのぞき KiCad の中でも pcbnew という PCB をにゃんにゃんするプロセスで遊んできたけれど、どうやら KiCad ではいきなり pcbnew で PCB を作って配線も仕込むという事ではなく、 eeschema というプロセスで回路図を書いて部品と部品間の配線を定義するらしい。

f:id:USAGI-WRP:20190216105950p:plain

↑ meishi の repos にも KiCad のファイルは pcbnew のほか幾つかある。 .pro が KiCad のメインプロセスで扱える KiCad のプロジェクトファイルっぽい。開いてみた↓

f:id:USAGI-WRP:20190216112509p:plain

ここから配線習得の参考にしようと Schematic layout editor ( = eeschema )を起動してみたが…

f:id:USAGI-WRP:20190216124226p:plain

f:id:USAGI-WRP:20190216124339p:plain

/(^o^)\

これはどこかにライブラリー置き場でもあって別途入手しなければならないのかなー…などと思いつつ、 Twitter でぼやいたところ、@SA_EndlessGame さんから KiCad のバージョンアップに伴うライブラリー統合の影響かも、と教えて頂きました。ありがとうございます😃

多分KiCAD4.0で作ったと思います
5.0はいくつのライブラリーが1つにマージされたのでnot found errorが多いです、、、

↑この情報のおかげで、「それなら Remap Symbols」でもぼちぼち解決できるかと思いお試し↓

f:id:USAGI-WRP:20190216125831p:plain

f:id:USAGI-WRP:20190216125908p:plain

わりとなんとかなったっぽい😃

f:id:USAGI-WRP:20190216130826p:plain

↑回路図が幾つかに分離した状態で書かれている。クワッと理解しようと回路図の部分を集めてみた。

  • 配線の不要な端子は No Connect (図ではクロス記号)
  • 離れて書かれた回路図同士の結線はラベルでわかるように作ってある(ラベルはどうやら配線と関連付けられているという事ではなく独立したオブジェクトとして加えてあるようだ)

例によって右側のツールで部品を置いたり配線を描いたりして eeschema との親睦を深める事にした。オブジェクトの選択方法やドラッグ移動方法に癖が強いので僅かながら多めに学習コストが必用だった。

f:id:USAGI-WRP:20190216140848p:plain

↑適当に部品を置いてみたり。

f:id:USAGI-WRP:20190216140940p:plain

↑配線しなくても部品の端子をくっつけて配置すれば結合されるっぽいなーと遊んでみたり。

f:id:USAGI-WRP:20190216141153p:plain

↑配線でダンジョン描いてみたり。

f:id:USAGI-WRP:20190216142937p:plain

謎のオブジェを作りながら基本的な操作感は掴めた。しかし、よくわからないのがやっぱり「配線」だった。回路上でどう見ても結合した配線を書いたら配線だよねって事はさすがにわかるのだけど、 meishi の eeschema では Pro Microrow0, col0, col1, col2, col3 とキースイッチ回路が分離された図になっている。

しかしどうやら分離された端子(厳密には回路上は分離されていないので端子ではないのだけど)同士が接続されているという情報はどこかで保持されているらしく、 highlight net で配線をポチると eeschema の図面上では分離されている配線が同じラベルのついたもの同士は分離されたまま同時にハイライトされる。

f:id:USAGI-WRP:20190216143331p:plain

f:id:USAGI-WRP:20190216143641p:plain

↓試しに、 Pro Micro から col0 ラベルされた配線を外してみる。

f:id:USAGI-WRP:20190216143923p:plain

↑相変わらず離れた配線同士も繋がっている扱いになっている。

↓次の試しとして、 col0 ラベルを配線から離してみた。なにやら マークが出ているので何か起こるかもしれない気がした。

f:id:USAGI-WRP:20190216144158p:plain

↑ハイライトが切れた😃

と、いうわけで、どうやら基板上で離れた配置、基板の Cu で配線したい回路部分同士の配線は「同じラベルを付ける」ことで接続される扱いになってくれるらしい事がわかった。

f:id:USAGI-WRP:20190216152935p:plain

↑ eeschema わかってきた🐰

しばらく遊んでみて、1つ簡単なスキーマとPCBを新規作成してみる事にした。

f:id:USAGI-WRP:20190216155129p:plain

ここで、秋月電子など日本では一般に「トグルスイッチ」と呼ばれるスイッチをつけようと思ったらシンボル名がわからない。 "toggle" とか "3P" とかでは出てこないのでグーグル先生の力を借りてみた。すると、

こんな記事を見つけて、どうやら「トグルスイッチ」は SPDT らしい事がわかった。

f:id:USAGI-WRP:20190216155349p:plain

↑なるほど、「シングル・ポール・ダブル・スロー」で SPDT なのね😃

f:id:USAGI-WRP:20190216155820p:plain

↑はじめての KiCad のスキーマができました。どこからともなく VCC を頂いてトグルスイッチで on/off できる適当にぽんわり光る赤色 LED の回路(のつもり)です。

この辺りで一般的な KiCad で回路作成から PCB 作成までの進め方の概説に倣ってみる事に。グーグル先生に伺うと、

など手順が整理されていて参考にしやすいな、と。

回路を書くところまではよいとして、アノテートは気づいていなかった。さっそくやってみる↓

f:id:USAGI-WRP:20190216160356p:plain

アノテーションを入れてみた結果。 Tools 👉 Annotate Schematic のダイアログを使うのだけど、 Annotate してダイアログを閉じてしまうと「何も起こらなかった??」と見た目の変化のなさに思うのだけど、アノテーションのダイアログを再び出して見ると、どうやら細やかな調整、アノテートがきちんと行われていたらしい。次回からは "Keep this dialog open" のチェックは on で実行するとしよう😃

続いて、ERC(エレクトリカル・ルール・チェック)というのも試してみる。…試してみたい…のだけど、参考にしている↑のQiita記事では Tools にあるであろう ERC が私の環境の KiCad には無いらしかった。しょんぼり。

f:id:USAGI-WRP:20190216161341p:plain

↑しょんぼり、しながら少し考えて Tools のお隣の Inspect に怪しみを感じたところ、無事発見できた😃 このアイコンはメニューの下のボタン群にも居るなーと気づいた↓

f:id:USAGI-WRP:20190216161504p:plain

↓さっそく ERC ダイアログから Run してみるとエラーが4件。こんな簡単な回路でエラーが出ると思っていなかった💀

f:id:USAGI-WRP:20190216161632p:plain

3つめのエラーが潰しやすそうな気がした。↓ここが接続されていない、と。

f:id:USAGI-WRP:20190216162048p:plain

「もしかしたら ≪緑のワイヤー≫ に対してしかラベルによる離れた回路部分同士の接続は行われないのではないか?(このスイッチは端子に直接ラベルを貼っていた)」

と気付き、試してみる。

f:id:USAGI-WRP:20190216162345p:plain

↑どうやらアタリだったみたいで、エラーの数が 4 → 2 へ減った。ついでにエラーの指摘位置も少し変わった。おかげでスイッチの端子 2 も修正すればエラーが減りそうとわかる。

ついでに、アノテートの結果が少し妙だと気付き、抵抗とLEDのそれぞれのフィールドで Reference(≃アノテーション) と Value を逆に入力してしまっていたとわかり修正↓

f:id:USAGI-WRP:20190216163207p:plain

さて、それで改めて ERC のエラーは残り2つ↓

f:id:USAGI-WRP:20190216163446p:plain

VCC があって GND があって線も繋がっているはずなのにエラーにされる意味はわからないのでググってみると、

よくわからないが PWR_FLAG という power port を GND に直結すると GND のエラーが解消されるらしいのでとりあえず深く考える前に試してみた↓

f:id:USAGI-WRP:20190216164903p:plain

じっさい、エラーは1つ減った。残りは VCC の似たような雰囲気のあるエラーのみ。GND 側と同様に PWR_FLAG なる謎のオブジェクトを繋いでみる↓

f:id:USAGI-WRP:20190216165423p:plain

↑…エラーが無くなった。オマジナイは嫌いだ。

しかし、調べても結局 ERC で電源系を器用に扱えるようにするためわざわざ VCC や GND とは別に用意してあって統合もされていないらしい、という、つまるところユーザーにとってはオマジナイでしかないが、おそらく開発ポリシー上変更されない不便なのだろう、という事がわかっただけだった…。見事な初見殺し仕様😂

さておき、それはそれとして、次へ進める前にもう1つ「 Vcc ではなく +5V だよねここ」と気になったので変更してアノテートと ERC を再確認しておいた。

f:id:USAGI-WRP:20190216173002p:plain

それではいよいよ pcbnew へ…と思ったけれど、その前に「フットプリント」の関連付けとやらを一般的にはするらしい。どうやら具体的な部品仕様(≃フットプリント)の選択を回路図に関連付ける作業をするようだ。

f:id:USAGI-WRP:20190216173507p:plain

よくボタン群を眺めてみると、「アノテート」、「ERC」、そして「フットプリントの関連付け」は並んで置いてあった。操作動線が配慮されたよいボタンたちだ😃

などと思ったのだが、「フットプリントの関連付け」をぽちったら即座に怒られた↓

f:id:USAGI-WRP:20190216173755p:plain

エラーメッセージから察するに、どうもこの新規作成したプロジェクトの前に参考として開いて遊んだ meishi のプロジェクトの設定が伝搬してしまっているが、ディレクトリーがそもそも異なるのでライブラリーを開けずにエラー報告してきた、という事のようだ。おそらく、 KiCad が想定しているユーザーのプロジェクト置き場とディレクトリーの切り方、みたいな仕様があるのだろう…。

↓ Preferences 👉 Footprint Libraries を見ると Global Libraries に meishi を開いた時に追加された pro micro と library が居るので、とりあえず今は不要なのは間違いないので remove しておく。また後ほど自キPCBを作成する際にはお世話になると便利なのかな😃

f:id:USAGI-WRP:20190216181839p:plain

と、ここでどうも私の kicad 環境は妙な状態になっているらしいと気付く。てっきり kicad のインストール時に大変な時間を掛けてコピーしていた大量のファイル群にここで参照できる部品類も含まれているのだろう、と思っていたのだけど、何1つ出ない。

そこで少し調べると kicad の公式ライブラリー群は github の3つのリポジトリーを設定する事で使用可能になるらしい事がわかった😃

さっそく、 symbols, footprints, packages3d の3つを設定したところ、10分ほど kicad が「応答なし」になるという事態が発生してしまった。もうダメかなこれは、と思ったところで無事に制御可能にアプリが復帰し、LEDはじめ多くの部品を参照可能になった。…しかしリポジトリーを設定してから10分ほどアプリが応答なしでごりごりロード処理を行うというのは…心臓に悪かった。せめて公式ダウンロードページに「10分以上応答しなくなるけど待っててね!」とか目立つように書いておいて欲しい😂

f:id:USAGI-WRP:20190216193547p:plain

…しかし…データが膨大過ぎて型番で検索もできないのでつらい…。秋月電子通商とかスイッチサイエンスとか部品調達先ごとの単位でそれぞれのお取り扱い部品のライブラリーがあると嬉しいのだけど…。

それと、抵抗に抵抗されました…。

f:id:USAGI-WRP:20190216200639p:plain

LED はすぐに今回採用予定の砲弾型を見つけられた。スイッチは本当はトグルなんだけど探せなかったので回路的には同じ3Pのものを充てた。そして抵抗を探しはじめて数分、いや10分くらい?

先ず、 "reg" でフィルターしていてまーったく出てこないなーと。これは "registance" ではなくて "resistance" なので私が間抜けでした。それに気づいてからも "R" で検索しないと出てこないらしい事をライブラリーのファイル名からお察ししつつ…、 "R" だと絞り込みに苦労し、結局ちまちま 3D Viewer を見ながら探すことしばらく…。 KiCad 初見プレイで唯一楽しさよりも疲弊が大きかったのはこのフットプリントのライブラリーの設定からフットプリントの関連付けでした…。

これは自キで実用する前に設定を整理したり、公式に無い3Dモデルを調達したり、作ったり、部品を用意したり…しておく必用がありそう。…などと Twitter でぼやいていたら、

キーボード用のライブラリだと↓がいいかもですね。
https://github.com/keebio/Keebio-Parts.pretty …
そのあたりの情報がまとまっているのが↓です。
https://pskbd.booth.pm/items/1044084
おすすめです!

@swan_match さんから教えて頂きました!ありがとうございます!🙏🙏🙏

さてさて、少し手間取りましたが、続いてはいよいよ PCB です😃

f:id:USAGI-WRP:20190216201301p:plain

↑ぽちっとなー↓

f:id:USAGI-WRP:20190216201339p:plain

Generate Netlist して

f:id:USAGI-WRP:20190216201425p:plain

↑ぽちっとなー↓

f:id:USAGI-WRP:20190216201505p:plain

pcbnew のクロイガメンに帰ってきたーーー😃 …何もなくて真っ黒なだけだけど。

基板と設計した部品のサイズ感に慣れていない事もあり、今回は pcbnew ではじめに Read netlist してフットプリントを見ながら基板を掘ったりすることにしました。

f:id:USAGI-WRP:20190216213406p:plain

f:id:USAGI-WRP:20190216213553p:plain

↑ごちゃーっと読み込まれた。

f:id:USAGI-WRP:20190216220019p:plain

↑「基板設計」らしく配置。ついでに四隅に M3 ボルト用の穴を開けてみた。基板の大きさは 24mm × 16mm 。まだ途中だけど 3DCG の実装済み基板の絵をプレビューできるのってなんだか嬉しい↓

f:id:USAGI-WRP:20190216220316p:plain

そして、よーやっと「配線」😃

f:id:USAGI-WRP:20190216222412p:plain

参考に meishi を眺めていた時には pcbnew での配線をどう作るべきかわからないでいたけれど、操作にもやや慣れて、 eeschema から pcbnew へ設計を進めてきた事で、どうやら pcbnew で部品の端子間に ≪白い線≫ が引かれるのは「配線すべき端子同士だけど未配線だよ」の意味だと悟った🐰 そこで、白い線の出ている端子同士を配線で繋いで見ると案の定で ≪白い線≫ は消えて良い感じの配線パターンが組まれた。

f:id:USAGI-WRP:20190216223037p:plain

裏面へ配線を作ったので 3DCG でも裏側をひっくり返してみると配線パターンを見られる。パターン萌え😃

3DCG を見ると、 +5VGND の穴のレジストにマスクが必用と気付く↓

f:id:USAGI-WRP:20190216223726p:plain

円形の「パッド」を両面のマスクへ書けばよい…はず…と、思ったのだけど、パッドを作成するボタンが見当たらない。仕方がないのでポリゴンでマスクを作成した↓

f:id:USAGI-WRP:20190216230741p:plain

f:id:USAGI-WRP:20190216230929p:plain

さて、 vias で開けた VCC と GND の穴をポリゴンではなくマスクに描きたいと pad とやらを探し続けて疲れてしまったので今日はここまで。

この段階で Design Rule Check ( DRC )にかけてみるとエラーがたくさんでてきた。

f:id:USAGI-WRP:20190216234711p:plain

f:id:USAGI-WRP:20190216234652p:plain

今日はもうオネムなのでまた続きは明日。