hantas's blog

ブログ移転しました→ http://blog.taniho.net/

OneDrive->ownCloud

Officeを購入した際,OneDrive(旧SkyDrive)との連携機能があったため,安易な気持ちでOneDriveを利用し始めました。レポートデータやマウスのデータ等はすべてここでクラウド化しています。
しかし,頻繁に起こる同期エラー(によって毎回出てくるエラーポップアップ),頻繁に起こる同期エラー(によって作成される重複データの数々),使いにくいWindows8.1用"アプリ"(なぜデスクトップクライアントがインストールできないのか),同期の遅いWindows8.1用アプリ,そしてLinuxではなかなか扱いにくい……。
大体以上の理由により,オンラインストレージを移行することにしました。

ownCloud

以前から知ってはいたのですが,今回本格的にownCloudを利用することにしました。
ownCloudとはオープンソースで開発されているオンラインストレージのソフトウェア一式のことです。
ownCloud.org
あくまで提供されているのはソフトウェアだけなので自前でサーバーを用意する必要はありますが,基本的に無料で利用できます。

今回は眠っていたサーバーを引き出してきました。
OSはUbuntu Server 12.04 LTS
こいつにownCloudを導入し,ノートPCや自宅のデスクトップから利用できるようにしました。

サーバーへの導入

今回は最新版であるownCloud8.1.0を導入します。
サーバーに必要なソフトウェアは,Apache2,PHP5.4以降,MySQL5.xです。
Ubuntu Serverの場合はOSのセットアップ時にまとめてインストールしておくのが手っ取り早いかと思います。

次のサイトが便利でした。
容量無制限のプライベートなDropBox環境を構築できるownCloud環境の構築手順をメモ
このサイトではサーバーソフトウェアを展開し,好きなディレクトリに配置するだけで導入が完了する方法を採用しています。
僕もこの手法を採用しました。
他にも,最近ではリポジトリに登録されているので楽々インストールができるみたいですが,未検証です。

クライアントの導入

公式サイトにクライアントのインストール方法がまとめてあります。
https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&package=owncloud-client
各自適切なコマンドで簡単に導入をすることができます。
その後,設定画面の一般→一般設定 から自動起動するように設定しておきました。

Windowsへの導入はもっと簡単です。
公式サイトからパッケージをダウンロードし,そのままインストールするだけです。
WindowsLinuxの場合は,接続先サーバー,ユーザーを設定するだけで自動的に同期が始まりました。

モバイル

さて,パソコンで同期できるのはもちろんですが,モバイルでも使えるのがownCloudの特徴の一つです,が……
普段はiPhoneのDocumentsというアプリを用いているので,せっかくならownCloud専用アプリではなく,こちらでまとめて利用したいと思いました。

管理者アカウントからownCloudに接続して「設定」アイコンをクリックするとWebDAV用のURLを確認することができます。
自分の場合は"http://ドメイン/remote.php/webdav/"でした。
多くのファイラーはWebDAVに対応していると思われるので,これで一安心かと思います。

まとめ

ownCloudを利用し始めて2週間が立とうとしていますが,特に問題もなく稼働してくれています。
何より,一般的なクラウドサービスより高速に通信できている気がするので非常に満足しています。
怖いのは真夏の気温ですね(電気代は気にしない方針で)

次回記事では,今回触れなかったドメインについてまとめる予定です。

○参考
容量無制限のプライベートなDropBox環境を構築できるownCloud環境の構築手順をメモ

エスケープシーケンス

先日の講義の課題として,次のような課題が出されました。

任意の整数kを1つ発生させ,その数をあてるゲームを作成せよ
なお,予測した数が外れた場合は正解kとの大小関係を表示すること

プログラムの入門者向けの課題としてよく見るやつですね。

今回は,初めて出された「ゲーム」課題ということなので,UIにこだわってみることにしました。
ただしコンソール上で動くプログラムしか作ることが出来ないため,エスケープシーケンスというものに手を出してみました。

ゲームの計画段階では次の動作を考えました。

  • ゲームクリア時・ゲームオーバー時は背景をそれっぽい色に染める →文字・背景色の変更
  • 表示された大小関係のログを画面上に出す →カーソル位置の移動

エスケープシーケンス

エスケープ文字(\e, \033)に続けて文字列を記述することでコンソールの制御を行うことが出来ます。
Linuxでソフトウェアのインストールを行っている際に「 | / - \ 」がアニメーション表示されている様子を見かけるかと思いますが,恐らくこれのことです。

色の変更

"\033[x;y;z"を出力することで色の変更・属性の変更を行うことが出来ます。
x, y, zには次に示したコードが入ります。
また,これらは省略可能です。

文字色・背景色

色は数字2桁で示します "AB"
Aには,文字色変更の場合"3",背景色変更の場合"4"が入ります。
Bには,変更する色が入ります。次を参考にしてください。
0:
1:
2:
3:
4:
5: マゼンタ
6: シアン
7: 白

属性の変更

属性は次の通り指定できます。
1: 太字
2: 弱強調
4: 下線
5: 点滅
7: 反転
8: 非表示

カーソル位置の変更

"\033[y;xH"を出力することでカーソル位置を指定することが出来ます。
x, yにはカーソルを移動させる列,行が入ります。

画面クリア

背景色を変更した後,画面のクリアを行うことでコンソール全ての領域の背景を指定色に変更することが出来ます。
画面クリアは"\033[2J"を出力することで可能です。

サンプル

上記で書いた命令は一部ですが,今回はこれだけのエスケープシーケンスを使用して課題プログラムを作成しました。
サンプルコードを貼り付けておきます。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void bye(){
	printf("\033[0m");    // 文字属性・文字色を初期化します。これをしないとそのまま残ってしまいます
	exit(1);
}

/* 課題として設定された関数群なので気にしないでください */
/* エラーメッセージを表示した後,終了する関数です       */
void usage1(int n){
	printf("Usage: k62301 a b n\na: max, b: min, n: try\nyour input was %d\n", n-1);
	bye();
}
void usage2(int a, int b){
	printf("a must be small than b\nyour input was a=%d, b=%d\n", a, b);
	bye();
}
void usage3(int n){
	printf("0 < n < 50\nyour input was n=%d", n);
}

void showLog(int log[], int current, int k){
	int i, j;
	printf("\033[2J");
	for(i=0; i<current; ++i){
		// カーソル位置を左上の方に移動させています。
		printf("\033[%d;%dH", i%20+1, (int)(i/20)*25);
		if(log[i]<k)
			printf("%2d: %d < ans\n", i+1, log[i]);
		else
			printf("%2d:      ans < %d\n", i+1, log[i]);
	}
}

int main(int argc, char *argv[]){
	int a, b, n;
	int i, j;
	int k;
	int tmp;
	int t;
	int startTime;
	int log[50];

	startTime = (int)time(NULL);
	srand(startTime);

	if(argc != 4) usage1(argc);
	a = atoi(argv[1]);
	b = atoi(argv[2]);
	n = atoi(argv[3]);
	if(b < a) usage2(a, b);

	while(n < 1 || n > 49){
		usage3(n);
		scanf("%d", &n);
	}

	k = rand()%(b-a+1);
	k += a;

	// 文字色を黄色,背景を黒色に
	printf("\033[33;40m");
	// 画面をクリア
	printf("\033[2J");

	i = n;
	while(i--){
		// 23行目0列にカーソルを移動
		printf("\033[23;0H");
		printf("*Challenge %d\n", n-i);
		printf("your answer = ");
		scanf("%d", &tmp);
		log[n-i-1] = tmp;
		showLog(log, n-i, k);
		if(tmp < k){
			printf("\033[23;40H");
			printf("\ttrue answer is bigger than %d\n", tmp);
			continue;
		} else if(tmp > k){
			printf("\033[23;40H");
			printf("\ttrue answer is smaller than %d\n", tmp);
			continue;
		}
		printf("\033[37;43m");
		printf("\033[2J");
		printf("\033[15;25H");
		printf("Clear!\n");
		printf("\033[16;25H");
		printf("The answer is %d\n", k);
		printf("\033[17;25H");
		printf("Clear time is %d\n", (int)(((int)time(NULL)-startTime)));
		usleep(1000000);
		bye();
	}

	printf("\033[37;41m");
	printf("\033[2J");
	printf("\033[15;25H");
	printf("Game over\n");
	printf("\033[16;25H");
	printf("The answer is %d\n", k);
	printf("\n");
	usleep(1000000);
	bye();

	return 0;
}

英語が正しいかはさておき,ひとまずこれで動作しました。
ざっとコメントを書いておいたので,真似れば使えるようになるはずです。
f:id:hantas:20150627015115p:plain

Windowsで使用する場合

今回紹介したエスケープシーケンスはANSIで決められたものだそうです。
Windowsのcmd.exeで使用する場合は少し小細工が必要です。
"ansicon"を使いましょう。
ダウンロードしてインストールコマンドを打てばすぐに使えるようになりました。
わかりやすくまとめてある記事があったので,紹介にとどめておきます。
Windows環境でRSpecなどの出力に色を付けるには - 萬由無事覚書

☆参考
もう一度基礎からC言語 第47回 特殊な画面制御~コンソール入出力関数とエスケープシーケンス エスケープシーケンスによる画面制御
シェル - echoで文字に色をつける その1 - Miuran Business Systems
Windows環境でRSpecなどの出力に色を付けるには - 萬由無事覚書

マイクロマウスタイマー

夏コミ受かりました。

3日目東S-35a

今年は東館なんですね。
新作ゲームが出せるかは危ういですが,少なくとも新刊持って行きますので皆様よろしくお願いいたします。


さてさて,まもなくうちのサークル主催マイクロマウス大会の時期となりましたが,その際に使用する計測器を作成しました。

youtu.be

f:id:hantas:20150614004658j:plain

f:id:hantas:20150614004659j:plain

機能自体はシンプルで,センサー値が大きく変化したタイミング→マウスが通過,と捕らえてスタートからゴールまでの時間を表示するだけです。

センサーの形状については先代のタイマーを参考(丸ぱくり)にしました。

先代ではモノクロLCDで表示させていたようですが,遠くから見にくいのはどうかと思ったので,7セグメントで作成しました。

ただし,マイコンの出力ピン数が圧倒的に足らないので,2桁ずつダイナミック点灯をして表示させています。

(秋月のお楽しみ袋と,先輩からもらった年代物の7セグを使いました。光量がたりてないですね……)


一応ポイントとしては,

・クラシック,サーキット,ハーフ全対応(予定)

・センサー3個なので2点ゴールに対応

・PCにデータ出力して連動動作可能(予定)

・オートスタートに対応


では,しばらくは大会に向けてと,コミケに向けて,色々と頑張ります。

部室メーリスを学生証と連動させる(1)

Miceは学内に部室を持っており自由に使うことが出来ますが,その開け閉めをメーリングリストに流すことが義務づけられています。
しかしいちいち携帯を取りだしメールを作りしょぼい構内LANに悩まされながらメールを送るのは面倒です。

そこで,全員がIC機能付きの学生証を持っているので,これを使おうと思い立ちました。
すなわち,部室の入り口にカードリーダーを設置しておき,こいつにタッチするだけで部室の開放状況をメールする,あわよくば契約しているサーバー上にデータを放り投げようというわけです。
幸いにも学生証はFeliCa規格を利用しているようです。
SONYから発売されているNFCリーダライタ「RC-S620/S」を利用し,RaspberryPi B+から制御しようと考えました。
Sony Japan | FeliCa | 法人のお客様 | 製品情報 | RC-S620/S・S620/U

ここ数日はRC-S620/Sの使い方,ICカードとの通信の仕方を調べたので軽くまとめておきます。

今回参照したドキュメントは次のURLから参照できます。
Sony Japan | FeliCa | 法人のお客様 | 技術情報
「RC-S620/S製品仕様書<簡易版>」
「RC-S620/Sコマンドリファレンスマニュアル<簡易版>」
FeliCa技術方式の各種コードについて」
FeliCaカード ユーザーズマニュアル 抜粋版」

FeliCaには認証不要でアクセスできる領域と,認証が必要となる領域があります。
これらのドキュメントは,認証不要で利用できる機能しか書かれていません。
例えばsuicaの残高だったり,履歴だったりは参照できますが,それ以上踏み込んだことは出来ないというわけですね。

まずは学生証の中身を解析した,その手段からまとめておきます。

今回出てくる通信は2種類,
PC ←→ RC-S620/S ……①
RC-S620/S ←→ 学生証 ……②
それぞれの通信ごとにプロトコルが決まっており,インターネットを飛び交っているパケットのように,上位層のパケットを下位層のパケットに埋め込むようにしてデータを用意します。
ここれは,①のパケットの中に②のパケットが埋め込まれる形になります。

①で送信したコマンドは次の順番,
GetFirmwareVersion(通信できているか確認)
RFConfiguration(リーダの設定)
InListPassiveTarget(カードの補足とIDmの確認)
CommunicateThruEX(カードとの通信)

CommunicateThruEXを何回か送信し,②の通信を行います。
サービスコードはSearch Service Codeで調べられます。
肝心のデータですが,まずは学生証が対応しているサービスコードという物を調べる必要があります。
Request Serviceコマンドを,0x0000~0xFFFFまで順番に送信して,0xFFFF以外が返ってきた時のアドレスを吐き出すプログラムを書きました。
その中で今回認証なしでアクセスできるのは,下6bitがユーザーズマニュアル30ページに認証不要と書かれているものに該当するアドレスのみです。
ここで得たサービスコードに,Read Without Encryptionコマンドを,0~エラーが返ってくる手前のブロックコードまで順にアクセスし,データを読み込みました。
(実際にこのアドレスにアクセスする際はリトルエンディアンで送信します)

……とここまでプロトコルを読み込むのに結構かかりました。
残念なことに,学生証で認証不要でアクセスできる領域にはめぼしいデータがありません(?)でした。
(ハテナマークが付いてるのはまだ検証中だから,ですが)
学生証から学籍番号を読み取るのは一旦置いておき,IDm(カードの個別番号)を読み取って,あらかじめ用意しておいたIDm←→名前対応表から部室メーリスを送るシステムを作りましょう。

今日はここまで。
頑張ってこのシステムは実現させます。

STM32 Nucleo Boardの開発環境構築

2,3日ほどSTM32と格闘していたのでそのログを残します。
Ubuntu14.04 LTSにgccとst-linkで開発できる環境を整えました。
対象はSTM32F401REのNucleoBoardです。
(STM32 Nucleo Board STM32F401: マイコン関連 秋月電子通商 電子部品 ネット通販)
(とはいえ問題山積み……とりあえずビルド&書き込みができただけです)

また,現在格闘中でもあるので適宜追記更新を入れるので注意してください。

ビルド環境

ビルド環境としてLaunchPad GNU Embedded Toolchainを選択しました。
次のサイトの「ツールチェーンの(再)インストール」の通りに進め,問題もなく完了しました。
Ubuntu(Linux)環境のSTM32(ARM)開発環境についてのメモ その1 | メモたんく
Cコンパイラは"/usr/bin/arm-none-eabi-gcc",インクルードファイルは"/usr/arm-none-eabi/include/"に配置されました。

今回Eclipseは使用しないため,自前でライブラリとMakefileを用意します。
まずはSTの公式サイトからSTM32 Standard Peripheral Libraryをダウンロードしてきます。
Part Number Search ? STMicroelectronics
これを好きなところに展開し,"STM32F4xx_DSP_StdPeriph_Lib"というディレクトリができました。
僕の場合,これと同じディレクトリにプロジェクトのディレクトリを作成し,以降はそのディレクトリ内で作業を進めました。
便宜上,"nucleo_test"というディレクトリを作成し,その中に移動したとします。
まずは必要なファイルをコピーしてきます。
"../STM32F4xx_DSP_StdPeriph_Lib/Project/STM32F4xx_StdPeriph_Templates/"から,
 stm32f4xx_it.c
 stm32f4xx_it.h
 main.c
 main.h
 stm32f4xx_conf.h
 system_stm32f4xx.c

をプロジェクトのディレクトリに放り込みます。
もうひとつ,
"../STM32F4xx_DSP_StdPeriph_Lib/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM32F401xx/STM32F401RC.ld"
を,プロジェクトのディレクトリに"stm32_flash.ld"と名前変更して放り込みました。
(とはいえ,これ違う種類のチップのリンカスクリプトなんですよね……。
とりあえずは動きましたが良くないと思います。)

続いてMakefileを準備します。
書くのが初めてなので次の内容を参考にさせていただきました(というか丸コピして必要な箇所を改変しました)。
tokoro10g / VORAS / source / Makefile — Bitbucket
綺麗に書けなかったので要点だけ書き留めておきます。

#インクルードディレクトリを変更(ツールディレクトリも変更)
TOOLDIR = /usr/bin/
INCLUDE_DIRS = -I ../STM32F4xx_DSP_StdPeriph_Lib/Libraries \
				-I ./ \
				-I ../STM32F4xx_DSP_StdPeriph_Lib/Libraries/STM32F4xx_StdPeriph_Driver/inc \
				-I ../STM32F4xx_DSP_StdPeriph_Lib/Libraries/CMSIS/Device/ST/STM32F4xx/Include \
				-I ../STM32F4xx_DSP_StdPeriph_Lib/Libraries/CMSIS/Include \
				-I $(TOOLDIR)../arm-none-eabi/include \
				-I $(TOOLDIR)../arm-none-eabi/include/c++/4.9.3
#BOARD_DIRを変更
BOARD_DIR = -DHSE_VALUE=\(\(uint32_t\)8000000\) -DSTM32F401xx
#STARTUP_DIRを変更
STARTUP_DIR = ../STM32F4xx_DSP_StdPeriph_Lib/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7
#TARGET_ARCHを変更(エラーが出るためFPU設定を消した。良くない)
TARGET_ARCH = -mcpu=cortex-m4 -mthumb
#最終出力ファイルをbin/main.binに変更
bin/main.bin: $(patsubst %.c,%.o,$(wildcard *.c)) $(patsubst %.cpp,%.o,$(wildcard *.cpp)) $(STARTUP_DIR)/startup_stm32f401xx.o ../STM32F4xx_DSP_StdPeriph_Lib/Libraries/libstm32f401xx.a
	$(LD) $(LDFLAGS) $(TARGET_ARCH) $^ -o bin/main.elf
	$(OBJCOPY) -O binary bin/main.elf bin/main.bin

とりあえずこれでmakeが通る……はず(書いてないことがあったかもしれない)。

○参考
Ubuntu(Linux)環境のSTM32(ARM)開発環境についてのメモ その1 | メモたんく
tokoro10g / VORAS / source / Makefile — Bitbucket
STM32F10x Standard Peripherals Firmware Libraryを使う - Wikimura

ダウンロード環境

Ubuntu(Linux)環境のSTM32(ARM)開発環境についてのメモ その1 | メモたんくを参考に「デバッグツールのインストール」を行います。
これで,"st-flash write bin/main.bin 0x08000000"とすることで書き込みができるはずです。
(hexファイルの書き込みはできないのですね。かなり手間取りました)
せっかくなのでMakefileから書き込みができるようにしました。

.PHONY: flash
flash:
	st-flash write bin/main.bin 0x08000000

○参考
Ubuntu(Linux)環境のSTM32(ARM)開発環境についてのメモ その1 | メモたんく

デバッグ環境

参考サイトの通りにst-util,arm-none-eabi-gdbを立ち上げるとgdbが使えました。
gdbを使ったのもこれが初めてなので,また後日まとめます。

○参考
Linux上でSTM32のプログラミング・デバッグ環境を整える - STM32 - Tokoro's Tech-Note

USART

とりあえず次の通りにすれば動いた。

	SystemInit();
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	//なぜかボーレートを3倍しないといけなかった。
	USART_InitStructure.USART_BaudRate = 9600*3;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	USART_Init(USART2, &USART_InitStructure);
	USART_Cmd(USART2, ENABLE);

//次のようにして文字を送れる
	USART_SendData(USART2, 'H');while( USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET) ;

○参考
STM32でUSARTを使ってみる - Wikimura
STM32F4 DISCOVERYのシリアル通信(UART)をテストする(送信編): 花岡ちゃんに花束を



ひとまず今日はここまでにさせてください。
正直新しいことを学びすぎて全然頭が追い付いていない……。

学内環境へのEmacs導入

どうやらMice内ではvimが普及(サンプル数2)しているらしいですが僕はEmacs派です。
ここで戦争を起こす気はありませんが,Emacs楽しいですよ。

学内環境にはEmacs22が導入されていますが,このバージョンにはパッケージ管理システムがデフォルトで含まれていないため,Emacs24をビルドしてみました。

$ cd
$ mkdir bin
$ cd ~/Download
$ wget ftp://ftp.ring.gr.jp/pub/GNU/emacs/emacs-24.4.tar.bz2
$ tar xvjf emacs-24.4.tar.bz2
$ cd emacs-24.4
$ ./configure –prefix=~/bin
$ make
$ make install

Linuxには疎いのでmakeやconfigureについて知識がなかったのですが,どうやらconfigureには-prefixというものがあるそうです。
こいつを使ってインストールディレクトリをホームディレクトリ直下のbin内に変更し,管理者権限なしでEmacsをインストールしました。
従って,現在のディレクトリ構成は次のようになっています。

~/
┣Download/
┗bin/
 ┗Emacs-24.4/


Emacs23以降ではpackage.elがデフォルトで使用できるようになっています。
使い方は"M-x package-list-package"から,インストールしたいパッケージに"I",その後"x"でチェックの実行。無事パッケージがインストールされます。

現在使用しているパッケージをいくつか紹介します。

  • auto-complete

  VisualStudioとかEclipseとかがやってくれる自動補完

  • rainbow-mode

  HTMLとかの編集時,カラーコードの背景をその色に変えてくれる

  • anzu

  C-sのインクリメンタル検索時に,全ヒット数とハイライト部分の番号が表示

  • undo-tree

  ファイルの編集履歴をツリー状に表示
  任意の場所にさかのぼったりできる

  • org-present

  org-modeで作成した文書をプレゼンに(文字拡大させて順々に表示出来るように)


最近はと言うと,ようやくマウスがそこそこ動くようになってきました。
といっても16×16は完走出来ませんが……。
冗長なコードを書き直し,整形した上で探索法を拡充させていこうと思っています。


○参考サイト
第235回 Ubuntu 12.04でEmacs 24.1を使う:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
package.el - Emacs JP

KiCadのすすめ(2)

あけましておめでとうございます。
去年は大学入学&部活で忙しい一年となりましたが,今年もその方針は変えずに頑張っていきたいと思います。ひとまずはマウスの完成が目標ですかね。

のどかプラネタリウムの方ですが,2月1日に開催されるCOMITIA111に出展します。
ブースは「ま17b」です。
今回は新作……と言っていいのでしょうか,「1週間でゲームを作ろう」という企画がサークル内で
持ち上がり,なんとか完成させた超短編作品を無料頒布します。
タイトルは「寄生怪獣ふさふさ」。多分ギャグ作品だと思われます。
COMITIAに来られない方でも近日中にダウンロードができるようになりますので,またお知らせします。


さてさて,少し時間が空いてしまいましたがKiCad記事第2回です。
今回は回路図作成(1)を進めていきます。

まずはプロジェクトファイルを作成しましょう。
f:id:hantas:20150128145202p:plain
ファイル > 新規 から「BlankProject」(空のプロジェクト)を作成します。

この時に,Schematicファイルが存在しないというエラーが出ると思いますが,新規プロジェクトのためこれで正常です。
f:id:hantas:20150128145203p:plain

次に,この回路図の右下にある説明書きを変更しておくことをオススメします。
f:id:hantas:20150128145204p:plain
ファイル > ページ設定 から次の画面を開きます。
f:id:hantas:20150128145205p:plain
最低限タイトル,できればリビジョンくらいは書いておきましょう。
印刷した際に何のファイルかが分かるようになるので,後々困りません。


次に画面上に用意されているボタンの説明をしておきます。
一応すべての説明はしますが,はじめてKiCadを使う場合には無視しても構わない,と思った項目については薄字にしておくので読み飛ばしても構いません。

まずは上のバーから。左のボタンから順に説明を書いていきます。
f:id:hantas:20150128145208p:plain
・新規回路図を作ります。KiCadでは複数枚の回路図を一つの回路として扱えるので,この機能が用意されています。
・既存回路図を開きます。

・今編集している回路図を上書き保存します。初回保存時はプロジェクト名の回路図ファイルを保存します。
--------------------------------------------------------------
・ページの設定をします。先ほどやったページ設定へのショートカットボタンです。
--------------------------------------------------------------
・回路図を印刷します。
--------------------------------------------------------------
・選択しているアイテムを切り取り,コピー,貼り付けします。
--------------------------------------------------------------
・いわゆる「元に戻す」「繰り返す」です。
--------------------------------------------------------------
コンポーネントやテキストを検索します。
コンポーネントやテキストを検索後,置換します。

--------------------------------------------------------------
・回路図を拡大,縮小,再描画,および最適表示します。
--------------------------------------------------------------
複数回路図を扱っている場合,階層ナビゲータを表示します。
--------------------------------------------------------------
・回路図記号を編集するウインドウを表示します。
・既存の回路図記号を一覧表示します。
--------------------------------------------------------------
・アノテートします。これは次回以降説明します。
・作成した回路図が適正な物であるかチェックします。
・回路図記号のつながりを記録したファイルを生成します。
・使用した部品の一覧表を生成します。
--------------------------------------------------------------
以降は基本的に使用しません。


では次,右側のボタンの説明です。ちょっと長くなりますね。
f:id:hantas:20150128145206p:plain
・基本の矢印ツールです。既存の回路図記号を選択したりできます。
・階層の移動を行えます。
・回路図記号を配置するツールです。一番多用します。
・電源系統の記号を配置するツールです。
・配線をするツールです。基本的にはこれで配線します。
・バス配線をするツールです。複数の配線をまとめたい場合はこれを使います。
・バス配線から単配線を引き出すツールです。
・バス配線からバス配線を引き出すツールです。

・使用しないポートに「このポートを使用しない」と明示するための記号を配置します。
・配線の分岐点の記号を配置します。
・単一の配線に名前を付け,後でわかりやすいようにします。
・配線の端にラベルを付けるツールです。離れたところに配線したい場合に使用します。
・ここから4つのボタンは階層に関するものなので省略します。
・モジュールのまとまりをわかりやすくするためのラインを引くツールです。
・テキストを書き込むツールです。


大変長くなりましたがEeschemaのボタンについての説明は以上です。
では回路を作っていきましょう。
回路の作成にはいろいろ流儀があるかもしれませんが,この記事では僕の普段の進め方でやっていきます。
個人の趣向に合わせて適宜調整しながらやっていけば良いと思います。

まずは部品を配置します。
先ほど一番多用する,と言った回路図記号配置のツールにし,図面上をクリックします。
出てきたダイアログから部品名を入力することで,その部品を持ってくることができるわけですが,慣れないうちはリスト表示に切り替えましょう。
f:id:hantas:20150128145209p:plain
一般的な部品は大体「device」に入っています。これを選択することでその部品を持つことができるので,クリックして図面上においてあげましょう。
f:id:hantas:20150128145210p:plain

移動や回転をしたい場合,部品の上で右クリックを押すことでメニューを出すことができるのでそこから動かしてあげてください。
f:id:hantas:20150128145212p:plain
ただし,複数コンポーネントや,もしくは複数種類のオブジェクトなどが重なっている場合,「どのオブジェクトに対して右クリックをしたのか」を聞くためのメニューが表示されます。
f:id:hantas:20150128145211p:plain
はじめのうちは慣れないかもしれませんが,この機能で満足する操作ができるように設計されてるので我慢しましょう。

同様に,5VやGNDなどの電源系統の記号は別のツールを使います。
先ほどの回路図記号のツールの下にあるツールを利用し,同様に電源周りの記号を配置しましょう。
f:id:hantas:20150128145213p:plain

ここまで来ればもうすぐです。
配線ツールを選択して,ポチポチと配線しましょう。
クリック→クリックで回路図記号をつなぐ線を引くことができます。
そして完成した物がこちら。
f:id:hantas:20150128145214p:plain
何か余計な物が含まれていますが,今日はもう疲れたので後日説明します。

ここまでの作業をこなすことができれば,基本的な回路は作り放題です。
(だがつらいのはここからである……)

というわけで今回は基本的な回路図の作り方を説明しました。
次回は回路図の作り方をもう少し説明し,回路図記号の作り方に踏み込む予定でいますが,春休みはスキーに行くのでいつ更新することやら。

ではでは,また次回。