KiCadのすすめ(1)
こんにちは。
気付けばもうコミケシーズンとなりました。のどかプラネタリウムは落選したので,今はCOMITIAに向けて作品を製作しています。
さてさて,大会が一段落ついたと言うことでサークル内ではDCマウスの設計に入る人が大勢出てきました。前作では,プリント基板の設計に"KiCad"を使いました。こちらはオープンソースのフリーソフトウェアで,あのCERNも開発に加わっているという回路設計CADソフトウェアです。
しかし部内では未だ"EAGLE"がメインに使われています。「無償ライセンスで出来ることは限られている,時代はKiCadだ!」とよく言っているのですがなかなか布教には成功しません……。
その理由はたった一つ,「先輩がEAGLEを使っているから」と考えています。なんでもちょうど今,先輩が詳しくてわかりやすいEAGLEの使い方を公開されているそうです。
「負けてられるか!」
という理由で,今回から連続して
KiCadの詳しくてわかりやすい
使い方記事を連載しようと思います。
(三日坊主にならなければね)
第1回目の今日は導入方法と基板設計の概要を説明しようと思います。
1. KiCadのインストール
KiCadは現在進行形で開発中のソフトウェアです。そのため,「最新版」と「安定版」が存在します。諸事情により,僕は最新版を導入しているのでこの記事の解説は最新版を用いたものになりますが,皆さんは安定版を利用することをお勧めします。解説も安定版に対応させたもので進める予定です。
・現時点での最新版 2014-12-06 BZR 5312 (DL先:Kicad - open source schematic capture and PCB design)
・現時点での安定版 BZR 4022 (DL先:kicad.jp | オープンソースのPCB CAD『KiCad』の日本ユーザ コミュニティです。)
では,上のKiCad.jpにアクセスし,各自のOSに合わせたインストーラをダウンロードしてきましょう。
インストールをする際には面倒な設定等がなかったはずです。そのままインストールを終わらせてください。
2. いろんな画面
早速KiCadを起動してみてください。すると次のような画面が表示されるはずです。
※繰り返しになりますが,キャプチャ画像は「最新版」のため,みなさんの手元では違う画面が表示されているはずです。安心して続けてください。
今回はまだプロジェクトは作成しないので,以降の記事は気軽に読んでみてください。
画面の右側にいろんなボタンがありますが,これらをクリックすることでそれぞれのCADツールを起動することが出来ます。
・Eeschema:回路図を編集します。
・Pcbnew:基板自体を編集します。
・GerbView:ガーバーデータ(最終的にプリント基板業者に提出するファイル)を閲覧できます。
・Schematic library editor:回路図記号を編集できます。安定版ではEeschemaの中からのみ起動できます。
・PCB footprint editor:フットプリント(部品と同寸法の図)を編集できます。安定版ではPcbnewの中からのみ起動できます。
3. 基板製作の流れ
早くも記事を書くのが面倒になってきましたが,ひとまず簡単に製作の流れを書いて今日は終わりにしておきます。
基板製作にはいくつかのプロセスがあります。
まず始めに,
・回路図作成
ただし,海外で流通しているような有名どころの部品を除き,ライブラリを自分で作る必要が出てきます。従って,
・回路図記号作成
同様に,回路図記号だけでなくフットプリントも作る必要があります。
・フットプリント作成
次に,回路図記号とフットプリントを関連づける作業が必要となります。おそらくここがEAGLEとの一番の違いだと思います。EAGLEでは回路図記号とフットプリントを関連づけた後の部品データを使用するのですが,KiCadではプロジェクトごとに関連づけを行います。
・NETリスト作成
では,いよいよプリント基板の設計に入ります。
・ボード作成
最後にこれらのデータをガーバーデータとして出力し,完成です!
こう思うとかなりの工数がかかっているように思えます……。
初めのうちは慣れなくて全然出来ませんでしたが,そのうちパパッと出来るようになります!
頑張ってきれいな基板を作れるようになりましょう!
では次回,回路図記号の作成に続きます。
C++でのマウス開発
今年の秋頃に入ってから(マウスのプログラムがややこしくなってから),CからC++での開発に切り替えました。
が,それが影響して全然コンパイルが通らない現象に見舞われたので,原因と対処法をまとめておきます。
○はじめから存在していた以下のコードを必ず含めておく。
#ifdef __cplusplus extern "C" { void abort(void); } #endif #ifdef __cplusplus void abort(void){ } #endif
コンパイラのドキュメントを読めば書いてあったような気がしますが,どこか忘れちゃったので思い出したら追記しておきます。
○外部の".c",".h"ファイルで宣言されている関数を呼び出す際,もしくは変数を外部参照する際,必ず次の通りにする(と思います。ミスがあれば報告いただけると幸いです)。
例."interrupt_handlers.c"で宣言した割り込み動作時に呼び出す関数を使用する際,その定義を行ったファイル内に次のコードを追記しておく。
#ifdef __cplusplus extern "C" void interrupt_CMT0(); extern "C" void interrupt_CMT1(); #endif
これは「マングリング」とやらが影響しているようです。
手伝っていただいたサークルの先輩,また次のサイトの作者様,ありがとうございます。
マングリングなどという現象があるとはいえ,C++を使うメリットはかなり大きいと思います。
が,ルネサスコンパイラは標準ライブラリが少ないので全然使い物になりません。
その話はまた後日したいと思います。
日本語は嫌い
今日はとあるソーシャルゲーム会社にお邪魔してきました。
CTOの方ともお話が出来て非常にモチベーションが向上しましたが,その話は省略します。
そのゲーム会社はUnityをメインに使っているそうですが,それ関連で思い出したことがあるので備忘録代わりにメモ。
○Unityを「日本語ユーザー名」のアカウントでセットアップした際,初回起動時に起動できない。
その場合はオフライン認証をすべし。
○PPM(Perl Package Manager)のWindows版を起動しようとしても何の音沙汰もない。
起動しない,そんな場合は作業用ディレクトリを変更し,日本語が含まれないようにすべし。
あらかじめコマンドライン上から,もしくはppm.batに「SET ACTIVEPERL_PPM_HOME=(日本語が含まれないパス)」を追記しておくと良い。
参考: ActivePerl の ppm が起動しない: 男たちの群青
というわけです。
hotmailを日本語で登録していたせいでWindows8パソコンが日本語ユーザー名になってしまいました。
ユーザー名は変えられてもディレクトリ名は変えられないし,非常に腹が立つ……。
なんにせよPC上では日本語がやっかいになることがあるので気をつけるべきだと思います。
赤外線通信(笑)
先日学内で行われたUnitus主催のハッカソンに,Miceとして参加しました。
大半がゲームを作っていた中,僕たちだけはなぜかマウスを持ち込み,GR-PEACHを持ち込み,モーターを持ち込み……,異様な空間が出来ていました。
人目を引くこともあってか,なぜか1票差で最優秀賞! レッドブル2ダースを獲得しました!
……とまあ,そんなことはどうでも良いのですが,個人的には面白い取り組みを一つしたので失敗談を含めて紹介しようと思います。
マウスを動かすだけの簡単なシステムを製作したのですが,それだけではつまらないのでマウスに触れずに動作できるようにしました。
具体的に言うと,赤外線でマウスに行き先座標を送信するというシステムです。
「赤外線通信」と言うと,まずテレビのリモコンが思い浮かぶと思います。
今回は詳しい規格は紹介しませんが,あれは38kHzの搬送波にデータを載せて転送していたはずです。(これは後日たりぷろで実験します。絶対します。)
こいつを,簡易的に実装しようと思い立ち,次のプロトコルをでっち上げました。
(※プロトコル:通信規格のこと。例えばマクドナルドで注文するときには「商品名」と「個数」を言わないと頼めませんし,この基本的なルールは広く知られています。同じように,機械が機械と会話(通信)するときは,何を,どれだけ(何ビット)送信するか,というルールが決まっていないといけません。)
・1語を4ビットとし,「ヘッダ・データ本体・フッタ」を続けて送信する。
・ヘッダは4語で「1111 1111 0000 NNNN」で構成される。
NNNN:送信するデータ本体の語数(0~15)
・フッタは3語で「PPPP 0000 0000」で構成される。
PPPP:パリティ(文字数と送信文字すべてとパリティを加算すると下8桁が1111になるようなビット列)
・1ビットを5msで送信し,赤外線点灯時を1,消灯時を0とする。
つまりビットレートは200bpsとなる。
イメージ出来るでしょうか……?
例えば,ゴール座標{ 3, 1 }を送る場合次のようになります。
「1111 1111 0000 0010 0011 0001 1011 0000 0000 」
今回は近距離無線通信,外乱も非常に小さい環境で動作させたため,また送るデータ量も小さかったので何の問題も無く動作してくれました。
さて,プチ反省会をしましょう。
今回のプロトコルでは全く持ってダメダメな設計をしています。
赤外線センサを教室の上に向け,そして下に向けるとデータ受信が行われてしましました。なぜでしょうか……?
正解はさっき挙げた「外乱」,それと「ヘッダのダメ仕様」です。
教室の上に付いている「蛍光灯」,こいつからは赤外線も出ています。そりゃあ蛍光灯に向けたらセンサが反応しますよね。
これに対応するために,製品化されている赤外線通信の規格では,比較的高周波のパルス波の赤外線が照射されている場合のみ「1」と判断するようになっています。比較的,というのは蛍光灯などの外乱では発生しないレベルで,と言う意味です。
そしてプロトコルのヘッダ部分を見てください,「1111 1111 0000」となっていますよね。赤外線が強いところから弱いところに切り替われば,確かにこのヘッダと一致している! と認識されてもおかしくありません。
例えばヘッダを「1010 1010 1010」としてみましょう。これならば外乱をヘッダと読み違えることも大幅に減ると思われます。
今回の実験でプロトコルの重要性を体感させられました。
この結果を基に,たりぷろの赤外線通信を良い物に出来ればと思います。
ではでは,また。
○今回のサンプルコード
https://github.com/taniho0707/kani_kama
なおバグのため,パリティが一時的に無効化されているコードです,悪しからず。
初めての大会も終わり
お久しぶりです。
マイクロマウス東北大会,マイクロマウス全日本大会も終わり,ようやく落ち着きました。
結果はと言うと,東北大会リタイア,全日本大会予選13位・決勝リタイア,とまあ残念な結果に。
まあ初めて3ヶ月だから良いでしょうと気を取り直し,マイクロマウス2015が始まりました!
今抱えているタスクをざっと挙げると次の通りに。
・マイクロマウス2015。これには今の機体の大幅改造と,そのうち始めるであろう次回作があります。それとソフトウェアを製作します。
・他力本願プロジェクト(以降「たりぷろ」)。いろんなマイコン周辺機器を試してドキュメントとしてまとめようという部内企画です。
・ソフトウェアハッカソン。Unitusという団体とつながりが出来てしまったため,そこ主催のハッカソンや,外部団体・企業主催のハッカソン・コンテストに積極的に参加していきたいと考えています。
・GUGEN,NT京都系の電子工作イベント。何か作って出品したいですね,というお話。
・Renesasプロデューサ。GR-PEACHなるmbed基板を無償入手したため,その開発を進めます。
・ロボトレース。バイト先での研究課題にライントレースがあるので,その一環で参加しようと思ってます。
・知能ロボコン。先輩に勧められたは良いけど,果たしてやるのだろうか。
・まるっきり趣味。来年こそセキュリティキャンプに参加したいと思っているため,その辺の経験を積みたいです。というわけなのでNIC ICを買ってきてそれで遊ぼうかと思っています。
・ノベルゲーム制作。何としてでもやってみせます。
って感じです。これ全部来年夏までにこなせるのかな……
とまあ,こんなにやることがあればブログに書く内容も尽きることがないと思うので,これからは逐一更新するようにしたいと思います。
初心者が取っつけるような入門,つまづいたところなどの備忘録,作品紹介なら更新も滞らないだろう……。
と言うわけで今日はさっき挙げたたりぷろに関係する話を。
ジャンル分けする都合上,次の記事に続きます。
コミケ当選
なんと初応募でコミケ当選してしまいました。
というわけでみなさん,是非お越しください!
「3日目西い20a:のどかプラネタリウム」でお待ちしております。
頒布物は短編ノベルゲームを予定,鋭意制作中であります。
さてさて,今日はロボットのプチ大会という物があったのですが,
ライントレース部門で優勝してしまいました。
記録についてはあまり納得していませんが(PID制御結局諦めた),圧電ブザーを載せて音楽を鳴らしながら進ませることが出来たので,まあまあの出来だとは思います。
今日はちょっと疲れているので,また記事にまとめることにします。
先日秋葉原までパーツを買いに行ってきました。
STM32Discovery,LANコネクタモジュール,LED等々を買ってきたので,使えるように勉強しようと思います。
では,また