2013/01/26

[C++]エントリーポイントを変える

,
 mainをメンバ関数にどうやったらできるだろうかと考えてました… 
例えば、Visual Studioで作ったWindowsコンソールアプリケーション(/SUBSYSTEM:CONSOLE)の場合、デフォルトだとmainCRTStartupという関数が呼び出されます。まあmain()ですね、無いとリンカに怒られてしまいます… 

 で、今度はクラスのメンバ関数にmainを含めたいのですが、
#include <iostream>
#include <vector>
#include <string>

class mainEntry{
public:
 static int main();
};

int mainEntry::main(){
 std::cout << "main" << std::endl;
 return 0;
}
と書いても、

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: 未解決の外部シンボル _main が関数 ___tmainCRTStartup で参照されました。
1>************\Visual Studio 2008\Projects\Console3\Debug\Console3.exe : fatal error LNK1120: 外部参照 1 が未解決です。


とコンパイル時にエラーが出てしまいます。ふむ、エントリーポイントをmainEntry::main()に変えれば良さそうですね。エントリーポイントを変えるには、Visual Studioの場合、[プロジェクト]→[プロパティ]→[構成プロパティ]→[リンカ]→[詳細]で[エントリーポイント]に関数名を記入します。

こうすると、ちゃんとリンクできて、一応動作します。


 ただ、自分でエントリーポイントを変更した場合のデメリットは

"エントリ ポイントの設定は、リンカーに任せることをお勧めします。このようにすると、C のランタイム ライブラリが正確に初期化され、静的オブジェクト用の C++ のコンストラクターが実行されます。"(from /ENTRY (エントリ ポイント シンボル))

ということを自分でやらないといけない(?)こととかでしょうか…


 因みに、C99だとエントリーポイントについては次のように規格書に記されているみたいです。

"5.1.2.2.1 Program startup

1 The function called at program startup is named main. The implementation declares no
prototype for this function. It shall be de 甁ed with a return type of int and with no
parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent;
9)
or in some other implementation-de 甁ed manner."(from http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf)
Read more →

2013/01/13

[C#]Vista風ダイアログを表示したい

,
 C#のFolderBrowserDialogなどを自分はよく使うんですが、如何せんちょっとデザインが古い。XP-likeである。俺はVistaみたいなのがいいんだ~~~~、ということで、Vista風のダイアログを使えるようになるライブラリの紹介。
Ookii.Dialogs - ookii.org
Vista Controls - CodeProject
とか。使ったことはない。
 ライブラリ入れなくてもVista風にできるのかな?それはよく知らないや…
 
 (FolderBrowserDialogは)継承元がCommonDialogですし、UI Editorが優秀だしカスタマイズしやすいのがいいですね。おしまい。
Read more →

[C#]アプリケーションが UserInteractive モードで実行されていないときに、モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。

,
 えっと、タスクスケジューラで自分で書いたWindowsフォームアプリケーションを起動しようとして、なんか詰まった点2つの話です。

1)タスクスケジューラがエラーを返す

 毎日0800に.exeを起動するようにタスクスケジューラに登録して、次の日確認してみたら案の定動いてませんでした。翌日、その次の日も結局動かずで。タスクスケジューラの管理画面を見ると、どうやら2147750692というエラーで止まっているようです(下の写真参照)。
こんなエラーが出ました

 ネットで調べてみると、2147750692というエラーコードは

The Task Scheduler service attempted to run the task, but the task did not run due to one of the constraints in the task definition. 

とのこと。はあ、つまり何らかの理由で動かんかったよ、と。原因が絞れないですね…
 とりあえず、「タスクスケジューラ」手動でタスクをスケジュールする方法<Windows Vista(R)>: dynabook.comサポート情報を参考にして、タスクの設定を変えてみます。結局動かずじまいでした。


2)テストしたら'System.InvalidOperationException' のハンドルされていない例外が System.Windows.Forms.dll で発生しました。って出た

 で、タスクスケジューラは試しにその場でタスクを実行できるので、やってみたところ「デバッガを起動しますか?」とダイアログが出たので、VS2008を起動してみたら上記の例外が発生していたみたいです。
こんな感じで、タスク上を右クリックで[実行する]メニューが出てくる~~~~
 
上記の例外の全文は
'System.InvalidOperationException' のハンドルされていない例外が System.Windows.Forms.dll で発生しました。

アプリケーションが UserInteractive モードで実行されていないときに、モーダル ダイアログまたはフォームを表示することは有効な操作ではありません。サービス アプリケーションからの通知を表示するには、ServiceNotification または DefaultDesktopOnly スタイルを指定してください

です。要はタスクスケジューラから起動するときはフォームとかMessageBox使わないでねってことなんですかね…"UserInteractiveモード(ユーザ対話モード)"の定義がなかなか見つかりませんでして…

 で、そうなるとプログラムを修正しないといけなくて、実はUserInteractiveモードか否かは
boolean IsUserInteractive = Environment.UserInteractive;
というコードで取得できるみたいなので、
[STAThread]
static void Main(string[] args)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    if (Environment.UserInteractive)
    {
        //UserInteractiveモードなので表示
        Application.Run(new Form1());
    }
    else
    {
        //UserInteractiveモードじゃないときは、ここでUIを使わないコードをごにょごにょ
    }
}

というコード書いて、Main()でFormを表示する前に分岐させてみました。というお話。動いてくれるといいな…(動作確認してない)
Read more →

2013/01/11

OpenCVで顔検出なんだけど

,
 はい。OpenCVで顔検出。C++からならOpenCVで顔検出 » .COM-POUNDのコードを参考にすれば終わりですね。
 
 で、じゃあ顔が検出されるなら今度は誰の顔か認識してみよう。ってなるんだけど、これがもうめんどくさい。
 そもそも、人間は人の画像を見た時、「あーこれは顔だ」「んでもって…これは○○さんだな」ってすぐなるけど、この際には過去に見た人の顔を参考にしてる…らしい。でもって、じゃあコンピューターがどうやって顔検出してるのかというと、予め「これは顔です」「これは顔じゃないです」という学習をさせておく。それには何時間もかかるらしく(参考:OpenCV で機械学習を試してみる…とまだ終わらず | Moonmile Solutions Blogとか)、非常に長い。でもって、その結果を書きだしたカスケードファイルとやらを用いて、顔検出をしているらしい。

 だから実際に誰の顔か認識させるためには、まずその顔だけを認識させるように学習させないといけない?ならリアルタイムというのはどだい無理な話…になるような…

おまけ ほう

※1 顔検出の仕組み:Opencv object detection_takmin on @slideshareOpenCVで顔画像認識|王様の耳はロバの耳、公式…とか 何言ってるかわかりませんね(満面の笑み)
Read more →

2013/01/09

[電子工作]LM317の出力波形

,
出力のコンデンサで変わるかなとか思ってオシロ眺めてたけど、どんなコンデンサだろうが出力にこんな感じの発振みたいなのが見れた…古い電源だからなんで10μF並列に付けてるんだか謎
 今思ったけど、基板も配線の引き回しが長いとか、GNDが細いとか直すところたくさんあるね

 回路構成:25V10μF-0.1μF-35V10μF(低ESRの茶色いやつ)-出力(ここで測定)

発振している…過渡応答の波形みたい
拡大

コンデンサを低ESR16V100μFにしたら少しVp-pが増えた…?
低ESR 16V100μF
LM317のVout端子に繋がってる抵抗のとこだとこんな感じ
あ、時間幅設定ミスってて参考になってねえ…

 ブリッジダイオードの+端子の波形。負荷は10Ω、出力5Vちょい、電流0.1A

Read more →

2013/01/08

息抜きの雑記

,
 コードばっかり書いてたら死にますって…

 マクロレンズ買う金でイイ感じのコンデジが買えると気付いた俺達は…

1)読書

 最近また読書をするようになりました。昔は、それこそ小学生のころは青い鳥文庫とかを読み漁っていました。ですが、大学生になると、まず電車に乗る時間が5分なので行き帰りの電車で読み進めることができなくなってしまい、大学から帰ってきても、そのまま寝落ちしたりゲームしたり、そもそも疲れていたりで本を読む時間がなかったんです…(言い訳) で、Twitterに割いてる時間を、どうせだったらそこで本読もうよってことで読むように頑張ってます… 
 ひとつ悩んでいるのが本を読む姿勢でして、まあ本当は椅子に座って背筋を伸ばして…ってやるのがいいんでしょうけど、なるべくならリラックスして読みたいな、と思うわけです。堕落。なんかふかふかの椅子とか買えばいいんでしょうかね…

 で、本を読んだ後の楽しみがこれです、この棚にならんだ背表紙を見て悦に入ること!いいですね~~~~~~

//写真あとで入れる

2)数学

 大学のお陰で、二十歳前にして数式アレルギー発症しました。死にそうです。物理も化学も四方八方から数式に囲まれてます。つらい。

 あーでも、保険数理とかは面白そうですよね。その先にあるアクチュアリーの資格は取得が難しいと聞きますが。(意識高い)

3)外食?

 あんまり一人でお店に入らない、超インドア派な管理人ですが…まあ時々行ってます。そりゃ色んなの食べてみたいじゃないですかァ… それでもラーメン大盛りとか食べると、その日は摂取カロリー>>消費カロリーやん…と悔やんでますけど。でも美味しいしいいですよね!ということでラーメンの画像で記事を締めましょう。

//写真あとで入れる
Read more →

[C#]Google Driveに新しいディレクトリを作る

,
 Google APIs Client Library for .NETで遊んでみました。このライブラリは、色々な言語のものが用意されてますね、びっくりです。後あまり他にやってる人を見ないので、日本語のページが少なくて辛いです…

 で、まずはGoogle Driveにファイルをアップロードする(Google先生曰くこれがHello, World!らしい)ところから始めます。Google Drive SDK — Google DevelopersのQuickstart: Run a Drive App in Javaを見てやってみましょう。という話。

フォルダはどうやって表されているの?

とりあえずQuickstartは動いたので、次にフォルダを作ってみます。Google Driveでフォルダはどうやって表されてるの?ということで、貴重な日本語公式資料のファイルとフォルダを操作する - Google デベロッパー アカデミー — Google Developersによると、『フォルダとは、MIME タイプが application/vnd.google-apps.folder で、拡張子を持たないファイルです。』らしいです。

 えっ………ファイル………………?


とりあえずフォルダを作ってみる

※以下Quickstartのコードのファイルアップロードするところだけをちょこまかといじってます。認証部とかはそのままにしてます。

 見なかったことにしてネットの海でコードを探します。c# - upload an Image to a created folder in Google drive account - Stack Overflowを見るところによれば、ファイルを作る場合、Quickstartにも似たようなコードが出てきたように、Fileクラスのインスタンスは
     
//ファイルのひな形を作る感じ
File body = new File();
body.Title = "My document";
body.Description = "A test document";
body.MimeType = "text/plain";

//ファイルの中身を書き込む…?
byte[] byteArray = System.IO.File.ReadAllBytes("document.txt");
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

//アップロードする
FilesResource.InsertMediaUpload request = 
service.Files.Insert(body, stream, "text/plain");
request.Upload();

//アップロードされたファイルのIdを取得しておく
File file = request.ResponseBody;
Console.WriteLine("File id: " + file.Id);

のように設定してアップロードします。ですが、フォルダを作成する場合には、
            
//フォルダを作る
File folder = new File();
folder.Title = "myfolder2";
folder.Description = "my folder description";
//フォルダなのでMimeTypeはこれ
folder.MimeType = "application/vnd.google-apps.folder";

//アップロード
File file = service.Files.Insert(folder).Fetch();
Console.WriteLine("folder id : " + file.Id);

という風にすると、フォルダが作成できるみたいです。ちゃんとMime Typeがapplication/vnd.google-apps.folderになってますね。

 アップロードの手順も違っていますが、何か意味があるんでしょうか…(動いたからとりあえず違いに目を瞑っている)

動きました
ま、とにかくこれでフォルダが作れることがわかりました。


親フォルダを指定してファイルをアップロードする


 はてさて。親フォルダを指定する場合はどうすればいいんでしょう?上に紹介したリンク先のコードにある通り、
string parentId = "";//親フォルダのId
File file = new File();
//...
file.Parents = new List<parentreference>()
   { new ParentReference() {Id = parentId} };

とします。ですが親フォルダのIdが分からないので、フォルダを検索してIdを取得してこないといけません。検索はどうやってするんだ…?

 Search for Files Google Drive SDK — Google Developersより、Files.listを使えばいいらしいので、Files: list - Google Drive SDK — Google Developersのサンプルコードを実行してみます。
 ここでは、フォルダだけを表示するために、Query = "mimeType = 'application/vnd.google-apps.folder'"としています。クエリの詳細は上のSearch for Filesを見てください。便利ですねこれ。
//フォルダのみを選ぶクエリ
string query = "mimeType = 'application/vnd.google-apps.folder'";
List<file> result = new List<file>();
FilesResource.ListRequest req = service.Files.List();
req.Q = query; //クエリを使わない(全ファイル、フォルダを表示)時は削除

do
{
      try
      {
            FileList files = req.Fetch();
            result.AddRange(files.Items);
            req.PageToken = files.NextPageToken;
       }
       catch (Exception e)
       {
            Console.WriteLine("An error occurred:" + e.Message);
            req.PageToken = null;
        }
 } while (!String.IsNullOrEmpty(req.PageToken));
            
 //検索結果を見てみよう
foreach (File f in result)
{
       Console.WriteLine("File name :" + f.Title + " id :" + f.Id);
}

 すると、コンソールにフォルダ名とIdが出てきたと思います。これで準備は整いましたね。さっき作ったmyfolder2にdocument.txtをアップロードする場合は、

//まずフォルダ名がmyfolder2なものを検索
string query = "title = 'myfolder2'";
List<File> result = new List<File>();
FilesResource.ListRequest req = service.Files.List();
req.Q = query;

do
{
      try
      {
            FileList files = req.Fetch();
            result.AddRange(files.Items);
            req.PageToken = files.NextPageToken;
       }
       catch (Exception e)
       {
            Console.WriteLine("An error occurred:" + e.Message);
            req.PageToken = null;
        }
 } while (!String.IsNullOrEmpty(req.PageToken));

//親フォルダのIdをコピっとく
string parentId = "";
foreach (File f in result)
{
    parentId = f.Id;
}

//ファイルをアップロードします
File body = new File();
body.Title = "My document";
body.Description = "A test document";
body.MimeType = "text/plain";
body.Parents = new List<ParentReference>(){
    new ParentReference() { Id = parentId } 
};

byte[] byteArray = System.IO.File.ReadAllBytes("document.txt");
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

FilesResource.InsertMediaUpload request =
        service.Files.Insert(body, stream, "text/plain");
request.Upload();

File file = request.ResponseBody;
Console.WriteLine("File id: " + file.Id);
Console.WriteLine("Press Enter to end this process.");
Console.ReadLine();
とすればいいみたいです(エラー処理はしてないので各自で)。めでたしめでたし。

 3日前くらいにつまったのですが、なんとか解決したので良かったです。しかし、いちいちAuthorization Codeをコピペするのは面倒なんですが…ココらへんを参考にして、どうにかしたいですね。
 後、記事が無駄に長くなっちゃって、もう少し見栄え良く読みやすい記事を書けないものかと思います…

おまけ


 SyntaxHighlighterで<や>を使う場合には、HTML Escapeしないといけないんですね。<なら&lt;に。>なら&gt;に。です。
 
 まあBloggerの場合は、コードをHTML編集で貼り付けると、InvalidなHTMLは認めないらしくてList<File>と書くと勝手に</File>してくれます。凄い…凄いけどいらない…
Read more →

2013/01/05

夜景探訪・東京駅

,
 まあ本屋(丸善)に行く用事があったのでついでですけど… 東京駅駅舎がリニューアルしたとのことで、やっと昨日その姿を見ることが出来ました。かっこいいですね!でも工事長すぎだろ…

 で、相変わらず質の悪い夜景写真を量産しています(◞‸◟) 手持ちで寒かったんだよ許して
高層ビルをバックに、赤レンガがライトアップ!
でーん

東京駅割と縦に長いので…なかなか一枚で収めるのが大変
窓枠のあたりとかが凝ってるの、好きなんです。


周りの高層ビル群も綺麗。
夜の行幸通り、この幅の広さ
丸の内北口です。私の他にもカメラ構えてる人が何人もいて、カメラでパシャパシャしても市民権あってよかった。

中のドームも綺麗になってました。黄色を基調としてるんですね。えーでもすごい

アップにするとこんな感じ。

実は2階部分にネットがはられてるのがちょっと…

 まさかここまでとは思わなかったので、そりゃあ観光客もくるなあと納得。俺自身行ってよかったと思う…
 綺麗な写真(これとか)はやっぱシャッター多めに開いてるあたり三脚持ちなのかなあ…もう少し写真にちゃんと収めてあげたいと思いました、まる

 余談。そういえば、東京駅って実はホームも歴史が古い、のかな?ここに構内図が載ってるけど、昔からあるみたいよね。あと、秘密の地下通路も見てみたいな~~~~~~んふんふ
Read more →

2013/01/02

[電子工作]DAコンバーター MCP4922を動かしてみた

,
 3日坊主なので記事書くのだるいな~~~~~って思ってます

 で、秋月に売ってるDAC MCP4922を使ってみました。ブレッドボードに刺さったまま2年くらい経ってる子。動かし方は電子部品使い方:マイコンのD/A変換さんを見ました。12Bitで、電源2.7V~5.5Vまでで動きます。

#なんか後でこの記事読んだけど全くさっきのサイトさんと一緒だったのでどうしよう感に溢れてる

 一応データシートのp.18~19を見ると分かる通り、SPI通信で16bitのデータを送ることで制御します。16bitの中身は、

bit 15:DAC AかBを選ぶ。Aなら0、Bなら1
bit 14:Vrefの入力をバッファするか選ぶ。バッファするなら1、しないなら0(Vrefのインピーダンスがとても高い時に使う)。デフォルトだとUnbuffered(データシート4.1.2章より)。
bit 13:出力を2倍するかしないか。2倍するなら0、しないなら1。2倍すると単純にVout =  2 * (Vref * Data / 4096)となる。
bit 12:出力を出すかどうか?かな?0だと出力がハイインピーダンスになるみたい。
bit 11~0:出力する値のデータ(12bits)

らしいです。

MICROCHIP MCP4921/4922 Datasheet p.1より、VrefバッファとソフトウェアSHDNの位置


 制御線のタイミングはp.19のFig.5-1を見てください。
MICROCHIP MCP4921/4922 Datasheet p.19より、制御タイミング
CSを下げたら、16bitデータを送り、LDACを上げるとDACから設定した値が出力されます。LDACを下げるタイミングはどこでもいいみたい…?

Arduinoで動かすならこんな感じのクラスを作って(一応まとめてみた)
#include < SPI.h >

class MCP4922
{
  private:
  const int SDI;
  const int CS ;
  const int LDAC;
  
  public:
  MCP4922 () : SDI(11), CS(10), LDAC(9) {
  }
  
  void initialize(){
    pinMode(SCK, OUTPUT);
    pinMode(SDI, OUTPUT);
    pinMode(CS, OUTPUT);
    pinMode(LDAC, OUTPUT);
    digitalWrite(SCK, LOW);
  }
  
  void setDACvalue(unsigned int value){
    SPI.begin();
    digitalWrite(LDAC, HIGH);
    digitalWrite(CS, LOW);
    //データを送る
    SPI.transfer(0b01110000 | (0b00001111 & highByte(value)));
    //highByte()とlowByte()はArduinoで使える関数
    //使えないときはhighByte(s):(s >> 8)、lowByte(s):s & 0xFFで。
    SPI.transfer(lowByte(value));
    digitalWrite(CS, HIGH);
    digitalWrite(LDAC, LOW);
    SPI.end();
  }
};

で、呼び方はこんな感じ
void setup() { }

void loop(){
  MCP4922 dac1;
  dac1.initialize();
  for(unsigned int i = 0; i < 0x0FFF; i++){
    dac1.setDACvalue(i);
    delay(5);
  }
}

こうすると徐々に電圧が上がっていくのがわかる…それだけ

 一応出力は15(Typ.)~24(Max.)mAまで出るっぽいけど、怖いんでバッファ付けたいとは思ってる。どうやらこのDACはそれなりに使われてるようで、こんなボードを作っている方も外国にいらっしゃるみたい。うーん、出力に非反転増幅で2倍してるけど、2倍だとVccが10V近く必要になる…Bi-FETオペアンプでボルテージフォロアにしてもいいけど、短絡とか発振とか考えるとなかなか怖い、お茶目に真空管でカソードフォロアはちょっとレベル高すぎた。見た感じZout=1/gmだけどそれってそこまで下がらないよね

Read more →

[電子工作]ヘッドホンアンプの電源回路(の設計)

,
 タイトル通り、ちょっと数式見難いのでTeXなりなんなりでどうにかしたい…本当はMathMLが使えればいいんですが、私のChrome23だと非対応なので…

回路図
1)仕様

 入力AC100V
 出力+-6V 100mA(最大) 30mA/ch(測定したときはだいたいこんなん)

2)設計?手順

IC2、3: 出力が正負6Vなので、それぞれ3端子レギュレータを使って電圧を作ることにしました。仮にも一応アンプの電源なので、なるべくノイズは少なくしたいと思い、いくつかの方法を検討しました。三端子レギュレータも意外とノイズを抑えられるようで。ただ、入出力の電圧差、ドロップ電圧Vdp(= Vin - Vout)がTyp. 2Vと大きいので、入力には9V程度が必要みたいです。
 後でどれくらい電力が消費されるのかを考えて、ヒートシンクどうするか考えないとですね…
 入力電圧がトランスの出力をAC9Vrmsとすると、9*√2 ≒ 12.73[V]。ドロップ電圧は12.73 - 6 - 1.1 = 5.73[V](1.1VはダイオードのVf)。よって消費される電力はI=0.1[A]として0.57[W]。L7806CVのデータシートにはあまり書かれてないけど、ほぼ同じパッケージ(TO-220)のNJM7800シリーズのデータシートの消費電力-周囲温度特性例によれば、周囲30℃くらいでもヒートシンクなしでいけるみたい…?

TR1: 次にトランス。2次側の電圧は整流後に9Vが必要なので、
 今回はケースが小さいので、トランスの縦が大きすぎるとケースに入らず悲しいことになります…で、小型かつリードが直に基板に刺さる菅野電機研究所のSL-09220を使いました。

D1~D4: Eagleのライブラリにダイオードブリッジがなかったので1N4004で代用してます、実際はダイオードブリッジのDF06Mを使っています。考えるべき点としては、ダイオードの耐圧、順方向電圧降下の大きさ、後それによる発熱くらい…?

F1: ヒューズボックスが大きくて干渉しそうなので、ポリスイッチ使ってみようと思いました。ポリスイッチは、

C1~C4: 3端子レギュレータのデータシートから。

C5、C6: まず容量の決め方がわからない、引っ張りだしてきた実用電源回路設計ハンドブックによればnωCRl=40~60がいいらしい。50として、負荷抵抗Rl=6/0.1=60[Ω]、nは全波整流ブリッジなので2、ω=2πf=2*3.14*50=314[rad/s]なので、C=3.317…*10^(-4)≒330*10^(-6)[F]と決められるみたい。
 I=0.03[A]だと1105*10^(-6)[F]くらいになるので、1000μFに決定。

 耐圧は、トランスの二次側9Vrmsが実効値なので、最大値が9*√2=12.69[V]、余裕を見て35Vのを買いました(25Vと35Vで大きさ、値段ともに変わらずなので…)。

C7、C8: よくわからないからおまじないでつけてる、適当である。

SW1: AC125V1Aとかそういう、よくある電源用ロッカースイッチならなんでもいいかなって… ただ、なるべく見栄えも良くしたいので、どんなのがいいのかはまだ悩んでます(一応買ったけど)…
 電源スイッチが光る奴だとして、どんな色がいいかというのはなかなか答えのない疑問でして、すごい…困ってます… 

 たかがこれだけなのに凄い考えることがあってつかれた…実用電源回路設計ハンドブックにはお世話になりました。

 部品買ってきたので期待通りに(リップルやノイズがある程度抑えられていて、)動くかどうかやってみます…
Read more →

2013/01/01

[電子工作][Eagle]ライブラリを追加する

,
 回路図かきかきするのに便利なソフト、Eagleですが、困ったことにデフォルトだといろいろ部品が足りません。で、まあ各自ネットで探すなり作るなりして追加してくわけですね。その方法を忘れそうなのでメモしておきます…

 えっと、今回はよく使う(?)部品のATmega328P-PUを追加してみます。

1)まずネットで探す
 
 Google先生にお尋ねします。するとこんなページが引っかかるわけです。
atmega328p eagle lib file? - Arduino Forumのスクリーンショット

 ふむふむ、少ないですがあるみたいですね。どうやらメモリ容量の少ないATmega168を使えばいいよ、ってことらしいです。

リンク先に飛んでみます。
Arduino AVR Library for EAGLE Layout Editor « Rob Faludiのスクリーンショット。
画像の赤枠で囲ったところをクリックすると、ライブラリファイルの入ったzipがダウンロードできます。

2)ライブラリフォルダにライブラリファイルを入れる

 なので、それを展開し、出てきたArduino-AVR.lbrをEagleのlbrフォルダ(C:\Program Files\Eagle-6.1.0\lbr\とか)に入れます。
 ここらへんはKarappo Interaction Lab. » EAGLEにライブラリを追加するさんを参考にしました。

3)Control Panelで使用可能にする

 次にEagleを起動します。既に起動してある場合は再起動です。まず最初にControl Panelが開くと思います。Librariesメニューを展開すると、Arduino-AVRという項目があると思います。で、画像のように、灰色の○をクリックして緑色にします。

Control PanelでArduino-AVRを使用可能に

後は回路図書くときに部品の追加すればいけます。

使えるようになりましたーやったー…

 でまあなんでこんな馬鹿正直に書いたかって言うと、ここまで書かないと俺が理解できないからです(;´'-'`) 馬鹿だー
 
 スクリーンショットを載せるのってどうなんですかね、結構悩みモノです…
Read more →

コミケ行きました

,
 コミケ3日目に行きました。友達が始発組だったので、それに釣られて始発で。
 東待機列で4時間じっとしてました(;´'-'`)

とりあえず戦利品晒しておきますね(^q^)
戦利品の構図。被写界深度の話はしないで…

気がついたら買っていたCPLDボード。部品買うから待っててね、次いじるからね。
Read more →

[旅行記?]志賀高原

,
 スキーで滑りに行きました。写真は携帯で撮ったやつなので…画質が悪いです…

1日目は寒いのと吹雪

雪は良かったよ

2日目から晴れ。

焼額山山頂から



この景色は最高

ご丁寧にこんなのまである


岩菅山のほう、めっちゃ地形がわかりやすい

志賀プリンス。
苗場とともにスキー場の真ん前にあるやつ。建物がとても綺麗、そして高い。流石プリンス。

おまけ:スキー場の飯たち

スキー場価格
米豚丼。あとソースカツ重も食べたかな。

別のレストランのメニュー

 相変わらずの高さ… 基本が1000円、大盛りにしようとすると+200円とかで、大盛りにしてもそんな量がない… 量がそれなりに欲しい人間としてはとてもつらいこと。
 
 焼額山第2ゴンドラ下のカレー屋Biancaは、基本1000円(トッピングで変わる)だけど、大盛りは結構量多かった。

 他に美味しいところは、カツ重屋と横手山のパン屋らしい。

 結論:流石バブルの遊び。
Read more →